本博文引自王树森老师推荐系统。
视频地址:特征交叉02:DCN 深度交叉网络_哔哩哔哩_bilibili
课件地址: https://github.com/wangshusen/RecommenderSystem

这节课我们继续研究推荐系统中的特征交叉,这节课内容是深度交叉网络,缩写(DCN),用来代替简单的全连接网络,DCN既可以用于排序,也可以用于召回。

回顾

我们先回顾以前介绍的召回和排序模型,讨论其中哪些结构可以被替换成DCN。
这是前面召回课程中讲过的双塔模型,双塔是一种框架,而不是一种很具体的神经网络。用户塔和物品塔可以用任意的神经网络结构,最简单的模型结构当然是全连接网络,这节课介绍的深度交叉网络效果比全连接网络更好。
22_召回、排序模型_1

这是前面讲过的标准的多目标排序模型,输入是很多特征,输出是对点击率,点赞率等指标的预估,网络的整体结构很简单,我就不再讲一遍了。中间的神经网络负责对特征做变换,然后输出一个特征向量,这个神经网络被所有任务共享,所以叫做shared bottom,它的网络结构可以任意,最简单的实现就是用多个全连接层,如果用更好的神经网络结构,预估的准确性会更高。
22_召回、排序模型_2

这是排序用的MMoE模型,结构更复杂,这三个是专家神经网络,用途是把各种输入的特征映射到新的特征向量,用于顶层的预估任务。这三个专家神经网络也可以用任意的结构,包括全连接网络,深度交叉网络,还有后面课程介绍的其他结构。
22_召回、排序模型_3

交叉层

这节课的主要内容是深度交叉网络,我先从交叉层讲起,它是交叉网络的基本组成单元。
我们先来研究一个交叉层的结构,把输入记作向量$x_0$ ,经过了$i$层之后,神经网络输出$x_i$。
下面详细讲解第$i$个交叉层的结构,把$x_i$输入一个全连接层,全连接层输出向量$y$,把最底层的输入向量$x_0$ 与向量y做哈达玛乘积。
哈达玛乘积意思是逐元素相乘,如果$x_0$与$y$都是八维的向量,那么它们的乘积也是八维的向量。
把输出的向量记作$z$,向量$x_i$和$z$分别是输入和输出,两个向量的形状是一样的。
22_交叉层_1

把两个向量相加得到向量$x_{i+1}$,这个操作类似于resnet中的跳跃连接,skip connection。
22_交叉层_2

向量$x_{i+1}$是第i个交叉层的输出,向量$x_0$和$x_i$是这个交叉层的输入,这个交叉层的参数全都在这个全连接层里面,其余的操作是向量哈达玛乘积和向量加法,都没有参数。
22_交叉层_3

交叉层可以写成这样的公式,交叉层的输入是两个向量$x_0$ 和$x_i$,$x_0$ 是整个神经网络最底层的输入,$x_i$是神经网络第$i$层的输入。
22_交叉层_4
22_交叉层_5
这个部分是全连接层,计算矩阵$W$乘以向量$x_i$,再加上向量$b$,这个全连接层的输出是个向量,跟输入的向量$x_i$大小是一样的,矩阵$w$和向量$b$是全连接层中的参数,也是这个交叉层中全部的参数,参数需要在训练的过程中用梯度去更新。
22_交叉层_5

把向量$x_0$ 与全连接层的输出做哈达玛乘积,也就是逐元素相乘,哈达玛乘积要求左右两边的向量形状相同。
22_交叉层_5

最后再把哈达玛乘积的结果与输入相加,把输入与输出相加,这就是resnet中的跳跃连接,这是深度学习中的一种常用技巧,可以防止梯度消失。
22_交叉层_5
左边的向量$x_{i+1}$是交叉层的输出,它的形状与$x_i$和$x_0$是一样的也就是说每个交叉层的输入和输出都是向量,而且形状相同。
22_交叉层_8

交叉网络

刚才讲了交叉层,下面开始讲交叉网络(cross network)。
向量$x_0$ 是交叉网络的输入,把它送进一个交叉层,前面讲过交叉层的结构,交叉层输出向量$x_1$。$x_1$是用这个公式计算出来的,前面讲解过这个公式,这里就不再具体解释了。公式中的$w_0$和$b_0$ 是这个交叉层中的参数。
22_交叉网络_1

把上一层的输出$x_1$输入下一个交叉层,还需要把$x_0$ 也输入这个交叉层,交叉层的参数是$w_1$和$b_1$ 。这个交叉层输出向量$x_2$,它是用这个公式计算出的,这里就不解释这个公式了。
22_交叉网络_2
22_交叉网络_3
重复这个过程,可以加更多的交叉层,把向量$x_2$输入下一个交叉层,交叉层的参数是$w_2$和$b_2$,还需要把最底层的向量$x_0$ 送进这个交叉层,这个交叉层输出向量$x_3$。如果你愿意,可以加更多的交叉层,如果不加更多的交叉层,那么向量$x_3$就是这个神经网络最终的输出。
22_交叉网络_3

下面列了两篇参考文献,第一篇论文是这节课介绍的交叉网络,其实他被称作第二版的交叉网络,第二篇是2017年发表的论文,他是交叉网络的原始版本,现在已经没用了,大家也没有必要去看这篇论文。
22_交叉网络_4

刚才提到的两篇论文提出了深度交叉网络,Deep&Cross Network,意思是把交叉网络跟普通的全连接网络结合起来。
推荐系统召回和排序模型的输入是用户特征,物品特征,还有其他特征,把这些向量做concatenation,然后输入两个神经网络,上面的是全连接网络,下面的是前面介绍的交叉网络,两个神经网络并联,两个神经网络各输出一个向量,把两个向量做concatenation,输入一个全连接层,全连接层输出一个向量。全连接网络,交叉网络,全连接层都拼到一起,就是深度交叉网络DCN用这样的高级神经网络结构比最简单的全连接网络效果更好,DCN已经被工业界普遍接受,DCN既可以用于召回,也可以用于排序。
双塔模型中的用户塔和物品塔都可以是DCN,多目标排序模型中的share,bottom,MMoE中的专家神经网络也都可以是DCN。
这节课讲解了交叉层和深度交叉网络,他们可以代替召回排序中的全连接网络,让召回要排序变得更准确,这节课就讲到这里,感谢大家观看。