2022-03-28更新:dcn的这种特征交叉方式个人觉得有点不优雅,且组合方式解释性较差。
之前常常研究CNN的网络结构,却不知道多层感知机(MLP)的设计也有很多讲究。可以设计出很多不同的网络。
对于传统的分类算法来说,输入数据通常是一个一维的向量,向量中的每个值都是一个特征,这时候可以选择的分类算法很多,svm,逻辑回归,决策树,多层感知机等。
多层感知机也是用的比较多的方法,这里介绍一个多层感知机的一个改进。加入一个深度特征交叉网络。如下图黄色单元所示:
可以看到有个公式:
整个核心就是这个公式。x0是一个列向量,其中的主要运算可以看成:
- x0和自己的转置进行相乘(矩阵的相乘);
- 然后和一个权重向量相乘;
- 最后和自己原始的x相加。
具体的矩阵shape看图片中黄色的注释。
1、乘积
用于矩阵相乘,表示为C=A*B,A的列数与B的行数必须相同,C也是矩阵,C的行数等于A的行数,C的列数等于B的列数。Cij为A的第i行与B的第j列的点积。
2、点积
用于向量相乘,表示为C=A.*B,A与B均为向量,C为标量,也称标量积、内积、数量积等
x和自己的转置相乘,相当于得到了一个二次方的项,然后乘以一个权重w,权重w的作用是给二次方的项加权,极端情况就是w中的某个值为0,那么这个多项式就不会传下去了。然后加上原来的x,这样原来的x就传下去了。最后经过L层,那么就可以得到0-L次方的一个特征,因为有权重w的存在,所以存在不同次方的项。
注:其实从公式上看是有问题的,为什么a方,ab,ac前面加权后要📷,并且w2这个权重会给三个特征组合共用其实也是个问题!!!在推荐上这样进行特征组合其实理由并不充分。而模型精度提高可能仅仅是复杂度提高了的原因。
最后,多次项的特征和多层感知机提取的特征一块concat到一起,然后做个分类。
cross layer 的特征相乘部分可以展开写成这样:
具体调参方式:
直接贴论文中的,文章中是通过网格搜索,并且多层感知机部分是每层的神经元个数相同,搜索的时候搜索两个参数,一个是层数,另外一个是神经元个数,这样就降低了搜索的复杂度,相比每层神经元个数都不同来说。
cross net部分搜索的是层数,从1到6,当layer数=0的时候相当于就只有多层感知机。
网格搜索的参数对比:
可以看出,不一定是dnn的层数越高性能越好。