总述:DeepFM和DCN均是wide&deep在wide部分的改进
1:DeepFM
主要做法如下:
首先,使用FM Component + Deep Component。FM提取低阶二阶组合特征,Deep提取高阶组合特征。但是和Wide&Deep不同的是,DeepFM是端到端的训练,不需要人工特征工程。
其次,共享feature embedding。FM和Deep共享输入和feature embedding不但使得训练更快,而且使得训练更加准确。
相比之下,Wide&Deep中,input vector非常大,里面包含了大量的人工设计的pairwise组合特征,增加了他的计算复杂度。
1.1 DeepFm详解
1) field: field是什么呢?可以理解为一种分类,即相同性质的特征放在一个field。 比如Male、Female都是属于性别field的。简单的说,同一个类别特征进行one-hot编码后生成的数值特征都可以放在同一个field中。如果是数值特征而非类别,可以直接作为一个field。
2)输入是field特征,每个field可能是one-hot 特征 或者是连续特征。
3)FM部分
上图注:
3.1 FM模块实现了对于1阶和2阶组合特征的建模
3.2 没有使用预训练
3.3 没有人工特征工程
3.4 embedding矩阵的大小: 特征数量*嵌入维度. 然后用一个index表示选择了哪个特征
需要训练的有两部分:
3.5 input_vector和Addition Unit相连的全连接层,也就是1阶的Embedding矩阵 W
3.6 Sparse Feature到Dense Embedding的Embedding矩阵,中间也是全连接的,要训练的是中间的权重矩阵,这个权重矩阵也就是隐向量V 也就是下问的隐向量
因为要学习必须
,而对于稀疏向量来说很难训练
,故引入隐向量
好处:,只要可以找到一个不为0的
和
,它们之间有共同项
,因此所有包含
的非零组合特征的样本都可以用来学习隐向量
,这在很大程度上避免了数据稀疏性造成的影响。
小trick:目的是减少参数个数,二次项的参数数量减少为kn个,远少于多项式模型的参数数量n(n-1)/2
4)deep部分
Deep 部分:是用来学习高阶组合特征的。网络里面黑色的线是全连接层,参数需要神经网络去学习。
由于CTR或推荐系统的数据one-hot之后特别稀疏,如果直接放入到DNN中,参数非常多,我们没有这么多的数据去训练这样一个网络。所以增加了一个Embedding层,用于降低纬度。
这里继续补充下Embedding层,两个特点:
尽管输入的长度不同,但是映射后长度都是相同的.embedding_size 或 k embedding层的参数其实是全连接的Weights,是通过神经网络自己学习到的
***:FM模块和Deep模块是共享feature embedding的(也就是隐向量V 权重共享).
好处:模型可以从最原始的特征中,同时学习低阶组合特征 不再需要人工特征工程. 而Wide&Deep中低阶组合特征就是通过传统的特征工程得到的。
参考 https://arxiv.org/abs/1703.04247 以及https://blog.csdn.net/qq_34333481/article/details/89852142
实践部分推荐:https://blog.csdn.net/songbinxu/article/details/80151814
2:DCN
可以证明,cross网络是FM的过程在高阶特征组合的推广。参考原论文附录。
结论:只有两层且权重参数相等时的Cross网络与简化版FM等价。
Wide&Deep、DCN和DeepFM对比
deepFM中:传统的FM 、离散特征嵌入之后的FM 和基本DNN三个模型融合的结果。
wide & deep 的思路中,deep 部分的做法和 deepFM 是大相径庭的,关键的 wide 部分其实是离线的特征工程,根据业务场景提前完成了特征交叉等处理,该模型可以看作是 DNN 与离线特征模型的融合结果。
DCN: 网络中我们可以发现,deep 部分网络除了使用离散嵌入特征外,还拼接了数值型特征;cross 部分网络直接完成了特征组合,对比FM 层它可以学到更高阶的组合 特征,对比 wide 网络它不需要做线下的特征工程。
参考论文 https://arxiv.org/abs/1708.05123和https://blog.csdn.net/hcm_0079/article/details/90209974