推荐系统 - 排序 - Deep & Cross Network

今天要分享的是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,自动构造有限高阶的交叉特征,并学习对应权重,告别了繁琐的人工叉乘。下面一起来看下细节:

 

二、DEEP & CROSS NETWORK

推荐系统 - 排序 - Deep & Cross Network_第1张图片

DCN整体模型的架构图如上:底层是 Embedding and stacking layer,然后是并行的 Cross Network Deep Network,最后是 Combination Output Layer 把 Cross Network 和 Deep Network 的结果放在一起得到Output。

2.1、Embedding and stacking layer

DCN底层的两个功能是Embed和Stack。

Embed:

推荐系统的CTR预估中,输入的大部分特征都是离散特征,通常的处理办法就是编码为one-hot向量,这样对于实际应用中维度会非常高且稀疏(),因此应该使用FM算法中的embedding方法,将每个特征变成一个稠密向量()。

Stack

处理完了离散特征,还有连续型特征需要处理。所以我们把连续型特征规范化之后,和嵌入向量stacking(堆叠)到一起形成一个向量,就得到了原始的输入:

                          

 

2.2 Cross network

推荐系统 - 排序 - Deep & Cross Network_第2张图片

Cross Network是这个模型的核心,它被设计来高效地应用显式的交叉特征,关键在于如何高效地进行feature crossing。对于每层的计算,使用下述公式:

其中 x_l 和 x_{l+1} 分别是第 l 层和第 l+1 层 cross layer的输出,w_l 和 b_l 是这两层之间的连接参数。注意上式中所有的变量均是列向量w_l也是列向量,并不是矩阵。

理解

这其实应用了残差网络的思想,x_{l+1} = f(x_l,w_l,b_l)+x_l 的意思是每一层的输出 x_{l+1},都是上一层的输出 x_l 加上feature crossing f(x_l,w_l,b_l)。而 f(x_l,w_l,b_l) 就是在拟合该层输出和上一层输出的残差y - x_l。残差网络有很多优点,其中一点是处理梯度退化/消失的问题,使神经网络可以“更深”.一层交叉层的可视化如下图所示:

推荐系统 - 排序 - Deep & Cross Network_第3张图片          , 其中 x 表示当前层的特征,x' 表示当前层特征的转置,y表示下一层的特征。

High-degree Interaction Across Features:
Cross Network特殊的网络结构使得cross feature的阶数随着layer depth的增加而增加。输入x0来说的阶数为1,l 层cross network的cross feature的阶数为 l+1

复杂度分析:
假设一共有 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

2.3 Deep network

深度网络就是一个全连接的前馈神经网络,层数可以自己设定:

推荐系统 - 排序 - Deep & Cross Network_第4张图片

分析计算一下参数的数量来估计下复杂度。假设输入x0维度为d,一共有Lc层神经网络,每一层的神经元个数都是m个。那么总的参数有(m^2+m)*(L_c-1) + d*m +m 个。

这是因为每一层的权重矩阵W有m^2个参数,偏置有m个参数,共有L_c -1层;从x_0到第一个隐藏层h_1需要权重矩阵W_{h,0}共有d*m个参数,偏置b_{h,0}需要m个参数。

2.4 Combination layer

Combination Layer把Cross Network和Deep Network的输出拼接起来,然后经过一个加权求和,然后输入到标准的逻辑回归函数得到最终的预测概率。形式化如下:

p是最终的预测概率;x_{L_1}是d维的,表示Cross Network的最终输出;h_{L_2} 是m维的,表示Deep Network的最终输出;w_{logits} 是Combination Layer的权重;最后经过sigmoid函数,得到最终预测概率。

损失函数使用带正则项的log loss,形式化如下:

此外,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啦,我们下篇再见)

 

你可能感兴趣的:(京东实习,神经网络,推荐系统)