论文地址:https://arxiv.org/pdf/1703.04247.pdf
一.提出背景
CTR预估重点在于学习组合特征,包括二阶、三阶甚至更高阶,阶数越高越难学习。论文中指出,无论是低阶特征还是高阶特征,都有它自己的价值,都对推荐准确性有着很大的影响。而如何利用好低阶和高阶的特征,就是DeepFM最大的特点。
二.模型比较
- 线性模型(LR):无法提取高阶的组合特征,依赖人工的组合特征,表达能力有限,基本上只能处理线性可分或近似线性可分的问题。
- DNN:考虑了高阶特征,缺少了对于低阶特征的考虑。
- CNN:偏向于学习相邻特征的组合特征。较单一,适合图片分类。
- RNN:比较适用于有序列(时序)关系的数据。
- FNN:用FM模型来对Embedding层进行初始化的全连接神经网络(先预先训练好FM,得到隐向量,然后作为DNN的输入训练模型)。受限于FM预训练的效果;只能学习到高阶的组合特征,没有对低阶特征建模。
- PNN:为了捕获高阶组合特征,在embedding layer 和first hidden layer之间增加一个product layer(内积/外积层)来学习特征之间的交互关系。内积外积计算复杂度高,采用近似计算的方法外积没有内积稳定;只能学习到高阶的组合特征,没有对于1阶和2阶特征进行建模。
- FM:通过隐向量latent vector做内积来表达组合特征,从理论上解决了低阶和高阶组合特定的提取问题。受限于计算复杂度,一般只考虑到2阶交叉特征。
- FFM:FM的升级版模型,通过引入field的概念,FFM把相同性质的特征归于同一个field。
- Wide&Deep:混合了一个线性模型(LR, Wide part)和Deep模型(DNN, Deep part),这两部分模型需要不同的输入。wide part输入依赖人工特征工程。
- DeepFM:结合了广度和深度模型的优点,联合训练FM模型和DNN模型,同时学习低阶特征组合和高阶特征组合。
这里是引用
三.模型介绍
从架构上可以拆解成FM部分和DNN部分,分别负责低阶特征的提取和高阶特征的提取。这两部分共享同样的输入。
- 最底层是输入的稀疏原始特征(One-hot结果),将特征按照Field进行区分。
- 接着进入了Embedding层,将特征限定到有限的向量空间。Embedding层启到一个压缩的作用,不然推荐场景数据是非常稀疏的。Embedding层会缓解参数爆炸。
- 接着进入FM层和DNN层,两者共用底层的embedding数据,所以效率很高,整个数据embedding只需要计算一次。
FM部分:
在FM层,主要的工作是通过特征间交叉得到低阶特征,以二阶特征为主。这里面值得注意的是,FM算法的特征交叉不是直接拿原始特征相互交叉计算,而是交叉特征因子分解后的结果,这样更能挖掘出特征深层的信息。
FM的输出公式为:
- 由两部分组成:一个Addition Unit,多个内积单元。Addition Unit反映的是1阶的特征,内积单元反映的是2阶的组合特征对于预测结果的影响。
- 这里的d是输入one-hot之后的维度,我们一般称之为feature_size。对应的是one-hot之前的特征维度,我们称之为field_size。
- 这里的wij,也就是<vi,vj>,可以理解为DeepFM结构中计算embedding vector的权矩阵。
- 由于输入特征one-hot编码,所以embedding vector也就是输入层到Dense Embeddings层的权重。
- Dense Embeddings层的神经元个数是由embedding vector和field_size共同确定,再直白一点就是:神经元的个数为embedding vector*field_size。
-
深度部分:
- DNN层就是利用深度学习数据的在网络间的传播性得到高阶特征。
- DNN的作用是构造高维特征,且有一个特点:DNN的输入也是embedding vector。所谓的权值共享指的就是这里。
- 深度部分是一个前馈神经网络。与图像或者语音这类输入不同,图像语音的输入一般是连续而且密集的,然而用于CTR的输入一般是及其稀疏的。因此需要重新设计网络结构。具体实现中为,在第一层隐含层之前,引入一个嵌入层embedding来完成将输入向量压缩到低维稠密向量。
嵌入层
- 原始输入的数据是很多个字段的高维稀疏数据,因此引入embedding layer将输入向量压缩到低维稠密向量。
- FM得到的隐变量Vik作为嵌入层网络的权重,FM模型作为整个模型的一部分与其他深度学习模型一起参与整体的学习。
- 每个Field是一个原始特征,Field经过onehot编码后产生多个特征,输出的每个特征就是Feature;同一个Field中所有Feature中只有一个为1,其它为0;不同的Field经过onehot后的Feature数不一样,但经过embedding后都变成k维,所以embedding后的特征数=count(Field)*k。
预测结果:
推荐设置:
- 对于hidden layer使用三层200-200-200的结构设计
- 使用relu函数作为激活函数
- 增加dropout
四.注意事项
- Dense Embedding层最开始是随机初始化的,后面经过FM的训练,成为图中所示的Dense Embedding层。然后Dense Embedding层的权重同时输入到FM部分和Deep部分,并且由两者共同训练。
- 在最后进行求和时,y的值为FM的一阶部分加上偏置再加上Deep部分得到的高阶部分。