Deep&Cross Network(DCN)

Posted zhiyong_will

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Deep&Cross Network(DCN)相关的知识,希望对你有一定的参考价值。

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 \\mathbfx_embed,i=W_embed,i\\mathbfx_i xembed,i=Wembed,ixi

其中, x e m b e d , i \\mathbfx_embed,i xembed,i是Embedding层的输出向量, x i \\mathbfx_i xi是属入的第 i i i个离散特征, W e m b e d , i ∈ R n e × n v W_embed,i\\in \\mathbbR^n_e\\times n_v Wembed,iRne×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 ] \\mathbfx_0=\\left [ \\mathbfx_embed,1^T,\\cdots ,\\mathbfx_embed,k^T,\\mathbfx_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 \\mathbfx_l+1=\\mathbfx_0\\mathbfx_l^T\\mathbfw_l+\\mathbfb_l+\\mathbfx_l=f\\left ( \\mathbfx_l,\\mathbfw_l,\\mathbfb_l \\right )+\\mathbfx_l xl+1=x0xlTwl+bl+xl=f(xl,wl,bl)+xl

其中, x l , x l + 1 ∈ R d \\mathbfx_l,\\mathbfx_l+1\\in \\mathbbR^d xl,xl+1Rd表示的是Cross network的第 l l l层和第 l + 1 l+1 l+1层的输出向量, w l , b l ∈ R d \\mathbfw_l,\\mathbfb_l\\in \\mathbbR^d wl,blRd是Cross network的第 l l l层的参数。上述公式的第二部分可以写成:

f ( x l , w l , b l ) = x l + 1 − x l f\\left ( \\mathbfx_l,\\mathbfw_l,\\mathbfb_l \\right )=\\mathbfx_l+1-\\mathbfx_l f(xl,wl,bl)=xl+1xl

从上述公式可以看出是一个残差网络[3]的表达形式,函数 f : R d ↦ R d f:\\mathbbR^d \\mapsto \\mathbbR^d f:RdRd需要拟合的是第 l + 1 l+1 l+1层和第 l l l层的残差 x l + 1 − x l \\mathbfx_l+1-\\mathbfx_l xl+1xl。在ResNet中,残差网络的优点主要有:

  1. 通过残差网络可以构建深层网络。在传统的MLP,当网络加深之后,往往存在过拟合现象。而通过残差网络构建深层网络,可以减少过拟合现象的发生。
  2. 残差网络使用了ReLU激活函数取代Sigmoid激活函数可以有效防止梯度弥散,使得网络更容易收敛。

总的来说,可以通过残差网络构建更深层的模型,便于学习到特征之间的交叉属性。

2.2.3. Deep network

Deep network部分与Wide&Deep模型中一致,是一个典型的全连接前馈神经网络,其可以由下属公式表示:

h l + 1 = f ( W l h l + b l ) \\mathbfh_l+1=f\\left ( W_l\\mathbfh_l+\\mathbfb_l \\right ) hl+1=f(Wlhl+bl)

其中, h l ∈ R n l , h l + 1 ∈ R n l + 1 \\mathbfh_l\\in \\mathbbR^n_l,\\mathbfh_l+1\\in \\mathbbR^n_l+1 hlRnl,hl+1Rnl+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 \\mathbbR^n_l+1\\times n_l,\\mathbfb_l\\in \\mathbbR^n_l+1 Wl

以上是关于Deep&Cross Network(DCN)的主要内容,如果未能解决你的问题,请参考以下文章

Deep & Cross Network 6 使用 TensorFlow 构建推荐系统

推荐系统Deep & Cross Network(DCN)

Deep & Cross Network总结

FMLFMAFMNFMDeepFM Deep Cross Network

FMLFMAFMNFMDeepFM Deep Cross Network

6.2 tensorflow2实现Deep&Cross推荐系统——Python实战