Wide and Deep Learning(1)原理

部分转载于https://blog.csdn.net/sxf1061926959/article/details/78440220
https://blog.csdn.net/google19890102/article/details/78171283
论文连接:https://arxiv.org/pdf/1606.07792.pdf

一、译文:
(1)摘要:
通过将稀疏数据的非线性转化特征应用在广义线性模型中被广泛应用于大规模的回归和分类问题。通过广泛的使用交叉特征转化,使得特征交互的记忆性是有效的,并且具有可解释性,而然不得不做许多的特征工作。相对来说,通过从稀疏数据中学习低纬稠密embedding特征,并应用到深度学习中,只需要少量的特征工程就能对潜在的特征组合具有更好的范化性。但是当用户项目交互是稀疏和高纬数据的时候,利用了embeddings的深度学习则表现得过于笼统(over-generalize),推荐的都是些相关性很低的items。在这篇文章中,我们提出了一个wide and deep 联合学习模型,去结合集合推荐系统的memorization和generalization。我们评估在Google Play上评估了该方法,在线实验结果显示,相比于单个的wide或者deep模型,WD模型显著的增加了app获取率。我们在tensorflow上开源了该源码。
(2)介绍:
推荐系统可以被看做是一个搜索排序系统,其中输入的query是一系列的用户和文本信息,输出是items的排序列表。给定一个query,推荐的任务就是到数据库中去找出相关的items,然后对这些items根据相关对象,如点击或者购买行为,进行排序。和传统的搜索排序问题一样,在推荐系统中,一个挑战就是区域同时达到memorization和generalization。Memorization可以被大概定义为学习items或者features之间的相关频率,在历史数据中探索相关性的可行性。Generalizaion的话则是基于相关性的传递,去探索一些在过去没有出现过的特征组合。 基于memorization的推荐相对来说具有局部性,是在哪些用户和items已经有直接相关联的活动上。相较于memorization,generalization尝试去提高推荐items的多元化。在这篇paper中,我们主要关注Google Play 商店的app推荐问题,但是该方法对推荐系统具有通用性。
在工业中,对于大规模的在线推荐和排序系统,想逻辑回归这样的广义线性模型应用是相当广泛的,简单,伸缩性好,可解释性强。可以喂给它一些one-hot编码的稀疏特征,比如二值特征‘user_installed_app=netfix’表示用户安装了Netflix。Memorization则可以通过对稀疏特征做交叉积转换获得,就是求交叉特征,比如AND操作 (user_installed_app= netflix, impression_app=pandora )这两个特征,当用户安装了Netflix并且之后展示在Pandora上,那么得到特征的值为1,其余为0.这个交叉特征就展示了特征对之间的相关性和目标lable之间的关联。Generalization可以通过增加一些粗粒度的特征实现,如AND(user_installed_category=video, impression_category=music ),但是这写都是需要手工做特征工程实现。交叉积转换的一个限制就是他们不能生成从未在训练数据中出现过的query-item特征对。
像FM或者DNN,这种基于embedding的模型,是对预先没出现的query-item特征对有一定范化性,通过为每个query和item特征学习一个低纬稠密的embedding向量,而且不需要太多的特征工程。但是如果潜在的query-item矩阵是稀疏,高秩的话,为query和items学习出一个有效的低纬表示往往很困难,比如基于特殊爱好的users,或者一些很少出现的小众items。在这种情况下,大多数的query-item没有交互,但是稠密的embedding还是会对全部的query-item对有非零的输出预测,因此能做出一些过范化和做出一些不太相关的推荐。另一方面,利用交叉积特征的线性模型能用很少的参数记住那些‘exception_rules’。
在这篇paper里,我们提出一个wide&Deep学习框架,以此来同时在一个模型中获得Memorization和generalization,并联合训练之。
本文的主要贡献:
1.联合训练使用了embedding的深度网络和使用了交叉特征的线性模型。
2.WD系统在Google Play上投入使用。
3.在Tensrolfow开源代码。
尽管idea简单,但是wd显著的提高了app获取率,且速度也还可以。

