Deep & Cross Network (DCN) 与 xDeepFM 解读

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层的共同输入,

即:
x 0 = [ x e m b e d , 1 T , x e m b e d , 2 T , . . . x e m b e d , k T , x d e n s e T ] T x_0 = [x^T_{embed, 1},x^T_{embed, 2},...x^T_{embed, k},x^T_{dense}]^T x0=[xembed,1T,xembed,2T,...xembed,kT,xdenseT]T
Cross 部分

Cross的目的是以一种显示、可控且高效的方式,自动构造有限高阶交叉特征,Cross结构如上图左侧所示,其中第 l + 1 l+1 l+1 层输出为:
在这里插入图片描述

此处注意以下细节:

(1)每层的输出 x l x_l xl的维度都相同,均为 d d d

(2)受残差神经网络的启发,每层的函数 f f f拟合的是 x l − 1 − x l x_{l-1}-x_l xl1xl的残差(残差网络可以有效处理梯度消失的问题,使得网络更加的深)

接下来通过具体的例子来简述Cross背后的数学原理。假设cross 有2层,网络的输入 x 0 = [ x 0 , 1 , x 0 , 2 ] T x_0 = [x_{0, 1} ,x_{0, 2}]^T x0=[x0,1,x0,2]T,为方便讨论令 b i = 0 b_i = 0 bi=0,则有:
x 1 = x 0 x 0 T w 0 + x 0 = [ x 0 , 1 x 0 , 2 ] [ x 0 , 1 , x 0 , 2 ] [ w 0 , 1 w 0 , 2 ] + [ x 0 , 1 x 0 , 2 ] = [ w 0 , 1 x 0 , 1 2 + w 0 , 2 x 0 , 1 x 0 , 2 + x 0 , 1 w 0 , 1 x 0 , 2 x 0 , 1 + w 0 , 2 x 0 , 2 2 + x 0 , 2 ] \begin{aligned} \boldsymbol{x}_{1} &=\boldsymbol{x}_{0} \boldsymbol{x}_{0}^{T} \boldsymbol{w}_{0}+\boldsymbol{x}_{0}=\left[\begin{array}{c} x_{0,1} \\ x_{0,2} \end{array}\right]\left[x_{0,1}, x_{0,2}\right]\left[\begin{array}{c} w_{0,1} \\ w_{0,2} \end{array}\right]+\left[\begin{array}{c} x_{0,1} \\ x_{0,2} \end{array}\right]=\left[\begin{array}{c} w_{0,1} x_{0,1}^{2}+w_{0,2} x_{0,1} x_{0,2}+x_{0,1} \\ w_{0,1} x_{0,2} x_{0,1}+w_{0,2} x_{0,2}^{2}+x_{0,2} \end{array}\right] \\ \end{aligned} 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]
所以:
x 2 = x 0 x 1 T w 1 + x 1 = [ w 1 , 1 x 0 , 1 x 1 , 1 + w 1 , 2 x 0 , 1 x 1 , 2 + x 1 , 1 w 1 , 1 x 0.2 x 1 , 1 + w 1 , 2 x 0 , 2 x 1 , 2 + x 1 , 2 ] = [ w 0 , 1 w 1 , 1 z 0 , 1 3 + ( w 0 , 2 w 1 , 1 + w 0 , 1 w 1 , 2 ) x 0 , 1 2 x 0 , 2 + w 0 , 2 w 1 , 2 x 0 , 1 x 0 , 2 2 + ( w 0 , 1 + w 1 , 1 ) x 0 , 1 2 + ( w ⁡ 0 , 2 + w 1 , 2 ) x 0 , 1 z 0 , 2 + x 0 , 1 ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ] \begin{aligned} \boldsymbol x_{2}=& \boldsymbol x_{0} \boldsymbol x_{1}^{T} \boldsymbol w_{1}+ \boldsymbol x_{1} \\ =&\left[\begin{array}{c} w_{1,1} x_{0,1} x_{1,1}+w_{1,2} x_{0,1} x_{1,2}+x_{1,1} \\ w_{1,1} x_{0.2} x_{1,1}+w_{1,2} x_{0,2} x_{1,2}+x_{1,2} \\ \end{array}\right] \\ =& \left[\begin{array}{c} {w_{0,1} w_{1,1} z_{0,1}^{3}+\left(w_{0,2} w_{1,1}+w_{0,1} w_{1,2}\right) x_{0,1}^{2} x_{0,2}+w_{0,2} w_{1,2} x_{0,1} x_{0,2}^{2}+\left(w_{0,1}+w_{1,1}\right) x_{0,1}^{2}+\left(\operatorname{w}_{0,2}+w_{1,2}\right) x_{0,1} z_{0,2}+x_{0,1}} \\ \cdot \cdot \cdot \cdot \cdot \cdot \cdot \end{array}\right] \end{aligned} 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]
最后得到 y c r o s s = x 2 T w c r o s s y_{cross} = \boldsymbol x_2^T \boldsymbol w_{cross} ycross=x2Twcross 参与到loss的计算。从上述的计算过程可以看出:

