《推荐系统》-Wide&Deep

1、背景

Wide and deep 模型是 TensorFlow 在 2016 年 6 月左右发布的一类用于分类和回归的模型,并应用到了 Google Play 的应用推荐中。wide and deep 模型的核心思想是结合线性模型的记忆能力(memorization)和 DNN 模型的泛化能力(generalization),在训练过程中同时优化 2 个模型的参数,从而达到整体模型的预测能力最优。

记忆(memorization)即从历史数据中发现item或者特征之间的相关性。

泛化(generalization)即相关性的传递,发现在历史数据中很少或者没有出现的新的特征组合。

2、原理

2.1、网络结构

在这里插入图片描述
图1、The spectrum of Wide & Deep models

可以认为:WideDeep = LR + DNN

2.2、推荐系统

在这里插入图片描述
图2、Overview of the recommender system

流程:

1、query召回 100 个 相关的items;

2、根据query+items+用户日志学习排序模型;

3、利用 2 的模型,对 1 中召回的items排序,先去top10 推荐给用户。

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

user features (e.g., country, language, demographics);

contextual features (e.g., device, hour of the day, day of the week);

impression features (e.g., app age, historical statistics of an app)。

2.3 The Wide Component

wide部分就是LR,具有着 y = W T x + b y=W^Tx+b y=WTx+b的形式,如图1(左)所示, x = [ x 1 , x 1 , . . . , x d ] x=[x_{1},x_{1},...,x_{d} ] x=[x1,x1,...,xd]是d个特征对应的向量, w = [ w 1 , w 2 , . . . , w d ] w=[w_{1}, w_{2},...,w_{d}] w=[w1,w2,...,wd]是模型参数,b是模型偏差。特征集合包括原始输入特征(raw input features)和变化得到的特征(transformed features)。其中一个最为重要的变换是外积变换(cross-product transformation),它被定义为:

ϕ k ( x ) = ∏ i = 1 d x i c k , i , c k , i ∈ { 0 , 1 } \phi_{k}(x)= \prod_{i=1}^d x_{i}^{c_{k,i}} , {c_{k,i}}\in \left\{ 0,1\right\} ϕk(x)=i=1dxick,i,ck,i{0,1}

其中, c k , i c_{k,i} ck,i是一个bool型变量,在第k个变换 ϕ k { \phi_k} ϕk包含第i个特征时为1,否则为0。对于二进制特征,当且仅当所有组成特征(“gender=female” 和 “language=en”)都为1时值为1,否则为0。这将捕获到二进制特征间的交互,并向广义线性模型中添加非线性项。

2.4 The Deep Component

在这里插入图片描述
图3、Deep model structure

3、Deep model structure
deep部分是一个前馈神经网络,如图3所示。对于连续性特征可直接输入模型。对于类别型特征,原始输入是特征字符串(如“language=en”),需要embeding后输入模型。这些稀疏、高维的类别型特征首先被转化为低维稠密实值向量,通常被称为嵌入向量。嵌入向量的维度通常在到间O(10)到O(100)。在模型训练阶段,嵌入向量被随机初始化并根据最小化最终的损失函数来学习向量参数。这些低维稠密嵌入向量随后在神经网络的前馈通路中被输入到隐藏层中。特别地,每个隐藏层进行了如下计算:
x l + 1 = f ( W ( l ) a ( l ) + b ( l ) ) x^{l+1}=f(W^{(l)} a^{(l)}+b^{(l)} ) xl+1=f(W(l)a(l)+b(l))

其中,l是层的序号,f是激活函数,通常为ReLU。 a ( l ) a^{(l)} a(l) b ( l ) b^{(l)} b(l) W ( l ) W^{(l)} W(l) 分别为l层的激活、偏差和模型权重。

2.5 Wide和Deep模型的协同训练

wide模块和deep模块的组合依赖于对其输出的对数几率(log odds)的加权求和作为预测,随后这一预测值被输入到一个一般逻辑损失函数(logistic loss function)中进行联合训练。需注意的是,联合训练(joint training)和拼装(ensemble)是有区别的。在拼装时,独立模型是分别训练的,它们的预测结果是在最终推断结果时组合在一起的,而不是在训练的时候。作为对比,联合训练是在训练环节同时优化wide模型、deep模型以及它们总和的权重。在模型大小上也有不同:对拼装而言,由于训练是解耦的,独立模型常常需要比较大(如更多的特征和变换)来达到足够合理的准确度用于模型拼装;作为对比,联合训练中wide部分只需要补充deep部分的弱点,即只需要少量的外积特征变换而不是全部的wide模型。

对Wide&Deep模型的联合训练通过同时对输出向模型的wide和deep两部分进行梯度的反向传播(back propagating)来实现的,这其中应用了小批量随机优化(mini-batch stochastic optimization)的技术。在实验中,我们使用了FTRL(Follow-the-regularized-leader)算法以及使用L1正则化来优化wide部分的模型,并使用AdaGrad优化deep部分。

模型的预测是:
P ( Y = 1 ∣ x ) = σ ( W w i d e T [ X , ϕ ( X ) ] + W d e e p T a ( l f ) + b ) P(Y=1|x)=\sigma (W_{wide}^T[X,\phi (X)] + W_{deep}^Ta^{(l_{f} )}+b ) P(Y=1x)=σ(WwideT[X,ϕ(X)]+WdeepTa(lf)+b)

其中,Y是二进制标签, σ ( . ) \sigma(.) σ(.)是sigmoid函数, ϕ ( x ) \phi(x) ϕ(x)是原特征x的外积变换,b是偏差项, W w i d e W_{wide} Wwide是所有wide模型的权重向量, W d e e p {W_{deep}} Wdeep是作用在最终激活 a l f a^{l_{f} } alf的权重。

3、论文总结

记忆和泛化对推荐系统都很重要。Wide线性模型可通过外积特征变换有效记忆稀疏特征交互信息,而深度神经网络可通过低维嵌入技术对未见过的特征交互进行泛化。我们呈现了Wide&Deep学习框架来结合两个模型的优势。我们在大规模商业应用商店Google Play的推荐系统中实践并评估了这一框架。线上实验结果表明,相对于仅Wide和仅Deep模型,Wide&Deep模型对APP获取指标有着显著提升。参考文献:

论文:Wide&Deep

中译文:Wide & Deep Learning for Recommender Systems / 中译文

代码:https://github.com/tensorflow/tensorflow/blob/r1.3/tensorflow/examples/learn/wide_n_deep_tutorial.py

FTRL:https://zhuanlan.zhihu.com/p/32903540

AdaGrad:https://zhuanlan.zhihu.com/p/29920135

推荐好文: 深度学习在CTR预估中的应用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值