(3)推荐系统概述:
在这里插入图片描述
图2展示了app推荐系统的概括图。
query:当用户访问app store的时候生成的许多用户和文本特征。
推荐系统返回一个app列表(也被叫做展示(impressions)),然后用户能在这些展示的app上进行确切的操作,比如点击或者购买。这些用户活动,以及queries和impressions都被记录下来作为训练数据。
因为数据库中有过百万的apps,所以对全部的app计算score不合理。因此,收到一个query的第一步是retrieval(检索)。检索系统返回一个items的短列表,这个列表是通过机器学习和人工定义的大量标记找出来的,和query最匹配的一个app列表。然后减少了候选池后,排序系统通过对这些items按score再对其进行排序。而这个scores通常就是给定的特征x下,用户行为y的概率值
P(y|x)。特征x包括一些用户特征(国家,语言。。。),文本特征(设备。使用时长。。。)和展示特征(app历史统计数据。。。)。在本论文中,我们主要关注的是将WD模型用户排序系统。

(4)WIDE&DEEP LEARNING
The Wide Component
模型中Wide模块是一个形如y=WTX+b 的广义线性模型,如图1左所示。y是预测值,X=[x1,x2,…,xd]
是d维特征的一个向量,其中W=[w1,w2,…,wd] 是模型的参数,b是偏置项。特征集包含了原始输入特征和转化后的特征。其中最重要的就是交叉积转换特征,可以被定义为:
在这里插入图片描述
其中cki 是一个boolean值变量,当第i个特征是第k个转换ϕk,否则的就是0。对于一个二进制特征,交叉积特征可以简单理解为AND(gender=female,language=en),当且仅当gender=female,language=en时,交叉特征为1,其他都为0。该方法能捕捉出特征间的交互,为模型添加非线性。

The Deep Component
通过将Wide模块和Deep模块的对数加权输出作为预测值,然后将其fed给一个常规的逻辑损失函数中,用于联合训练。需要注意的是,联合训练和ensemble是由区别滴。在集成方法中,模型都是独立训练的,模型之间没有关系,他们的预测输出只在最后才合并。但是,联合训练的话,两个模型是一起训练所有参数。对于模型大小来说,集成方法,因为模型之间独立,所以单个模型的大小需要更大,即需要更多的特征和特征工程。以此起来获得合理的精度。但是联合训练,两个模块只要互相补充对方不足即可。WD模型的联合训练通过反向传播将输出值的误差梯度通过最小批随机梯度同时传送给Wide和Deep模块。在实验中,我们使用带L1的FTRL算法作为wide模块的优化器,使AdaGrad更新deep模块。结合的模型在图1(中)。对于逻辑回归问题,我们模型的预测是:P(Y=1∣X)=σ(WTwide[X,ϕ(X)]+WTdeepalf+b) (3)其中Y是一个二值的类别标签,σ() 是sigmoid函数,ϕ(x)表示交叉特征,b是一个bias项,Wwide 是Wide模型的权值,Wdeep 是应用在最后的隐藏层输出上的权值。

Data Generation:
app推荐主要由三个阶段组成,data generation,model training,model serving。图3所示。
数据生成阶段,就是把之前的用户和app展示数据用于生成训练数据。每个样本对应一个展示,标签是app acquisition:如果展示的app被安装了则为1,否则为0。Vacabularies,是一些将类别特征字符串映射为整型的ID。系统计算为哪些出现超过设置的最小次数的字符串特征计算ID空间。连续的实值特征通过映射特征x到它的累积分布P(X<=x),将其标准化到[0,1],然后在离散到nq个分位数。这些分位数边界也是在该阶段计算获得。
在这里插入图片描述

