今天要分享的是2017年斯坦福与Google联合提出的DCN模型,同时这篇论文是Google 对 Wide & Deep工作的一个后续研究。
原文:《Deep & Cross Network for Ad Click Predictions》
传统的CTR预估模型需要大量的人工特征工程,耗时耗力;引入DNN之后,依靠神经网络强大的学习能力,可以一定程度上实现自动学习特征组合。但是DNN的缺点在于隐式的学习特征组合带来的不可解释性,以及低效率的学习(并不是所有的特征组合都是有用的)。这时交叉网络应运而生,同时联合DNN,发挥两者的共同优势。
相关工作:由于数据集规模和维数的急剧增加,之前已经提出了许多方法:
最开始FM使用隐向量的内积来建模组合特征;
FFM在此基础上引入field的概念,针对不同的field使用不同的隐向量。
但是,这两者都是针对低阶(二阶,高阶会产生非常大的计算成本)的特征组合进行建模的; 随着DNN在计算机视觉、自然语言处理、语音识别等领域取得重要进展,DNN几乎无限的表达能力被广泛的研究。同样也尝试被用来解决web产品中输入数据高维高稀疏的问题。DNN可以对高维组合特征进行建模,但是DNN的不可解释性让DNN是否是目前最高效的针对此类问题的建模方式成为了一个问题; 另一方面,在Kaggle上的很多比赛中,大部分的获胜方案都是使用的人工特征工程,构造低阶的组合特征,这些特征意义明确且高效。而DNN学习到的特征都是隐式的、高度非线性的高阶组合特征,含义非常难以解释。这揭示了一个模型能够比通用的DNN设计更能够有效地学习的有界度特征的相互作用,那是否能设计一种DNN的特定网络结构来改善DNN,使得其学习起来更加高效呢?
Wide&Deep是其中一个探索的例子,它以交叉特征作为一个线性模型的输入,与一个DNN模型一起训练,然而,W&D网络的成功取决于正确的交叉特征的选择(仍依赖人工特征工程),这是一个至今还没有明确有效的方法解决的指数问题。
于是提出DCN进行进一步探索,将Wide部分替换为由特殊网络结构实现的Cross,自动构造有限高阶的交叉特征,并学习对应权重,告别了繁琐的人工叉乘。下面一起来看下细节:
DCN整体模型的架构图如上:底层是 Embedding and stacking layer,然后是并行的 Cross Network 和 Deep Network,最后是 Combination Output Layer 把 Cross Network 和 Deep Network 的结果放在一起得到Output。
DCN底层的两个功能是Embed和Stack。
Embed:
推荐系统的CTR预估中,输入的大部分特征都是离散特征,通常的处理办法就是编码为one-hot向量,这样对于实际应用中维度会非常高且稀疏(),因此应该使用FM算法中的embedding方法,将每个特征变成一个稠密向量()。
Stack:
处理完了离散特征,还有连续型特征需要处理。所以我们把连续型特征规范化之后,和嵌入向量stacking(堆叠)到一起形成一个向量,就得到了原始的输入:
Cross Network是这个模型的核心,它被设计来高效地应用显式的交叉特征,关键在于如何高效地进行feature crossing。对于每层的计算,使用下述公式:
其中 和 分别是第 层和第 层 cross layer的输出, 和 是这两层之间的连接参数。注意上式中所有的变量均是列向量,也是列向量,并不是矩阵。
理解:
这其实应用了残差网络的思想, 的意思是,每一层的输出 ,都是上一层的输出 加上feature crossing 。而 就是在拟合该层输出和上一层输出的残差。残差网络有很多优点,其中一点是处理梯度退化/消失的问题,使神经网络可以“更深”.一层交叉层的可视化如下图所示:
, 其中 x 表示当前层的特征,x' 表示当前层特征的转置,y表示下一层的特征。
High-degree Interaction Across Features:
Cross Network特殊的网络结构使得cross feature的阶数随着layer depth的增加而增加。输入x0来说的阶数为1, 层cross network的cross feature的阶数为 。
复杂度分析:
假设一共有 Lc 层cross layer,起始输入x0的维度为d。那么整个cross network的参数个数为: d × Lc × 2 , 这是因为每一层的w和b都是d维的。
从上式可以发现,复杂度是输入维度d的线性函数,所以相比于deep network,cross network引入的复杂度微不足道。这样就保证了DCN的复杂度和DNN是一个级别的。
但是,正是因为cross network的参数比较少导致它的表达能力受限,为了能够学习高阶非线性的组合特征,DCN并行的引入了Deep Network。
深度网络就是一个全连接的前馈神经网络,层数可以自己设定:
分析计算一下参数的数量来估计下复杂度。假设输入x0维度为d,一共有Lc层神经网络,每一层的神经元个数都是m个。那么总的参数有 个。
这是因为每一层的权重矩阵W有个参数,偏置有个参数,共有层;从到第一个隐藏层需要权重矩阵共有d*m个参数,偏置需要m个参数。
Combination Layer把Cross Network和Deep Network的输出拼接起来,然后经过一个加权求和,然后输入到标准的逻辑回归函数得到最终的预测概率。形式化如下:
p是最终的预测概率;是d维的,表示Cross Network的最终输出; 是m维的,表示Deep Network的最终输出; 是Combination Layer的权重;最后经过sigmoid函数,得到最终预测概率。
此外,Cross Network和Deep Network,DCN是一起训练Cross Network和Deep Network的,这样网络可以知道另外一个网络的存在。
DCN模型的特点:
1. 在cross network中,在每一层都应用feature crossing。高效的学习了组合特征。不需要人工特征工程。
2. 网络结构简单且高效。多项式复杂度由layer depth决定。
3. 相比于DNN,DCN的logloss更低,而且参数的数量将近少了一个数量级。
4. 但是经过对cross network的分析如下,最终得到的输出就相当于X0 不断乘以一个数(标量),而且它们的特征交互是发生在元素级(bit-wise)。这种处理方式可能是存在问题的。
(当然,指出这些问题的就是我们下一篇论文XDeepFM啦,我们下篇再见)