Deep&Cross Network(DCN)
Google 2017年发表的Deep&Cross Network(DCN)同样是对Wide&Deep的进一步改进,主要的思路使用Cross网络替代了原来的Wide部分。其中设计Cross网络的基本动机是为了增加特征之间的交互力度,使用多层cross layer对输入向量进行特征交叉。单层cross layer的基本操作是将cross layer的输入向量xl与原始的输入向量x0进
1. 概述
Deep&Cross Network(DCN)[1]是由Google于2017年提出的用于计算CTR问题的方法,是对Wide&Deep[2]模型的进一步改进。线性模型无法学习到特征的交叉属性,需要大量的人工特征工程的介入,深度网络对于交叉特征的学习有着天然的优势,在Wide&Deep模型中,Deep侧已经是一个DNN模型,而Wide侧是一个线性模型LR,无法有效的学习到交叉特征。在DCN中针对Wide&Deep模型的Wide侧提出了Cross网络,通过Cross网络学习到更多的交叉特征,提升整个模型的特征表达能力。
2. 算法原理
2.1. DCN的网络结构
DCN模型的网络结构如下图所示:
在DCN网络中,由下到上主要包括五种类型的层,第一种是Embedding层,第二种是Stacking层,用于组合Embedding层的输出;第三种是Cross network的层,用于对Stacking后的特征进行学习;第四种是Deep network的层,作用与Cross network的层一样,此外,Cross network的层和Deep network的层是并行的两个过程;第五种是输出层,经过Cross network的层和Deep network的层后,组合两者的输出做最后的计算。
2.2. DCN网络的计算过程
2.2.1. Embedding和Stacking
对于CTR问题的输入,通常是由一些离散的特征和连续的特征组成,对于离散的特征的处理方法通常是利用one-hot编码对其离散化处理,但是处理后的特征通常是较为稀疏的,举例来说,如类别特征“country=USA”,假设通过one-hot编码后得到的特征为 [ 0 , 1 , 0 ] \left [ 0,1,0 \right ] [0,1,0]。这样的特征不适合DNN处理,通常需要通过Embedding将其转换成连续的向量表示,这便是Embedding层的作用,最终得到的Embedding层的输出为:
x e m b e d , i = W e m b e d , i x i \mathbf{x}_{embed,i}=W_{embed,i}\mathbf{x}_i xembed,i=Wembed,ixi
其中, x e m b e d , i \mathbf{x}_{embed,i} xembed,i是Embedding层的输出向量, x i \mathbf{x}_i xi是属入的第 i i i个离散特征, W e m b e d , i ∈ R n e × n v W_{embed,i}\in \mathbb{R}^{n_e\times n_v} Wembed,i∈Rne×nv是一个 n e × n v n_e\times n_v ne×nv的矩阵,是用于连接输入层到Embedding层的参数。通过Embedding层后,在Stacking层,需要将Embedding层的输出组合在一起,这里的Embedding特征包括了离散特征的Embedding结果以及原始的连续特征:
x 0 = [ x e m b e d , 1 T , ⋯ , x e m b e d , k T , x d e n s e T ] \mathbf{x}_0=\left [ \mathbf{x}_{embed,1}^T,\cdots ,\mathbf{x}_{embed,k}^T,\mathbf{x}_{dense}^T \right ] x0=[xembed,1T,⋯,xembed,kT,xdenseT]
得到Embedding层的结果后,便进入到DCN网络的核心的两个网络,分别是Cross network和Deep network。
2.2.2. Cross network
Cross network部分是Deep&Cross网络的核心部分,其作用是利用深度神经网络充分挖掘特征中的交叉特征。具体过程的形式化表示如下图所示:
其具体的数学表述为:
x l + 1 = x 0 x l T w l + b l + x l = f ( x l , w l , b l ) + x l \mathbf{x}_{l+1}=\mathbf{x}_{0}\mathbf{x}_{l}^T\mathbf{w}_l+\mathbf{b}_{l}+\mathbf{x}_{l}=f\left ( \mathbf{x}_{l},\mathbf{w}_{l},\mathbf{b}_{l} \right )+\mathbf{x}_{l} xl+1=x0xlTwl+bl+xl=f(xl,wl,bl)+xl
其中, x l , x l + 1 ∈ R d \mathbf{x}_{l},\mathbf{x}_{l+1}\in \mathbb{R}^d xl,xl+1∈Rd表示的是Cross network的第 l l l层和第 l + 1 l+1 l+1层的输出向量, w l , b l ∈ R d \mathbf{w}_l,\mathbf{b}_l\in \mathbb{R}^d wl,bl∈Rd是Cross network的第 l l l层的参数。上述公式的第二部分可以写成:
f ( x l , w l , b l ) = x l + 1 − x l f\left ( \mathbf{x}_{l},\mathbf{w}_{l},\mathbf{b}_{l} \right )=\mathbf{x}_{l+1}-\mathbf{x}_{l} f(xl,wl,bl)=xl+1−xl
从上述公式可以看出是一个残差网络[3]的表达形式,函数 f : R d ↦ R d f:\mathbb{R}^d \mapsto \mathbb{R}^d f:Rd↦Rd需要拟合的是第 l + 1 l+1 l+1层和第 l l l层的残差 x l + 1 − x l \mathbf{x}_{l+1}-\mathbf{x}_{l} xl+1−xl。在ResNet中,残差网络的优点主要有:
- 通过残差网络可以构建深层网络。在传统的MLP,当网络加深之后,往往存在过拟合现象。而通过残差网络构建深层网络,可以减少过拟合现象的发生。
- 残差网络使用了ReLU激活函数取代Sigmoid激活函数可以有效防止梯度弥散,使得网络更容易收敛。
总的来说,可以通过残差网络构建更深层的模型,便于学习到特征之间的交叉属性。
2.2.3. Deep network
Deep network部分与Wide&Deep模型中一致,是一个典型的全连接前馈神经网络,其可以由下属公式表示:
h l + 1 = f ( W l h l + b l ) \mathbf{h}_{l+1}=f\left ( W_l\mathbf{h}_l+\mathbf{b}_l \right ) hl+1=f(Wlhl+bl)
其中, h l ∈ R n l , h l + 1 ∈ R n l + 1 \mathbf{h}_{l}\in \mathbb{R}^{n_l},\mathbf{h}_{l+1}\in \mathbb{R}^{n_{l+1}} hl∈Rnl,hl+1∈Rnl+1分别为第 l l l层和第 l + 1 l+1 l+1层的隐含层输出, W l ∈ R n l + 1 × n l , b l ∈ R n l + 1 W_l\in \mathbb{R}^{n_{l+1}\times n_{l}},\mathbf{b}_l\in \mathbb{R}^{n_{l+1}} Wl∈Rnl+1×nl,bl∈Rnl+1为Deep network第 l l l层到第 l + 1 l+1 l+1层的参数; f ( ⋅ ) f\left ( \cdot \right ) f(⋅)是一个激活函数,如ReLU。
2.2.4. Combination
Combination层的作用是将上述两个network的结果组合在一起,以便送入到输出层,通常选择concat的方法将两者组合在一起,如 [ x L 1 T , h L 2 T ] \left [ \mathbf{x}_{L_1}^T,\mathbf{h}_{L_2}^T \right ] [xL1T,hL2T],最终送入到输出层,输出层的结果为:
p = σ ( [ x L 1 T , x L 2 T ] w l o g i t s ) p=\sigma \left ( \left [ \mathbf{x}_{L_1}^T,\mathbf{x}_{L_2}^T \right ]\mathbf{w}_{logits} \right ) p=σ([xL1T,xL2T]wlogits)
其中, x L 1 T ∈ R d , x L 2 T ∈ R m \mathbf{x}_{L_1}^T\in \mathbb{R}^d,\mathbf{x}_{L_2}^T \in\mathbb{R}^m xL1T∈Rd,xL2T∈Rm分别为Cross network和Deep network的输出, w l o g i t s \mathbf{w}_{logits} wlogits为Combination层到输出层的权重, σ \sigma σ为激活函数 σ = 1 1 + e x p ( − x ) \sigma =\frac{1}{1+exp\left ( -x \right )} σ=1+exp(−x)1。
2.3. Cross network中的特征交叉
Cross network中的特征交叉才是Cross network的核心,为了方便描述,在此对Cross network做一些限定:假设网络的深度 L = 2 L=2 L=2,输入 x 0 ∈ R d \mathbf{x}_0\in \mathbb{R}^d x0∈Rd,为描述简单,假设 d = 2 d=2 d=2,此时 x 0 T = [ x 0 , 0 , x 0 , 1 ] \mathbf{x}_0^T=\left [ x_{0,0},x_{0,1} \right ] x0T=[x0,0,x0,1],则 L = 1 L=1 L=1层的输出为:
x 1 = x 0 x 0 T w 0 + b 0 + x 0 \mathbf{x}_{1}=\mathbf{x}_{0}\mathbf{x}_{0}^T\mathbf{w}_0+\mathbf{b}_{0}+\mathbf{x}_{0} x1=x0x0Tw0+b0+x0
其中, x 0 x 0 T \mathbf{x}_{0}\mathbf{x}_{0}^T x0x0T为:
x 0 x 0 T = ( x 0 , 0 x 0 , 0 x 0 , 0 x 0 , 1 x 0 , 1 x 0 , 0 x 0 , 1 x 0 , 1 ) \mathbf{x}_{0}\mathbf{x}_{0}^T=\begin{pmatrix} x_{0,0}x_{0,0} &x_{0,0}x_{0,1} \\ x_{0,1}x_{0,0} &x_{0,1}x_{0,1} \end{pmatrix} x0x0T=(x0,0x0,0x0,1x0,0x0,0x0,1x0,1x0,1)
由于 x 0 ∈ R d \mathbf{x}_0\in \mathbb{R}^d x0∈Rd, w 0 ∈ R d \mathbf{w}_0\in \mathbb{R}^d w0∈Rd,则 x 0 x 0 T w 0 ∈ R d \mathbf{x}_{0}\mathbf{x}_{0}^T\mathbf{w}_0\in \mathbb{R}^d x0x0Tw0∈Rd,最终 x 1 ∈ R d \mathbf{x}_{1}\in \mathbb{R}^d x1∈Rd。 L = 2 L=2 L=2层的输出为:
x 2 = x 0 x 1 T w 1 + b 1 + x 1 = x 0 [ x 0 x 0 T w 0 + b 0 + x 0 ] T w 1 + b 1 + x 0 x 0 T w 0 + b 0 + x 0 \begin{aligned} \mathbf{x}_{2} &= \mathbf{x}_{0}\mathbf{x}_{1}^T\mathbf{w}_1+\mathbf{b}_{1}+\mathbf{x}_{1}\\ &= \mathbf{x}_{0}\left [ \mathbf{x}_{0}\mathbf{x}_{0}^T\mathbf{w}_0+\mathbf{b}_{0}+\mathbf{x}_{0} \right ]^T\mathbf{w}_1+\mathbf{b}_{1}+\mathbf{x}_{0}\mathbf{x}_{0}^T\mathbf{w}_0+\mathbf{b}_{0}+\mathbf{x}_{0} \end{aligned} x2=x0x1Tw1+b1+x1=x0[x0x0Tw0+b0+x0]Tw1+b1+x0x0Tw0+b0+x0
从上述公式可以看到 x 1 \mathbf{x}_1 x1包含了原始特征 x 0 \mathbf{x}_0 x0从一阶(即: x 0 , 0 , x 0 , 1 x_{0,0},x_{0,1} x0,0,x0,1)到二阶(即: x 0 , 0 x 0 , 0 x_{0,0}x_{0,0} x0,0x0,0, x 0 , 0 x 0 , 1 x_{0,0}x_{0,1} x0,0x0,1, x 0 , 1 x 0 , 0 x_{0,1}x_{0,0} x0,1x0,0和 x 0 , 1 x 0 , 1 x_{0,1}x_{0,1} x0,1x0,1)的所有可能叉乘组合,而 x 2 \mathbf{x}_2 x2包含了其从一阶到三阶的所有可能叉乘组合。由此可知随着Cross network的网络深度的增加,交叉的阶数也在增加,通过这种方式实现特征之间的充分交叉,同时通过不同层的权重 w i \mathbf{w}_i wi选择不同阶数的交叉特征,以此达到特征选择的效果。
注:在Cross network中,网络中每一层的维数都是相等的。
3. 总结
Deep&Cross Network通过对Cross network的设计,可以显示、自动地构造有限高阶的特征叉乘,并完成不同阶特征的选择,从而在一定程度上摆脱了人工的特征工程,同时保留深度网络起到一定的泛化作用。
参考文献
[1] Wang R, Fu B, Fu G, et al. Deep & cross network for ad click predictions[M]//Proceedings of the ADKDD’17. 2017: 1-7.
[2] Cheng H T, Koc L, Harmsen J, et al. Wide & Deep Learning for Recommender Systems[J]. 2016:7-10.
[3] He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 770-778.
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)