Model Training:
我们在实验中所用的模型结构展示在图4中。训练阶段,我们的输入层吸收训练数据,词汇,生成稀疏和稠密特征。Wide模块包含用户安装的app和展示的app的交叉特征。对于深度模块,我们为每个类别特征学习了32维的emedding特征。并将全部的embedding特征串联起来,获得一个近似1200维的稠密向量。并将该向量传入3层的RELU隐层,最终获得逻辑输出单元。WD将被训练在超过5000亿的样本上。每次一个新的训练数据达到,模型需要重新训练。但是,重新训练费时费力。为了克服这个挑战,我们实现了一个热启动系统,我们使用预先的模型权值去初始化新模型权值。在加载模型到模型server之前,为确保模型在实时情况下不会出现问题,我们对模型进行了预先模拟。

Model Serving
一旦模型完成训练和验证,我们就将它放到模型server中。对每次请求,server都会从app检索系统获得一个app候选集,然后,对这些app利用模型计算的成绩排序,我们再按该顺序显示app。为了使得能在10ms内响应请求,我们利用多线程并行运行小批次数据来代替对全部候选集在单个batch上打分,一次优化时间。

二、分析

在这里插入图片描述

(1)对Wide和 Deep和Wide&&Deep 的理解:
Wide模型:主要运用线性的model去解决问题,这里的问题是数据是极其稀疏的,导致我们需要大量的进行特征工程(通过使用交叉特征转化)基于交叉特征的线性模型只能从历史出现过的数据中找到非线性(显性的非线性)
wide模型找特征的方法:一个是one-hot,比较稀疏。一个是交叉特征,简单的说就是AND,就是特征之间做笛卡尔积。用于线性模型去寻找显性的非线性。

Wide模型如上图中的左侧的图所示,实际上,Wide模型就是一个广义线性模型:y=wTx+b
其中,特征x=[x1,x2,⋯,xd]是一个d维的向量(生成的交叉特征),w=[w1,w2,⋯,wd] 为模型的参数。最终在y的基础上增加Sigmoid函数作为最终的输出。

Deep模型:主要运用DNN的模型来解决问题,可以不经常大量特征工程,就可以对潜在特征组合精选表达和解释,但数据是稀疏且高维的时候,神经网络表达过于笼统,并推荐不太相关的项目。推荐不了精确的items。
讲了下深度网络需要的特征,embedding特征,就是把稀疏数据映射到稠密的低纬数据。

Deep模型如上图中的右侧的图所示,实际上,Deep模型是一个前馈神经网络。深度神经网络模型通常需要的输入是连续的稠密特征,对于稀疏,高维的类别特征,通常首先将其转换为低维的向量,这个过程也成为embedding。
隐含层的计算方法为:a(l+1)=f(W(l)a(l)+b(l))
其中,f称为激活函数,如ReLUs。

Wide&&Deep:提出了一个结合使用了非线性特征的线性模型和一个用来embedding特征的深度学习,并且使用联合训练的方法进行优化。思想是,基于交叉特征的线性模型只能从历史出现过的数据中找到非线性(显性的非线性),深度学习可以找到没有出现过的非线性(隐形的非线性)。

联合训练是指同时训练Wide模型和Deep模型,并将两个模型的结果的加权和作为最终的预测结果:
在这里插入图片描述
一个是联合训练,就是一起训练呗,一个是优化器,分别为FTRL和AdaGrad。最后是将两个模型的输出加起来。Wdeep 其实就是隐藏层到输出层的权值。

(2)对memorization 和 generalization的理解:
memorization:主要wide模型所具备的特性,因为需要大量的进行特征工程,可以得到特征特征之间的关系。它可以被大概定义为学习items或者features之间的相关频率,在历史数据中探索相关性的可行性。基于memorization的推荐相对来说具有局部性,是在哪些用户和items已经有直接相关联的活动上。即从历史数据中发现item或者特征之间的相关性。
generalization:主要deep模型所具备的特性,Generalizaion的话则是基于相关性的传递,去探索一些在过去没有出现过的特征组合。generalization尝试去提高推荐items的多元化。即相关性的传递,发现在历史数据中很少或者没有出现的新的特征组合。

(3)核心思想:
wide and deep 模型的核心思想是结合线性模型的记忆能力(memorization)和 DNN 模型的泛化能力(generalization),在训练过程中同时优化两个模型的参数,从而达到整体模型的预测能力最优。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值