这里是「王喆的机器学习笔记」的第二十八篇文章。已经有很很久没有更新专栏了,主要是这段时间忙于整理之前的文章写书,现在书的事情已经进入印刷阶段,有一些时间再跟大家讨论一些有意思的知识点。
今天的问题其实来自于知友
在微信上给我的提问。他是这么说的:“看您之前的文章中多次提到 MLP(Multi-layer Perceptron)有对特征进行高阶交叉的作用,这是为什么?MLP中每个神经元不仅仅是对特征进行加权求和吗?”
这个问题初看起来不能称之为一个问题,因为多层神经网络逼近任意函数都已经是理论证明过的工作了(Multilayer feedforward networks are universal approximators),用MLP去做特征交叉还不是轻而易举。但细想起来并不是那么简单。
大家都非常清楚,感知机的结构是一个基于加法操作的结构(下图),两个特征从来没有直接交叉过。即使到了下一层,不同特征之间,也不会直接相乘,而是继续以加权和的方式叠加起来。
感知机的结构
那既然这样,为什么还说MLP具备特征交叉的能力呢?
就是因为激活函数的存在,为MLP提供了非线性能力。特征加权求和的结果,通过sigmoid,tanh这类激活函数之后,与其他神经元的输出进行进一步的混合,再通过下一层神经元的激活函数增加非线性,经过层层神经网络处理后,使MLP具备了特征交叉的能力,甚至在层数非常多之后,具备了拟合任意函数的能力。
但是,这里还是要强调的是,MLP这种特征交叉的能力是比较弱的,MLP不是天生为了进行特征交叉设计的。回到这篇文章标题中的话题,这也就是为什么很多深度学习神经网络加入product层(特征乘积层)的原因。
我们来回顾一下那些加入了product层的知名的深度学习网络。
Google的Wide&Deep模型中,Wide部分其实是两个特征的乘积层。
Google Wide Deep
DeepFM中,用FM layer进行特征交叉,用MLP进行作为DeepFM中的Deep部分。
DeepFM
PNN中则是直接加入了Product Layer,加强特征交叉能力。
PNN
当然专门针对特征交叉进行改造的模型还有很多,诸如Deep Crossing,Deep&Cross等。这些网络有的直接通过乘积操作将两个特征相乘,有的通过FM这类善于处理特征交叉的模型作为特征交叉层,有的通过构造一些特征cross的方法进行特征组合。但所有这些都充分说明了一点,仅仅采用MLP进行特征组合的能力是不够的,需要有针对性的在模型中加入特征交叉的结构。
总结
今天跟大家讨论了一个有意思的知识点——MLP的特征组合能力。我的结论是MLP理论上具备特征交叉和特征组合的能力,但在神经网络层数较浅时,特征交叉的能力较弱,于是在实践中,往往会在深度学习网络中加入特征交叉的结构来提高特征交叉的效率。最后给大家一个提一个问题:
你在构建你的深度学习的模型时,会专门加入特征交叉的结构吗?除了文中提到的几个模型结构,还有什么其他的增强模型特征交叉能力的方法吗?
这里是「王喆的机器学习笔记」 的第二十八篇文章。
认为文章有价值的同学,欢迎关注同名微信公众号:王喆的机器学习笔记(wangzhenotes),跟踪计算广告、推荐系统、个性化搜索等机器学习领域前沿。
想进一步交流的同学也可以通过公众号加我的微信一同探讨技术问题,谢谢。
网友评论