既要宽广,又要深邃,这也行?Google说没问题

更新时间:2017-09-12 09:33:25 点击次数:1587次

CTR预估的常见做法就是广义线性模型,如Logistic Regression,外加特征海洋战术,这样做好处多多:

特征海洋战术让线性模型表现为一个很宽广(Wide)的模型。线性的宽模型要产生非线性效果,主要靠特征组合,尤其是二阶交叉,但如果交叉后的特征没有覆盖样本,那么交叉就然并卵。

近年来,深度学习异军突起,摧城拔寨,战火自然也烧到了推荐系统领域了,用深度神经网络来革“线性模型+特征工程”的命也再自然不过。用这种“精深模型”升级以前的“广博模型”,尤其是深度学习“端到端”的诱惑,让算法工程师们纷纷主动投怀送抱[1]。

深度学习在推荐领域的应用,其大好处就是“洞悉本质般的精深”:的泛化性能,可以给推荐很多惊喜。当然对应的问题就是容易过度泛化,会推荐得看上去像是“找不着北”,就是你们的PM和老板常问的那句话:“不知道怎么推出来的”,可解释性差一点。

既然深度模型有这么大的好处,广度模型也有诸多好处,根据人类的贪婪属性,下一秒就有人问“能都要吗?”,这时候Google站出来冷冷地说:当然。

Google公司去年提出一个新的推荐系统框架级别的解决方案,结合了传统的线性模型和当前火热的深度模型,应用在GooglePlay上的APP推荐,推荐效果提高非常明显[2]。

下面就为大家介绍一下这个方案的关键要素。

整体框架

一个典型的推荐系统架构很类似一个搜索引擎。也是由检索(或称召回)和排序两部构成(图1),这在我们前面的搜索、推荐、广告三者架构能统一吗已经讨论过[3]。不过推荐系统的检索过程并不一定有显式的query,而通常是用户特征和场景特征。

图片描述

图1

推荐系统的“query”,重要的当然就是用户特征,哪些可以做用户特征?并不只是标签和注册资料,可以说“六经注我”,凡是可以“注我”的皆为特征:显式的有标签,注册资料,喜欢过的物品,消费过的物品,在一些维度上的统计值,隐式的有一些话题模型,embedding(如word2vec)等等,并不只是人类可读的那些维度(PS:用户标签被一些擅长忽悠的公司和大众媒体换了个迷惑人的词语,叫做“用户画像”,通常还煞有介事的画成一个“人形”,真担心被有关部门解读为“标签成精”)

本文是关于广度和深度模型的结合,解决的是架构中的“学习”“模型”“排序”这三个地方的问题,所以上面这一段可以不读,当然现在说有点晚了(逃)。

深宽的模型

现在来看看今天的主角:我们把它叫做“深宽模型”(Wide & Deep Model)。

首先,线性模型部分,也就是“宽模型”(图2左边),形式如下:

图片描述

其中:

图片描述

X是特征向量,W是模型参数向量,这个b是线性模型固有的偏见,哦不,偏置。线性模型中常用的特征构造手段就是特征交叉。例如:性别=女 and 语言=英语。就是由两个特征组合交叉而成,只有当“性别=女”取值为1,并且“语言=英语”也取值为1时,这个交叉特征才会取值为1。线性模型的输出这里采用的Logistic Regression。

图片描述

图2

然后,看看深度模型(图2右边)。深度模型其实就是一个前馈神经网络(Feedforward Neural Network)。深度模型对原始的高维稀疏类别型特征,先进行embedding,转换为稠密、低维的实值型向量,转换后的向量维度通常在10-100这个范围。至于怎么embedding,就是随机初始化embedding向量,然后直接扔到整个前馈网络中,用目标函数来优化。

前馈网络中每一个隐藏层激活方式如下:

图片描述

其中l表示第l个隐藏层,f是激活函数,通常选用ReLU(整流线性单元),为什么选用ReLU而不是LR,这个原因主要是LR在误差反向传播时梯度容易饱和(着急上车,来不及解释了,具体请参考任何一本深度学习教材)。ReLU及其他常用激活函数的形状见图3:

图片描述

图3

后,看看两者的融合,示意图见图2的中间部分。深模型和宽模型,由一个logistic regression模型作为终输出单元。训练方法采用Joint Learning,这是什么?就是通常说的端到端(end-to-end),把深模型和宽模型以及终融合的权重放在一个训练流程中,直接对目标函数负责,不存在分阶段训练。它与ensemble方法有区别,ensemble是集成学习,子模型是独立训练的,只在融合阶段才会学习权重。

为了对比试验,Google分别用JointLearning训练“深宽模型”(Wide&Deep),FTRL+L1训练“宽模型”(LR)[4],AdaGrad训练“深模型”(Feedforward Neural Network)。

融合结果以LR模型作为输出:

图片描述

Y是我们要预估的行为,二值变量,如购买,或点击,Google原文是预估是否安装APP。σ是sigmoid函数,W_wide^T是宽模型的权重,Φ(X)是宽模型的组合特征,W_deep^T是应用在深模型输出上的权重,a^((l_f ) )是深模型的后一层输出,b是线性模型的偏见,哦不,偏置。

整个深模型和宽模型的融合在图3的中间部分很好的展示了。

系统实现

整个数据流如图4所示。

图片描述

图4

整个流程分为三大块:数据生成,模型训练,模型应用。

数据生成

数据生成有几个要点:

模型训练

图片描述

图5

整个模型的示意如图5所示。其要点,在深度模型侧:

宽模型侧就是传统的做法:特征交叉组合。

当新的样本集合到来时,先是用上一次的模型来初始化模型参数,然后在此基础上进行训练。

新模型上线前,会先跑一遍,看看会不会出事,算是一个冒烟测试。

列位看官,是不是觉得说起来容易,动手难?没关系,Google已经开源这一套算法了,集成在TensorFlow中[5]。

模型应用

模型验证后,就发布到模型服务器。模型服务,每次网络请求输入的是来自召回模块的APP候选列表以及用户特征,再对输入的每个APP进行评分。评分就是用我们的“深宽模型”进行前馈计算,再按照计算的CTR从高到低排序。

为了让每次请求响应时间在10ms量级,每次并不是串行地对每个候选APP计算,而是多线程并行,将候选APP分成若干并行批量计算。

正因为有这些小的优化点,GooglePlay的APP推荐服务,在峰值时每秒计算千万级的APP。

要点总结

整个模型在线上效果还是不错的(GooglePlay的APP推荐效果,以用户安装为目标)。

图片描述

线上效果直接相对于对照组(纯线性模型+人工特征)有3.9%的提升,但是线下的AUC值提高并不明显,反过来说,AUC值是不是佳的线下评估方式,也是值得我们思考的,毕我们的模型还是要看线上的终效果。

Google将传统的“宽模型”和新的“深模型”结合,是一种工程上的创新。这里简单画一下全文重点:

其中有若干经验可以供我们在实践中参考:

嗯,Wide&Deep Model就是这样一个既博学又精深的Model,意不意外,惊不惊喜?所以,算法工程师们,可以考虑在自己的个性化推荐产品中试试这个Model,别老盯着维秘Model。

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

回到顶部
嘿,我来帮您!