GBDT是如何成为推荐系统顶级工具人的?

c423d9b7fa68f3126056708a2282fec1.png

文 | 水哥
源 | 知乎

Saying

1. 集成学习的ensemble注意一定要读作昂三姆包而不是印三姆包,一天一个算法工程师装x小技巧
2. 区别bagging和boosting的准则是,先训练的模型对于后训练的模型是否有影响
3. GBDT中,B(boosting)组成头部,这是该方法的核心,G(Gradient)组成躯干,决定大方向上的选型,DT(Decision Tree)组成腿部,想换就可以换掉
4. Facebook把GBDT用在推荐里的重点是为了自动地找出特征的归类方式,并没有说明树模型在推荐中优于LR,但是说明树模型是顶级工具人

这是 从零单排推荐系统 系列的第14讲,这一讲和下一讲我们合起来把树模型在推荐中的使用讲清楚。在推荐领域里,树模型属于是来得快,去得也快。Facebook最开始发表Practical Lessons from Predicting Clicks on Ads at Facebook[1]的时候,大家都觉得很新奇很有意思,但是这个时间点DNN已经开始攻城略地了。到了embedding+DNN称霸的现在,还没有什么特别好的方案能把树模型和DNN结合在一起。时至今日,GBDT还可以作为一个很好的分桶工具,而它的升级版XGBoost和LightGBM则是以另一个形式活在推荐系统中。

如果是一个没有背景知识的同学,面对GBDT这四个字母可能有点懵,我们首先来拆解一下这四个字母都代表什么:

DT:Decision Tree

就是决策树,具体来说,Facebook的论文里面使用CART作为决策树。决策树的内容比较基础这里就不赘述了。但是它完成了两件事:(1)非线性的分类,(2)分桶。分桶的这个性质非常重要,属于是无心插柳式的点了。

B:Boosting

Boosting和树模型总是一起出现的,本质原因是树模型往往比较弱,而当我们不满足一个模型的能力,想要用多个模型来融合达到最佳结果,这种方法就是集成学习,即ensemble learning。而ensemble learning又可以分为两种:bagging和boosting,如下图所示:

57ef0255cb74f542db2342c32c63b290.png

黄色的圆表示数据点,蓝色立方体是模型,而问号则是目标。问号的深浅表示这步需要拟合的难度。

  • bagging:使用多个模型来共同完成目标。目标不会拆解,在训练时,每一个模型的任务都是拟合目标,在部署时,可以简单把决策加起来或者投票。数据上,有时候为了让模型的侧重点不同,每个模型用的特征或数据不一样。前面讲过的MoE可以算是bagging,而random forest就算是典型的bagging了。

  • boosting:使用多个模型来拟合目标,目标是循序渐进的,即后面的模型学习前面模型没学到的部分。数据上可以做区分。这一族的算法比较著名的是AdaBoost,还有这一讲要讲的Gradient Boosting Machine(GBM)。

如果对于第个样本,模型的输出和真实label分别是 和 ,我们把损失函数表示为。最终的决策可以表示为:

一共有 个模型,模型用 来表示。从部署上来看,boosting和bagging没有区别,都是一堆弱分类器决策加起来形成更强的结果。但是对于boosting,前面出错的样本在后面会增大权重,即前后是互相影响的,而bagging的各个模型几乎是独立的。

GB:Gradient Boosting (Machine)

对于Gradient Boosting来说,每一步中,都新训练一个模型,而这个模型学习的是之前所有结果综合后,仍然距离目标的误差

其中之前模型的结果合起来就是 ,所以其实等价于让 学习 和 之间相差的部分,也可称之为残差。公式最后的 表示正则部分。

简单起见(也符合这部分技术发展的历史)我们用MSE loss来代入 ,那么忽略掉正则项之后,loss就变成了 ,前面括号里的计算结果就是残差了,可见这个loss实际上就是希望 。另一方面,如果对 求导,则有:

所以这么看下来就要求 ,我们似乎可以得到结论:后面加的每一个函数,就是拟合在前一步的时候的负梯度。 但是要注意的是,上面的推导其实是省略了正则项的,如果加上正则项,希望的 的结果一定会变,不会再次严格等于负梯度。

那为什么后续的方法还是按照负梯度来呢?

