参考博客:https://www.jianshu.com/p/6f1c2643d31b
1. 思路
low-order
和high-order
的feature interaction
同样重要,FM擅长发现low-order
的特征交互,DNN擅长发现high-order
的特征交互。DeepFM
将FM
和DNN
联合在一起,综合了二者的优点。相较于Wide&Deep,DeepFM
不需要对原始特征进行人工特征工程的工作,FM会自动学习特征交互。
点击率预测——CTR(click-through rate)对于推荐系统而言至关重要,而学习用户点击行为背后的隐式特征交互对于点击率预测很重要。从人工特征工程的角度,【男性】【青年】喜欢玩【射击游戏和RPG游戏】,这样的话,(游戏类别,用户性别,用户年龄)就是一个order-3的交互。
CTR的一个关键挑战就是:有效地对特征交互建模。
一些特征交互,可以通过人工组合,而这依赖于专业人员对领域的深入了解,才能比较好的提取出好的特征组合。大多数特征交互隐藏在数据中很难先验识别,只能通过机器学习发现,并且当特征很多的时候,想要依靠人工特征工程是不现实的。
简单线性模型缺乏学习high-order特征的能力,很难从训练样本中学习到从未出现或极少出现的重要特征。FM模型可以通过点积和隐向量的形式学习交叉特征。理论上FM也可以对高阶特征交互进行建模,但是由于高复杂性,一般只考虑二阶。
【是否可以辅以人工或者其它手段降低高阶特征交互的复杂性,让FM能够对三阶特征交互进行建模,比如对特征进行分块?对块内的特征进行高阶特征交互建模】
深层模型善于捕捉high-order复杂特征,如CNN/RNN/FNN/PNN/Wide & Deep等,但都有各自的问题。FNN和PNN缺乏low-order特征,Wide & Deep需要人工构造Wide部分交叉特征。
为了解决以上模型的缺陷,同时学习高阶和低阶的组合特征,避免Wide & Deep的手工构造交叉特征,Deep FM集成了因子分解机(FM)和深度神经网络(DNN)的体系结构。
2. DeepFM架构
模型架构如下:
DeepFM模型包含FM和DNN两部分,FM算法负责对一阶特征以及二阶特征(由一阶特征交叉组合得到的)进行特征的提取;DNN算法负责对高阶特征进行特征的提取,与Wide & Deep不同的地方主要有以下两点:
- wide模型部分由LR替换为FM。FM模型具有自动学习交叉特征的能力,避免了原始Wide & Deep模型中浅层部分人工特征工程的工作。
- 共享原始输入特征。DeepFM模型的原始特征将作为FM和Deep模型部分的共同输入,所以模型训练速度很快。
2.1 Sparese Feature
- Field:比如说代表职业分类,经过one-hot编码后,Field字段表示成一个向量,向量中只有一个1,其余都是0
- 对于输入的Sparse Features,如果是分类field,则表示为one-hot编码后的向量,如果是连续field,则表示为一个实数或者通过离散化后进行one-hot编码后的向量。每一条记录转化为 ( x , y ) , x = [ x field 1 , x field 2 , … , x filed j , … , x field m ] (x,y),x=\left[x_{\text {field }_{1}}, x_{\text {field }_{2}}, \ldots, x_{\text {filed }_{j}}, \ldots, x_{\text {field }_{m}}\right] (x,y),x=[xfield 1,xfield 2,…,xfiled j,…,xfield m]。显然x将会是一个非常稀疏的高维矩阵。
- 数据输入对于FM和Deep部分都是共享的,是不需要人工特征工程的。
2.2 Embedding Layer
每个圆点代表一个神经元,神经元本身是没有数值的,我们需要知道的是Sparse Feature 到 Embedding 层之间连线的权重,这个权重就是所谓的Embedding Vector。
输入层的 F