DeepFM

1. 概述

特征交叉对于CTR问题的求解有着重要作用,纵观CTR模型的发展可以看出,每一次效果的提升,都伴随着对特征的挖掘,尤其是交叉特征。FM[1]算法在线性模型LR的基础上增加了二阶特征的交叉,对LR效果有着显著的提升;随着深度学习的发展,深度模型天然的特征交叉能力,Google的Wide & Deep[2]通过结合Wide模型的记忆能力和Deep模型的泛化能力,充分利用Deep侧的特征交叉能力,然而由于Wide侧使用的依然是线性模型,依赖于人工特征工程的参与。DeepFM[3]是华为在2017年提出的用于求解CTR问题的深度模型,DeepFM是在Google的Wide & Deep模型的基础上,将FM算法引入到Wide侧,替换掉原始的Wide & Deep模型中的LR模型,可以实现端到端的学习特征的交叉,无需人工特征工程的参与。DeepFM模型一经推出,就受到业界很多公司的关注,并在众多互联网公司的多个场景中落地。

2. 算法原理

2.1. DeepFM的网络结构

DeepFM的网络结构如下图所示:

在这里插入图片描述

在DeepFM的网络结构中,主要包括四个部分:第一,Embedding层,用于将稀疏的离散特征转换成稠密的特征向量;第二,FM层,用于计算交叉特征,如上图中的左侧部分;第三,DNN部分,与Wide & Deep模型中的Deep侧一致;最后,输出层,融合左侧FM层和右侧DNN部分的输出得到最终的模型输出。

2.2. DeepFM的计算过程

2.2.1. Embedding层

Embedding层的作用是将输入样本中的稀疏特征转化成稠密的特征。假设训练集(χ,y)\left ( \chi ,y \right )是由nn个样本组成,其中特征χ\chi是由mm个域(field)的数据集合,每个域对应了一个离散的特征,y{0,1}y\in \left \{ 0,1 \right \}是样本标签。在CTR预测问题的训练集中,通常包含了两类特征,分别为:类别特征和连续特征,对于类别特征,处理方法是使用one-hot对其编码,而对于连续特征,处理方法通常有两种,一种是不进行处理,直接使用连续值,第二种是先对其离散化,再用one-hot编码表示。

通过one-hot编码后,每一个样本(x,y)\left ( x,y \right )的特征为xx是一个dd维的向量,且x=[xfield1,xfield2,,xfieldj,,xfieldm]x=\left [ x_{field_1},x_{field_2},\cdots ,x_{field_j},\cdots ,x_{field_m} \right ],其中xfieldjx_{field_j}为特征χ\chi的第jj个域,对于每个域,通过Embedding层将该域中的特征由稀疏的向量转换成稠密的向量,其具体的过程由下图所示:

在这里插入图片描述

由上图可知,Embedding的过程是针对每个域单独进行的。为描述简单,假设对于第jj个域xfieldjx_{field_j},假设第jj个域的维数是djd_j,Embedding层的输出为eje_j,维度为kk,假设此处的k=5k=5,从稀疏特征到Embedding输出可以由下图表示:

在这里插入图片描述

上述的映射可以由下述的公式表示:

ej=Wjxfieldje_j=W_j\cdot x_{field_j}

其中WjW_jk×djk\times d_j的矩阵,上述公式同时可以表示为:

Wj=(V11V21Vdj1V12V22Vdj2V1kV2kVdjk)W_j=\begin{pmatrix} V_{11} & V_{21} & \cdots & V_{d_j1}\\ V_{12} & V_{22} & \cdots & V_{d_j2}\\ \vdots & \vdots & \ddots & \vdots \\ V_{1k} & V_{2k} & \cdots & V_{d_jk} \end{pmatrix}

其中,可以看到:

ej,1=V11xfieldj,1+V21xfieldj,2++Vdj,1xfieldj,dje_{j,1}=V_{11}\cdot x_{field_j,1}+V_{21}\cdot x_{field_j,2}+\cdots +V_{d_j,1}\cdot x_{field_j,d_j}

此处的V11V_{11}VdjkV_{d_jk}将在FM中得到体现。

2.2.2. FM部分

FM算法是在2010年提出的具有二阶特征交叉的模型,FM算法模型结构如下图所示:

在这里插入图片描述

FM模型的表达式为:

y^=w0+i=1nwixi+i=1n1j=i+1nvi,vjxixj\hat{y}=w_0+\sum_{i=1}^{n}w_ix_i+\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}\left \langle v_i,v_j \right \rangle x_ix_j

其中,vi,vj=f=1kvi,fvj,f\left \langle v_i,v_j \right \rangle=\sum_{f=1}^{k}v_{i,f}\cdot v_{j,f}。此处的xx针对上图中的输入的域,如第ii个域Field i。因此,FM部分的表达式为:

yFM=w,x+j1=1d1j2=j1+1dVi,Vjxj1xj2y_{FM}=\left \langle w,x \right \rangle+\sum_{j_1=1}^{d-1}\sum_{j_2=j_1+1}^{d}\left \langle V_i,V_j \right \rangle x_{j_1}\cdot x_{j_2}

其中,wRdw\in \mathbb{R}^dViRkV_i\in \mathbb{R}^k

