本文是王喆在 AI 前线 开设的原创技术专栏“深度学习 CTR 预估模型实践”的第二篇文章(以下“深度学习 CTR 预估模型实践”简称“深度 CTR 模型”)。专栏第一篇文章回顾:《深度学习CTR预估模型凭什么成为互联网增长的关键?》。重看王喆老师过往精彩文章:《重读 Youtube 深度学习推荐系统论文,字字珠玑,惊为神文》、《YouTube 深度学习推荐系统的十大工程问题》。
上篇专栏文章我们说清楚了一件事情“CTR预估模型是互联网的增长之心”,在互联网永不停歇的增长需求的驱动下,CTR预估模型(以下简称CTR模型)的发展也可谓一日千里,从2010年之前千篇一律的逻辑回归(Logistic Regression,LR),进化到因子分解机(Factorization Machine,FM)、梯度提升树(Gradient Boosting Decision Tree,GBDT),再到2015年之后深度学习的百花齐放,各种模型架构层出不穷。
我想所有从业者谈起深度学习CTR预估模型都有一种莫名的兴奋,但在这之前,认真的回顾前深度学习时代的CTR模型仍是非常必要的。原因有两点:
1、即使是深度学习空前流行的今天,LR、FM等传统CTR模型仍然凭借其可解释性强、轻量级的训练部署要求、便于在线学习等不可替代的优势,拥有大量适用的应用场景。模型的应用不分新旧贵贱,熟悉每种模型的优缺点,能够灵活运用和改进不同的算法模型是算法工程师的基本要求。
2、传统CTR模型是深度学习CTR模型的基础。深度神经网络(Deep Nerual Network,DNN)从一个神经元生发而来,而LR模型正是单一神经元的经典结构;此外,影响力很大的FNN,DeepFM,NFM等深度学习模型更是与传统的FM模型有着千丝万缕的联系;更不要说各种梯度下降方法的一脉相承。所以说传统CTR模型是深度学习模型的地基和入口。
下面,我们用传统CTR模型演化的关系图来正式开始技术部分的内容。
看到上面的关系图,有经验的同学可能已经对各模型的细节和特点如数家珍了。中间位置的LR模型向四个方向的延伸分别代表了传统CTR模型演化的四个方向。
向下为了解决特征交叉的问题,演化出PLOY2,FM,FFM等模型;
向右为了使用模型化、自动化的手段解决之前特征工程的难题,Facebook将LR与GBDT进行结合,提出了GBDT+LR组合模型;
向左Google从online learning的角度解决模型时效性的问题,提出了FTRL;
向上阿里基于样本分组的思路增加模型的非线性,提出了LS-PLM(MLR)模型。
位于正中央的是当之无愧的Logistic Regression。仍记得2012年我刚进入计算广告这个行业的时候,各大中小公司的主流CTR模型无一例外全都是LR模型。LR模型的流行是有三方面原因的,一是数学形式和含义上的支撑;二是人类的直觉和可解释性的原因;三是工程化的需要。
逻辑回归作为广义线性模型的一种,它的假设是因变量y服从伯努利分布。那么在点击率预估这个问题上,“点击”这个事件是否发生就是模型的因变量y。而用户是否点击广告这个问题是一个经典的掷偏心硬币问题,因此CTR模型的因变量显然应该服从伯努利分布。所以采用LR作为CTR 模型是符合“点击”这一事件的物理意义的。
与之相比较,线性回归(Linear Regression)作为广义线性模型的另一个特例,其假设是因变量y服从高斯分布,这明显不是点击这类二分类问题的数学假设。
在了解LR的数学基础后,其目标函数的形式就不再是空中楼阁了,具体的形式如下:
其中x是输入向量,θ 是我们要学习的参数向量。结合CTR模型的问题来说,x就是输入的特征向量,h(x)就是我们最终希望得到的点击率。
2. 人类的直觉和可解释性
直观来讲,LR模型目标函数的形式就是各特征的加权和,再套上sigmoid函数。我们忽略其数学基础(虽然这是其模型成立的本质支撑),仅靠人类的直觉认知也可以一定程度上得出使用LR作为CTR模型的合理性。
使用各特征的加权和是为了综合不同特征对CTR的影响,而由于不同特征的重要程度不一样,所以为不同特征指定不同的权重来代表不同特征的重要程度。最后要套上sigmoid函数,正是希望其值能够映射到0-1之间,使其符合CTR的物理意义。
LR如此符合人类的直觉认知显然有其他的好处,就是模型具有极强的可解释性,算法工程师们可以轻易的解释哪些特征比较重要,在CTR模型的预测有偏差的时候,也可以轻易找到哪些因素影响了最后的结果,如果你有跟运营、产品一起工作的经验的话,更会知道可解释性强是一个模型多么优秀的“品质”。
3.工程化的需要
在互联网公司每天动辄TB级别的数据面前,模型的训练开销就异常重要了。在GPU尚未流行开来的2012年之前,LR模型也凭借其易于并行化、模型简单、训练开销小等特点占据着工程领域的主流。囿于工程团队的限制,即使其他复杂模型的效果有所提升,在没有明显beat LR之前,公司也不会贸然加大计算资源的投入升级CTR模型,这是LR持续流行的另一重要原因。
但LR的表达能力毕竟是非常初级的。在“辛普森悖论”现象的存在下,只用单一特征进行判断,甚至会得出错误的结论。我们用一个简单的“辛普森悖论”的例子来解释一下为什么特征交叉是重要的。
假设下面是某APP男性用户和女性用户点击广告的数据:
男性用户
点击 | 曝光 | 点击率 | |
---|---|---|---|
广告位A | 8 | 530 | 1.51% |
广告位B | 51 | 1520 | 3.36% |
女性用户
点击 | 曝光 | 点击率 | |
---|---|---|---|
广告位A | 201 | 2510 | 8.01% |
广告位B | 92 | 1010 | 9.11% |
透过上面两个表格的数据来看,广告位B无论在男性用户还是女性用户中的点击率都高于广告位A,如果我们作为广告需求方构建的CTR模型够精准,理所应当会把广告预算分配给广告位B,而不是广告位A。
那么我们如果去掉性别这个维度,把数据汇总后会得出什么结论呢?
广告位 | 点击 | 总曝光 | 点击率 |
---|---|---|---|
广告位A | 209 | 3040 | 6.88% |
广告位B | 143 | 2530 | 5.65% |
在汇总结果中,广告位A的点击率居然比广告位B高。我们如果据此进行广告预算的分配,将得出完全相反的结论。可这个结论明显是错误的,广告位A的综合点击率高仅仅是因为其女性用户更多,提高了整体点击率。如果你构建的CTR模型的表达能力不够,很可能被数据“欺骗”。
因此,从“辛普森悖论”中我们能够得出一个结论,低维特征由于对高维特征进行了合并,丢失掉了大量信息。而LR由于只是对单一特征做简单加权,不具备进行特征交叉生成高维特征的能力,所以表达能力是非常初级的。
针对这个问题,当时的算法工程师们经常采用手动组合特征,再通过各种分析手段筛选特征的方法。但这个方法无疑是残忍的,完全不符合“懒惰是程序员的美德”这一金科玉律。更遗憾的是,人类的经验往往有局限性,程序员的时间和精力也无法支撑其找到最优的特征组合。因此采用 PLOY2模型进行特征的“暴力”组合成为了可行的选择。
在上面POLY2二阶部分的目标函数中(上式省略一阶部分和sigmoid函数的部分),我们可以看到POLY2对所有特征进行了两两交叉,并对所有的特征组合赋予了权重wh(j1, j2)。POLY2无疑通过暴力组合特征的方式一定程度上解决了特征组合的问题。并且由于本质上仍是线性模型,其训练方法与LR并无区别,便于工程上的兼容。
但POLY2这一模型同时存在着两个巨大的缺陷:
由于在处理互联网数据时,经常采用one-hot的方法处理id类数据,致使特征向量极度稀疏,POLY2进行无选择的特征交叉使原本就非常稀疏的特征向量更加稀疏,使得大部分交叉特征的权重缺乏有效的数据进行训练,无法收敛。
权重参数的数量由n直接上升到n2,极大增加了训练复杂度。
为了解决POLY2模型的缺陷,2010年Rendle提出了FM(Factorization Machine)。
从FM的目标函数的二阶部分中我们可以看到,相比POLY2,主要区别是用两个向量的内积(wj1 · wj2)取代了单一的权重wh(j1, j2)。具体来说,FM为每个特征学习了一个隐权重向量(latent vector),在特征交叉时,使用两个特征隐向量的内积作为交叉特征的权重。
通过引入特征隐向量的方式,直接把原先n2级别的权重参数数量减低到了nk(k为隐向量维度,n\u0026gt;\u0026gt;k)。在训练过程中,又可以通过转换目标函数形式的方法,使FM的训练复杂度减低到nk级别。相比POLY2极大降低训练开销。
隐向量的引入还使得FM比POLY2能够更好的解决数据稀疏性的问题。举例来说,我们有两个特征,分别是channel和brand,一个训练样本的feature组合是(ESPN, Adidas),在POLY2中,只有当ESPN和Adidas同时出现在一个训练样本中时,模型才能学到这个组合特征对应的权重。而在FM中,ESPN的隐向量也可以通过(ESPN, Gucci)这个样本学到,Adidas的隐向量也可以通过(NBC, Adidas)学到,这大大降低了模型对于数据稀疏性的要求。甚至对于一个从未出现过的特征组合(NBC, Gucci),由于模型之前已经分别学习过NBC和Gucci的隐向量,FM也具备了计算该特征组合权重的能力,这是POLY2无法实现的。也许FM相比POLY2丢失了某些信息的记忆能力,但是泛化能力大大提高,这对于互联网的数据特点是非常重要的。
工程方面,FM同样可以用梯度下降进行学习的特点使其不失实时性和灵活性。相比之后深度学习模型复杂的网络结构导致难以线上serving的问题,FM比较容易实现的inference过程也使其没有serving的难题。因此FM在2012-2014年前后逐渐成为业界CTR模型的主流。
2015年,基于FM提出的FFM(Field-aware Factorization Machine ,简称FFM)在多项CTR预估大赛中一举夺魁,并随后被Criteo、美团等公司深度应用在CTR预估,推荐系统领域。相比FM模型,FFM模型主要引入了Field-aware这一概念,使模型的表达能力更强。
上式是FFM的目标函数的二阶部分。其与FM目标函数的区别就在于隐向量由原来的wj1变成了wj1,f2,这就意味着每个特征对应的不是一个隐向量,而是对应着不同域的一组隐向量,当xj1特征与xj2特征进行交叉时,xj1特征会从xj1的一组隐向量中挑出与特征xj2的域f2对应的隐向量wj1,f2进行交叉。同理xj2也会用与xj1的域f1对应的隐向量进行交叉。
那么这里所说的“域”代表着什么呢?
简单来讲“域”代表着特征域,域内的特征一般会采用one-hot编码形成one-hot特征向量。
我们通过Criteo FFM论文的中一个例子来更具体的说明FFM的过程。假设我们在训练CTR模型过程中接收到下面这个样本。
其中,Publisher,Advertiser,Gender就是三个特征域。ESPN、NIKE、Male分别是这三个特征域的特征。那么,如果按照原FM的原理,ESPN与NIKE、以及ESPN与Male做交叉的权重应该是
大家肯定已经注意到,由于交叉特征域的改变,ESPN的隐向量由wESPN,A换成了wESPN,G 。
FFM模型学习每个特征在f个域上的k维隐向量,交叉特征的权重由特征在对方特征域上的隐向量内积得到,权重数量共nkf个。在训练方面,由于FFM的二次项并不能够像FM那样简化,因此其复杂度为kn2。
相比FM,FFM由于引入了field这一概念,为模型引入了更多有价值信息,使模型表达能力更强,但与此同时,FFM的计算复杂度上升到kn2,远远大于FM的k*n。
本章我们沿着传统CTR模型演化图中黄色的部分,朝着特征交叉的演化方向,依次介绍了LR、POLY2,FM和FFM四个模型。
我们再用图示方法回顾一下从POLY2到FM,再到FFM进行特征交叉方法的不同。
POLY2模型直接学习每个交叉特征的权重,权重数量共n2个。
FM模型学习每个特征的k维隐向量,交叉特征由相应特征隐向量的内积得到,权重数量共n*k个。
FFM模型引入了特征域这一概念,在做特征交叉时,每个特征选择与对方域对应的隐向量做内积运算得到交叉特征的权重。参数数量共nkf个。
但无论怎样FFM只能够做到二阶的特征交叉,如果要继续提高特征交叉的维度,不可避免的会发生组合爆炸和计算复杂度过高的情况。
下一节的专栏文章将回顾模型演化图中蓝色部分的模型。我将沿着特征工程的角度带大家一起回顾Facebook的CTR模型GBDT+LR,并从时效性的角度看看Google是如何使用FTRL解决模型online learning问题的,最后介绍阿里的LS-PLM,看其是如何从样本聚类的动机出发为传统线性模型引入非线性能力的。期待与大家继续探讨CTR预估模型的内容。
《深度学习CTR预估模型实践》专栏内容回顾:
王喆,毕业于清华大学计算机系,现在美国最大的smartTV公司Roku任 senior machine learning engineer,曾任hulu senior research SDE,7年计算广告、推荐系统领域业界经验,相关专利3项,论文7篇,《机器学习实践指南》、《百面机器学习》作者之一。知乎专栏/微信公众号:王喆的机器学习笔记。