毕加索的「公牛」和机器学习的「特征工程」

毕加索的「公牛」和机器学习的「特征工程」

这里是「王喆的机器学习笔记」的第十六篇文章,今天我们放松一下,先不聊严肃的机器学习模型和算法,因为很多同学反映“别再更新了,老子实在学不动了。。”,那就换个空间,聊聊毕加索的一幅画吧。

硅谷创业教父Paul Graham在那本著名的“黑客与画家”里面提到,黑客和画家本质上有很多相通之处。在笔者看来,画家创作出来的画跟机器学习大神们提出的模型和理论也有相通之处,虽然我自己在两个领域都只能算得上入门,但谁也阻挡不了咱们自己表达感想嘛,这次就从毕加索一幅画——公牛,聊一聊抽象派的理念和机器学习的特征工程有什么相通之处。

公牛——毕加索 1946年1月17日

上面的画就是20世纪最著名的抽象派画家毕加索于1946年1月17日(为什么要精确到天,大家后面会知道)完稿的画作——公牛,寥寥几笔,勾勒出公牛的“特征”。很多人可能会觉得也许小学生也会画出上面的画嘛,但大师和小学生的区别就在于,大师得出这个终稿的过程是对一个哲学命题的探究——到底什么是“公牛”?到底缺了什么“特征”就不再是“公牛”?而小学生如果可以画出类似的画作,那是他对世界认识的本能。也许结果是一样的,但他们背后逻辑的深度是不同的。

敏感的同学肯定已经知道我为什么会说这幅画跟机器学习中的特征工程有密切的联系了。因为毕加索在画中留下的是决定一头公牛为什么是公牛的“特征”。而机器学习工程师工作的本质也是去伪存真,留下一堆数据中最重要的模式和特征,用最简洁的方式描述这堆数据,从而发现埋藏在数据后的模型和本质规律。

虽然我不是毕加索,但我还是会从“小学生”的眼光看这幅画的,在我眼里,这幅画留下的公牛最重要的特征有这么几个:

  1. 长长的犄角
  2. 长长的尾巴
  3. 宽大的身躯
  4. 粗短有力的后腿
  5. 不可或缺的小丁丁

有一些特征被极简化甚至忽视了,比如公牛头成了一个小小的圆圈,所以至少在毕加索的眼中,公牛的“小丁丁”远远比公牛的“头”重要。而对于吃瓜观众来说,也没有人会否认这幅画描绘的绝对是一头健壮的公牛,不是奶牛、老黄牛,更不是马,不是鹿,绝对的一头公牛。

我们可以说毕加索这位莫名闯入“机器学习”领域的算法工程师是合格的吗?我觉得大师不仅是合格的,更是超越了平凡的,他训练出的“模型”是异常卓越的。为什么这么说,我们做几个有趣的试验,看看改变几个特征之后,公牛还是不是公牛。

就拿最不起眼的尾巴来说吧,把它剪短,会怎么样?

剪短尾巴的“公牛”

还是公牛吗?还有当初的霸气吗?我总觉得它像一只体型肥胖的公羊。所以你不得不佩服毕加索这位算法工程师的功力,他不仅用“主成分分析”找到了最关键的维度,还精确计算出了特征的数值。

如果还觉得还不够有说服力的话,我们再做一个试验,把公牛的犄角截断一点点。

截断犄角的“公牛”

截断犄角的“公牛”还是公牛吗?也许它是,但却没有当初那般斩钉截铁了。因为少了几分攻击性,也许还是牛,却多了点鹿和羊的规规矩矩的温顺感。

当然,肯定还有同学对“小丁丁”这个特征感兴趣,我觉得这个试验就不用做了,你说把一个公牛净身之后,它还是不是公牛了。。

所以,毕加索做对了两个事情让公牛成为了公牛,一是找对了特征维度,二是找对了特征值

就像程蝶衣对段小楼说的那句经典的“说好了是一辈子,差一年,差一个月,差一个时辰,都不是一辈子!”。我们套用到这里就是“说好了是一头公牛,差一尾巴,差一犄角,差一小丁丁,都不是一头公牛!”,再精确点就是“说好了是一头公牛,差一分米尾巴,差一厘米犄角,差一毫米小丁丁,都不是一头公牛!”。这才是毕加索这位算法工程师找对了特征和特征值之后应有的兴奋和自信。

仅此而已吗?并不是,在我看来,我们还应该从这位优秀的“同行”大师身上学三件事情:

  1. 模型泛化能力的重要性
  2. 特征组合的重要性
  3. 直觉与经验结合的调参能力

先说第一点,毕加索创作公牛的过程并不是一蹴而就的,即使他是“机器学习”的大师,也不可能第一次就直接训练出接近完美的模型。让我们看看他创作这幅画作的过程:

