1,前言
Wide&Deep模型开启深度学习时代的组合模型之后,后面的模型都是在Wide&Deep的基础上进行各种方式的模型组合,以应对不同的模型任务。从大的角度看,模型的改进方向主要有两点:
1,特征交互上要进一步加强学习,来增强模型的表达能力。
2,尽量避免人工构造特征工程,尽量实现端到端。
FNN,DeepFM,NFM模型的发展逻辑:
FNN模型是2016年提出的一个FM和DNN模型的组合。这个模型底层是FM,上层是DNN,该模型提出的目的是特征之间的交叉和表达能力的增强。
2017年DeepFM模型出现,相比较FNN模型,该模型仍然是FM和DNN的组合,但不是串行,而是基于Wide&Deep模型的架构,换成并行的方式。让FM充当W&D中的Wide部分。这样既考虑了低阶交叉,也考虑高阶交叉,并且实现了端到端,避免了W&D中的特征工程。但是该模型的FM仍然是二阶交叉,无可避免的会限制模型表达能力。
2017年,NFM也被提出,这个模型也可以看成是W&D的计划模型,它改进了FM的二阶隐向量内积部分,换成一个表达能力更强的函数,并且Deep部分也完成了特征交叉池化层。
2,FNN模型
2.1FNN模型简介
CTR任务中,传统的线性模型,比如LR模型不能利用特征之间的交互信息,而一些非线性模型,如FM,表达能力又不够强。因此,在深度学习时代,提出了FM与DNN的组合模型:基于因子分解机的神经网络模型(Factorization Machine supported Neural Network,FNN)模型,该模型的灵感在于图像领域CNN通过相邻层连接扩大感受野的做法,使用DNN来对FM显示表达的二阶特征再交叉,从而产生更加高阶的特征组合,加强模型对数据模式的学习能力。
FNN模型的训练分成预训练和正式训练两个阶段。预训练阶段对FM模型进行训练,然后用FM训练好的特征隐向量对正式训练的模型进行embedding层的初始化操作。这样在正式训练的时候,就加速了模型的收敛过程。
2.2 FNN模型详解
1,底层FM模型
x是输入特征,它是高维稀疏的。可以分成N个Field。每个Field中,只有一个值为1,其余的都为0(即one-hot)。Field i可以表示成 X [ s t a r t i , e n d i ] X[start_{i},end_{i}] X[starti,endi], W 0 i W_{0}^{i} W0i是Field i的embedding矩阵。 W 0 i ⋅ X [ s t a r t i , e n d i ] ] W_{0}^{i}\cdot X[start_{i},end_{i}]] W0i⋅X[starti,endi]] 在代码实现中,就是对每个Field(比如性别),基于该Field域所有的可能取值进行LableEncoder,LableEncoder的值与 W 0 i W_{0}^{i} W0i中的每一个embedding向量一一对应。对于每一个具体的样本,它的Field i域的值是LableEncoder 中的某一个值,然后根据LableEncoder的值,从 W 0 i W_{0}^{i}