(1) x 1 \boldsymbol x_1 x1 包含了原始特征 x 0 , 1 , x 0 , 2 \boldsymbol x_{0,1}, \boldsymbol x_{0,2} x0,1,x0,2 从一阶到二阶的所有可能叉乘组合。

(2) x 2 \boldsymbol x_2 x2包含了其从一阶到三阶的所有可能叉乘组合。

从这个计算过程看出了cross是如何自动构造有限高阶交叉特征

下面是cross的几个优点:

(1)有限高阶:叉乘阶数由网络的深度决定,深度 L c L_c Lc对应最高 L c + 1 L_c+1 Lc+1阶的叉乘

(2)自动叉乘:Cross输出包含了原始特征从一阶(即本身)到 L c + 1 L_c+1 Lc+1 阶的所有叉乘组合,而模型参数量仅仅随输入维度成线性增长 2 ∗ d ∗ L 2*d*L 2dL

(3)参数共享:并不是每个交叉组合都具有独立的权重参数,而是共享了 2 ∗ d ∗ L 2*d*L 2dL 个权重参数。参数共享机制使得模型具有更强的泛化性和鲁棒性。

还有一点需要注意:输入 x 0 x_0 x0是在embedding之后得到的,后续的交叉也是对 embedding 后的数值进行的交叉,直接使用大规模高维的sparse特征作为输入,会导致极大地增加Cross的参数量。

xDeepFM

​ DCN 的设计十分巧妙,DCN 的Cross层接在Embedding层之后,Cross层的独特结构,使其可以显示、自动的构造有限的高阶特征叉乘。 xDeepFM 可以认为是在DCN 的基础上改进的。

在讲解xdeepFM之前先来了解一下bit-wisevector-wise。假设有两个特征向量: ( a 1 , b 1 , c 1 ) 和 ( a 2 , b 2 , c 2 ) (a_1,b_1,c_1)和(a_2,b_2,c_2) (a1,b1,c1)(a2,b2,c2) 在进行特征交互时,有如下两种交互形式:

(1)交互形式类似于: f ( w 1 ∗ a 1 ∗ a 2 , w 2 ∗ b 1 ∗ b 2 , w 3 ∗ c 1 ∗ c 2 ) f(w_1*a_1*a_2,w_2*b_1*b_2,w_3*c_1*c_2) f(w1a1a2,w2b1b2,w3c1c2) ,此时,我们认为特征交互发生在元素级**(bit-wise)**上。

(2)交互形式类似于: f ( w ∗ ( a 1 ∗ a 2 , b 1 ∗ b 2 , c 1 ∗ c 2 ) ) f(w*(a_1*a_2,b_1*b_2,c_1*c_2)) f(w(a1a2,b1b2,c1c2)),此时,我们认为特征交互发生在特征向量级**(vector-wise)**上。

Cross 以嵌入向量中的单个bit为最细粒度,而FM是以向量为最细粒度学习相关性,即vector-wisexDeepFM的动机,正是将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 的矩阵 X 0 \mathbf X^0 X0 。接着对矩阵 X 0 \mathbf X^0 X0 进行一系列的运算。如下图所示:
在这里插入图片描述

