端到端的高低阶特征学习——DeepFM模型
解决痛点
DeepFM模型对比了FNN、PNN、Deep&wide,在其缺点上进行了改进,得到了DeepFM模型。
这三种模型的结构如上图所示,其不足分别如下:
FNN
缺点如下:
- FNN底层通过为FM预训练得到向量,预训练有两个缺点:
(1)FNN embedding矩阵的参数会受到预训练结果的影响
(2)预训练的引入使得模型的效率降低 - FNN只能学到高阶特征组合,学习不到低阶特征
PNN
- 无法学些到低阶特征(可以理解为输入直接过了若干层网络,只学习到了高阶组合)
deep&wide
- LR部分需要进行手动的特征的组合(原论文说LR部分输入的是原始的特征和二阶特征组合)
- deep 和wide部分分别对特征做了不同的embedding,效率和效果较差
所以希望能提出一个模型可以解决上述三种模型的不足。
网络结构
模型整体结构如图所示,j结构上有点类似deep&wide。
输出
输出为FM部分和DNN部分的组合,并通过sigmoid函数转化为(0,1):
最底层
原始输入,不同filed构成的sparse Features
Dense层
将原始输入进行embedding,得到dense层向量。与deep&wide不同的是,。
这里有两个tick:
- embedding过程的权重V和得到的dense向量在FM部分和deep部分是共享的
- 不同的filed的维度可能不同,但是得到embedding向量的维度却是相同的
FM部分
即FM模型,可以学习到一阶特征和二阶特征,FM的表达式如下:
加号左右两边分别表示一阶和二阶的部分。
Deep部分
DNN结构图如上,其中第个隐藏层的表达式如下:
dense部分的输入为:
这里有m个filed,表示每个filed 经过embedding后得到的等维度的向量。
最终通过FM和Deep部分得到最终的输出。
总结
从下表可以看出,DeepFM拥有其他三种模型都有的优点,并解决了对应的缺点。
总的来说,DeepFM:
- 不需要预训练
- 不需要任何的特征工程,实现端到端
- 可以学习到高阶和低阶特征
- FM和Deep模块的embedding是共享的,可以进行联合训练,效果更好。