xDeepFM模型

xDeepFM模型

介绍

推荐系统中一般将类别特征(categorical feature)转换成one-hot向量,如果仅适用原始特征一般不能达到很好的效果。一种主要的提升方法就是在类别特征上应用交叉特征,如FM模型。如一个3阶交叉特征AND(user_organization=msra, item_category=deeplearning, time=monday)就表示在msra工作且在周一展示深度学习相关论文。

FM模型将每个特征i转换成隐向量vi=[vi1,vi2,...,viD]v_i=[v_{i1},v_{i2},...,v_{iD}],并且使用隐向量内积来表示两两特征间的交互: f(2)(i,j)=<vi,vj>xixjf^{(2)}(i,j)=<v_i,v_j>x_ix_j. 但是传统的FM很难再扩展到更高阶的特征交互。目前,一种方法就是使用深度神经网络来学习高阶特征,如FNN,PNN。FNN和PNN的一个缺点是它们更关注高阶特征交互而忽视了低阶特征交互。而DeepFM等模型通过引入混合网络来学习高阶和低阶的特征交互。这些基于DNN的模型缺点如下:模型学习出的是隐式的交互特征,其形式是未知的、不可控的;同时它们的特征交互是发生在元素级(bit-wise)而不是特征向量之间(vector-wise),这一点违背了因子分解机的初衷。

预备知识

1.嵌入层(Embedding Layer)

计算机视觉或者nlp中,输入通常是图像或者文本,它们具有空间相关性,所以这些稠密结果的原始特征可以直接应用到神经网络中。但是在推荐系统中,输入特征一般是稀疏的,维度很大,并且没有很强的空间相关性。因此,multi-field category形式的特征就被广泛应用到推荐系统中,比如输入[user_id=s02,gender=male,organization=msra,interesets=comedy&rock]通过field-aware one-hot encoding转换成一个维度很大的稀疏特征。
xDeepFM模型

为了能够用深度网络学习特征,我们一般通过一个嵌入层(embedding layer,如下图所示)将原始特征转换成一个低维的、稠密的向量。我们将一个field的特征转换成一个向量,那么假设原始特征有m个field,就转换成了m个向量的集合e=[e1,e2,...,em]e=[e_1,e_2,...,e_m],其中,eiRDe^i\in{R^D},D是field embedding的维度。
xDeepFM模型

2.隐式高阶特征和显式高阶特征

1、 隐式高阶特征
FNN、Deep Crosing以及Wide&Deep网络的深度部分是将field embedding vector e输入到前向神经网络来学习高阶特征交互,前向传播过程如下:
x1=σW(1)e+b1x^1=\sigma{W^{(1)}e+b^1}
xk=σW(k)x(k1)+bkx^k=\sigma{W^{(k)}x^{(k-1)}+b^k}
k表示网络第k层。这种网络模型的特征交互是元素级别(bit-wise)的。元素级别是说即使同一个field embedding vector的元素也会互相影响。

PNN和DeepFM在上述网络的基础上,添加了一个交互层,从而能够同时学习元素级和向量级(vector-wise)的特征交互。PNN和DeepFM网络模型图如下:
xDeepFM模型

2、 显式高阶特征
Deep Cross Network(DCN),网络结构图如下。
xDeepFM模型

不同于典型的全连接前向传播网络,DCN隐藏层交叉操作计算公式如下:
xk=x0xk1Twk+bk+xk1x_k=x_0x_{k-1}^Tw_k+b_k+x_{k-1}
其中,wkw_k,bkb_k,xkRmDx_k\in{R^{mD}}分别是第k层的权重,偏置和输出。

DCN学习的高阶特征交互很特殊,DCN的每一个隐藏层其实是x0x_0的一个标量乘积(scalar multiple)。假设证明法证明如下:

k=1时,
x1=x0(x0Tw1)+x0=x0(x0Tw1+1)=α1x0 x_1=x_0(x_0^Tw_1)+x_0 =x_0(x_0^Tw_1+1) =\alpha^1x_0

其中,α1\alpha^1是一个标量,因此x1就是x0的一个标量积。
假设k=i时结论成立,那么k=i+1时:

