Wide & Deep

1.背景

Wide and deep 模型是 TensorFlow 在 2016 年 6 月左右发布的一类用于分类和回归的模型,并应用到了 Google Play 的应用推荐中。wide and deep 模型的核心思想是结合线性模型的记忆能力(memorization)和 DNN 模型的泛化能力(generalization),在训练过程中同时优化 2 个模型的参数,从而达到整体模型的预测能力最优。
记忆(memorization)即从历史数据中发现item或者特征之间的相关性。
泛化(generalization)即相关性的传递,发现在历史数据中很少或者没有出现的新的特征组合。

2.原理

2.1 网络结构

Wide & Deep_第1张图片

可以认为:WideDeep = LR + DNN

2.2 推荐系统

Wide & Deep_第2张图片

流程:

  1. query召回 100 个 相关的items;
  2. 根据query+items+用户日志学习排序模型;
  3. 利用 2 的模型,对 1 中召回的items排序,先去top10 推荐给用户;

论文主要讲排序的部分,排序时使用到的特征:

  1. user features (e.g., country, language, demographics);
  2. contextual features (e.g., device, hour of the day, day of the week);
  3. impression features (e.g., app age, historical statistics of an app).

2.3 The Wide Component

wide部分就是LR,LR的输入特征包括了原始特征和交叉特征;
交叉特征的定义:


Wide & Deep_第3张图片

在论文中,当x_i = 1 x_j = 1 其他值都是 0 时,就添加一个交叉特征 1 ,由于输入的x是one-hot类型,交叉特征可以理解为任意两个特征的乘积。

2.4 The Deep Component

Deep部分就是一个MLP,隐藏层的激活函数使用了ReLUs = max(0, a)。MLP的输入包括了连续的特征和 embedding特征,对于每个field embedding特征采样随机初始化的方式。

2.5 joint training

Wide & Deep_第4张图片

joint training指同时训练Wide模型和Deep模型,并将两个模型的结果的加权作为最终的预测结果:



在论文实验中,训练部分,Wide使用Follow-the-regularized-learder(FTRL)+L1正则, Deep使用了AdaGrad。

2.6 实验结果:

Wide & Deep_第5张图片

wide和deep 对于推荐系统都很重要。 Wide 线性模型可以通过交叉特征记忆稀疏特征;Deep模型可以通过embedding 生成看不见的特征。

3.源码

tf 没有使用过,最近计划好好研究一下。

4.参考文献

  1. 论文地址:https://arxiv.org/pdf/1606.07792.pdf
  2. 代码:https://github.com/tensorflow/tensorflow/blob/r1.3/tensorflow/examples/learn/wide_n_deep_tutorial.py
  3. FTRL:https://zhuanlan.zhihu.com/p/32903540
  4. AdaGrad:https://zhuanlan.zhihu.com/p/29920135

你可能感兴趣的:(Wide & Deep)