对于上图中有几点说明:

  • 第一:

w,x\left \langle w,x \right \rangle部分由上图中的黄色的点直接连接到Addition,其原因是每个域中只有一个值为1,符合one-hot编码,这里没有说到由multi-hot编码的问题;

  • 第二:

针对交叉特征,假设域ii和域jj的交叉特征,域ii的输入为xfieldi=(xfieldi,1,xfieldi,2,,xfieldi,di)x_{field_i}=\left ( x_{field_i,1},x_{field_i,2},\cdots ,x_{field_i,d_i} \right ),域jj的输入为xfieldj=(xfieldj,1,xfieldj,2,,xfieldj,dj)x_{field_j}=\left ( x_{field_j,1},x_{field_j,2},\cdots ,x_{field_j,d_j} \right ),由于是one-hot编码,假设分别是xfieldi,i0x_{field_i,i}\neq 0xfieldj,j0x_{field_j,j}\neq 0,则域ii和域jj的交叉就变成xfieldi,ix_{field_i,i}xfieldj,jx_{field_j,j}的交叉,此时:

Vi,Vjxj1xj2=(Vi,1filediVj,1filedj++Vi,kfilediVj,kfiledj)xfieldi,ixfieldj,j\left \langle V_i,V_j \right \rangle x_{j_1}\cdot x_{j_2}=\left ( V_{i,1}^{filed_i}\cdot V_{j,1}^{filed_j}+\cdots +V_{i,k}^{filed_i}\cdot V_{j,k}^{filed_j} \right )\cdot x_{field_i,i}\cdot x_{field_j,j}

即为:

Vi,1filedixfieldi,iVj,1filedjxfieldj,j++Vi,kfiledixfieldi,iVj,kfiledjxfieldj,jV_{i,1}^{filed_i}\cdot x_{field_i,i}\cdot V_{j,1}^{filed_j}\cdot x_{field_j,j}+\cdots +V_{i,k}^{filed_i}\cdot x_{field_i,i}\cdot V_{j,k}^{filed_j}\cdot x_{field_j,j}

此时,域ii和域jj的Embedding层的输出分别为:

ei,m=Vi,mfieldixfieldi,ie_{i,m}=V_{i,m}^{field_i}\cdot x_{field_i,i}

ej,m=Vj,mfieldjxfieldj,je_{j,m}=V_{j,m}^{field_j}\cdot x_{field_j,j}

其中m=1km=1\sim k,因此上述的交叉项就可以写成:

ei,1ej,1++ei,kej,ke_{i,1}\cdot e_{j,1}+\cdots +e_{i,k}\cdot e_{j,k}

这也就验证了上图中Weight-1 Connection。

2.2.3. Deep部分

与Wide & Deep模型一致,Deep部分是一个传统的DNN模型,其基本的结构如下图所示:

在这里插入图片描述

输入的稀疏特征经过Embedding层后得到稠密的特征表示,该稠密特征可以作为DNN模型的输入:

a(0)=[e1,e2,,em]a^{\left ( 0 \right )}=\left [ e_1,e_2,\cdots ,e_m \right ]

其中,eie_i是第ii个域(field)的embedding表示。将a(0)a^{\left ( 0 \right )}作为DNN网络的输入,此时网络第l+1l+1层的输出为:

a(l+1)=σ(W(l)a(l)+b(l))a^{\left ( l+1 \right )}=\sigma \left ( W^{\left (l \right )}a^{\left ( l \right )} +b^{\left ( l \right )}\right )

其中,ll表示的是网络的层数,σ\sigma是激活函数,W(l)W^{\left (l \right )}b(l)b^{\left ( l \right )}分别为模型的权重和偏置。最终,DNN部分的输出为:

yDNN=σ(WH+1aH+bH+1)y_{DNN}=\sigma \left ( W^{\left | H \right |+1}\cdot a^H+b^{\left | H \right |+1} \right )

其中,H\left | H \right |为网络的隐含层的层数。

2.2.4. 网络输出

在DeepFM中,分别由左侧的FM模型得到了FM部分的输出yFMy_{FM}和右侧的DNN模型得到了DNN部分的输出yDNNy_{DNN},DeepFM最终的输出为:

y^=sigmoid(yFM+yDNN)\hat{y}=sigmoid\left ( y_{FM}+y_{DNN} \right )

3. 总结

在DeepFM网络中,通过将Wide & Deep模型中的Wide侧模型替换成FM模型,实现自动的交叉特征选择,从而实现无需人工参与就可以通过模型进行端到端的学习,自动学习到各种层级的交叉特征。

参考文献

[1] Rendle S . Factorization Machines[C]// ICDM 2010, The 10th IEEE International Conference on Data Mining, Sydney, Australia, 14-17 December 2010. IEEE, 2010.

[2] Cheng H T, Koc L, Harmsen J, et al. Wide & Deep Learning for Recommender Systems[J]. 2016:7-10.

[3] Guo H, Tang R, Ye Y, et al. DeepFM: A Factorization-Machine based Neural Network for CTR Prediction[J]. 2017:1725-1731.

[4] CTR预估算法之FM, FFM, DeepFM及实践

[5] 推荐系统遇上深度学习(三)–DeepFM模型理论和实践

[6] tensorflow-DeepFM