xi+1=x0xiTwi+1+xi=x0((αix0)Twi+1)+αix0=αi+1x0 x_{i+1}=x_0x_i^Tw_{i+1}+x_i =x_0((\alpha^ix_0)^Tw_{i+1})+\alpha^ix_0 =\alpha^{i+1}x_0

因此,k=i+1时结论成立。

通过上述证明,可以得出DCN网络的输出xkx_kx0x_0的一个标量积。但是这并不意味着xkx_kx0x_0是线性相关的,因为αi+1\alpha^{i+1}是随x0x_0而变化的。

xDeepFM

CIN

作者提出了一个新的交叉网络,叫做Compressed Interaction Network(CIN)。它的特征交互是向量级的,且是显式的。

记field embedding层的输出是一个矩阵X0Rm×DX^0\in{R^{m\times{D}}},CIN第k层的输出为XkRHk×DX^k\in{R^{H_k\times{D}}},HkH_k表示第k层的特征向量的个数。对每一层,XkX_k计算如下:

Xh,k=i=1Hk1j=1mWijk,h(Xi,k1Xj,0)X_{h,*}^k=\sum_{i=1}^{H_{k-1}}\sum_{j=1}^mW_{ij}^{k,h}(X_{i,*}^{k-1}\circ{X_{j,*}^0}).

其中,1hHk1\leq{h}\leq{H_k},\circ表示Hadamard积,如<a1,a2,a3><b1,b2,b3>=<a1b1,a2b2,a3b3><a_1,a_2,a_3>\circ{<b_1,b_2,b_3>}=<a_1b_1,a_2b_2,a_3b_3>

CIN结构有点类似于RNN,它的下一层的输入不仅取决于上一个隐藏层的输出,还取决于输入X0。同时它也类似于CNN。

解释一下计算过程,第k层隐层含有HkH_k条神经元向量。隐层的计算可以分成两个步骤:

(1)根据前一层隐层的状态XkX^k 和原特征矩阵 X0X^0,计算出一个中间结果 Zk+1Z^{k+1},它是一个三维的张量,如图4a所示。然后,Zk+1Z^{k+1}可以看做是一个特殊形式的图像,Wk,hW^{k,h}是一个filter。

(2) 然后在Zk+1Z^{k+1}上沿着embedding dimension (D)滑动filter,如图4b,从而得到一个隐藏层向量Xi,k+1X_{i,*}^{k+1},它可以视为计算机视觉中的特征图。因此XkX^k就是HkH_k个特征图的集合。第k+1层有Hk+1H_{k+1}个神经单元,就得到Hk+1H_{k+1}个特征图的集合。

如图4c,CIN每一个输出层XkX^k,k[1,T]k\in{[1,T]}都连接到输出单元。首先,在隐藏层每个特征图上做sum pooling:
pik=j=1DXi,jkp_i^k=\sum_{j=1}^{D}X_{i,j}^k,其中i[1,Hk]i\in{[1,H_k]}。这样就得到了一个pooling的向量pk=[p1k,p2k,...,pHkk]p^k=[p_1^k,p_2^k,...,p_{H_k}^k],将所有隐藏层的pooling向量连接起来p+=[p1,p2,...,pT]p^+=[p^1,p^2,...,p^T],并输出到输出单元。

对于二分类问题,输出就是:
y=11+exp(p+Two)y=\frac{1}{1+exp(p^{+^T}w^o)}

xDeepFM模型

将CIN和隐式网络结合起来

普通深度网络学习高阶特征交互,将CIN和普通网络结合起来可以使模型更好。xDeepFM网络结构图如下图,它既可以学习高阶和低阶的特征交互,同时也包含显式和隐式的特征交互。它的输出是:

y^=σ(wlinearTa+wdnnTxdnnk+wcinTp++b)\hat{y}=\sigma{(w_{linear}^Ta+w_{dnn}^Tx_{dnn}^k+w_{cin}^Tp^++b)},其中a是原始的特征输入
xDeepFM模型

参考:

  1. 推荐系统遇上深度学习(二十二)–DeepFM升级版XDeepFM模型强势来袭