Abstract
概括如下:
- 在很多预测任务中要对特征进行one-hot编码,使得最终的特征向量高度稀疏,因此需要进行特征交互。
- FM模型只能表达特征之间两两组合之间的关系,无法建模两个特征之间深层次的关系或者说多个特征之间的交互关系。
- 因此可以通过Deep Network来建模更高阶的特征之间的关系。
- 然而Wide&deep和deepcross因为其深度结构而难以训练。
- 故 FM和深度网络DNN的结合也就成为了CTR预估问题中主流的方法。
- 有关FM和DNN的结合有两种主流的方法,并行结构和串行结构。
- 两种结构的理解以及实现如下表所示:
Introduction
最近几年,Embedding-based方法开始成为主流,通过把高维稀疏的输入embed到低维度的稠密的隐向量空间中,模型可以学习到训练集中没有出现过的特征组合。
Embedding-based大致可以分为两类:
- factorization machine-based linear models
- neural network-based non-linear models
而这两者都有其缺陷:
FM还是属于线性模型,它的表达能力受限,而且它只能对二阶组合特征进行建模。
虽然多层神经网络已经被证明可以有效的学习高阶特征组合。但是DNN的缺点也很明显:网络优化或者说网络学习比较困难。
但是为了提高NN的学习能力就需要增加网络层数,复杂的网络结构会收到诸如梯度消失/爆炸、过拟合、degradation(简单说就是:随着网络层数的增加,训练准确率不升反降,非常反常)等问题的困扰,网络的学习或者优化会非常困难。
如下图所示,如果使用FM预训练初始化嵌入层,Wide&Deep和DeepCross性能都提升了,甚至超过了FM。Wide&Deep的degradation问题也解决了,因为训练集的性能得到了提升。但是两者依旧都有过拟合的问题。实验说明DNN的训练学习真的存在困难。
FM摒弃了直接把嵌入向量拼接输入到神经网络的做法,在嵌入层之后增加了Bi-Interaction操作来对二阶组合特征进行建模。这使得low level的输入表达的信息更加的丰富,极大的提高了后面隐藏层学习高阶非线性组合特征的能力。
Architecture
NFM的表达式如下:
y
^
N
F
M
(
x
)
=
w
0
+
∑
i
=
1
n
w
i
x
i
+
f
(
x
)
\hat{y}_{N F M}(\mathbf{x})=w_{0}+\sum_{i=1}^{n} w_{i} x_{i}+f(\mathbf{x})
y^NFM(x)=w0+i=1∑nwixi+f(x)
其中第一项和第二项是与FM相似的线性回归部分,该部分模拟数据的偏差和特征的权重。第三项f (x)是NFM建模特征交互的核心组件,它是一个多层前馈神经网络。如下图:
Experiment
- 使用了两份公开的数据集:
- Frappe。http://baltrunas.info/research-menu/frappe
- MovieLens。https://grouplens.org/datasets/movielens/latest/
随机的取70%数据作训练集,20%数据作验证集,10%数据作测试集。
- FM相当于是去掉DNN的NFM,论文中给出的数据是只用了一个隐藏层的NFM,相比于FM性能提升了7.3%;NFM只用了一个隐藏层,相比于3个隐藏层的Wide&Deep,和10个隐藏层的DeepCross,NFM用更简单的模型,更少的参数得到了性能的提升。
论文中对比了FM、Wide&Deep模型,效果不用说肯定是NFM最好,图片有点多就不放了。
此处,只给出一些重要的结论:
- Dropout在NFM中可以有效的抑制过拟合
- Batch Normalization在NFM中可以加快训练速度
- NFM使用一个隐藏层得到了最好的效果
- 如果用FM来pre-train嵌入层,NFM会收敛的非常快,但是NFM最终的效果并没有变好。说明NFM对参数有很好的鲁棒性。
- 模型性能基本上随着Factor的增加而提升。Factor指Embedding向量的维度。
思考题
- NFM中的特征交叉与FM中的特征交叉有何异同,分别从原理和代码实现上进行对比分析
- FM可以被看作是没有隐藏层的NFM的一个特例,NFM的特征交叉获得其表征向量,FM特征交叉得到的是一个值。
- 代码部分后续补充
Reference
https://raw.githubusercontent.com/datawhalechina/team-learning-rs/master/DeepRecommendationModel/NFM.md
https://arxiv.org/pdf/1708.05027.pdf