概述
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 ) (χ,y)是由 n n n个样本组成,其中特征 χ chi χ是由 m m m个域(field)的数据集合,每个域对应了一个离散的特征, y ∈ { 0 , 1 } yin left { 0,1 right } y∈{0,1}是样本标签。在CTR预测问题的训练集中,通常包含了两类特征,分别为:类别特征和连续特征,对于类别特征,处理方法是使用one-hot对其编码,而对于连续特征,处理方法通常有两种,一种是不进行处理,直接使用连续值,第二种是先对其离散化,再用one-hot编码表示。
通过one-hot编码后,每一个样本 ( x , y ) left ( x,y right ) (x,y)的特征为 x x x是一个 d d d维的向量,且 x = [ x f i e l d 1 , x f i e l d 2 , ⋯ , x f i e l d j , ⋯ , x f i e l d m ] x=left [ x_{field_1},x_{field_2},cdots ,x_{field_j},cdots ,x_{field_m} right ] x=[xfield1,xfield2,⋯,xfieldj,⋯,xfieldm],其中 x f i e l d j x_{field_j} xfieldj为特征 χ chi χ的第 j j j个域,对于每个域,通过Embedding层将该域中的特征由稀疏的向量转换成稠密的向量,其具体的过程由下图所示:
由上图可知,Embedding的过程是针对每个域单独进行的。为描述简单,假设对于第 j j j个域 x f i e l d j x_{field_j} xfieldj,假设第 j j j个域的维数是 d j d_j dj,Embedding层的输出为 e j e_j ej,维度为 k k k,假设此处的 k = 5 k=5 k=5,从稀疏特征到Embedding输出可以由下图表示:
上述的映射可以由下述的公式表示:
e j = W j ⋅ x f i e l d j e_j=W_jcdot x_{field_j} ej=Wj⋅xfieldj
其中 W j W_j Wj为 k × d j ktimes d_j k×dj的矩阵,上述公式同时可以表示为:
W j = ( V 11 V 21 ⋯ V d j 1 V 12 V 22 ⋯ V d j 2 ⋮ ⋮ ⋱ ⋮ V 1 k V 2 k ⋯ V d j k ) 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} Wj=⎝⎜⎜⎜⎛V11V12⋮V1kV21V22⋮V2k⋯⋯⋱⋯Vdj1Vdj2⋮Vdjk⎠⎟⎟⎟⎞
其中,可以看到:
e j , 1 = V 11 ⋅ x f i e l d j , 1 + V 21 ⋅ x f i e l d j , 2 + ⋯ + V d j , 1 ⋅ x f i e l d j , d j e_{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} ej,1=V11⋅xfieldj,1+V21⋅xfieldj,2+⋯+Vdj,1⋅xfieldj,dj
此处的 V 11 V_{11} V11至 V d j k V_{d_jk} Vdjk将在FM中得到体现。
2.2.2. FM部分
FM算法是在2010年提出的具有二阶特征交叉的模型,FM算法模型结构如下图所示:
FM模型的表达式为:
y ^ = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n − 1 ∑ j = i + 1 n ⟨ v i , v j ⟩ x i x j 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 y^=w0+i=1∑nwixi+i=1∑n−1j=i+1∑n⟨vi,vj⟩xixj
其中, ⟨ v i , v j ⟩ = ∑ f = 1 k v i , f ⋅ v j , f left langle v_i,v_j right rangle=sum_{f=1}^{k}v_{i,f}cdot v_{j,f} ⟨vi,vj⟩=∑f=1kvi,f⋅vj,f。此处的 x x x针对上图中的输入的域,如第 i i i个域Field i。因此,FM部分的表达式为:
y F M = ⟨ w , x ⟩ + ∑ j 1 = 1 d − 1 ∑ j 2 = j 1 + 1 d ⟨ V i , V j ⟩ x j 1 ⋅ x j 2 y_{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} yFM=⟨w,x⟩+j1=1∑d−1j2=j1+1∑d⟨Vi,Vj⟩xj1⋅xj2
其中, w ∈ R d win mathbb{R}^d w∈Rd, V i ∈ R k V_iin mathbb{R}^k Vi∈Rk。
对于上图中有几点说明:
- 第一:
⟨ w , x ⟩ left langle w,x right rangle ⟨w,x⟩部分由上图中的黄色的点直接连接到Addition,其原因是每个域中只有一个值为1,符合one-hot编码,这里没有说到由multi-hot编码的问题;
- 第二:
针对交叉特征,假设域 i i i和域 j j j的交叉特征,域 i i i的输入为 x f i e l d i = ( x f i e l d i , 1 , x f i e l d i , 2 , ⋯ , x f i e l d i , d i ) x_{field_i}=left ( x_{field_i,1},x_{field_i,2},cdots ,x_{field_i,d_i} right ) xfieldi=(xfieldi,1,xfieldi,2,⋯,xfieldi,di),域 j j j的输入为 x f i e l d j = ( x f i e l d j , 1 , x f i e l d j , 2 , ⋯ , x f i e l d j , d j ) x_{field_j}=left ( x_{field_j,1},x_{field_j,2},cdots ,x_{field_j,d_j} right ) xfieldj=(xfieldj,1,xfieldj,2,⋯,xfieldj,dj),由于是one-hot编码,假设分别是 x f i e l d i , i ≠ 0 x_{field_i,i}neq 0 xfieldi,i=0和 x f i e l d j , j ≠ 0 x_{field_j,j}neq 0 xfieldj,j=0,则域 i i i和域 j j j的交叉就变成 x f i e l d i , i x_{field_i,i} xfieldi,i和 x f i e l d j , j x_{field_j,j} xfieldj,j的交叉,此时:
⟨ V i , V j ⟩ x j 1 ⋅ x j 2 = ( V i , 1 f i l e d i ⋅ V j , 1 f i l e d j + ⋯ + V i , k f i l e d i ⋅ V j , k f i l e d j ) ⋅ x f i e l d i , i ⋅ x f i e l d j , 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,Vj⟩xj1⋅xj2=(Vi,1filedi⋅Vj,1filedj+⋯+Vi,kfiledi⋅Vj,kfiledj)⋅xfieldi,i⋅xfieldj,j
即为:
V i , 1 f i l e d i ⋅ x f i e l d i , i ⋅ V j , 1 f i l e d j ⋅ x f i e l d j , j + ⋯ + V i , k f i l e d i ⋅ x f i e l d i , i ⋅ V j , k f i l e d j ⋅ x f i e l d j , j V_{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} Vi,1filedi⋅xfieldi,i⋅Vj,1filedj⋅xfieldj,j+⋯+Vi,kfiledi⋅xfieldi,i⋅Vj,kfiledj⋅xfieldj,j
此时,域 i i i和域 j j j的Embedding层的输出分别为:
e i , m = V i , m f i e l d i ⋅ x f i e l d i , i e_{i,m}=V_{i,m}^{field_i}cdot x_{field_i,i} ei,m=Vi,mfieldi⋅xfieldi,i
e j , m = V j , m f i e l d j ⋅ x f i e l d j , j e_{j,m}=V_{j,m}^{field_j}cdot x_{field_j,j} ej,m=Vj,mfieldj⋅xfieldj,j
其中 m = 1 ∼ k m=1sim k m=1∼k,因此上述的交叉项就可以写成:
e i , 1 ⋅ e j , 1 + ⋯ + e i , k ⋅ e j , k e_{i,1}cdot e_{j,1}+cdots +e_{i,k}cdot e_{j,k} ei,1⋅ej,1+⋯+ei,k⋅ej,k
这也就验证了上图中Weight-1 Connection。
2.2.3. Deep部分
与Wide & Deep模型一致,Deep部分是一个传统的DNN模型,其基本的结构如下图所示:
输入的稀疏特征经过Embedding层后得到稠密的特征表示,该稠密特征可以作为DNN模型的输入:
a ( 0 ) = [ e 1 , e 2 , ⋯ , e m ] a^{left ( 0 right )}=left [ e_1,e_2,cdots ,e_m right ] a(0)=[e1,e2,⋯,em]
其中, e i e_i ei是第 i i i个域(field)的embedding表示。将 a ( 0 ) a^{left ( 0 right )} a(0)作为DNN网络的输入,此时网络第 l + 1 l+1 l+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 ) a(l+1)=σ(W(l)a(l)+b(l))
其中, l l l表示的是网络的层数, σ sigma σ是激活函数, W ( l ) W^{left (l right )} W(l)和 b ( l ) b^{left ( l right )} b(l)分别为模型的权重和偏置。最终,DNN部分的输出为:
y D N N = σ ( W ∣ H ∣ + 1 ⋅ a H + b ∣ H ∣ + 1 ) y_{DNN}=sigma left ( W^{left | H right |+1}cdot a^H+b^{left | H right |+1} right ) yDNN=σ(W∣H∣+1⋅aH+b∣H∣+1)
其中, ∣ H ∣ left | H right | ∣H∣为网络的隐含层的层数。
2.2.4. 网络输出
在DeepFM中,分别由左侧的FM模型得到了FM部分的输出 y F M y_{FM} yFM和右侧的DNN模型得到了DNN部分的输出 y D N N y_{DNN} yDNN,DeepFM最终的输出为:
y ^ = s i g m o i d ( y F M + y D N N ) hat{y}=sigmoidleft ( y_{FM}+y_{DNN} right ) y^=sigmoid(yFM+yDNN)
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
最后
以上就是感动月饼为你收集整理的DeepFM1. 概述2. 算法原理3. 总结参考文献的全部内容,希望文章能够帮你解决DeepFM1. 概述2. 算法原理3. 总结参考文献所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复