Deep & Cross Network
在CTR模型中,FM可以自动组合特征,但也仅限于二阶叉乘。Deep & Cross 主要解决CTR模型中如何自动学习高阶的特征组合。Deep & Cross Network(DCN)自动构造有限高阶的交叉特征,并学习对应权重,告别了繁琐的人工叉乘。
Deep & Cross的网络结构如图所示:

主要包括四个部分,输入部分,Cross network部分,Deep network部分,输出部分。其中Deep network部分就是简单的神经网络全连接层,输出部分是对Cross network部分和Deep network部分的结果进行组合,然后经过一个sigmoid为**函数的全连接层,采用logistic loss作为损失函数,进行联合训练。这两部分较为简单,下面重点介绍Cross network部分和输入部分。
输入部分
输入部分包括:
(1)对sparse特征进行embedding,对于multi-hot的sparse特征,embedding之后再做一个简单的average pooling;
(2) 对dense特征归一化,然后和embedding特征拼接,作为随后Cross层与Deep层的共同输入,
即:
x0=[xembed,1T,xembed,2T,...xembed,kT,xdenseT]T
Cross 部分
Cross的目的是以一种显示、可控且高效的方式,自动构造有限高阶交叉特征,Cross结构如上图左侧所示,其中第 l+1 层输出为:

此处注意以下细节:
(1)每层的输出xl的维度都相同,均为d。
(2)受残差神经网络的启发,每层的函数f拟合的是xl−1−xl的残差(残差网络可以有效处理梯度消失的问题,使得网络更加的深)
接下来通过具体的例子来简述Cross背后的数学原理。假设cross 有2层,网络的输入x0=[x0,1,x0,2]T,为方便讨论令 bi=0,则有:
x1=x0x0Tw0+x0=[x0,1x0,2][x0,1,x0,2][w0,1w0,2]+[x0,1x0,2]=[w0,1x0,12+w0,2x0,1x0,2+x0,1w0,1x0,2x0,1+w0,2x0,22+x0,2]
所以:
x2===x0x1Tw1+x1[w1,1x0,1x1,1+w1,2x0,1x1,2+x1,1w1,1x0.2x1,1+w1,2x0,2x1,2+x1,2][w0,1w1,1z0,13+(w0,2w1,1+w0,1w1,2)x0,12x0,2+w0,2w1,2x0,1x0,22+(w0,1+w1,1)x0,12+(w0,2+w1,2)x0,1z0,2+x0,1⋅⋅⋅⋅⋅⋅⋅]
最后得到ycross=x2Twcross 参与到loss的计算。从上述的计算过程可以看出:
(1) x1 包含了原始特征 x0,1,x0,2 从一阶到二阶的所有可能叉乘组合。
(2)x2包含了其从一阶到三阶的所有可能叉乘组合。
从这个计算过程看出了cross是如何自动构造有限高阶交叉特征
下面是cross的几个优点:
(1)有限高阶:叉乘阶数由网络的深度决定,深度Lc对应最高Lc+1阶的叉乘
(2)自动叉乘:Cross输出包含了原始特征从一阶(即本身)到 Lc+1 阶的所有叉乘组合,而模型参数量仅仅随输入维度成线性增长:2∗d∗L 。
(3)参数共享:并不是每个交叉组合都具有独立的权重参数,而是共享了 2∗d∗L 个权重参数。参数共享机制使得模型具有更强的泛化性和鲁棒性。
还有一点需要注意:输入x0是在embedding之后得到的,后续的交叉也是对 embedding 后的数值进行的交叉,直接使用大规模高维的sparse特征作为输入,会导致极大地增加Cross的参数量。
xDeepFM
DCN 的设计十分巧妙,DCN 的Cross层接在Embedding层之后,Cross层的独特结构,使其可以显示、自动的构造有限的高阶特征叉乘。 xDeepFM 可以认为是在DCN 的基础上改进的。
在讲解xdeepFM之前先来了解一下bit-wise和vector-wise。假设有两个特征向量:(a1,b1,c1)和(a2,b2,c2) 在进行特征交互时,有如下两种交互形式:
(1)交互形式类似于:f(w1∗a1∗a2,w2∗b1∗b2,w3∗c1∗c2) ,此时,我们认为特征交互发生在元素级**(bit-wise)**上。
(2)交互形式类似于:f(w∗(a1∗a2,b1∗b2,c1∗c2)),此时,我们认为特征交互发生在特征向量级**(vector-wise)**上。
Cross 以嵌入向量中的单个bit为最细粒度,而FM是以向量为最细粒度学习相关性,即vector-wise。xDeepFM的动机,正是将FM的vector-wise的思想引入Cross部分。
xDeepFM模型的整体结构图如下图所示:

其中的Linear部分是指:一阶特征进行加权求和。Plain DNN 是简单的MLP(多层感知机)。
模型的输入是将特征进行嵌入后的Embedding layer。比较难理解的是CIN:Compressed Interaction Network。下面重点讲述CIN。
CIN的输入来自Embedding层,假设有m个field,每个field的embedding vector维度为D,这些vector 依次排列组成 mxD 的矩阵X0 。接着对矩阵X0 进行一系列的运算。如下图所示:

图中的Xk∈RHk∗D 表示第k层的输出,其中Hk表示第k层的vector个数,vector维度始终为D。
CIN 内部有 k 层,每一层都会输出一个矩阵 Xk∈RHk∗D ,k 表示第 k 层的输出, Hk 表示第 k 层有 Hk 个维度为 D 的向量。要得到 Xk ,需要接收两个矩阵作为输入,一个是 Xk−1 ,另一个是 X0 ,具体的计算公式如下:
Xh,∗k=i=1∑Hk−1j=1∑mWijk,h(Xi,∗k−1∘Xj,∗0)∈R1∗D, where 1≤h≤Hk
其中 Wk,h∈RHk−1∗m,表示要得到第 k 层第 h 个向量所需要的权重矩阵, Hk−1 表示第 k−1 层的输出矩阵 Xk−1 由 Hk−1 个维度为 D 的向量组成。∘ 表示Hadamard乘积,即逐元素乘,例如:
<a1,b1,c1>∘<a2,b2,c2>=<a1a2,b1b2,c1c2>
式子中 Xi,∗k−1∘Xj,∗0 是表示取出 Xk−1 的第 i 个向量与输入层 X0 中第 j 个向量进行 Hadamard 乘积运算。整个公式的计算过程可以用下图表示:

上面的公式的计算结果只得到了第 h 个向量 Xh,∗k ,实际上我们会使用 Hk 个不同的权重矩阵 Wk,h 来获得不同的向量,最后这些向量拼接成输出 Xk∈RHk∗D 。
CIN与Cross的几个主要差异:
(1)Cross是bit-wise 而CIN是vector-wise。
(2)Cross在第 l层,包含从1阶到l+1阶的所有特征组合,而CIN只包含l+1阶的组合特征。且Cross在输出层输出全部结果,而CIN在每层都输出中间结果。
总结:
- xDeepFM将基于Field的vector-wise思想引入Cross,并且保留了Cross的优势,模型结构也很elegant,实验效果也提升明显。如果说DeepFM只是“Deep & FM”,那么xDeepFm就真正做到了”Deep” Factorization Machine。
- xDeepFM的时间复杂度会是其工业落地的一个主要性能瓶颈,需要重点优化
参考文章:
CTR 模型之 Deep & Cross (DCN) 与 xDeepFM 解读
xDeepFM:名副其实的 ”Deep” Factorization Machine