本文主要是介绍【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的计算公式和具体的可视化图
公式:
交叉层可视化图:
这样就比较清楚了,每一层的计算中都有,是一个列向量,所以这个计算过程相当于把交叉网络输入的每个维度分发到不同的维度上,再利用w把分发出去的值合并起来,以此来达到交叉特征的效果。
举个栗子?
假设输入的是一个三维的向量,那么第一层交叉层的计算如下图:
看一下过程就很清楚了。
而每一层中的参数只有和 ,如果输入数据的维度是d,交叉层的层数是,那么整个交叉网络的参数只有d*L*2,也大大减少了参数的数量。
4.最后的输出
交叉网络和深度网络的输出是他们最后一层神经网络节点值。这里和wide and deep 模型不同的是,wide and deep模型最后的输出只有一个节点,模型直接将wide和deep两个子模型的输出的单个值加起来送入激活函数。
而这里是将cross网络输出的向量和deep输出的向量concate起来,再做一层的全连接,才送入激活函数。
具体实现代码github上很多。
完
这篇关于【CTR预估】Deep Cross Network 模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!