【CTR预估】Deep & Cross Network 模型

论文下载地址:https://arxiv.org/pdf/1708.05123.pdf

如果了解WD模型的话,简单的说这篇文章就是把WD模型的wide侧改成了cross网络。

结构图如下所示:

                                  【CTR预估】Deep & Cross Network 模型_第1张图片

从下到上,先看模型的输入是

                                     【CTR预估】Deep & Cross Network 模型_第2张图片

这个也是推荐领域常见的输入方式,将实值类的特征stack起来,稀疏的类别特征做embedding。然后整体concat起来作为模型的输入。

再往上走一步

                             【CTR预估】Deep & Cross Network 模型_第3张图片

先看右边的模型,就是一个正常的全连接网络。

关键的是左边的cross 网络。

如果直接看图上的公式会有点误导,直接看文章给出的每一层x的计算公式和具体的可视化图

            公式:

                                  

            交叉层可视化图:

                                     【CTR预估】Deep & Cross Network 模型_第4张图片

这样就比较清楚了,每一层的计算中都有x_0,x_0是一个列向量,所以x_0*x{}'这个计算过程相当于把交叉网络输入x_0的每个维度分发到不同的维度上,再利用w把分发出去的值合并起来,以此来达到交叉特征的效果。

举个栗子

假设输入的是一个三维的向量x_0=[x_{01},x_{02},x_{03}],那么第一层交叉层的计算如下图:

                               

看一下过程就很清楚了。

 而每一层中的参数只有和 ,如果输入数据的维度是d,交叉层的层数是L,那么整个交叉网络的参数只有d*L*2,也大大减少了参数的数量。

最后的输出

                                【CTR预估】Deep & Cross Network 模型_第5张图片

交叉网络和深度网络的输出是他们最后一层神经网络节点值。这里和wide and deep 模型不同的是,wide and deep模型最后的输出只有一个节点,模型直接将wide和deep两个子模型的输出的单个值加起来送入激活函数。

而这里是将cross网络输出的向量和deep输出的向量concate起来,再做一层的全连接,才送入激活函数。

具体实现代码github上很多。

你可能感兴趣的:(深度学习,推荐系统)