GBM中Gradient的含义
这个问题在知乎上也有一些争论:gbdt的残差为什么用负梯度代替?(https://www.zhihu.com/question/63560633)
有一部分人认为负梯度是下降方向,所以一定是对的,另一部分人认为和泰勒展开有关系
其实《Gradient boosting machines, a tutorial》[2]这篇文章就明确说了:In practice, given some specific loss function and/or a custom base-learner , the solution to the parameter estimates can be difficult to obtain. To deal with this, it was proposed to choose a new function to be the most parallel to the negative gradient along the observed data.
所以说白了就一句话,也没想那么多,就是负梯度简单好用,而且也不差

其实在XGBoost[3]这篇文章其实还给出了一个理由:每次计算新的结果的时候,上一步的结果和梯度是可以提前算好的,那岂不是不用白不用?

GBDT:组装积木

所以知道了DT,B,GB分别是什么之后,GBDT就好理解了:就是在GBM中吧模型换成决策树就好了。

但是这一讲得重点是我们要理解,为什么Facebook使用了GBDT?

要理解这一点,我们要从特征的处理来讲起。在一个推荐模型中,特征最方便的用法是给一个ID,或者用One-hot来表示,这样可以很容易和前面讲的逻辑回归(LR)结合使用。但是对于连续值特征(比如这个用户已经累计登陆了多少天),值是不可以穷举的,要把它们加入到模型中去,比较常见的做法是分桶(bucketize)。例如对与用户累计登录的天数,划分0-1天是一档,1-7是一档,7-30,30-180,180-365,365+各有一档。这样这个特征就一定可以表示为这六者之一。但是问题是这个桶的边如何才能切的很好呢?可能有同学说,我可以做个统计,选择最有信息量的切法。但是这个分布其实是动态变化的,又保证能够跟得上呢?

不只是连续特征有问题,离散的特征也有问题。比如item ID,可能有很多商品长得都没啥差距,仅仅是代理商换了一下,ID就不一样。这些ID可能出现的次数还很稀疏,如果给这些ID都分配空间也是比较占空间且低效的,我可不可以做一些压缩,一堆弟弟ID就放到一个ID的桶里面好了呢?

理解了上面的两个问题,就可以理解GBDT用在这里的动机:对于item ID这个特征,就单独对它用决策树训练一下点击率,在决策树分裂的过程中自动地就会决定一些ID是不是在同一个叶子节点中,做到某个深度之后就停止,然后这个叶子节点的序号就成为新的ID。也就是说,在这里使用GBDT,其实只是当做一个更高级一点的分桶的工具

补充一下原论文的图来举一个例子:

5777cf239b31f48b10572121fe91d87c.png

item ID现在有5个,第一棵树用来转换这个特征,在做决策的过程中,3号落入第一个叶子节点,1,2落入第二个叶子节点,4,5在第三个里面。那么输入3之后,压缩后的item ID现在是1了,同理,1,2现在都是2,4,5变为3.

接下来每一棵树处理一种特征,以此类推,刚好就有了boosting的过程。在这个算法中,分为两个步骤,训练好的GBDT仅仅用来转换特征。转换完成的特征仍然使用LR来进行分类,GBDT只是一个变换/压缩特征的工具人罢了。文章中也给出了比较,直接使用GBDT来分类效果并不会更好。

其实我们也不用在GBDT上面扣得太细,归纳一下就是GBDT是学过的决策树的升级版本,而更进一步的版本是XGBoost和LightGBM,如果我们在哪个环节需要一个树模型,直接调用它们就好了

延迟转化初窥

Practical Lessons from Predicting Clicks on Ads at Facebook 还讨论了一个问题,所有样本一曝光的时候都只能默认是负样本,只有点击了发生,才能变成正样本。我们就有一个难点:一方面,我们是一个online learning的系统,为了能做更好的预估,我们希望样本马上反馈到训练环节上;但是另一方面,等待有可能的样本变成正样本是需要时间的,如果等的时间太短就发送,可能会把正样本误判成负样本。

这个问题在转化(CVR)预估的时候非常常见,比如游戏下载,下载完了才算转化,但是下载的时间可能会非常长,你不能等到几个小时之后才发送样本吧?这就是延迟转化的问题,具体我们留到难点篇来讲。

在本文中是简单的用一个时间窗来记录,在这个窗口之内转变的正样本才记录。所以这也是比较直接的一个做法。如果等待的窗口时间设的特别长,那么我们的online learning就会越来越向线下退化,极端情况下,可能第二天才能学习第一天完整的结果。但是根据我们的复读机理论,没有快速把能点击的ID记下来,一定会在性能表现上吃亏。反之,如果时间窗口设定的太小,在模型看来,有些本来应该是正样本的现在都是负样本了,负样本比例升高,模型输出的CTR,CVR就会变低,造成低估。

下期预告

推荐系统精排之锋(9):embedding亦福亦祸,XGBoost与LightGBM的新机遇

往期回顾

1.召回 粗排 精排,如何各司其职?

2.拍不完的脑袋:推荐系统打压保送重排策略

3.简单复读机LR如何成为推荐系统精排之锋?

4.召回粗排精排-级联漏斗(上)

5.召回粗排精排-级联漏斗(下)

6.推荐系统精排:看阿里妈妈再试线性模型

7.推荐精排之锋:FM的一小步,泛化的一大步

8.推荐中使用FNN/PNN/ONN/NFM优化特征交叉

9.聊聊推荐系统的高阶特征交叉问题

10.真正的高阶特征交叉:xDeepFM与DCN-V2

5e83d5acd975196b2798720f9acc026f.png后台回复关键词【入群

加入卖萌屋NLP/IR/Rec与求职讨论群

后台回复关键词【顶会

获取ACL、CIKM等各大顶会论文集!

bce2709cb4fb5477bc77cb9df25af4b4.gif 6cb43a0e8ae2cf2473d5cfb451a774d2.png

[1] Practical Lessons from Predicting Clicks on Ads at Facebook,ADKDD,2014
https://research.fb.com/wp-content/uploads/2016/11/practical-lessons-from-predicting-clicks-on-ads-at-facebook.pdf

[2] Gradient boosting machines, a tutorial
https://www.frontiersin.org/articles/10.3389/fnbot.2013.00021/full

[3] XGBoost: A Scalable Tree Boosting System,KDD,2016
https://www.kdd.org/kdd2016/papers/files/rfp0697-chenAemb.pdf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/477807.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

会议交流 | 如何提升推荐系统的可解释性?——DataFunSummit2022知识图谱在线峰会...

背景介绍知识图谱及特征学习结合智能推荐,可解决数据稀疏性及冷启动问题,更好的提升推荐决策场的准确性、多样性及可解释性,进而提升各个场景的推荐决策效率和体验。3月12日13:30-16:50,在DataFunSummit2022:知识图谱在…

LeetCode 143. 重排链表(链表反转+快慢指针)

1. 题目 给定一个单链表 L:L0→L1→…→Ln-1→Ln , 将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→… 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 给定链表 1->2->3->4, 重新排列为…

论文浅尝 | 采用成对编码的图卷积网络用于知识图谱补全

笔记整理:姚祯,浙江大学在读硕士,研究方向为知识图谱表示学习,图神经网络。论文引用:Liu S, Grau B, Horrocks I, et al. INDIGO: GNN-based inductive knowledge graph completion using pair-wise encoding[J]. Adva…

调研了下 AI 作曲,顺便做了期视频...快进来听歌!

文 | 白鹡鸰编 | 小轶视频 | 白鹡鸰嗨,大家好!这里是卖萌屋,我是白鹡鸰。今天和大家聊聊人工智能作曲。人工智能在音乐领域的应用已经非常常见了,像听歌识曲、曲风分类、自动扒谱等等,而 利用机器来替代人类作曲 &…

LeetCode 1275. 找出井字棋的获胜者(位运算)

1. 题目 A 和 B 在一个 3 x 3 的网格上玩井字棋。 井字棋游戏的规则如下: 玩家轮流将棋子放在空方格 (" ") 上。第一个玩家 A 总是用 “X” 作为棋子,而第二个玩家 B 总是用 “O” 作为棋子。“X” 和 “O” 只能放在空方格中,而…

论文浅尝 | DSKReG:基于关系GNN的推荐知识图谱可微抽样

笔记整理:李爽,天津大学硕士链接:https://dl.acm.org/doi/pdf/10.1145/3459637.3482092动机在信息爆炸的时代,推荐系统被广泛研究和应用,以发现用户的偏好信息。RS在冷启动时性能较差,如果将知识图谱(Knowl…

数据开放平台的配置管理

背景 美团是数据驱动的技术公司, 非常重视使用数据的效率。为了达到这个目标,我们将数据以开放平台的形式开放给需求方。例如,帮助需求方开发报表的报表开放平台,帮助需求方获取数据的自助查询平台,让需求方参与数据建…

LeetCode 1271. 十六进制魔术数字(进制转换)

1. 题目 你有一个十进制数字,请按照此规则将它变成「十六进制魔术数字」:首先将它变成字母大写的十六进制字符串,然后将所有的数字 0 变成字母 O ,将数字 1 变成字母 I 。 如果一个数字在转换后只包含 {“A”, “B”, “C”, “…

评测任务征集 | 全国知识图谱与语义计算大会(CCKS 2022)

评测任务征集全国知识图谱与语义计算大会(CCKS 2022)2022年8月25-28日,秦皇岛http://sigkg.cn/ccks2022/全国知识图谱与语义计算大会(CCKS: China Conference on Knowledge Graph and SemanticComputing)由中国中文信息…

SegmentFault 美团云采访实录

约半年前,美团悄然上线了美团云(Meituan Open Services,简称MOS),这是美团网根据自身虚拟化平台开发和运维经验开放的云计算服务,类似AWS。 美团 CEO 王兴可能是中国最知名的连续创业者,曾创办校…

开局一段扯,数据全靠编?真被一篇“神论文”气到了

文 | 苏剑林(追一科技)编 | 智商掉了一地看来以后我们看论文的时候,不仅要关心论文成绩的可复现性,还要留意它们的求和、均值、方差等有没有算错,否则真的是“无奇不有”!!这篇文章谈一下笔者被…

LeetCode 147. 对链表进行插入排序(链表)

1. 题目 对链表进行插入排序。 插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。 每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到…

征稿 | 软件学报专刊征文:知识赋能的信息系统

伴随着人工智能的浪潮,智慧信息系统的发展方兴未艾,正处于由感知智能到认知智能转变的关键时期。要实现认知智能的系统跃升,离不开知识的赋能。在数字化转型背景下,数据对象和交互方式的日益丰富和变化,对以知识图谱为…

基于Flume的美团日志收集系统(二)改进和优化

在《基于Flume的美团日志收集系统(一)架构和设计》中,我们详述了基于Flume的美团日志收集系统的架构设计,以及为什么做这样的设计。在本节中,我们将会讲述在实际部署和使用过程中遇到的问题,对Flume的功能改进和对系统做的优化。 …

LeetCode 462. 最少移动次数使数组元素相等 II(数学)

1. 题目 给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1。 您可以假设数组的长度最多为10000。 例如: 输入: [1,2,3] 输出: 2说明: 只有两个动作是必要的(记得每一步仅可…

embedding亦福亦祸?XGBoost与LightGBM的新机遇

文 | 水哥源 | 知乎Saying1. 小的性能差异在容易实现面前一文不值,这一点是XGBoost和LightGBM的最大优势2. 没能与embedding很好地结合无疑是树模型的灾难,吃不下巨量的新数据,也打不过DNN,除了一些规模比较小的公司,树…

论文浅尝 - ACL2022 | 面向推理阅读理解的神经符号方法

转载公众号 | 南大Websoft概述近两年来NLP领域出现了一些富有挑战性的机器阅读理解数据集,如ReClor和LogiQA。这两个数据集中的问题需要对文本进行逻辑推理,然而传统的神经模型不足以进行逻辑推理,传统的符号推理器不能直接应用于文本。为了应…

LeetCode 1026. 节点与其祖先之间的最大差值(二叉树DFS)

1. 题目 给定二叉树的根节点 root,找出存在于不同节点 A 和 B 之间的最大值 V,其中 V |A.val - B.val|,且 A 是 B 的祖先。 (如果 A 的任何子节点之一为 B,或者 A 的任何子节点是 B 的祖先,那么我们认为…

凭“难听”上热搜的 idol 们,不如考虑下让 Transformer 帮您作曲?

视频制作 | 白鹡鸰编 | 小轶考虑到 “AI 音乐”这一主题的特殊性,唯有多媒体的视频形式才能更好地给大家带来视听上的多重感受。于是,小屋的白鸟鸟同学在科研间隙连续肝了好几个晚上,才得以完成这次视频。然而在上周的推送中,不知…

YUI3在美团的实践

美团网在2010年引爆了团购行业,并在2012年销售额超过55亿,实现了全面盈利。在业务规模不断增长的背后,作为研发队伍中和用户最接近的前端团队承担着非常大的压力,比如用户量急剧上升带来的产品多样化,业务运营系统的界…