\n\n本文是王喆在 AI 前线 开设的原创技术专栏“深度学习 CTR 预估模型实践”的第三篇文章(以下“深度学习 CTR 预估模型实践”简称“深度 CTR 模型”)。回顾王喆老师过往精彩文章:《重读 Youtube 深度学习推荐系统论文,字字珠玑,惊为神文》、《YouTube 深度学习推荐系统的十大工程问题》。
\n
在上篇专栏文章《前深度学习时代CTR预估模型的演化之路——从LR到FFM》中,我们沿着特征交叉这条发展路线,回顾了从LR到POLY2,FM,再到FFM的CTR模型演化过程。但任何问题的观察角度都不是唯一的,CTR模型更是如此,本文将继续探索前深度学习时代的CTR模型,从特征工程模型化的角度回顾Facebook的CTR模型——GBDT+LR,从时效性的角度学习Google是如何使用FTRL解决模型online learning问题的,最后从样本聚类的动机出发介绍阿里的LS-PLM CTR模型。
\n在介绍细节之前,我们再次回到前深度学习时代的CTR模型关系图,熟悉各个模型在演化过程中的位置,其中黄色的部分是上篇专栏文章介绍的模型,蓝色部分将是这篇文章的主要内容。
\nGBDT+LR——特征工程模型化的开端
\n上篇文章介绍的FFM模型采用引入特征域的方式增强了模型的表达能力,但无论如何,FFM只能够做二阶的特征交叉,如果要继续提高特征交叉的维度,不可避免的会发生组合爆炸和计算复杂度过高的情况。那么有没有其他的方法可以有效的处理高维特征组合和筛选的问题?2014年,Facebook提出了基于GBDT+LR组合模型的解决方案。
\n简而言之,Facebook提出了一种利用GBDT自动进行特征筛选和组合,进而生成新的离散特征向量,再把该特征向量当作LR模型输入,预估CTR的模型结构。
\n需要强调的是,用GBDT构建特征工程,和利用LR预估CTR两步是独立训练的。所以自然不存在如何将LR的梯度回传到GBDT这类复杂的问题,而利用LR预估CTR的过程在上篇文章中已经有所介绍,在此不再赘述,下面着重讲解如何利用GBDT构建新的特征向量。
\n大家知道,GBDT是由多棵回归树组成的树林,后一棵树利用前面树林的结果与真实结果的残差做为拟合目标。每棵树生成的过程是一棵标准的回归树生成过程,因此每个节点的分裂是一个自然的特征选择的过程,而多层节点的结构自然进行了有效的特征组合,也就非常高效的解决了过去非常棘手的特征选择和特征组合的问题。
\n利用训练集训练好GBDT模型之后,就可以利用该模型完成从原始特征向量到新的离散型特征向量的转化。具体过程是这样的,一个训练样本在输入GBDT的某一子树后,会根据每个节点的规则最终落入某一叶子节点,那么我们把该叶子节点置为1,其他叶子节点置为0,所有叶子节点组成的向量即形成了该棵树的特征向量,把GBDT所有子树的特征向量连接起来,即形成了后续LR输入的特征向量。
\n举例来说,如上图所示,GBDT由三颗子树构成,每个子树有4个叶子节点,一个训练样本进来后,先后落入“子树1”的第3个叶节点中,那么特征向量就是[0,0,1,0],“子树2”的第1个叶节点,特征向量为[1,0,0,0],“子树3”的第4个叶节点,特征向量为[0,0,0,1],最后连接所有特征向量,形成最终的特征向量[0,0,1,0,1,0,0,0,0,0,0,1]。
\n由于决策树的结构特点,事实上,决策树的深度就决定了特征交叉的维度。如果决策树的深度为4,通过三次节点分裂,最终的叶节点实际上是进行了3阶特征组合后的结果,如此强的特征组合能力显然是FM系的模型不具备的。但由于GBDT容易产生过拟合,以及GBDT这种特征转换方式实际上丢失了大量特征的数值信息,因此我们不能简单说GBDT由于特征交叉的能力更强,效果就比FFM好,在模型的选择和调试上,永远都是多种因素综合作用的结果。
\nGBDT+LR比FM重要的意义在于,它大大推进了特征工程模型化这一重要趋势,某种意义上来说,之后深度学习的各类网络结构,以及embedding技术的应用,都是这一趋势的延续。
\n在之前所有的模型演化过程中,实际上是从特征工程这一角度来推演的。接下来,我们从时效性这个角度出发,看一看模型的更新频率是如何影响模型效果的。
\n在模型更新这个问题上,我们的直觉是模型的训练时间和serving时间之间的间隔越短,模型的效果越好,为了证明这一点,facebook的工程师还是做了一组实效性的实验(如上图),在结束模型的训练之后,观察了其后6天的模型loss(这里采用normalized entropy作为loss)。可以看出,模型的loss在第0天之后就有所上升,特别是第2天过后显著上升。因此daily update的模型相比weekly update的模型效果肯定是有大幅提升的。
\n如果说日更新的模型比周更新的模型的效果提升显著,我们有没有方法实时引入模型的效果反馈数据,做到模型的实时更新从而进一步提升CTR模型的效果呢?Google 2013年应用的FTRL给了我们答案。
\nFTRL——天下武功,唯快不破
\nFTRL的全称是Follow-the-regularized-Leader,是一种在线实时训练模型的方法,Google在2010年提出了FTRL的思路,2013年实现了FTRL的工程化,之后快速成为online learning的主流方法。与模型演化图中的其他模型不同,FTRL本质上是模型的训练方法。虽然Google的工程化方案是针对LR模型的,但理论上FTRL可以应用在FM,NN等任何通过梯度下降训练的模型上。
\n为了更清楚的认识FTRL,这里对梯度下降方法做一个简要的介绍。从训练样本的规模角度来说,梯度下降可以分为:batch,mini-batch,SGD(随机梯度下降)三种,batch方法每次都使用全量训练样本计算本次迭代的梯度方向,mini-batch使用一小部分样本进行迭代,而SGD每次只利用一个样本计算梯度。对于online learning来说,为了进行实时得将最新产生的样本反馈到模型中,SGD无疑是最合适的训练方式。
\n但SGD对于互利网广告和推荐的场景来说,有比较大的缺陷,就是难以产生稀疏解。为什么稀疏解对于CTR模型如此重要呢?
\n之前我们已经多次强调,由于one hot等id类特征处理方法导致广告和推荐场景下的样本特征向量极度稀疏,维度极高,动辄达到百万、千万量级。为了不割裂特征选择和模型训练两个步骤,如果能够在保证精度的前提下尽可能多的让模型的参数权重为0,那么我们就可以自动过滤掉这些权重为0的特征,生成一个“轻量级”的模型。“轻量级”的模型不仅会使样本部署的成本大大降低,而且可以极大降低模型inference的计算延迟。这就是模型稀疏性的重要之处。
\n而SGD由于每次迭代只选取一个样本,梯度下降的方向虽然总体朝向全局最优解,但微观上的运动的过程呈现布朗运动的形式,这就导致SGD会使几乎所有特征的权重非零。即使加入L1正则化项,由于CPU浮点运算的结果很难精确的得到0的结果,也不会完全解决SGD稀疏性差的问题。就是在这样的前提下,FTRL几乎完美地解决了模型精度和模型稀疏性兼顾的训练问题。
\n但FTRL的提出也并不是一蹴而就的。如上图所示,FTRL的提出经历了下面几个关键的过程:
\n- \n
- \n
从最近简单的SGD到OGD(online gradient descent),OGD通过引入L1正则化简单解决稀疏性问题;
\n\n - \n
从OGD到截断梯度法,通过暴力截断小数值梯度的方法保证模型的稀疏性,但损失了梯度下降的效率和精度;
\n\n - \n
FOBOS(Forward-Backward Splitting),google和伯克利对OGD做进一步改进,09年提出了保证精度并兼顾稀疏性的FOBOS方法;
\n\n - \n
RDA:微软抛弃了梯度下降这条路,独辟蹊径提出了正则对偶平均来进行online learning的方法,其特点是稀疏性极佳,但损失了部分精度。
\n\n - \n
Google综合FOBOS在精度上的优势和RDA在稀疏性上的优势,将二者的形式进行了进一步统一,提出并应用FTRL,使FOBOS和RDA均成为了FTRL在特定条件下的特殊形式。
\n\n
FTRL的算法细节对于初学者来说仍然是晦涩的,建议非专业的同学仅了解其特点和应用场景即可。对算法的数学形式和实现细节感兴趣的同学,我强烈推荐微博 冯扬 写的“在线最优化求解”一文,希望能够帮助大家进一步熟悉FTRL的技术细节。
\nLS-PLM——阿里曾经的主流CTR模型
\n本文的第三个模型,我们从样本pattern本身来入手,介绍阿里的的LS-PLM(Large Scale Piece-wise Linear Model),它的另一个更广为人知的名字是MLR(Mixed Logistic Regression)。MLR模型虽然在2017年才公之于众,但其早在2012年就是阿里主流的CTR模型,并且在深度学习模型提出之前长时间应用于阿里的各类广告场景。
\n本质上,MLR可以看做是对LR的自然推广,它在LR的基础上采用分而治之的思路,先对样本进行分片,再在样本分片中应用LR进行CTR预估。在LR的基础上加入聚类的思想,其动机其实来源于对计算广告领域样本特点的观察 。
\n举例来说,如果CTR模型要预估的是女性受众点击女装广告的CTR,显然我们并不希望把男性用户点击数码类产品的样本数据也考虑进来,因为这样的样本不仅对于女性购买女装这样的广告场景毫无相关性,甚至会在模型训练过程中扰乱相关特征的权重。为了让CTR模型对不同用户群体,不用用户场景更有针对性,其实理想的方法是先对全量样本进行聚类,再对每个分类施以LR模型进行CTR预估。MLR的实现思路就是由该动机产生的。
\nMLR目标函数的数学形式如上式,首先用聚类函数π对样本进行分类(这里的π采用了softmax函数,对样本进行多分类),再用LR模型计算样本在分片中具体的CTR,然后将二者进行相乘后加和。
\n其中超参数分片数m可以较好地平衡模型的拟合与推广能力。当m=1时MLR就退化为普通的LR,m越大模型的拟合能力越强,但是模型参数规模随m线性增长,相应所需的训练样本也随之增长。在实践中,阿里给出了m的经验值为12。
\n下图中MLR模型用4个分片可以完美地拟合出数据中的菱形分类面。
\nMLR算法适合于工业级的广告、推荐等大规模稀疏数据场景问题。主要是由于表达能力强、稀疏性高等两个优势:
\n- \n
- \n
端到端的非线性学习:从模型端自动挖掘数据中蕴藏的非线性模式,省去了大量的人工特征设计,这使得MLR算法可以端到端地完成训练,在不同场景中的迁移和应用非常轻松。
\n\n - \n
稀疏性:MLR在建模时引入了L1和L2,1范数,可以使得最终训练出来的模型具有较高的稀疏度,模型的学习和在线预测性能更好。
\n\n
如果我们用深度学习的眼光来看待MLR这个模型,其在结构上已经很接近由输入层、单隐层、输出层组成的神经网络。所以某种意义上说,MLR也在用自己的方式逐渐逼近深度学习的大门了。
\n深度学习CTR模型的前夜
\n2010年FM被提出,特征交叉的概念被引入CTR模型;2012年MLR在阿里大规模应用,其结构十分接近三层神经网络;2014年Facebook用GBDT处理特征,揭开了特征工程模型化的篇章。这些概念都将在深度学习CTR模型中继续应用,持续发光。
\n另一边,Alex Krizhevsky 2012年提出了引爆整个深度学习浪潮的AlexNet,深度学习的大幕正式拉开,其应用逐渐从图像扩展到语音,再到NLP领域,推荐和广告也必然会紧随其后,投入深度学习的大潮之中。
\n2016年,随着FNN、Deep\u0026amp;Wide、Deep crossing等一大批优秀的CTR模型框架的提出,深度学习CTR模型逐渐席卷了推荐和广告领域,成为新一代CTR模型当之无愧的主流。下一篇文章,我们将继续探讨深度学习CTR模型,从模型演化的角度揭开所有主流深度学习CTR模型之间的关系和每个模型的特点,期待继续与你一同学习讨论。
\n《深度学习 CTR 预估模型实践》专栏内容回顾:
\n- \n
- \n\n\n
- \n\n\n
作者介绍
\n王喆,毕业于清华大学计算机系,现在美国最大的smartTV公司Roku任 senior machine learning engineer,曾任hulu senior research SDE,7年计算广告、推荐系统领域业界经验,相关专利3项,论文7篇,《机器学习实践指南》、《百面机器学习》作者之一。知乎专栏/微信公众号:王喆的机器学习笔记。
\n更多内容,请关注AI前线
\n