论文阅读 (006): Deep Learning CTR Prediction (Wide & Deep)

585 阅读5分钟

阅读论文:Wide & Deep Learning for Recommender Systems

背景

推荐系统中需要兼顾模型的Memorization和Generalization,文章研究了Wide&Deep的模型来解决上述问题。

Memorization

文中给Memorization的定义如下,个人理解是Memorization实现对训练数据的记忆,因此表现为在训练数据上提高模型的准确率,降低模型bias。

Memorization can be loosely defined as learning the frequent co-occurrence of items or features and exploiting the correlation available in the historical data.

实现Memorization的模型就是线性模型,常输入的特征是原始特征和叉乘特征(cross-product feature)。原始特征定义为:x=[x1,x2,,xd]\mathbf{x}=\left[x_{1}, x_{2}, \ldots, x_{d}\right];叉乘特征定义为:ϕk(x)=i=1dxickicki{0,1}\phi_{k}(\mathbf{x})=\prod_{i=1}^{d} x_{i}^{c_{k i}} \quad c_{k i} \in\{0,1\},其中ckic_{k i}表示叉乘变换ϕk\phi_{k}是否考虑第ii维特征,如果考虑则cki=1c_{k_i}=1,否则cki=0c_{k_i}=0xix_{i}表示第ii维特征(这里特征应该都是01表示)。交叉特征AND(gender=female, language=en)=1当且仅当gender=female和language=en成立。

使用线性模型时,模型解释性强,实现高效,但是具有以下问题

  1. 需要人工设计特征
  2. 无法捕捉未出现的交叉特征对,当没有这些数据时,在训练后无法对新特征值对有较好的预测结果

Generalization

文中给出的Generalization定义如下,个人认为是降低模型的variance。

Generalization, on the other hand, is based on transitivity of correlation and explores new feature combinations that have never or rarely occurred in the past.

可以通过深度神经网络实现Generalization,首先将高维的稀疏特征转化为低维稠密的特征(通过上述变换,可以捕捉特征之间的相关性,学习的embedding具有一定的语义信息)。

查询项矩阵是稀疏且高阶的(例如用户具有特定的偏好或小范围的吸引力)时,很难学习查询和项的有效低维表示。在这种情况下,大多数查询和项之间应该是没有相关性的,但是embedding导致计算的相似度不为0,出现不是很相关的推荐。

Memorization根据历史行为数据,产生的推荐通常和用户已有行为的物品直接相关的物品。而Generalization会学习新的特征组合,提高推荐物品的多样性。 论文作者结合两者的优点,提出了一个新的学习算法——Wide & Deep Learning,其中Wide & Deep分别对应Memorization & Generalization。

模型

模型的结果如下图所示,其中Wide Models即为线性模型,Deep Models首先通过全连接层将稀疏特征转化为embedding,然后通过多层神经网络输出为一个值。将Wide Models和Deep Models的值进行线性加权得到最终输出,可以表示为:P(Y=1x)=σ(wwideT[x,ϕ(x)]+wdeepTa(lf)+b)P(Y=1 \mid \mathbf{x})=\sigma\left(\mathbf{w}_{w i d e}^{T}[\mathbf{x}, \phi(\mathbf{x})]+\mathbf{w}_{d e e p}^{T} a^{\left(l_{f}\right)}+b\right),其中ϕ(x)\phi(\mathbf{x})为交叉特征,a(lf)a^{\left(l_{f}\right)}为隐藏层的最后一层,bb为偏置。

在文章实验中,具体模型如下所示,其中连续的特征直接输入到神经网络中,稀疏特征先转化为embedding,然后一起进行concat,Wide Models的输入为交叉特征(在参考资料2中,设置为和搜索排序任务强相关的特征)。

实验

文中通过联合训练来训练模型,在其中讨论到了联合训练和ensemble的区别如下

  1. ensemble需要多模型单独进行训练,训练时模型不知道其他模型的表现结果,联合训练对模型参数一起进行优化
  2. ensemble的结果依赖单个模型结果的好坏,输入为特征、全部交叉特征,因此单个模型需要较多的参数,联合训练中wide部分只需要考虑部分交叉特征,因此模型相对较小

作者通过梯度的反向传播,使用mini-batch stochastic optimization训练参数,对Wide部分使用带L1正则的Follow- the-regularized-leader (FTRL) 算法,对Deep部分使用AdaGrad算法(这里为什么优化算法不同)。

实验具体配置如下:

  • 训练样本约5000亿
  • Categorical 特征(sparse)会有一个过滤阈值,即至少在训练集中出现m次才会被加入
  • Continuous 特征(dense)通过CDF( cumulative distribution function)被归一化到 [0,1] 之间
  • Categorical 特征映射到32维embeddings,和原始Continuous特征共1200维作为NN输入
  • Wide部分只用了一组特征叉乘,即被推荐的app叉乘用户下载的app
  • 线上模型更新时,通过热启动重训练,即使用上次的embeddings和模型参数初始化,加速模型训练

实验结果如下所示,相对于单独的Wide模型和Deep模型,Wide & Deep在线上和线下的结果都更为出色,在线上提升更为明显,作者给出的解释是:离线的数据和标签是较为固定的,在线会存在新的数据和标签,需要从新的用户响应中学习,因此Deep & Wide效果更好(个人觉得这边比较指标不同,但看提升比例感觉不太严谨)。

讨论

模型提出出发点十分清晰,模型效果也得到即很好的验证。个人困惑有:Wide部分输入特征是不是选择一定得是和任务强相关的特征或叉乘特征?除了lr模型外,有没有别的模型可以实现Wide的功能?

参考资料

  1. 详解 Wide & Deep 结构背后的动机
  2. 深度学习在美团搜索广告排序的应用实践