图中的 X k ∈ R H k ∗ D \mathbf X^k \in \mathcal R^{H_k *D} XkRHkD 表示第 k k k层的输出,其中 H k H_k Hk表示第 k k k层的vector个数,vector维度始终为D。

CIN 内部有 k 层,每一层都会输出一个矩阵 X k ∈ R H k ∗ D X^k \in \mathbb R^{H_k * D} XkRHkD ,k 表示第 k 层的输出, H k H_k Hk 表示第 k 层有 H k H_k Hk 个维度为 D 的向量。要得到 X k X^{k} Xk ,需要接收两个矩阵作为输入,一个是 X k − 1 X^{k-1} Xk1 ,另一个是 X 0 X^0 X0 ,具体的计算公式如下:
X h , ∗ k = ∑ i = 1 H k − 1 ∑ j = 1 m W i j k , h ( X i , ∗ k − 1 ∘ X j , ∗ 0 ) ∈ R 1 ∗ D ,  where  1 ≤ h ≤ H k \boldsymbol{X}_{h, *}^{k}=\sum_{i=1}^{H_{k-1}} \sum_{j=1}^{m} \boldsymbol{W}_{i j}^{k, h}\left(\boldsymbol{X}_{i, *}^{k-1} \circ \boldsymbol{X}_{j, *}^{0}\right) \in \mathbb{R}^{1 * D}, \quad \text { where } 1 \leq h \leq H_{k} Xh,k=i=1Hk1j=1mWijk,h(Xi,k1Xj,0)R1D, where 1hHk
其中 W k , h ∈ R H k − 1 ∗ m W^{k, h} \in \mathbb R^{H_{k-1} * m} Wk,hRHk1m,表示要得到第 k 层第 h 个向量所需要的权重矩阵, H k − 1 H_{k-1} Hk1 表示第 k − 1 k-1 k1 层的输出矩阵 X k − 1 X^{k-1} Xk1 H k − 1 H_{k-1} Hk1 个维度为 D 的向量组成。 ∘ \circ 表示Hadamard乘积,即逐元素乘,例如:
< a 1 , b 1 , c 1 > ∘ < a 2 , b 2 , c 2 > = < a 1 a 2 , b 1 b 2 , c 1 c 2 > <a_1, b_1, c_1> \circ <a_2, b_2, c_2> = <a_1a_2, b_1b_2, c_1c_2> <a1,b1,c1><a2,b2,c2>=<a1a2,b1b2,c1c2>
式子中 X i , ∗ k − 1 ∘ X j , ∗ 0 \boldsymbol{X}_{i, *}^{k-1} \circ \boldsymbol{X}_{j, *}^{0} Xi,k1Xj,0 是表示取出 X k − 1 X^{k-1} Xk1 的第 i i i 个向量与输入层 X 0 X^{0} X0 中第 j j j 个向量进行 Hadamard 乘积运算。整个公式的计算过程可以用下图表示:

在这里插入图片描述
上面的公式的计算结果只得到了第 h 个向量 X h , ∗ k \boldsymbol{X}_{h, *}^{k} Xh,k ,实际上我们会使用 H k H_k Hk 个不同的权重矩阵 W k , h W^{k,h} Wk,h 来获得不同的向量,最后这些向量拼接成输出 X k ∈ R H k ∗ D X^{k} \in \mathbb R^{H_k * D} XkRHkD

CIN与Cross的几个主要差异:

(1)Cross是bit-wise 而CIN是vector-wise。

(2)Cross在第 l l l层,包含从1阶到 l + 1 l+1 l+1阶的所有特征组合,而CIN只包含 l + 1 l+1 l+1阶的组合特征。且Cross在输出层输出全部结果,而CIN在每层都输出中间结果。

总结:

  1. xDeepFM将基于Field的vector-wise思想引入Cross,并且保留了Cross的优势,模型结构也很elegant,实验效果也提升明显。如果说DeepFM只是“Deep & FM”,那么xDeepFm就真正做到了”Deep” Factorization Machine。
  2. xDeepFM的时间复杂度会是其工业落地的一个主要性能瓶颈,需要重点优化

参考文章:

CTR 模型之 Deep & Cross (DCN) 与 xDeepFM 解读

xDeepFM:名副其实的 ”Deep” Factorization Machine

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值