【CTR预估】Deep & Cross Network 模型

DCN模型是组合了显式和隐式特征交叉的一个模型。如果了解WD模型的话,简单的说这篇文章就是把WD模型的wide侧改成了cross网络,用来显式的做一些特征的交叉,因为DNN虽然有着拟合任意模型的能力,但是世界上没有免费的午餐,所以显式的定义特征交叉还是很有必要的。

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

这里我对一些常用的ctr预估模型进行了复现,其中也包括了DCN模型,可以参考一些:https://github.com/Shicoder/Deep_Rec/blob/master/Deep_Rank

1.模型结构

结构图如下所示:

                                  

2.模型输入

我们从下到上,先看模型的输入,如下所示

                                     

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

3.模型核心结构

再往上走一步

                             

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

关键的是左边的cross 网络

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

            公式:

                                  

            交叉层可视化图:

                                     

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

举个栗子?

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

                               

看一下过程就很清楚了。

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

4.最后的输出

                                

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

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

具体实现代码github上很多。

©️2020 CSDN 皮肤主题: 猿与汪的秘密 设计师:上身试试 返回首页