公牛 毕加索 1945年12月5日

这是毕加索的于1945年12月5日创作的公牛初稿。它是“公牛”吗?它是。它有什么特征使之成为一头公牛?too many。。

毕加索的训练“公牛”这个模型的目的是什么?他要探索的是一个哲学问题,到底什么使公牛成为一头公牛。这幅初稿是他的答案吗?也许是,但离真相差的太远。因为它太过具体,具体到我们不知道是不是因为皮肤的纹理造就了一头公牛,还是跟马没什么区别的眼睛造就了一头公牛。

如果训练到这步就贸然上线,会有一个致命的问题:

样本中任何特征的特征值的改变,都可能会导致这个样本不是公牛的结论。

比如你说这幅画是公牛,难道去掉那些身上的纹理就不是公牛了吗?显然不是。而这个复杂模型必然会导致大量样本的误判,准确率高,召回率低,这就是模型“泛化”能力严重不足的问题。

显然,毕加索是深知这一点的,正因为要提升模型的“泛化”能力,才有之后的十几次调参甚至改变模型结构的过程。

毕加索的十一次公牛创作

意识到“泛化能力”差这个问题之后,毕加索经过十几次的连续创作,才最终得到了我们上面看到的抽象主义作品——公牛。也许这不是全局最优解,但绝对是非常接近真相的局部最优解之一。

第二点,为什么说特征组合是重要的?

在构建模型的时候,我们总说线性模型的表达能力是弱的,特征组合和特征交叉能够保留更多信息,为什么?毕加索给了我们答案,在公牛的终稿中,他保留了五个特征:

  1. 长长的犄角
  2. 长长的尾巴
  3. 宽大的身躯
  4. 后腿粗短有力
  5. 小丁丁

你能说满足其中四个条件的样本就是“公牛”吗?通过之前对于终稿的修改,我们已经非常明确的知道答案是否定的。只有满足这五个特征组成的“组合特征”,这才能是一头公牛。

因此,我们不能割裂的看这五个特征,而是始终把他们作为组合特征放入模型,但遗憾的是,线性模型不具备组合特征的能力,这是毕加索给我们上的第二课。

第三点,毕加索教会了我们应该如何调参。

无数人说过机器学习的调参过程是一个炼金的过程,机器学习模型特别是深度学习模型的调参过程真的是碰运气吗?是也不是,我们的确无法预测深度学习的结果,但我们可以通过调参的经验和直觉加快寻找到正确参数的速度。在这一点上,毕加索无疑也是优秀的。他做对了两件事情快速完成了模型训练:

  1. 必要时候改变模型结构
  2. 在一条路上要做到极致

在我看来,毕加索在寻找真相的过程中最重要的一次转变是第三幅到第四幅的转变。

第三幅公牛
第四幅公牛

他做了什么?他加入了线条。

他发现线条相比色块更能抓住问题的核心,拥有更强的表达能力和泛化能力,正是他用“线条”这个“模型”替换了“色块”这个“模型”,让他拥有了进一步接近真相的可能。

但他是全靠直觉吗?不是,你已经能看见第三幅公牛中色块已经逐渐开始褶皱,在原有的表达方式基础上他发现新的表达方式,果断切换了“模型”。这是他的经验,也是他的自信。

加入线条之后,他经历了8次演进,他几乎摒弃了所有细节,做了各种尝试,才最终找到那最后一幅的真相。这是大师的努力和坚持。

从1945年12月5日完成第一幅初稿,到1946年1月17日完成终稿,毕加索花了一个半月的时间完成了“模型训练”,从中你学到了什么?要有切换模型的勇气,但应是在坚持验证过一个模型极限的前提下。这的确是经验和直觉的结合。

写这篇文章当然不是为了大家学到什么具体的机器学习技巧,但在你构建机器学习模型解决实际问题的时候,需要清楚的知道你在做什么,为什么你要这么做。当你在调参的过程中迷失的时候,想想毕加索的“公牛”,也许能帮到你找到一些灵感。


这是第一次在「王喆的机器学习笔记」里面随便聊聊,希望没有打扰到大家的timeline。

最后还是欢迎大家关注我的微信公众号:王喆的机器学习笔记wangzhenotes),跟踪计算广告、推荐系统等机器学习领域前沿。想进一步交流的同学也可以通过公众号加我的微信一同探讨技术问题,谢谢!


本文亦收录在我的新书「深度学习推荐系统」中,这本书系统性地整理、介绍了专栏中所有的重点内容,如果您曾在「王喆的机器学习笔记」中受益,欢迎订阅,谢谢知友们的支持!

编辑于 03-24

文章被以下专栏收录