CTR
预估模型主要用于搜索、推荐、计算广告等领域的 CTR
预估,其发展经历了传统 CTR
预估模型、神经网络CTR
预估模型。
传统 CTR
预估模型包括:逻辑回归LR
模型、因子分解机FM
模型、梯度提升树 GBDT
模型等。其优点是:可解释性强、训练和部署方便、便于在线学习。
本章主要介绍传统 CTR
预估模型。
在 cost-per-click:CPC
广告中广告主按点击付费。为了最大化平台收入和用户体验,广告平台必须预测广告的 CTR
,称作 predict CTR: pCTR
。对每个用户的每次搜索query
,有多个满足条件的广告同时参与竞争。只有 pCTR x bid price
最大的广告才能竞争获胜,从而最大化 eCPM
:
基于最大似然准则可以通过广告的历史表现得统计来计算 pCTR
。假设广告曝光了 100
次,其中发生点击 5
次,则 pCTR = 5%
。其背后的假设是:忽略表现出周期性行为或者不一致行为的广告,随着广告的不断曝光每个广告都会收敛到一个潜在的真实点击率 。
这种计算 pCTR
的方式对于新广告或者刚刚投放的广告问题较大:
新广告没有历史投放信息,其曝光和点击的次数均为 0
。
刚刚投放的广告,曝光次数和点击次数都很低,因此这种方式计算的 pCTR
波动非常大。
如:一个真实 CTR
为 5%
的广告必须曝光 1000
次才有 85%
的信心认为 pCTR
与真实 CTR
的绝对误差在1%
以内。真实点击率越低,则要求的曝光次数越多。
为解决这个问题,论文 《Predicting Clicks: Estimating the Click-Through Rate for New Ads》
提出利用 LR
模型来预测新广告的CTR
。
从经验上来看:广告在页面上的位置越靠后,用户浏览它的概率越低。因此广告被点击的概率取决于两个因素:广告被浏览的概率、广告浏览后被点击的概率。
因此有:
假设:
在广告被浏览(即:曝光)到的情况下,广告被点击的概率与其位置无关,仅与广告内容有关。
广告被浏览的概率与广告内容无关,仅与广告位置有关。
广告可能被拉取(推送到用户的页面),但是可能未被曝光(未被用户浏览到)。
则有:
第一项 就是我们关注和预测的 CTR
。
第二项与广告无关,是广告位置(即:广告位)的固有属性。
可以通过经验来估计这一项:统计该广告位的总拉取次数 ,以及总曝光次数 ,则:
这也称作广告位的曝光拉取比。
通常广告主会为一个订单 order
给出多个竞价词 term
,如:
xxxxxxxxxx
41Title: Buy shoes now,
2Text: Shop at our discount shoe warehouse!
3Url: shoes.com
4Terms: {buy shoes, shoes, cheap shoes}.
此时广告系统会为每个竞价词生成一个广告,每个广告对应相同的Title/Text/Url
、但是不同的竞价词。
数据集包含 1
万个广告主,超过 1
百万个广告、超过 50
万竞价词(去重之后超过 10
万个竞价词)。注意,不同的竞价词可能会展示相同的广告。
样本的特征从广告基本属性中抽取(抽取方式参考后续小节)。广告的基本属性包括:
landing page
落地页:点击广告之后将要跳转的页面的 url
。bid term
:广告的竞价词。title
:广告标题。body
:广告的内容正文。display url
:位于广告底部的、给用户展示的 url
。clicks
:广告历史被点击的次数。views
:广告历史被浏览的次数。将每个广告的真实点击率 CTR
来作为 label
。
考虑到真实点击率 CTR
无法计算,因此根据每个广告的累计曝光次数、累计点击次数从而得到其经验点击率 来作为 CTR
。
为了防止信息泄露,训练集、验证集、测试集按照广告主维度来拆分。最终训练集包含 70%
广告主、验证集包含 10%
广告主、测试集包含 20%
广告主。每个广告主随机选择它的 1000
个广告,从而确保足够的多样性。
因为同一个广告主的广告之间的内容、素材、风格相似度比较高,点击率也比较接近。
对于有专业投放管理的那些优质广告主,在数据集中剔除它们。因为:
优质广告主的广告通常表现出不同于普通广告主的行为:
广告平台更关注于普通广告主,因为这些普通广告主的数量远远超过优质广告主的数量,而且这些普通广告主更需要平台的帮助。
对于曝光量少于100
的广告,在数据集中剔除它们。因为我们使用经验点击率 来近似真实 CTR
来作为 label
,对于曝光次数较少的广告二者可能相差很远,这将导致整个训练和测试过程中产生大量噪音。
曝光阈值的选取不能太大,也不能太小:
label
中的噪音太多。gap
,导致在线预测效果较差。论文将 CTR
预估问题视作一个回归问题,采用逻辑回归 LR
模型来建模,因为 LR
模型的输出是在 0
到 1
之间。
其中 表示从广告中抽取的第 个特征(如广告标题的单词数量), 为该特征对应的权重。采用负号的原因是使得权重、特征和 pCTR
正相关:权重越大则 pCTR
越大。
模型通过 limited-memory Broyden-Fletcher-Goldfarb-Shanno:L-BFGS
算法来训练。
模型的损失函数为交叉熵:
权重通过均值为零、方差为 的高斯分布来随机初始化。其中 为超参数,其取值集合为 [0.01,0.03,0.1,0.3,1,3,10,30,100]
,并通过验证集来选取最佳的值。
通过实验发现, 的效果最好。
论文采取了一些通用的特征预处理方法:
模型添加了一个bias feature
,该特征的取值恒定为 1
。即:将偏置项 视为 。
对于每个特征 ,人工构造额外的两个非线性特征::, 。加 1
是防止 取值为0
。
对所有特征执行标准化,标准化为均值为 0
、方差为1
。
注意:对于验证集、测试集的标准化过程中,每个特征的均值、方差使用训练集上的结果。
对所有特征执行异常值截断:对于每个特征,任何超过均值 5
个标准差的量都被截断为 5
个标准差。
如:特征 的均值为 20
,方差为 2
。则该特征上任何大于30
的值被截断为 30
、任何小于 10
的值被截断为 10
。
注意:对于验证集、测试集的异常值截断过程中,每个特征的均值、方差使用训练集上的结果。
评价标准:
baseline
:采用训练集所有广告的平均 CTR
作为测试集所有广告的 pCTR
。
即:测试集里无论哪个广告,都预测其 CTR
为一个固定值,该值就是训练集所有广告的平均 CTR
。
评估指标:测试集上每个广告的 pCTR
和真实点击率的平均 KL
散度。
KL
散度衡量了 和真实点击率之间的偏离程度。一个理想的模型,其 KL
散度为 0
,表示预估点击率和真实点击率完全匹配。
为了更好的进行指标比较,论文实验中也给出了测试集的 MSE
(均方误差)指标。
模型不仅可以用于预测新广告的 pCTR
,还可以为客户提供优化广告的建议。
可以根据模型特征及其重要性来给广告主提供创建广告的建议,如:广告标题太短建议增加长度。
不同竞价词的平均点击率存在明显的差异,因此在预测某个广告的点击率时,相同竞价词的其它类似广告可能有所帮助。
因此论文对此提出两个特征,称作相同竞价词特征集 Term CTR Feature Set
。
对于广告 ad
的竞价词 term
(记作 )
针对该 term
竞价的其它广告主所有广告的数量:
由于同一个广告主的不同广告之间相关性比较强,因此这里用其它广告主的广告作为特征来源。否则容易出现信息泄露。
针对该 term
竞价的其它广告主的广告点击率(经过归一化):
其中:
是训练集上所有广告的平均点击率
是针对该 term
竞价的其它广告主所有广告的数量
是针对该 term
竞价的其它广告主所有广告的平均点击率
是平滑系数,为了防止某些新的 term
出现导致 。如果不采取平滑,则有 。
代表了term
竞价的广告数量的先验强度,默认取值为 1
。
实验发现,结果对 的取值不敏感。
模型新增这两个特征的实验结果如下图所示,可见 term ctr feature set
使得评估指标 “平均 KL
散度” 提升了 13.28%
。
预测某个广告的点击率时,相关竞价词的其它类似广告可能也有所帮助。
如:广告 a
的竞价词是 “电脑”,广告 b
的竞价词是 “买电脑”,则广告 b
的点击率对于预测广告 a
的点击率是有帮助的。
考虑竞价词的子集/超集。
给定一个竞价词 t
,定义其相关广告集合为 (一个竞价词term
可能包含多个单词word
,这里不考虑word
之间的词序):
如:t
是 red shoes
buy red shoes
,则该广告属于t
的 shoes
,则该广告属于 t
的 red shoes
,则该广告属于t
的 blue shoes
,则该广告属于t
的 由 的定义可知:
term
和 t
完全匹配。term
比 t
少了 个单词之外其它单词完全相同(不考虑词序)。term
比 t
多了 个单词之外其它单词完全相同(不考虑词序)。假设 *
为任意数值,则定义:
t
的任何超集(不考虑词序)作为竞价term
的广告的集合。t
的任何子集(不考虑词序)作为竞价term
的广告的集合。定义相关竞价词的一组特征,它们称为相关竞价词特征集 Related Term CTR Feature Set
:
在 term
相关的竞价词上竞价的其它广告主所有广告的数量:
在 term
相关的竞价词上竞价的其它广告主所有广告的平均点击率:
其中 表示广告 x
的真实点击率。
和 Term CTR Feature Set
一样,这里也采用平滑:
其中 表示平滑系数。
论文中采取了 一共 5x5=25
种组合,得到 25 x 2 =50
个 related term ctr
特征。测试集的 “平均 KL
散度” 表明:采用这一组特征之后,取得了接近 20%
的提升。
即使是同一个竞价term
,不同广告的点击率也存在显著差异。从经验来看,至少有五种粗略的要素影响用户是否点击:
外观 Appearance
:外观是否美观。
吸引力 Attention Capture
:广告是否吸引眼球。
声誉 Reputation
:广告主是否知名品牌。
落地页质量 Landing page quality
:点击广告之后的落地页是否高质量。
虽然用户只有点击之后才能看到落地页,但是我们假设这些落地页是用户熟悉的广告主(如
ebay, amazon
),因此用户在点击之前就已经熟知落地页的信息。
相关性 Relevance
:广告与用户 query
词是否相关。
针对每个要素,论文给出一些特征:
外观Appearance
:
吸引力 Attention Capture
:
购买 buy
、加入join
、订阅subscribe
等等。声誉Reputation
:
底部展示的 URL
是否以 .com/.net/.org/.edu
结尾。
底部展示的的 url
多长。
底部展示的url
分为几个部分。
如
books.com
只有两部分,它比books.something.com
更好。
底部展示的url
是否包含破折号或者数字。
因为好的、短的 .com
域名比较贵,因此 url
体现了广告主的实力。
落地页质量Landing page quality
:
flash
。W3C
。相关性 Relevance
:
最终在这 5
个要素种抽取了 81
个特征。
某些特征可以出现在多个要素里,如:广告内容中美元符号数量。该特征可能会增加吸引力,但是会降低外观。
除了以上5
个内容要素,还有一个重要的内容要素:广告文本的单词。
我们统计广告标题和正文中出现的 top 10000
个单词,将这1
万个单词出现与否作为 unigram
特征。因为某些单词更容易吸引用户点击,因此unigram
特征能够弥补注意力要素遗漏的特征。
注意:构造特征时,标题和正文的
unigram
分别进行构造。即:单词是否出现在标题中、单词是否出现在正文中。
如下所示:单词 shipping
更倾向于在高 CTR
广告中出现,这意味着 shipping
更容易吸引用户点击。图中的三条曲线从上到下依次代表:
CTR
广告中出现的平均频次。CTR
广告中出现的平均频次。以上5个内容要素,以及 unigram
特征一起构成了广告质量特征集 Ad Quality Feature Set
。结果表明:
该组特征能够显著提升性能,将测试集的 “平均 KL
散度” 提升约 3.8 %
。
考虑去掉 unigram
特征,结果表明:
5
个因素的 81
个特征能够提升约 1.1 %
。unigram
特征能够提升约 2.7 %
。有的订单定向比较窄。如:
xxxxxxxxxx
41Title: Buy shoes now,
2Text: Shop at our discount shoe warehouse!
3Url: shoes.com
4Terms: {buy shoes, shoes, cheap shoes}.
该订单的竞价词都和 shoes
相关,定向比较狭窄。
而有的订单定向比较宽,如:
xxxxxxxxxx
41Title: Buy [term] now,
2Text: Shop at our discount warehouse!
3Url: store.com
4Terms: {shoes, TVs, grass, paint}
该订单的竞价词不仅包含shoes
,还包括 TV
、grass
等等。
我们预期:定向越宽的订单,其平均CTR
越低;定向越窄的订单,其平均CTR
越高。
为了考虑捕捉同一个订单内不同广告的联系,论文提出了订单维度特征集 Order Specificity Feature Set
。
同一个订单中,去重之后不同竞价词term
的数量:
同一个订单中,竞价词 term
的类别分布。分布越集中,定向越窄;分布越分散,定向越宽。
term
,并通过文本分类算法对搜索结果进行分类,将每个竞价词term
划分到 74
个类别中。term
的类别熵,并将类别熵作为特征。采用该特征集之后,测试集的 “平均 KL
散度” 提升约 5.5 %
。
事实上可以通过使用外部数据来构造特征。
如:给定一个竞价词term
,可以通维基百科来判断它是否是一个众所周知的词,也可以通过同义词词库来查找其同义词等等。
因此构建外部搜索数据特征集 Search Data Feature Set
,其中包括:
每个竞价词term
,网络上该 term
出现的频率。
这可以利用搜索引擎的搜索结果中包含该 term
的网页数量来初略估计。
每个竞价词term
,搜索引擎的query
中出现该term
的频率。
这可以用近三个月搜索引擎的搜索日志中,query
里出现该 term
的数量来粗略估计。
这两个特征离散化为 20
个桶,仔细划分桶边界使得每个桶具有相同数量的广告。
单独采用该特征集之后,测试集的 “平均 KL
散度” 提升约 3.1 %
。但是融合了前面提到的特征之后没有任何改进,这意味着该特征集相比前面的几个特征集是冗余的。
当独立的考虑每个feature set
时,测试集的 “平均 KL
散度” 提升效果如下:
related term ctr feature set
:19.67%
。ad quality feature set
:12.0%
。unigram features along
:10.2%
。order specificity feature set
:8.9%
。search data feature set
:3.1%
。有几个特征探索方向:
可以将广告的竞价词 term
进行聚类,从而提供广告之间的关系。这是从语义上分析竞价词term
的相似性。这组特征称作 Related Term Feature Set
。
可以基于用户的 query
来构造特征。
在完全匹配条件下竞价词和用户搜索词完全相同,但是在更宽松的匹配下竞价词和搜索词可能存在某种更广义的关联。此时了解搜索词的内容有助于预测广告的点击率。
因此可以基于用户的搜索词 query term
来构建特征,如: query term
和 bid term
相似度、 query term
的单词数、query term
出现在广告标题/广告正文/落地页的频次。
可以将落地页的静态排名和动态排名信息加入特征。如:用户访问落地页或者域名的频率、用户在落地页停留的时间、用户在落地页是否点击回退等等。
一个推荐的做法是:在模型中包含尽可能多的特征。这带来两个好处:
更多的特征带来更多的信息,从而帮助模型对于广告点击率预测的更准。
更多的特征带来一定的冗余度,可以防止对抗攻击。
广告主有动力来攻击特征来欺骗模型,从而提升广告的 pCTR
,使得他的广告每次排名都靠前。
假设模型只有一个特征,该特征是 ”竞价词是否出现在标题“ 。广告主可以刻意将竞价词放置到广告标题,从而骗取较高的 pCTR
。
一旦模型有多个特征,那么广告主必须同时攻击这些特征才能够欺骗模型。这种难度要大得多。
由于模型采用逻辑回归,因此可以直观的通过模型权重看到哪些特征具有最高权重、哪些特征具有最低权重。
模型的top 10
和 bottom 10
权重对应的特征如下:
特征的权重不一定直接表示其重要性,因为特征之间不是独立的。
假设有一个重要的特征是文本中每个单词的平均长度(即:平均多少个字符) ,但我们并没有直接给出这个特征,而是给出相关的两个特征:文本总字符数 、文本总单词数 。那么我们会发现:特征 具有一个较大的正权重、特征 有一个较大的负权重。
因为 ,所以特征 和特征 正相关,而特征 和特征 负相关。
在 unigram features
中,top 10
和 bottom 10
权重对应的特征如下。
可以看到:
established
的实体词,如 official,direct,latest,version
。quotes, trial, deals, gift, compare
。从经验上看:用户似乎更愿意点击声誉更好的、更成熟的广告,而不愿意点击免费试用、优惠类的广告。
假设模型能准确预估广告的点击率,一个问题是:广告经过多少次曝光之后,观察到的点击率和预估的点击率接近。
定义观察到的点击率为:
定义预测的点击率为:
其中:
是广告的曝光次数, 为广告的点击次数, 为先验CTR
, 是先验曝光次数。
是模型预估得到的 pCTR
,而 是一个超参数。
是结合了模型预估的 pCTR
和广告已经产生的曝光、点击之后,预测的点击率。
模型预测的
pCTR
没有考虑广告当前的曝光、点击,因此需要修正。
定义期望绝对损失 expected absolute error:EAE
:
其中: 表示给定曝光的条件下,点击click
次的概率。它通过统计其它广告得到。
EAE
刻画了在不同曝光量的条件下,模型给出的 和 CTR
的绝对误差。这和模型优化目标平均KL
散度不同。
baseline
和 LR
模型的 EAE
结果如下所示。可以看到:
100
时,baseline
和 LR
模型的 EAE
几乎相同。50
时,LR
模型的EAE
更低。因此模型对于曝光量100
以内的广告具有明显优势。这也是前面预处理将 100
次曝光作为阈值截断的原因。
对于百万级别广告的广告系统,如果在广告曝光的前100
次期间对广告的CTR
预估不准,则导致这些广告以错误的顺序展示,从而导致收入减少和用户体验下降。
预处理选择 100
次曝光作为截断阈值,是希望样本的观察 CTR
具有合理的置信水平。
事实上有一些广告系统更关注于曝光量更大的广告,希望对这些广告能够预测更准确。更大曝光量意味着label
中更少的噪音,模型会学习得效果更好。
但是这也意味着广告样本不包含那些被系统判定为低价值的广告,因为系统没有给这些低价值广告足够多的曝光机会。
当曝光阈值提升到 1000
次时,模型效果如下。可以看到:曝光量超过1000
的广告比曝光量100
的广告,模型预测效果(以测试集的平均KL
散度为指标)提升了 40%
左右( (41.88-29.47)/29.47
)。
LR
模型只考虑特征之间的线性关系,而POLY2
模型考虑了特征之间的非线性关系。
捕获非线性特征的一个常用方法是采用核技巧,如高斯核RBF
,将原始特征映射到一个更高维空间。在这个高维空间模型是线性可分的,即:只需要考虑新特征之间的线性关系。
但是核技巧存在计算量大、内存需求大的问题。
论文 《Training and Testing Low-degree Polynomial Data Mappings via Linear SVM》
提出多项式映射 polynomially mapping
数据的方式来提供非线性特征,在达到接近核技巧效果的情况下大幅度降低内存和计算量。
设低维样本空间为 维度,低维样本 。
多项式核定义为: 。其中 为超参数, 为多项式的度degree
。
根据定义,多项式核等于样本在高维空间向量的内积:
其中 是映射函数。
当 时,有:
使用 是为了 的表达更简洁。
如果不用核技巧,仅仅考虑使用一个多项式进行特征映射,则我们得到:
结合LR
模型,则得到 POLY2
模型:
新增的组合特征一共有 个。
POLY2
模型的优缺点:
优点:除了线性特征之外,还能够通过特征组合自动捕获二阶特征交叉产生的非线性特征。
缺点:
参数太多导致计算量和内存需求发生爆炸性增长。
如计算广告场景中,原始样本特征可能达到上万甚至百万级别,则特征的交叉组合达到上亿甚至上万亿。
数据稀疏导致二次项参数训练困难,非常容易过拟合。
参数 的训练需要大量的 都非零的样本。而大多数应用场景下,原始特征本来就稀疏(非零的样本数很少),特征交叉之后更为稀疏(非零的样本数更少)。这使得训练 的样本明显不足,很容易发生过拟合。
推荐系统中的评级预测rating prediction
主要依赖于以下信息:谁who
(哪个用户)对什么what
(哪个 item
,如电影、新闻、商品)如何how
评级。有很多方法可以考虑关于 who
(关于用户的人口统计信息,如年龄、性别、职业)、what
(关于item
属性的信息,如电影类型、产品描述文本的关键词)的附加数据。
除了有关评级事件rating event
中涉及的实体的此类数据之外,还可能存在有关评级事件发生当前情况的信息,例如当前位置location
、时间、周边的人、用户当前心情等等。这些场景信息通常称作上下文 context
。因为从决策心理学知道一个人的环境和情绪确实会影响他们的行为,所以在推荐系统中利用上下文信息是可取的。上下文感知评级预测context-aware rating prediction
依赖于谁who
在何种上下文context
下如何how
评价什么what
的信息。
经典的推荐系统方法不考虑上下文信息。一些方法执行数据的预处理 pre-processing
或后处理post-processing
,使得标准方法具有上下文感知能力。虽然这种临时解决方案可能在实践中起作用,但是它们的缺点是过程中的所有步骤都需要监督和微调。
将各种输入数据统一到一个模型中的方法在这方面更为实用,理论上也更为优雅。目前,在预测准确性方面最灵活和最强的方法是 Multiverse Recommendation
,它依赖于 Tucker
分解并允许使用任何离散型上下文categorical context
。然而,对于现实世界的场景,它的计算复杂度 太高了,其中 是因子分解的维度, 是所涉及变量的数量。
在论文 《Fast Context-aware Recommendations with Factorization Machines》
中,作者提出了一种基于分解机 Factorization Machine: FM
的上下文感知评级预测器。FM
包括并可以模拟推荐系统中最成功的方法,包括句子分解 matrix factorizion: MF
、SVD++
、PITF
。
作者展示了 FM
如何应用于各种上下文字段,包括离散型categorical
字段、离散集合set categorical
字段、实值real-valued
字段。相比之下, Multiverse Recommendation
模型只适合于离散型 categorical
上下文变量。
除了建模的灵活性之外,FM
的复杂度在 和 上都是线性的(即 ),这允许使用上下文感知数据进行快速预测和学习。相比之下, Multiverse Recommendation
模型的复杂度是 ,在 上是多项式的。
为了学习 FM
模型的参数,论文提出了一种基于交替最小二乘法 alternating least squares: ALS
的新算法。新算法在给定其它参数的情况下找到一个参数的最优解,并且在几次迭代之后找到所有参数联合最优解。
和随机梯度下降 stochastic gradient descent: SGD
一样,新算法单次迭代的复杂度为 ,其中 为训练样本的数量。
和 SGD
相比,新算法的主要优点是无需确定学习率。这在实践中非常重要,因为 SGD
学习的质量在很大程度上取决于良好的学习率,因此必须进行代价昂贵的搜索。这对于 ALS
来讲不是必需的。
最后,论文的实验表明:上下文感知 FM
可以捕获上下文信息并提高预测准确性。此外 FM
在预测质量和运行时间方面都优于 state-of-the-art
的方法 Multiverse Recommendation
。
推荐系统的大多数研究都集中在仅分析 user-item
交互的上下文无关方法上。在这里,矩阵分解matrix factorization: MF
方法非常流行,因为它们通常优于传统的 knn
方法。
也有研究将用户属性或 item
属性等元数据结合到预测中,从而扩展了矩阵分解模型。然而,如果存在足够的反馈数据,元数据对评分预测的强 baseline
方法通常只有很少或者没有改善。这种用户属性/item
属性和上下文之间的区别在于:属性仅仅被附加到 item
或者用户(例如,给电影附加一个流派的属性),而上下文被附加到整个评级事件(如,当评级发生时用户当时的心情)。
和关于标准推荐系统的大量文献相比,上下文感知推荐系统的研究很少。最基本的方法是上下文预过滤pre-filtering
和后过滤 post-filtering
,其中应用标准的上下文无关推荐系统,并在应用推荐器recommender
之前基于感兴趣的上下文对数据进行预处理、或者对结果进行后处理。更复杂的方法是同时使用所有上下文和 user-item
信息来进行预测。
也有人建议将上下文视为动态的用户特征,即可以动态变化。另外有一些关于 item
预测的上下文感知推荐系统的研究,将推荐视为一个排序任务,而本文将推荐视为回归任务。
Multiverse Recommendation
基于Tucker
分解技术来直接分解用户张量、item
张量、所有离散上下文变量的张量,从而求解该问题。它将原始的评分矩阵分解为一个小的矩阵 和 个因子矩阵 :
其中:
这种方式存在三个问题:
categorical
上下文特征建模:无法处理数值型特征、离散集合型 categorical set
特征。K
路特征交叉(前面的 POLY2
模型是两路特征交叉),由于真实应用场景中单个特征本身就已经很稀疏,K
路特征交叉使得数据更加稀疏,难以准确的预估模型参数。Attribute-aware Recommendation
:与通用上下文感知方法的工作对比,对属性感知或专用推荐系统的研究要多得多。有一些工作可以处理用户属性和 item
属性的矩阵分解模型的扩展,还有一些关于考虑时间效应的工作。然而,所有这些方法都是为特定问题设计的,无法处理我们在本工作中研究的上下文感知推荐的通用设置。
当然,对于特定的和重要的问题(如时间感知推荐或属性感知推荐),专用模型的研究是有益的。但是另一方面,研究上下文感知的通用方法也很重要,因为它们提供了最大的灵活性,并且可以作为专用模型的强 baseline
。
Alternating Least Square Optimization
:对于矩阵分解模型,Bell
和 Koren
提出了一种交替优化所有 user factor
和所有 item factor
的 ALS
方法。由于所有user/item
的整个 factor matrix
是联合优化的,因此计算复杂度为 。标准 ALS
的这种复杂度问题是 SGD
方法在推荐系统文献中比 ALS
更受欢迎的原因。
Pilaszy
等人提出一个接一个地优化每个user/item
中的 factor
,这导致 ALS
算法复杂度为 ,因为避免了矩阵求逆。一次优化一个factor
的思路与我们将 ALS
算法应用于FM
的思路相同。
这两种方法仅适用于矩阵分解,因此无法处理任何上下文,例如我们提出的对所有交互进行建模的 FM
中的上下文。此外,我们的 ALS
算法还学习了全局bias
和基本的 1-way
效应。
FM
模型是一个通用模型,它包含并可以模拟几个最成功的推荐系统,其中包括矩阵分解 matrix factorization: MF
、SVD++
、PITF
。我们首先简要概述了 FM
模型,然后详细展示了如何将其应用于上下文感知数据,以及在 FM
中使用这种上下文感知数据会发生什么。最后我们提出了一种新的快速 alternating least square: ALS
算法,和 SGD
算法相比它更容易应用,因为它不需要学习率。推荐系统面临的问题是评分预测问题。给定用户集合 、物品集合 ,模型是一个评分函数:
表示用户 对物品 的评分。
其中已知部分用户在部分物品上的评分: 。目标是求解剩余用户在剩余物品上的评分:
其中 为 的补集。
通常评分问题是一个回归问题,模型预测结果是评分的大小。此时损失函数采用MAE/MSE
等等。
也可以将其作为一个分类问题,模型预测结果是各评级的概率。此时损失函数是交叉熵。
当评分只有 0
和 1
时,这表示用户对商品 “喜欢/不喜欢”,或者 “点击/不点击”。这就是典型的点击率预估问题。
事实上除了已知部分用户在部分物品上的评分之外,通常还能够知道一些有助于影响评分的额外信息。如:用户画像、用户行为序列等等。这些信息称作上下文 context
。
对每一种上下文,我们用变量 来表示, 为该上下文的取值集合。假设所有的上下文为 ,则模型为:
上下文的下标从 3
开始,因为可以任务用户 和商品 也是上下文的一种。
如下图所示为评分矩阵,其中:
所有离散特征都经过one-hot
特征转换。
上下文特征 context
类似属性 property
特征,它和属性特征的区别在于:
属性特征是作用到整个用户(用户属性)或者整个物品(物品属性),其粒度是用户级别或者物品级别。
如:无论用户 “张三” 在在评分矩阵中出现多少次,其性别属性不会发生改变。
上下文特征是作用到用户的单个评分事件上,粒度是事件级别,包含的评分信息更充足。
如:用户 ”张三“ 在评价某个电影之前已经看过的电影,该属性会动态改变。
事实上属性特征也称作静态画像,上下文特征也称作动态画像。业界主流的做法是:融合静态画像和动态画像。
另外,业界的经验表明:动态画像对于效果的提升远远超出静态画像。
和 POLY2
相同FM
也是对二路特征交叉进行建模,但是FM
的参数要比 POLY2
少得多。
将样本重写为:
则 FM
模型为:
其中 是交叉特征的参数,它由一组参数定义:
即:
模型待求解的参数为:
其中:
representation vector
,它是 的第 列。FM
模型的计算复杂度为 ,但是经过数学转换之后其计算复杂度可以降低到 :
因此有:
其计算复杂度为 。
将 FM
模型和标准的矩阵分解模型进行比较,可以看到:FM
也恰好包含这种分解 。此外,FM
模型还包含了所有上下文变量的所有 pair
对的交互。这表明 FM
自动包含了矩阵分解模型。
FM
模型可以用于求解分类问题(预测各评级的概率),也可以用于求解回归问题(预测各评分大小)。
对于回归问题,其损失函数为MSE
均方误差:
对于二分类问题,其损失函数为交叉熵:
其中:
损失函数最后一项是正则化项,为了防止过拟合, 。其中 为参数 的正则化系数,它是模型的超参数。
可以针对每个参数配置一个正则化系数,但是选择合适的值需要进行大量的超参数选择。论文推荐进行统一配置:
FM
模型可以处理不同类型的特征:
离散型特征 categorical
:FM
对离散型特征执行 one-hot
编码。
如,性别特征:“男” 编码为 (0,1)
,“女” 编码为 (1,0)
。
离散集合特征 categorical set
:FM
对离散集合特征执行类似 one-hot
的形式,但是执行样本级别的归一化。
如,看过的历史电影。假设电影集合为:“速度激情9,战狼,泰囧,流浪地球”。如果一个人看过 “战狼,泰囧,流浪地球”, 则编码为 (0,0.33333,0.33333,0.33333)
。
数值型特征 real valued
:FM
直接使用数值型特征,不做任何编码转换。
FM
的优势:
给定特征 representation
向量的维度时,预测期间计算复杂度是线性的。
在交叉特征高度稀疏的情况下,参数仍然能够估计。
因为交叉特征的参数不仅仅依赖于这个交叉特征,还依赖于所有相关的交叉特征。这相当于增强了有效的学习数据。
能够泛化到未被观察到的交叉特征。
设交叉特征 “看过电影 A
且 年龄等于20
” 从未在训练集中出现,但出现了 “看过电影 A
” 相关的交叉特征、以及 “年龄等于20
” 相关的交叉特征。
于是可以从这些交叉特征中分别学习 “看过电影 A
” 的 representation
、 “年龄等于20
”的 representation
,最终泛化到这个未被观察到的交叉特征。
FM
的目标函数最优化可以直接采用随机梯度下降 SGD
算法求解,但是采用 SGD
有个严重的问题:需要选择一个合适的学习率。
学习率必须足够大,从而使得 SGD
能够尽快的收敛。学习率太小则收敛速度太慢。
学习率必须足够小,从而使得梯度下降的方向尽可能朝着极小值的方向。
由于 SGD
计算的梯度是真实梯度的估计值,引入了噪音。较大的学习率会放大噪音的影响,使得前进的方向不再是极小值的方向。
我们提出了一种新的交替最小二乘 alternating least square:ALS
算法来求解 FM
目标函数的最优化问题。与 SGD
相比ALS
优点在于无需设定学习率,因此调参过程更简单。
根据定义:
对每个 ,可以将 分解为 的线性部分和偏置部分:
其中 与 无关。如:
对于 有:
对于 有:
对于 有:
因此有:
考虑均方误差损失函数:
最小值点的偏导数为 0
,有:
则有:
ALS
通过多轮次、轮流迭代求解 即可得到模型的最优解。
在迭代之前初始化参数,其中: 通过零初始化, 的每个元素通过均值为0
、方差为 的正太分布随机初始化。
每一轮迭代时:
首先求解 ,因为相对于二阶交叉的高阶特征,低阶特征有更多的数据来估计其参数,因此参数估计更可靠。
然后求解 。这里按照维度优先的准确来估计:先估计所有 representation
向量的第 1
维度,然后是第 2
维,... 最后是第 d
维。
这是为了计算优化的考量。
直接求解 ALS
的解时复杂度较高:在每个迭代步中计算每个训练样本的 和 。
对于每个样本,求解 和 的计算复杂度为:
因此求解 的计算复杂度为 。
有三种策略来降低求解 的计算复杂度,从 降低到 ,其中 表示平均非零特征的数量:
预计算误差项 :
定义误差项:
考虑到 ,则有:
因此如果计算 的计算代价较低,则计算 的计算复杂度也会降低。
首先对每个样本,计算其初始误差:
考虑到 的计算复杂度为 ,因此 的计算复杂度为 。
当参数 更新到 时,重新计算误差:
计算代价由 决定 (根据下面的讨论,其计算复杂度为 )。
预计算 值:
如果能够降低计算 的代价,则整体计算复杂度可以进一步降低。由于 的复杂度为 ,因此重点考虑 的计算复杂度。
重写 ,有:
定义:
因此如果计算 的计算代价较低,则 的计算复杂度也会降低。
对每个样本、每个representation
向量维度计算初始 值:
计算复杂度为 。
当参数 更新到 时,重新 值:
计算代价为 。
一旦得到 ,则有:
计算代价为 。
数据集 的稀疏性:
根据:
对于 ,其计算复杂度为
对于 , 我们只需要迭代 中 的样本,即 的样本。
因此每次更新只需要使用部分样本。总体而言,整体复杂度为 ,其中 表示平均非零特征的数量。
ALS
优化算法:
输入:
输出:模型参数
算法步骤:
参数初始化:
初始化 :
迭代直至目标函数收敛或者达到指定步数,每一轮迭代过程为:
更新 :
更新 :
更新 :
外层循环为 ,内层循环为 。这是为了充分利用 。
.
在本节中,我们根据实验研究了和 state-of-the-art
的上下文感知方法 Multiverse Recommendation
的对比。此外,我们检查了 SGD
对学习率选择的敏感性,以及我们的 ALS
优化是否可以在没有学习率这个超参数的情况下成功工作。
数据集:
Food
数据集:包含 212
个用户对 20
个菜单 item
的 6360
个评分(从 1
分到 5
分),其中包含两个上下文变量:第一个上下文变量捕获用户评分的场景是虚拟的 virtual
还是真实的 real
(即用户想象自己饿了、还是用户真的饿了);第二个上下文变量刻画用户的饥饿程度。Adom
数据集:包含 1524
个电影评分(从 1
分到 15
分),其中包含五个上下文变量,这些上下文变量关于同伴、工作日、以及其它时间信息。Yahoo! Webscope
数据集:包含 221367
个评分。我们遵循 《Multiverse recommendation: n-dimensional tensor factorization for context-aware collaborative filtering》
并应用他们的方法来处理数据集。我们生成 一共九个数据集。baseline
方法:我们将 context-aware FM
和 Multiverse Recommendation
进行比较。注意:Multiverse Recommendation
已经在上述三个数据集上超越了其它上下文感知推荐算法。
我们使用 FM no-context
作为上下文无感context-unaware
的 baseline
,其中仅使用用户变量和 item
变量生成特征向量,这相当于具有 bias
项的矩阵分解。这是最强的上下文无关推荐算法之一。
FM
使用我们提出的 ALS
算法进行优化,Multiverse Recommendation
使用原始论文中提出的 SGD
算法来学习。
评估方式:我们从每个数据集中删除了 5%
的样本,用作调优超参数以获得最佳 MAE
的验证集。在超参数搜索之后,我们对剩下的 95%
数据集进行 5-fold
交叉验证,即不再使用验证集。我们报告了 5
次实验的平均 RMSE
和 MAE
。
所有方法都是 C++
实现的,并在相同的硬件上运行。我们使用 ALS
优化的 FM
实现、Multiverse Recommendation
实现和数据集生成脚本可以从我们的网站上下载。
ALS vs SGD
:我们在 Webscope
数据集上将 SGD
实现的测试误差和我们的 ASL
方法进行了比较,实验结果如下图所示。左图绘制了三种学习率选择的测试误差曲线,右侧的两个图分别显示了在 10
次和100
次迭代后不同学习率得到的测试误差曲线(由于 ALS
没有学习率超参数,因此表现为一条水平直线)。可以看到:
SGD
的优化效果很大程度上取决于学习率和迭代次数。当精心挑选合适的学习率、足够大的迭代次数(根据验证集执行早停策略从而防止过拟合),SGD
可以达到 ALS
的效果。ALS
不需要精心的、耗时的搜索合适的学习率,就可以达到很好的效果。该实验表明:SGD
需要仔细且耗时地搜索学习率,而ALS
不需要这样的搜索因为它没有这个超参数。在预测质量方面SGD
的性能与 ALS
一样好,但是前提是选择了正确的学习率。这使得 ALS
在应用中明显有利。
运行时间:Multiverse Recommendation
在实际使用中的主要缺点之一是模型的计算复杂度为 ,这对于学习和预测都是一个问题。这意味着即使对于标准的非上下文感知推荐系统,运行时间对于分解维度 上也是二次的,对于上下文感知问题至少是三次的。这使得很难应用于较大的因子维度 和较多的变量数量 。相反,FM
的计算复杂度对于 和 都是线性的,即 。
在本实验中,我们考察所有训练样本的一次完整迭代的运行时间。我们使用 webscope
数据集, , 。对于 Multiverse Recommendation
,我们选择的最大 。实验结果如下图所示(单位为妙),其中左图为对数尺度。可以看到,实验结果和理论复杂度分析相匹配:
FM
的运行时间是线性的,例如可以在大约 11s
内完成所有训练样本的完整迭代(对于 )。Multiverse Recommendation
的复杂度随着 的增加而增加,使得 的运行时间已经是 30
分钟,而 的运行时间大约是 8
小时。预测质量:最后我们想知道,上下文感知 FM
的灵活性和快速运行时间是否会以较差的预测质量为代价。为此我们比较了 Food
、Adom
、Webscope
数据集上的预测质量,如下图所示。可以看到:
FM
和 Multiverse Recommendation
对 Food
和 Adom
数据集的预测质量相当。FM
和 Multiverse Recommendation
都优于上下文无感方法(相当于矩阵分解模型)。在第三个实验中,我们考察了人工特征丰富的 Webscope
数据集,其中上下文变量(由 context influence
刻画)对于评分的影响越来越大。结果如下图所示,可以看到:
FM
和 Multiverse Recommendation
都受益于对上下文有更强依赖性的评分。FM
的预测质量会变差,因为对于上下文无关 FM
,上下文是未观测到的,因此它们无法解释这种依赖性。FM
始终生成比 Multiverse Recommendation
更好的预测。例如,RMSE
下降 0.10 ~ 0.15
,而 MAE
下降 0.08 ~ 0.10
。结论:实验结果表明:
上下文感知 FM
能够考虑上下文信息来增强预测。
在运行时间方面 FM
是线性的,这使得它们可以应用于大维度的因子、更多上下文变量。相比之下,Multiverse Recommendation
无法处理大维度的因子、也无法处理很多上下文变量。
FM
在运行时间方面的优势并没有以预测质量为代价,相反:
Food
和 Adom
)上,上下文感知 FM
和 Multiverse Recommendation
的预测质量相当。FM
的性能优于 Multiverse Recommendation
。最后,ALS
优化的 FM
很容易应用,因为它不像 SGD
那样对学习率进行昂贵的搜索。
click-through rate: CTR
点击率预估在计算广告中起着重要作用。逻辑回归可能是该任务中使用最广泛的模型。给定一个具有 个样本的数据集 ,其中 为输入的 维特征向量, 为 label
。我们通过求解以下最优化问题从而得到逻辑回归模型:
其中: 为正则化参数, 。
学习特征交叉效应看起来对 CTR
预估至关重要。这里我们考虑下表中的人造数据集,以便更好地理解特征交叉,其中 +
表示点击量、-
表示不点击量。Gucci
的广告在 Vogue
上的点击率特别高,然而这些信息对于线性模型来说很难学习,因为线性模型分别学习 Gucci
和 Vogue
的两个权重。
为了解决这个问题,已经有两个模型来学习特征交叉效应:
degree-2 polynomial mapping: Poly2
,为每个特征交叉学习专门的权重。factorization machine: FM
,通过将特征交叉分解为两个潜在向量的乘积来学习特征交叉效应。FM
的一种变体,称作成对交互张量分解 pairwise interaction tensor factorization: PITF
,用于个性化的 tag
推荐。在 2012
年的 KDD Cup
中,Team Opera Solutions
提出了一种称作因子模型 factor model
作为 PITF
的泛化,称作 field-aware factorization machine: FFM
。
PITF
和 FFM
的区别在于:PITF
考虑了 user
、item
、tag
三个特殊的字段field
,而 FFM
更加通用。由于 FFM
是针对比赛的整体解决方案,因此对它的讨论是有限的,主要包含以下结论:
FFM
使用随机梯度 SG
来解决优化问题。为了避免过拟合,Team Opera Solutions
只训练了一个 epoch
。FFM
在Team Opera Solutions
尝试的六个模型中表现最好。在论文 《Field-aware Factorization Machines for CTR Prediction》
中,作者旨在具体建立 FFM
作为 CTR
预估的有效方法。论文的主要结果如下:
FFM
被证明是有效的,但是本文可能是唯一发表的、将 FFM
应用于 CTR
预估问题的研究。为了进一步证明 FFM
在 CTR
预估方面的有效性,作者使用 FFM
作为主要模型,从而赢得由 Criteo
和 Avazu
主办的两场全球 CTR
比赛。FFM
和两个相关模型 Poly2
和 FM
进行比较。作者首先从概念上讨论为什么 FFM
可能比它们更好,并通过实验来查看准确性和训练时间方面的差异。FFM
的技术,包括用于 FFM
的有效并行优化算法、以及早停以避免过拟合。FFM
可以被大家使用,论文发布了一个开源软件。为便于讨论,这里忽略了全局bias
项和一阶项。给定特征向量 ,
POLY2
模型为:
参数个数为 ,计算复杂度为 。
实际上计算复杂度为 ,其中 为平均非零特征数量。
FM
模型为:
参数个数为 ,计算复杂度为 。
通过重写上式:
计算复杂度降为 。
实际上计算复杂度为 ,其中 为平均非零特征数量。
Rendle
解释了为什么当数据集稀疏时,FM
可以比 Poly2
更好。这里我们用上述人工数据集给出类似的说明。
例如,对于 pair (ESPN, Adidas)
只有一个负样本:
Poly2
,可能会为 学习一个非常负的权重。FM
,因为 (ESPN, Adidas)
的预估取决于 ,并且 和 也可以从其它pair
中学习(如 (ESPN,Nike), (NBC, Adidas)
),所以预测会更准确。另一个例子是没有针对 (NBC, Gucci)
的训练数据:
Poly2
,对这个pair
的预测是无意义的trivial
。FM
,因为 和 仍然可以从其它 pair
中学习,因此仍然可以做出有意义的预测。注意,Poly2
的一种朴素实现是将每一对特征视为一个新特征,这使得模型的参数规模为 。由于 CTR
预估任务中的特征数量通常很大,因此Poly2
不可行。 Vowpal Wabbit: VW
这个广泛使用的机器学习 package
通过哈希来解决这个问题。我们的实现方法也类似,具体而言:
其中 是一个用户指定的超参数。
FFM
的思想来源于个性化tag
推荐的 PITF
。PITF
假设有三个可用字段field
,包括 User
、Item
、Tag
,并且在独立的潜在空间中分解 (User, Item)
、(User, Tag)
、(Item, Tag)
。FFM
将 PITF
推广到更多字段(如 AdID
、AdvertiserID
、UserID
、QueryID
),并将其有效地应用于 CTR
预估。
由于 PITF
仅针对三个特定字段(User, Item, Tag
),而 FFM
原始论文缺乏对 FFM
的详细讨论,因此这里我们提供了对 CTR
预估的 FFM
的更全面的研究。
对于大多数 CTR
数据集,特征 features
可以分组为字段 fields
。在我们前面的示例中,ESPN, Vogue, NBC
三个特征属于 Publisher
字段,另外三个特征 Nike, Gucci, Adidas
属于 Advertiser
字段。FFM
是利用字段信息的 FM
变体。
为了解释 FFM
的工作原理,我们考虑以下示例:
xxxxxxxxxx
11Publisher (P): ESPN; Advertiser (A): Nike; Gender (G): Male; Clicked: Yes
考虑对于 FM
,有:
在 FM
中,每个特征只有一个潜在向量来学习和其它特征的潜在效应 latent effect
。以 ESPN
为例, 用于学习和 Nike
的潜在效应()、和 Male
的潜在效应 () 。然而,因为 Nike
和 Male
属于不同的字段,(EPSN, Nike)
和 (EPSN, Male)
的潜在效应可能不一样。
在 FFM
中,每个特征有若干个潜在向量,这依赖于其它特征的字段数量。例如在这个例子中:
其中:
(ESPN, NIKE)
的潜在效应由 和 学习,因为 Nike
属于 Advertiser
字段、ESPN
属于 Publisher
字段。(ESPN, Male)
的潜在效应由 和 学习,因为 Male
属于 Gender
字段、 ESPN
属于 Publisher
字段。(Mike, Male)
的潜在效应由 和 学习,因为 Male
属于 Gender
字段、 Nike
属于 Advertiser
字段。FFM
模型用数学语言描述为:
其中: 表示第 个特征所属的 field
,一共有 个field
( )。
参数数量为 ,计算复杂度为 ,其中 是样本中平均非零特征数。
和 FM
相比,通常 FFM
中 representation
向量的维度要低的多。即:
.
FFM
模型采用随机梯度下降算法来求解,使用 AdaGrad
优化算法。
在每个迭代步随机采样一个样本 来更新参数,则 退化为:
考虑全局bias
以及一阶项,并统一所有的 ,则有:
其中: 表示field f
内的所有其它特征; 表示:
对梯度的每个维度,计算累积平方:
其中 是 的第 个分量, ; 是 的第 个分量, 。
更新参数:
其中 是用户指定的学习率, 。
模型参数需要合适的初始化。论文推荐:
1
,这是为了防止在迭代开始时 太大,从而导致前进方向较大的偏离损失函数降低的方向。原始论文并没有 的项,因此个人推荐采用 零均值、方差为 的正态分布来初始化它们。
论文推荐采用样本级别的归一化,这可以提升模型泛化能力。
注:如果采用
Batch normalization
效果可能会更好。论文未采用BN
,是因为论文发表时BN
技术还没有诞生。
FFM
的 AdaGrad
优化算法:
输入:
输出:极值点参数
算法步骤:
初始化参数和 :
迭代 步,每一步的过程为:
随机从 中采样一个样本
计算 :
计算 ,更新
遍历所有的项::
计算 ,更新
遍历所有的项:
大多数数据集的结构是 :
xxxxxxxxxx
11label feat1:val1 feat2:val2 ...,
其中 (feat:value)
表示特征索引及其取值。对于 FFM
,我们扩展上述格式为:
xxxxxxxxxx
11label field1:feat1:val1 field2:feat2:val2
也就是我们必须为每个特征分配相应的字段。
为某些类型的特征分配字段很容易,但是对于其他一些特征可能比较困难。接下来我们在三种典型类型的特征上讨论这个问题。
离散型特征 categorical
:通常对离散型特征进行 one-hot
编码,编码后的所有二元特征都属于同一个 field
。例如,性别字段:G:G-Male:1
、G:G-Male:0
。
数值型特征 numuerical
:数值型特征有两种处理方式:
不做任何处理,简单的每个特征分配一个dummy field
。此时 , FFM
退化为 Poly2
模型。例如论文引用量 Cite:Cite:3
,其中分配的字段和特征名相同。
数值特征离散化之后,按照离散型特征分配 field
。例如,论文引用量 Cite:3:1
,其中 3
表示特征名(桶的编号)。
论文推荐采用这种方式,缺点是:
离散集合特征categorical set
(论文中也称作 single-field
特征):所有特征都属于同一个field
,此时 , FFM
退化为 FM
模型。
如 NLP
情感分类任务中,特征就是单词序列。
sentence
赋一个field
,则没有任何意义,因为此时可能的特征范围是天文数字。word
赋一个 field
,则 等于词典大小,计算复杂度 无法接受。这里我们首先提供实验配置的细节,然后我们研究超参数的影响。我们发现,和逻辑回归以及 Poly2
不同,FFM
对 epoch
数量很敏感,因此我们提出了早停策略。最后我们将 FFM
和包括 Poly2, FM
在内的其它 baseline
进行对比,除了预估准确性之外我们还对比了训练时间。
数据集:我们主要考虑来自 Kaggle
比赛的两个数据集 Criteo
和 Avazu
。对于特征工程,我们主要应用了我们的成功方案,但是移除了复杂的部分。例如,我们在 Avazu
数据集的成功方案包含了 20
个模型的 ensemble
,但是这里我们仅使用最简单的一个。另外,我们使用哈希技巧里生成 个特征。这两个数据集的统计信息如下:
对于这两个数据集,测试集中的标签都是不可用的,所以我们将可用的数据分为训练集和验证集,拆分方式为:对于 Criteo
,最后 6040618
行用于验证集;对于 Avazu
,最后 4218938
行用于验证集。我们用以下术语来表示各个不同的数据集:
Va
:上述拆分的验证集。Tr
:从原始训练集中剔除验证集之后,得到的新训练集。TrVa
:原始的训练集。Te
:原始的测试集,其 label
未公布,所以我们必须将我们的预测结果提交给评估系统从而获得 score
分。为了避免测试集过拟合,竞赛组织者将该数据集分为两个子集:public set
(竞赛期间 score
可见)、private set
(竞赛期间 score
不可见且只有竞赛结束后 score
才公布)。最终排名由 private set
决定。配置:所有实验都是在 Linux
工作站上运行,该工作站配置为两个 Intel Xeo E6-2620 2.0GHz
处理器、128GB
内存。
评估指标:我们考虑 logloss
作为评估指标,其中:
其中:
label
。超参数影响:我们评估了超参数 (representation
向量维度)、 (正则化项系数)、 (学习率)的影响。所有结果都是在验证集上得到。为了加快实验,我们从 Criteo
新训练集中随机抽取 10%
样本作为训练集、从 Criteo
验证集中随机选择 10%
样本作为测试集。
超参数 的实验效果如下图所示。第一列为不同 的取值(论文中用 k
这个不同的符号),第二列为平均每个epoch
的计算时间,第三列为验证集的 logloss
。
可以看到:不同的representation
向量维度,对模型的预测能力影响不大,但是对计算代价影响较大。所以在 FFM
中,通常选择一个较小的 值。
注意,由于采用了 SSE
指令集,所以 时每个 epoch
计算时间几乎相同。
超参数 的实验效果如下图所示。可以看到:
一个合适的正则化系数不大不小,需要精心挑选。
学习率 的实验效果如下图所示:可以看到:
早停:FFM
对于训练 epoch
次数很敏感。为解决该问题,我们对 FFM
执行早停策略:
epoch
结束时,计算验证集的 logloss
。logloss
上升,则记录当前已训练的 epoch
次数 ,并停止当前训练。epoch
。该方案存在一个潜在的缺点:logloss
对 epoch
次数高度敏感,以及验证集上的最佳 epoch
不一定是测试集上的最佳 epoch
。因此早停得到的模型无法保证在测试集上取得最小的 logloss
。
我们也尝试了其它的避免过拟合的方法,比如 lazy update
和 ALS-based
优化,但是这些方法效果都不如早停策略。
我们在 Criteo
和 Avazu
数据集上比较了不同算法、不同优化方式、不同超参数的结果。
我们选择了四种算法,包括LM
模型(线性模型)、POLY2
模型、FM
模型、FFM
模型。我们选择了三种优化算法,包括SG
(随机梯度下降)、CD
(坐标下降)、Newton
(牛顿法)、ALS
。另外我们还选择了不同超参数。
LIBFM
支持SG,ALS,MCMC
三种优化算法,但是我们发现 ALS
效果最好。因此这里 LIBFM
使用 ALS
优化算法。FM
、FFM
都是基于 SG
优化算法来实现的,同时对于 SG
优化算法采取早停策略。SG
优化算法,停止条件由各算法给出合适的停止条件。从实验结果可以看到:
FFM
模型效果最好,但是其训练时间要比 LM
和 FM
更长。LM
效果比其它模型都差,但是它的训练要快得多。FM
是一种较好的平衡了预测效果和训练速度的模型,这就是效果和速度的平衡。POLY2
比所有模型都慢,因为其计算代价太大。FM
的优化方法可见,SG
要比 ALS
优化算法训练得快得多。LM
和 POLY2
的不同优化算法应该收敛到同一个点,但实验表明并非如此。原因是:我们并没有设置合适的停止条件,这使得训练过程并没有到达目标函数极值点就提前终止了。我们比较了其它数据集上不同模型的表现。其中:
KDD2010-bridge,KDD2012,adult
数据集包含数值特征和离散特征,我们将数值特征执行了离散化。cod-rna,ijcnn
数据集仅仅包含数值特征 ,我们将数值特征进行两种处理从而形成对比:将数值特征离散化、每个数值特征作为一个field
(称作 dummy fields
)。phishing
数据集仅仅包含离散特征。实验结果表明:
FFM
模型几乎在所有数据集上都占优。这些数据集的特点是:
one-hot
编码之后大多数特征都是稀疏的。在 phishing,adult
数据集上 FFM
几乎没有优势。原因可能是:这两个数据集不是稀疏的,导致 FFM,FM,POLY2
这几个模型都具有几乎相同的表现。
在 adult
数据集上LM
的表现和 FFM,FM,POLY2
几乎完全相同,这表明在该数据集上特征交叉几乎没有起到什么作用。
在 dummy fields
的两个数据集上 FFM
没有优势,说明 field
不包含任何有用的信息。
在数值特征离散化之后,尽管 FFM
比 FM
更有优势,但还是不如使用原始数值特征的 FM
模型。
这说明数值特征的离散化会丢失一些信息。
从实验中总结的 FFM
应用场景:
one-hot
编码。FFM
无法获取较大收益(相对于 FM
)。FFM
,此时最好使用 FM
。 数字广告 didital advertising
是一个价值数十亿美元的产业,并且每年都在急剧增长。在大多数在线广告平台中,广告的投放是动态的,根据用户的兴趣来个性化投放。机器学习在计算候选广告对用户的预期效用expected utility
方面发挥着核心作用,并以这种方式提高了市场效率。
Varian
(论文 《Position auctions》
)和 Edelman
等人(论文 《 Internet advertising and the generalized second price auction: Selling billions of dollars worth of keywords》
)在 2007
年发表的开创性论文描述了由 Google
和 Yahoo!
开创的点击出价bid per click
、点击扣费 pay per click
。同年,微软也在建立一个基于相同拍卖模型(论文《Predicting clicks: Estimating the click-through rate for new ads》
)的sponsored search
市场。广告拍卖auction
的效率取决于点击率预估的准确性 accuracy
和校准 calibration
。点击率预估系统需要健壮性robust
和适应性adaptive
,并且能够从大量数据中学习。点击率预估系统是大多数在线广告系统的核心。Facebook
拥有超过 7.5
亿的日活用户、超过 100
万的活跃广告主,因此预估广告的点击率是一项具有挑战性的机器学习任务。论文 《Practical Lessons from Predicting Clicks on Ads at Facebook》
分享了满足这些要求的、从真实世界数据执行的实验中得出的洞察insight
。
在 sponsored search
广告中,user query
用于检索和 query
显式或者隐式匹配的候选广告。在 Facebook
中,广告不是与 query
相关,而是指定人口统计特性和兴趣的定向targeting
。因此,当用户访问 Facebook
时,合格 eligible
的广告数量可能超过 sponsored search
搜索量。为了处理每个请求的大量候选广告(每当用户访问 Facebook
时都会触发广告请求),Facebook
将首先构建一系列计算代价递增的、级联cascade
的 classifiers
(即matching
、ranking
等一系列模型)。在本文中,论文关注级联分类器最后阶段的点击率预估模型,即为最终候选广告集合生成预测的模型。
论文发现:将决策树与逻辑回归相结合的混合模型比这两种方法中的任何一个都高出 3%
以上。这种提升对于整体系统性能有重大影响。许多基础的超参数会影响系统的最终预测性能。毫不意外,最重要的是拥有正确的特征:比其它特征,那些捕获有关用户历史信息和广告历史信息的特征占统治地位。一旦有了正确的特征和正确的模型(决策树加逻辑回归),其它因素就发挥了很小的作用(即使是很小的改进,在如此规模的任务中也很重要)。针对数据新鲜度freshness
、学习率模式schema
、数据采样而选择最佳处理方式会稍微改善模型,尽管改善的幅度远不如添加高价值特征、或者选择正确的模型。
论文从实验设置概述开始,然后评估不同的概率线性分类器 probabilistic linear classifiers
以及不同的在线学习算法。在线性分类的背景下,论文继续评估特征变换和数据新鲜度的影响。
受到实际经验教训的启发,尤其是在数据新鲜度和在线学习方面,论文提出了一个模型架构,该架构包含一个在线学习层online learning layer
,同时生成相当紧凑的模型。接下来描述了在线学习层所需的一个关键组件,即online joiner
,它是一种实验性的基础设施,可以生成实时训练数据real-time training data
的实时流live stream
。
最后,论文提出了用内存、计算时间、处理大量数据和准确性进行 tradeoff
的方法。包括为大规模 application
优化内存和延迟的使用方法,以及训练数据规模和准确性之间权衡的研究。
为了实现严格可控的实验,我们选取了 2013
年第四季度的任意一周,从而作为离线训练数据。我们将离线数据划分为训练集和测试集,并使用它们来模拟流式数据 streaming data
,从而进行在线训练和预估。论文中的所有实验都使用相同的训练集/测试集。
评估指标:由于我们最关心的是各个因素factors
对于机器学习模型的影响,因此我们使用预估的准确性来评估,而不是与利润和收入直接相关的指标。在这里我们使用归一化熵 Normalized Entropy: NE
和校正calibration
作为我们的主要评估指标。
归一化熵(更准确地讲,归一化交叉熵Normalized Cross- Entropy
)等于每次曝光的平均对数损失除以背景熵 background entropy
。
假设样本集合有 个样本,样本集合的经验CTR
为 (它等于所有正类样本数量除以总样本数量)。假设第 个样本预测为正类的概率为 ,其真实标签为 。
定义背景点击率 background CTR
为样本集合经验 CTR
,它的熵定义为背景熵:
背景熵衡量了样本集合的类别不平衡程度,也间接的衡量了样本集合的预测难度。
类别越不均衡预测难度越简单,因为只需要将所有样本预测为最大的类别即可取得非常高的准确率。
定义模型在样本集合熵的损失函数为:
每个样本的损失为交叉熵。
定义归一化熵 NE
为:模型在所有样本的平均损失函数除以背景熵。
需要除以 是为了剔除样本集合大小的影响。
NE
相对损失函数的优势在于:NE
考虑了样本集预测的难易程度。在平均损失相同的情况下,样本集越不均衡则越容易预测,此时 NE
越低。
归一化熵可以用于计算相对信息增益 Relative Information Gain: RIG
,其中 RIG = 1 - NE
。
校正 Calibration
是平均预估点击率和经验点击率的比值。换句话讲,它是期望点击次数和实际观察到点击次数的比值。calibration
是一个非常重要的指标,因为准确且校准良好的 CTR
预估对于在线竞价和拍卖的成功至关重要。calibration
和 1.0
的差异越小,模型越好。
注意,AUC
也是评估模型能力的一个很好的指标,但是 AUC
反应的模型对样本的排序能力:auc=0.8
表示 80%
的情况下,模型将正样本预测为正类的概率大于模型将负样本预测为正类的概率。
在现实环境中,我们期待预测是准确的,而不仅仅是获得最佳的排序,从而避免潜在的投放不足 under-delivery
、以及投放过度 over-delivery
。
NE
衡量的预估好坏并不隐式地反映 calibration
。例如,如果模型高估了 2
倍,然后我们使用一个全局的因子 0.5
来固定地校准:
AUC
保持不变。pCTR
分布与样本的标签分布距离更近,所以NE
会得到改善。有关这些指标的深入研究,可以参考 《Predictive model performance: Offline and online evaluations》
。
这里我们展示了一个混合模型结构:boosted decision trees: BDT
和概率稀疏线性分类器probabilistic sparse linear classifier
的拼接,如下图所示。其中输入特征通过 BDT
进行变换,每棵子树的输出都被视为稀疏线性分类器的离散输入特征。 BDT
已经被证明是非常强大的特征变换。
fresher
的训练数据如何导致更准确的预估,这激发了使用在线学习方法来训练线性分类器的思想。有两种最简单的特征转换方式:
连续特征离散化:将连续特征的取值映射到一个个分散的分桶里,从而离散化。这里桶的数量和边界难以确定,通常有两种方法:
利用后续的分类器来显式的学习这个非线性映射,从而学习出有意义的分桶数量和边界。
离散特征交叉:类似 FM
模型采用二路特征交叉(或者更高阶)来学习高阶非线性特征。
对于连续特征可以先离散化之后再执行特征交叉,如 kd
树就是典型的代表。
Boosted decisition tree:BDT
就是结合了上述两种方式的一个强大的特征提取器。对于 BDT
,我们将每棵子树视为一个离散特征,其叶结点的编号为特征的取值并执行 one-hot
编码。
假设 BDT
有两棵子树,第一棵有 3
个叶结点,第二棵有2
个叶结点。则样本提取后有两个特征:第一个特征取值为 {1,2,3}
,第二个特征取值为 {1,2}
。假设某个样本被划分到第一棵子树的叶结点 2
,被划分到第二棵子树的叶结点 1
,则它被转换后的特征为:[0,1,0,1,0]
。其中:前三项对应于第一个离散特征的 one-hot
,后两项对应于第二个离散特征的 one-hot
。
我们使用的 BDT
为梯度提升树 Gradient Boosting Machine:GBM
,其中使用了经典的 L2-TreeBoost
算法。在每次学习迭代中,都会创建一棵子树对残差进行建模。我们可以将基于 BDT
的变换理解为一种监督特征编码:
real-valued vector
转换为一组二元向量 binary-valued vector
。我们进行了实验以显示将树特征作为线性模型输入的效果。我们对比了两种逻辑回归模型:一种具有树特征变换,另一种具有普通特征(未变换的)。我们还对比了一个 BDT
模型。对比结果如下表所示,可以看到:
3.4%
以上。这是一个非常显著的提升。LR
和单独使用 Tree
模型具有相差无几的预测准确性(实际上 LR
稍微好一点),但是它们的组合使得准确性大幅上升。点击率预估系统通常部署在数据分布随时间变化的动态环境中。我们研究了训练数据新鲜度freshness
对于预测性能的影响。为此,我们在某一天训练一个模型并在连续几天内对其进行测试。我们为 BDT
模型、带tree-transformed
的逻辑回归模型进行实验。实验中,我们训练一天的数据,并评估连续六天中每一天的归一化熵。
结果如下图所示,指标是相对于最差的 NE
的比例(最差的 NE
发生在 Trees only
模型延迟 6
天时)。可以看到:
NE
可以减少大约 1%
。这些发现表明:每天进行重新训练是值得的。
考虑数据新鲜度,我们需要用最新的样本更新模型。有两种更新策略:
cpu
、内存等因素。通常在大规模集群中可以在几个小时内完成训练。BDT
,但是用最新的数据在线近乎实时地训练 LR
线性分类器。为了最大限度地提高数据新鲜度,一种选择是在线训练线性分类器,即在带 label
的曝光信息到达时直接训练。这里我们评估了几种为基于 SGD
的逻辑在线学习设置学习率的方法。
per-coordinate
基于特征的学习率:在第 次迭代特征 的学习率为:
其中: 为模型的超参数; 为第 次迭代的梯度在特征 的分量。
per-weight
维度加权学习率:在第 次迭代特征 的学习率为:
其中: 为模型的超参数, 为截至到第 次迭代特征 上有取值的所有样本数量。
在广告场景中,这些特征在大多数情况下都没有取值,因此对应的权重很难有更新机会。
per-weight square root
基于权重开方的学习率:在第 次迭代特征 的学习率为:
global
全局学习率:在第 次迭代所有特征的学习率都为:
constant
常量学习率:在第 次迭代所有特征的学习率都为:
前三种方式针对每个特征都有不同的学习率,最后两种方式对所有特征采用相同的学习率。所有超参数都通过网格搜索来调优,最优值如下表所示。
我们将学习率下限设定为 0.00001
从而用于在线的 continuous learning
。我们使用上述学习率方案在相同数据集上训练和测试 LR
模型,实验结果如下图所示。可以看到:
per-coordinate
方法获得最好的表现,而 per-weight
效果最差。per-weight square root
和 constant
方案具有相似、但是稍差的效果。
全局学习率表现不佳,其主要原因是:每个特征上训练样本数量不平衡。
一些高频特征上(如:“是否男性” 特征)的样本数量较多,而另一些低频特征(如:“是否明星” )上的样本数量较少。在全局学习率策略下,低频特征学习率太快降低到很小的值,使得最优化难以收敛到最优点。
虽然 per-weight
策略解决了该问题,但是它仍然表现不佳。主要原因是:虽然它对低频特征的学习率控制较好,但是它对高频特征的学习率控制较差。它对所有特征的学习率都下降得太快,在算法收敛到最优点之前训练就过早终止了。这解释了为什么该方案是所有学习率方案中最差的。
如前所述,更新鲜的训练数据会提高预估准确性。这里我们介绍一个实验系统,该系统生成用于在线学习训练线性分类器的实时训练数据。我们将这个系统称作 online joiner
,因为它的关键操作是以在线方式将 label
(是否点击)和训练数据(广告曝光)进行关联。
在线训练框架最重要的是为模型提供在线学习的标注样本。点击行为比较好标记,但是“不点击”行为难以标记。因为广告并没有一个“不点击”按钮来获取不点击的信息。因此,如果一个曝光在一个时间窗内未发生点击行为,则我们标记该次曝光是未点击的。
之所以要设定一个时间窗,是因为广告曝光和用户点击之间存在时间差。这里有两个原因:
给用户曝光一个广告后,用户不会立即点击。如:用户会简单浏览广告的内容再决定是否点击。对于视频类广告,用户甚至会观看完整视频之后再决定是否点击。
因此曝光事件和点击事件这两个事件存在时间差。
广告系统的曝光日志和点击日志通常都是分开的、独立的实时数据流。这两个数据流回传到在线训练系统可能并不是同步的,存在数据回传时间差。
这个等待时间窗口需要仔细调优:
freshness
较差。同时为了存储更长时间的曝光数据内存代价也较高。no click
并移出内存。这会对点击覆盖率 click coverage
产生不利影响。其中点击覆盖率指的是成功关联曝光的点击占所有点击的比例。因此,online joiner
必须在新近程度 recency
和点击覆盖率之间取得平衡。点击覆盖率低意味着实时训练集会有 bias
:经验 CTR
略低于 ground truth
。这是因为如果等待时间足够长,那么标记为 no click
的部分曝光会被标记为 click
。通过挑选合适的时长,可以降低经验的 CTR
偏差到百分之一以下,同时内存代价也可以接受。
Facebook
在线训练框架如下图所示:
Facebook
时向 Ranker
模块发送一个广告请求,请求中包含 request ID
。Ranker
模块根据在线模型的预测结果,向用户返回一个广告,同时在曝光实时数据流中增加一条曝光日志。Oneline Joiner
模块实时获取最近一个时间窗的曝光、点击日志,并拼接样本特征来构造训练集。Trainer
模块根据构造的训练集执行在线训练,训练好的模型部署到线上供 Ranker
模块使用。这会形成一个数据闭环,使得模型能够捕捉到最新的数据分布。
在线训练需要增加对实时训练数据的异常保护。假设实时训练数据出现问题(如:前端打点上报出现异常、Online Joiner
工作异常等),导致大量的点击数据丢失。那么这批实时训练样本存在缺陷,它们的经验 CTR
非常低甚至为 0
。如果模型去学习这样一批样本,则模型会被带偏:对任何测试样本,模型都会预测出非常低、甚至为零的点击率。
根据广告点击价值 eCPM = BID x pCTR
,一旦预估点击率 pCTR
为零则广告的 eCPM
为零。那么这些广告几乎没有竞争力,竞争失败也就得不到曝光机会。因此需要增加实时训练数据的异常检测机制。如:一旦检测到实时训练数据的分布突然改变,则自动断开online trainer
和 online joiner
的连接。
子树的数量:在 GBDT-LR
模型中子树的数量越大模型表现越好,但是计算代价、内存代价越高。随着子树的增多,每增加一棵子树获得的效益是递减的。这就存在平衡:新增子树的代价和效益的平衡。
我们将子树的数量从 1
增加到 2000
,并使用一整天的数据训练模型、第二天的数据测试模型性能。我们限制每棵子树的叶子不超过 12
个。和之前的实验类似,我们使用归一化熵 NE
作为评估指标。
实验如下图所示,其中 NE submodel0, NE submodel1
使用全量训练数据、不同的超参数来训练,而NE submodel2
使用 1/4
的训练数据。可以看到:
NE
随着子树数量的增加而下降,但是最后增加的1000
棵子树获得的效益很低。几乎所有的 NE
改善都来自于前 500
棵子树,最后 1000
棵子树得到的 NE
下降不足 0.1%
。NE submodel2
由于训练数据更少,使得模型在 1000
棵子树之后出现过拟合(NE
增加)。特征的数量:特征数量是另一个模型属性,可以影响到估计准确性和计算性能之间的 tradeoff
。特征越多模型表现越好,但是计算代价、内存代价越高。但是随着特征的增多,尤其是无效特征的增多,每增加一个特征获得的效益是递减的。这就存在平衡:新增特征的代价和效益的平衡。
为了更好地理解特征数量的影响,我们首先评估特征重要性。我们使用统计的 Boosting Feature Importance
,有三种统计方法(如 XGBoolst/LightGBM
):
weight
:特征在所有子树中作为分裂点的总次数。gain
:特征在所有子树中作为分裂点带来的损失函数降低总数。cover
:特征在所有子树中作为分裂点包含的总样本数。通常情况下,少数特征贡献了大部分解释,而剩余特征仅具有微小的贡献。如下图所示,top 10
特征贡献了大于一半的重要性,最后 300
个特征贡献了不到 1%
的重要性。下图中,左轴给出了对数尺度的特征重要性,右轴给出了累计特征重要性。
基于这一发现,我们进一步试验仅保留 top10,top20,top50,top100,top200
重要性的特征,并评估模型性能的影响。实验结果如下,可以看到:归一化熵随着我们包含更多特征而具有类似的收益递减特性。
接下来我们将对历史特征historica features
和上下文特征 contextual features
进行研究。出于数据敏感性和公司政策,我们无法透露我们使用的实际特征的详细信息。上下文特征可以是本地时间、星期几等,历史特征可以是广告累计的点击量等。
历史特征和上下文特征:BDT
模型中用到的特征分类两类:上下文特征和历史统计特征。
这里我们研究这两种类型的特征如何影响系统性能。
首先我们检查这两类特征的相对重要性。我们通过按重要性对所有特征进行排序,然后计算 top k
个重要特征中历史特征的百分比。结果如下所示,其中 Y
轴表示在 top k
特征中历史特征的占比。
可以看到:历史特征比上下文特征提供了更多的解释。按照重要性排序的 top 10
特征都是历史特征。在所有 top 20
特征中,只有 2
个上下文特征,而历史特征占据了 75%
。
为了更好地比较这两类特征,我们训练了两个仅包含上下文特征和历史特征的 BDT
模型,然后将这两个模型与所有特征的完整模型进行比较,结果如下表所示。我们再次验证,总体而言,历史特征比上下文特征发挥更大的作用。在仅有上下文特征的情况下,我们的 NE
损失了 4.5%
。相反,在仅有历史特征的情况下,我们的 NE
损失小于 1%
。
应该注意的是:上下文特征对于处理冷启动问题非常重要。对于新用户和新广告,上下文特征对于合理的点击率预估是必不可少的。
最后,我们在连续几周内评估仅有历史特征或仅有上下文特征的训练模型,以测试这两种类型特征对数据新鲜度的依赖性。实验结果如下图所示。可以看到:具有上下文特征的模型比具有历史特征的模型更依赖于数据新鲜度。这符合我们的直觉,因为历史特征描述了长期累计的用户行为,这比上下文特征要稳定得多。
Facebook
每天的广告曝光量非常大。即使是每个小时,数据样本也可能上亿。用于控制训练成本的常用技术是减少训练数据量。本节中,我们评估两种降采样技术,均匀降采样和负降采样。在每种情况下,我们训练一组包含 600
棵树的 boosted tree model
,并是使用 calibration
和 归一化熵来评估这些模型。
均匀降采样:所有样本都以同一个概率 来随机采样。该方法容易实现,且采样后的样本分布和采样前保持不变。这样使得训练数据集的分布基本和线上保持一致。
我们评估了 0.001,0.01,0.1,0.5,1
这几种采样率。结果表明:更多的数据带来更好的模型。但是采用 10%
的训练样本相对于全量样本仅仅损失了 1%
的预测能力,而训练代价降低一个量级。在该采样率下的 calibration
甚至没有性能下降。注意:calibration
越接近 1.0
越好。
负降采样:保留所有的正样本,仅负样本以概率 来随机采样。该方法可以缓解类别不平衡问题。但是,采样后的样本分布和采样前不再相同,导致训练集的分布和线上不再保持一致。因此需要对模型进行校准。
我们评估了 0.0001, 0.001, 0.01, 0.1
这几种采样率。可以看到:负采样率对训练模型的性能有显著影响。将负采样率设置为 0.025
可以实现最佳性能。
Re-Calibration
:负降采样可以加快训练速度,改善模型能力。但是负采样中的训练数据分布和线上数据分布不一致,因此必须对模型进行校准。
假设采样之前样本集的平均 CTR
为 0.1%
。当执行采样率为 0.01
的负降采样之后,由于正样本数量不变、负样本数量降低到之前的 0.01
,因此采样后的样本集的平均 CTR
为 10%
。此时需要校准模型,使得模型的预估平均 CTR
尽可能与线上的平均 CTR
一致。假设模型预估的结果为 ,则校准后的预估结果为:
其中 为负采样比例。
我们从 Facebook
广告数据的实验中提出了一些实践经验教训,这激发了用于点击率预估的有前途的混合模型架构。
BDT
转换实值输入特征显著提高概率线性分类器的预测准确性。这激发了一种混合模型架构,该架构将 BDT
和稀疏线性分类器拼接起来。per-coordinate
学习率的 LR
模型比其它正在研究的 LR SGD
学习率方案表现更好。同时我们还描述了在大规模机器学习中优化内存和延迟的技巧:
BDT
的子树数量和准确性之间的 trade-off
。保持较少的子树数量从而减少内存和计算量是有利的。BDT
提供了一种通过特征重要性进行特征选择的便捷方法。可以激进地减少使用特征的数量,同时预测准确性只会略微下降。在线广告是一个价值数十亿美金的行业,它是机器学习巨大成功的案例之一。赞助搜索广告sponsored search advertising
、上下文广告contextual advertising
、展示广告display advertising
、实时竞价拍卖real-time bidding auction
都在很大程度上依赖于模型准确、快速、可靠地预估广告点击率的能力。这种问题设置problem setting
也推动该领域解决大规模问题,即使在十年前,这也是几乎不可想象的。典型的工业模型可以使用相应的大规模特征空间,每天提供数十亿次事件的预测,然后从产生的大量数据中学习。
论文 《Ad Click Prediction: a View from the Trenches》
介绍了一系列案例研究,这些案例研究来自于最近在谷歌用于赞助搜索广告的 CTR
部署系统的实验setting
。这些改进包括基于 FTRL-Proximal
在线学习算法(具有极好的稀疏性sparsity
和收敛性convergence
)的传统监督学习环境下的改进,以及per-coordinate
学习率的使用。
因为 CTR
预估问题已经得到了很好的研究,所以作者选择关注一系列不太受关注、但是在工作系统中同样重要的主题。作者探索内存节省memory savings
、性能分析performance analysis
、 预测置信度confidence in predictions
、calibration
、特征管理feature management
等问题,其严谨性和传统上用于设计有效学习算法的问题相同。最后,作者还详细介绍了几个没有收益的方向,尽管这些方向在其他文献中取得了理想的效果。
因此,论文的目的是让读者了解理论进步和实际工程之间的密切关系,并展示在复杂动态系统中应用传统机器学习方法时出现的深层挑战。同时,论文也分享可能适用于其它大规模问题领域的技巧和洞察。
当用户进行搜索 query
时,基于广告主选择的竞价词,系统将候选广告集合与 query
进行匹配。然后,拍卖机制决定是否向用户展示这些广告、广告展示的顺序、以及广告主在用户点击广告时支付的价格。除了广告主出价之外,拍卖的一个重要输入是:对于每个广告 ,估计用户点击广告的概率 。
我们系统中使用的特征来自于各种来源,包括 query
、广告创意文本、各种与广告相关的元数据。数据往往非常稀疏,每个样本通常只有一小部分非零特征。诸如正则化的逻辑回归之类的方法非常适合这类问题。每天需要进行数十亿次预测,并在观察到新的样本时快速更新模型。当然,这个数据生产速度意味着训练数据集是巨大的。数据是由一个基于 Photon system
的流式服务 streaming service
提供的。
由于近年来大规模学习large-scale learning
得到了很好的研究,我们没有在本文中投入大量篇幅详述我们的系统架构。然而我们注意到,我们的训练方法和 Google Brain
团队描述的 Downpour SGD
方法相似,不同之处在于我们训练的是单层模型而不是多层神经网络。这使得我们能够处理更大的数据集和更大的模型(模型具有数十亿个参数)。因为训练好的模型被复制到很多数据中心进行serving
,因此我们更关心 serving
时的稀疏化,而不是训练期间的稀疏化。
我们系统的整体框架如图所示:
Probalistic Feature Inclusion
:概率性特征纳入模块,主要用于降低特征数量来优化内存。Parallelized Model Training
:多模型并行训练模块,主要用于超参数选择中,提高多模型并行训练的效率。Calibration
:模型校准模块,主要用于校准模型的系统性预测 bias
。Progressive Validation Metrics
:模型性能分析模块,主要用于分析模型在验证集上的性能。Model Serving Replicas
:模型部署模块,主要用于部署模型到线上。对于大规模学习,广义线性模型(例如逻辑回归)的在线算法具有许多优势。尽管特征向量 可能有数十亿维,但是通常每个样本只有数百个非零值。这可以通过从磁盘或网络的流式样本 streaming examples
来对大型数据集进行有效的训练,因为每个训练样本只需要考虑一次。
如果我们采用逻辑回归来建模,那么我们可以使用以下在线框架。
在时刻 ,假设样本特征为 ,给定模型参数 ,那么预估的点击率为 ,其中 为 sigmoid
函数。假设我们观察到了 label
,那么 logloss
为:
显然有:
在线梯度下降 online gradient descent: OGD
已经被证明对此类问题非常有效,能够以最少的计算资源产生出色的预测准确性。然而,在实践中另一个关键考虑因素是最终模型的大小。由于模型可以稀疏存储,因此 中非零权重的数量是内存占用的决定因素。
不幸的是,OGD
在生成稀疏模型方面并不是特别有效。事实上,简单地将 L1
正则化添加到损失函数中,基本上永远不会产生完全为零的权重。更复杂的方法,如 FOBOS
和梯度截断,确实成功地引入了稀疏性。和 FOBOS
相比,Regularized Dual Averaging: RDA
算法产生了更好的准确性accuracy
和稀疏性sparsity
的tradeoff
。
然而,我们已经观察到梯度下降风格的方法可以在我们的数据集上产生比 RDA
更好的准确性。那么,我们能否同时获得 RDA
提供的稀疏性和 OGD
提供的准确性?答案是肯定的,使用 Follow The (Proximally) Regularized Leader: FTRL-Proximal
算法。在没有正则化的情况下,FTRL-Proximal
与标准的OGD
相同,但因为它使用模型权重 的alternative lazy representation
, L1
正则化可以更有效地实现。
FTRL-Proximal
算法在另一篇论文中(《Follow-the-regularized-leader and mirror descent: Equivalence theorems and L1 regularization》
)以便于理论分析的方式构建。这里我们专注于描述一个实际的实现。
给定梯度序列 ,OGD
的更新为:
其中: 为 non-increasing
的学习率调度learning rate schedule
,例如 。
定义 ,那么FTRL-Proximal
算法使用以下更新:
其中: 为学习率的函数,例如 。
从表面上来看,FTRL-Proximal
和 OGD
的更新方程非常不同。但是当我们取 时,二者会产生相同的权重向量序列。 然而,当 的 FTRL-Proximal
更新在产生稀疏性方面做得更好(参考下面实验的结果)。
乍一看,人们可能会认为 FTRL-Proximal
更新比梯度下降更难实现,或者需要存储所有历史的权重。然而,实际上只需要存储单个向量(每个 对应一个值),因为我们可以将 argmin
重写为:
因此,如果我们存储 ,则有:
则 的解可以 per-coordinate
来计算到:
其中 。
因此,FTRL-Proximal
在内存中存储 ,而 OGD
在内存中存储 。下面描述的算法采用这种方法(还添加了 per-coordinate
学习率调度,我们接下来要讨论的),并支持强度为 的 L2
正则化。
或者我们可以直接存储 而不是 ,然后当 时,我们刚好存储的就是标准的梯度下降之后的权重 。
注意当 为常数、 时,很容易看出FTRL-Proximal
等于 OGD
,因为我们有:
这正是梯度下降所起到的作用。
Per-Coordinate FTRL-Proximal
的逻辑回归算法(带 L1
正则化和 L2
正则化):
输入:
输出:训练好的模型权重
算法步骤:
初始化: 。其中 存储累计梯度向量。
迭代 ,迭代步骤为:
读取特征向量 ,令 为当前样本的非稀疏特征集合。
更新非稀疏特征对应的权重:对 有
其中 。注意: 是和时刻 相关的。
计算预估点击率 。
读取 labey
。
更新非稀疏特征对应的梯度相关的信息:对 有
FTRL-Proximal
优化算法的实验结果如下表所示。评估指标为 AucLoss = 1- AUC
。考虑到损失一般是越小越好,而 AUC
是越大越好,因此我们采用 1 - AUC
。
OGD-Count
会维护它看到某个特征的次数。在计数超过阈值 之前,权重固定为零;在计数超过 之后,在线梯度下降照常进行。我们调整 值使得它与 FTRL-Proximal
相同的准确性。使用较大的 会导致更差的 AucLoss
。
可以看到:在模型大小和准确性 tradeoff
方面,带 L1
正则化的 FTRL-Proximal
显著优于 RDA
和 FOBOS
。
总体而言,这些结果表明 FTRL-Proximal
显著改善了稀疏性,同时具有相同或更好的预测准确性。
OGD
的标准理论建议使用全局学习率调度 ,该学习率对于所有 coordinates
都是相同的。我们在 FTRL-Proximal
中采用 per-coordinate
学习率:
该学习率在某种意义上几乎是最优的 near-optimal
。
我们通过验证集仔细选择 和 从而得到良好的性能。根据经验:
我们还尝试对于 使用 0.5
以外的幂次。
如前所述,Per-Coordinate FTRL-Proximal
算法要求我们跟踪每个特征的累计梯度、以及累计平方梯度。后面会介绍另一种节省内存的公式,其中累计平方梯度在多个模型上均摊。
我们通过测试两个相同的模型来评估 per-coordinate
学习率的影响:一个使用单个全局学习率,另一个使用 per-coordinate
学习率。超参数 为每个模型单独调优。
我们在一个有代表性的数据集上运行,并使用 AucLoss
作为我们的评估指标。结果表明:与全局学习率 baseline
相比,使用 per-coordinate
学习率将 AucLoss
降低了 11.2%
。在我们的设置中,AucLoss
降低 1%
就被认为是很大的。
如前所述,我们使用 L1
正则化从而节省预测期间的内存。在这里,我们将描述在训练期间节省内存的其它技巧。
特征优化:在很多具有高维数据的领域中,绝大多数特征都是极为稀疏的。事实上在我们的一些模型中,一半的 unique
特征在数十亿个样本的整个数据集中仅出现一次。
跟踪这些稀疏特征的统计数据是昂贵的,这些特征永远不会有任何实际用途。不幸的是,我们事先不知道哪些特征将是稀疏的。预处理数据从而去除稀疏特征在 online setting
中是有问题的:
一类方法通过 L1
正则化来实现训练中的稀疏性,不需要跟踪特征的任何统计。随着训练的进行,这允许删除信息较少的特征。然而我们发现,与在训练中跟踪更多特征、并仅为 serving
进行稀疏化的方法(如 FTRL-Proximal
)相比,这种稀疏化方式导致了不可接受的准确性损失。
我们探索的另一类方法是概率性的特征纳入 probabilistic feature inclusion
,其中新特征在首次出现时以概率方式纳入模型中。这实现了预处理数据的效果,但是可以在 online setting
中执行。我们为该方法测试了两种实现方式:
Poisson Inclusion
:当我们遇到模型中不存在的特征时,我们仅以概率 将其添加到模型中。一旦添加了一个特征,在随后的观察中,我们会像往常一样更新权重和相关统计数据。在将特征添加到模型之前,需要查看特征的次数遵循期望值为 的几何分布。
Bloom Filter Inclusion
:我们使用一组滚动的counting Bloom filters
,从而检测训练中遇到了 次的特征。一旦某个特征出现超过 次(根据过滤器),我们将其添加到模型中,并将其用于后续观察中的训练。
注意,该方法也是概率性的,因为 counting Bloom filters
可能会出现false positives
(但是不会出现 false negatives
)。也就是说,我们有时会纳入一个实际发生的次数少于 次的特征。
这些方法的实验效果如下表所示。可以看到:这两种方法都运行良好,但是布隆过滤器方法为 RAM
节省和预测质量损失提供了更好的 tradeoff
。
固定精度浮点数:通常我们用 32
位或者64
位浮点数来存储模型参数。实际中发现:几乎所有的参数取值都在 [-2, +2]
之间。同时,分析表明:对模型参数取如此高的精度完全没有必要。这促使我们探索使用 16
位固定精度的 q.23
编码,而不是浮点编码。在 q2.13
编码中:1
个bit
表示正负、2
个 bit
表示整数部分、13
个 bit
表示小数部分。
采用16
位浮点数带来的精度下降会导致 OGD
过程中产生累积舍入误差。事实上在使用 32
位浮点数(而不是 64
位浮点数)时,我们也能够观察到舍入误差。一个简单的随机舍入策略可以缓解该问题:
其中:
q2.13
格式存储。0~1
均匀分布随机采样。最终在没有损失模型预测能力的情况下,相比于 64
位双精度浮点数,采用 q2.13
精度之后模型大小降低了 75%
。
多模型并行训练:有时候我们需要训练多个模型,这些模型采用相同的算法但是不同的超参数来训练,这些模型称作变种模型。最后选择最佳的超参数及对应的模型。
一种简单的方式是:先用给定的算法训练好一个模型,然后用该模型作为变种模型的初始化点来训练变种模型。这种方式比较简单,容易实现。但是缺点是:无法处理特征裁剪、或者学习率调整等场景。
实际上有一些数据可以在多个模型之间共享,如:训练样本。另一些数据无法在多个模型之间共享,如:每个模型的参数值。我们可以在同一张哈希表中存储每个模型的参数值,从而分摊存储 key
(一个字符串或者哈希后的数值)的成本。
任何不具有指定特征的变体都会将该特征的权重存储为零,从而浪费少量空间。此外,我们将这些特征的学习率设为零。这使得我们可以同时并行训练多个模型,所有 per-coordinate
元数据的平摊成本被降低。通过这种方式不仅节省了内存,还节省了网络带宽(因为每个样本只需要读取一次)、节省 CPU
(只需要查找一个哈希表,并且从训练数据中只需要生成一次特征而不是每个模型一次)、以及节省磁盘。
单值结构Single Value Structure
:有时我们希望一起评估非常多的模型变体的集合,这些变体仅通过添加或删除一小部分特征而不同。在这里,我们可以使用一种更为压缩的数据结构,这种结构既有损lossy
又特别,但实际上却给出了非常有用的结果。
这个 Single Value Structure
仅为 per-coordinate
存储一个权重值,该值由包含该特征的所有模型变体共享,而不是为每个模型变体存储单独的权重值。一个 bit-field
用于跟踪哪些模型变体包含给定的特征。注意,这在本质上 《Fast prediction of new feature utility》
的方法相似,但是也允许评估特征删除和特征添加。和多模型并行训练相比,增加模型变体的 RAM
成本增长要慢得多。
假设使用 OGD
优化,则整个学习过程如下(设维度 由所有变种模型共享):
计算所有变种模型在该维度的参数更新值:
其中: 为模型数量, 为所有模型在特征 上共享的参数, 表示模型 的具体参数。
计算最新的共享参数值:
我们对比了使用 Single Value Structure
训练的大量模型变体和使用多模型并行训练的相同变体。结果显示:不同变体的相对性能几乎相同,但是 Single Value Structure
在 RAM
占用方面中节省了一个数量级。
学习率计算:如前所述,我们需要存储每个特征的累计梯度、以及累计平方梯度。虽然可以通过精确地计算梯度来得到学习率的准确值,但是可以对学习率计算进行粗略的近似。
假设特征 (比如说 “最近一年是否购买过广告主的产品”)出现时,点击事件和不点击事件是相互独立的(虽然实际上很难成立,但是不影响下面的推导过程)。设特征 出现时,有 次点击、 次未点击。则点击概率为: 。设我们采用逻辑回归模型,则有梯度:
假设逻辑回归采用 one-hot
特征,当特征 出现时 ,因此:点击时(此时 )梯度 ,未点击时(此时 )梯度 。则coordinate
的累计平方梯度为:
这里我们假设每次点击的概率 是固定的。
则coordinate
的学习率为:
因此可以基于每个特征上发生的点击/不点击计数来近似累计平方梯度,从而调整学习率。允许这样做的原因:学习率是模型的超参数,其取值不必非常精确。实验表明:这种方式得到的学习率,与采用累计平方梯度得到的学习率,二者表现相当。
在多模型并行训练中,由于所有变种模型都具有相同的特征点击/不点击计数,因此存储 的成本被摊销,总的存储成本较低。
另外,计数可以使用可变长度 bit
编码,并且绝大多数特征不需要很多 bit
。这可以进一步降低存储成本。
训练数据降采样:在典型的推荐、搜索等场景中,点击率CTR
通常远低于 50%
。这意味着正样本非常少,正样本在 CTR
预估任务的学习中更具有价值。因此我们可以通过负降采样来显著减少训练集大小,同时保证对模型预测能力的影响降到最低。负降采样方式为:所有正样本被保留、负样本保留 比例,其中 。
负降采样会导致模型产生预测偏差,这种偏差可以通过为每个样本赋予一个系数来解决:正样本系数为 1
、负样本系数为 。这种系数放大了每个样本的损失,因此也同步地缩放了梯度。数学上,令 为样本 被降采样的概率(要么为 1
要么为 ),而每个样本系数为 (要么为 1
要么为 ) ,那么:
这意味着:降采样训练数据上的期望加权损失函数等于原始数据集上的损失函数。
实验表明:即使是非常大比例的负降采样( 值非常小),对最终模型准确性的影响也是微乎其微的,而且和具体的 值无关。
虽然可以直接利用实时流量来评估模型效果,但是这种评估的代价太大:在实时流量中上新模型可能会降低这些流量的收入,因为新模型的效果在评估之前是未知的,可能更好、但是大多数情况下是更坏。
可以通过历史日志来评估模型效果。由于不同的评估指标衡量了模型在不同方面的能力,因此我们评估了一组指标:aucloss
(即:1-auc
)、logloss
、平方误差。为了保持一致性,这些指标都是越小越好。
我们通常使用渐进式验证 progressive validation
(有时称作在线损失),而不是交叉验证、也不是在 hold out
数据集上评估。因为学习过程中计算梯度无论如何都需要计算一个 prediction
,所以我们可以低成本地将这些 prediction
以每小时汇总的方式输出,用于后续分析。我们还根据各种数据 sub-slices
计算这些指标,例如按照国家、query
主题、layout
等进行细分。
假设当前待学习的样本为 , 为了学习该样本:oneline learning
模型会首先预测该样本,得到预测值 ;然后基于预测值计算损失 和参数梯度 ;最后根据参数梯度来更新参数。在这个过程中,我们可以很容易的将样本的预测值 记录下来供后续的模型评估。
我们每个小时汇总一次,得到该小时内每个样本的真实值、预测值。基于这些数据得到小时级别的模型评估指标。因此可以得到随时间推进的模型能力变化趋势。
这种方式中,每个样本都被用来训练,同时每个样本也被用来预测:训练完 来预测 、训练完 来预测 、... 。这使得我们可以将 100%
的数据用于训练和验证。相比较于传统的交叉验证只有部分数据用于验证,这里的验证集更大,得到的验证结果也更具有统计意义。
这很重要,因为某些性能的改进可能需要在大规模的验证集上评估才有意义(如:改进可能很小,比如千分之五),置信度才比较高。
用绝对值来评估模型能力可能会产生误导。假如某个场景点击率是 50%
,另一个场景点击率是 2%
。事实上前者的 logloss
的绝对值可能会超过后者,因为 logloss
及其它指标可能会根据问题的难度(即贝叶斯风险)而变化。
这个问题非常重要。因为 CTR
会根据不同国家/地区、以及 query
而不同。query
在一天中的不同时段的分布不同,因此评估指标的均值会在一天之内发生变化。
因此我们更关注相对变化:模型的评估指标相对于 baseline
的变化。根据我们的经验,随着时间的推进,相对变化会更加稳定。
需要注意的是:我们必须在同一批数据上产生的同一个指标才有比较意义。如:A
模型在某个时间段上得到的模型指标,和 B
模型在另一个时间段上得到的模型指标之间不可比较。因为 A
模型和 B
模型的评估数据都不同。
大规模机器学习的一个隐藏陷阱是:统计指标可能受到数据中某些属性分布的影响。如:给定一个验证集,模型 A
的准确率比模型 B
更高。很有可能该验证集中 “女性” 用户非常多,而模型 A
对于 “女性” 用户的预测比模型 B
更准。
因此我们不仅要给出模型在整体验证集上的评估指标,还要在验证集数据的每个切片 slice
上给出评估指标。如:模型在每个国家上的评估指标、模型在每个性别上的评估指标、模型在每个主题上的评估指标 .... 。
因为有数百种方法可以对数据进行有意义的切片,所以我们必须能够有效地检查数据的可视化 summary
。为此,我们开发了一种称为 GridViz
的高维交互式可视化,可以全面了解模型性能。来自 GridViz
的一个视图的截图如下图所示,该图展示了baseline
模型相比,三个模型(不包括 baseline
模型)的一组根据 query
主题的切片。其中 AucLoss
和 LogLoss
的结果基于一系列 query
主题来计算。
指标值由彩色单元格表示,行与模型名称相对应,列与数据的每个 unique
切片相对应。
列的宽度表示切片的重要性,并且可以设置为反映诸如曝光次数、或点击次数之类的统计量。下图中,列宽反映了曝光次数。
单元格的颜色反映了与 baseline
相比的指标值,这有助于快速扫描异常值和感兴趣的区域,从而直观地了解整体性能。
当用户将鼠标悬停在单元格上之时,会弹出给定单元格的详细报告。
由于存在数百种可能的切片,我们设计了一个交互式界面,允许用户通过下拉菜单或切片名称正则化表达式选择不同的切片。
可以对列进行排序并修改色标的动态范围从而适配手头的数据。
总体而言,该工具使得我们能够显著提高我们对各种数据集的模型性能的理解深度,并确定需要改进的高影响区域。
对很多application
,重要的是不仅要预估广告的点击率,还要量化预估的置信度。置信度可以用于衡量和控制 explore-exploit tradeoffs
。通常采用置信区间confidence intervals
来评估不确定性,但是在这里不适用:
标准的方法用于评估完全收敛的 batch
学习模型,且没有正则化。
而 FTRL
模型是在线学习,不再满足独立同分布 IID
的样本假设,因此甚至无法定义收敛性。并且模型是经过正则化的。
标准的方法需要求解一个 n x n
矩阵的逆,这里 n
的规模达到数十亿甚至百亿,因此无法计算。
此外,至关重要的是,任何置信度估计都需要在预测时以极低的成本进行计算。也就是说,置信度估计的耗时和预估本身的耗时差不多。
为此,我们提出了一种称之为不确定性得分uncertainty score
的启发式方法,它在计算上易于处理,并且在衡量预估准确性的质量方面做得很好。
uncertainty score
的核心思想是:学习算法本身在用于控制学习率的 per-coordinate
计数器 中保存了不确定性的概念,其中 。 较大的特征获得了较小的学习率,正是因为我们相信当前的权重更有可能是准确的。
假设我们对样本进行归一化,使得样本每个特征的取值都归一化到 1
以内,即: 。对于逻辑回归模型,损失函数的梯度为: 。 考虑到 因此有: 。
为简单起见我们令 ,因此 FTRL-Proximal
等价于 OGD
。给定样本 ,其预估的不确定性为:
因此对于样本 ,定义模型预测的不确定性得分为: 。这种方式定义的置信度指标计算非常方便。
其物理意义是:由于学习的不充分导致预测结果的不确定性。因为一旦学习充分,则模型参数 非常稳定,在前后两次迭代之间的变化几乎为零。
为验证这种置信度指标的有效性,我们执行以下实验:
首先在真实数据集 上训练模型 A
,但是使用稍微不同的特征。
然后丢弃真实数据的标记 ,用模型 A
的预测结果 来代替 ,从而产生了替代数据集 。
在数据集 上用 FTRL
算法训练模型 B
。
对于样本 ,假设模型 A
的预测结果为 p
,模型 B
的预测结果为 。则得分误差为:
其中 是 的反函数,它根据预测概率计算得分 。
的物理意义为:由于标记噪声的引入,导致模型预测的波动范围。
最后计算 ,观察该指标是否和得分误差 相符。
实验结果如下图所示。横坐标表示每一个样本的得分误差 ,纵坐标表示每个样本的不确定性分 ,x/y
轴归一化成 0~1
之间。曲线分别代表:相同得分误差的所有样本中,25%, 50%, 75%
百分位的不确定分连接而成的曲线。可以看到,得分误差 和不确定性得分 成正向关系:得分误差越大,不确定性得分越大。
实验结果表明: 和得分误差 比较匹配,而且置信度指标计算量非常小。
准确的、且经过良好校正 calibration
的 CTR
预估不仅对于竞价至关重要,还允许将竞价中的优化问题(如拍卖机制优化、出价优化)和机器学习问题解耦。
很多因素可能会导致模型产生系统性偏差,如:模型的前提假设不成立、优化算法本身的缺陷、训练或预测期间无法获取某些重要特征。为解决该问题,我们提出 calibration layer
来校正预测的 CTR
,使得预测 CTR
和经验 CTR
适配。
假设模型在数据集 上的平均预测 CTR
为 ,数据集 的经验 CTR
为 ,其中 。预测偏差 bias
为 。
模型校正是提供一个校正函数 ,使得校正后的平均预测 CTR
尽可能接近 。
一个简单方法是基于泊松回归来校正。定义: ,其中 都是待学习的参数,通过泊松回归在数据集 上学习。
一个通用的方法是利用分段线性函数来拟合 bias
曲线,其中必须满足 是单调递增函数。如:采用 isotonic
回归。这种方式的优点是通用性更强,无论平均预测 CTR
较高还是较低,它都能很好的校正。
值得注意的是,如果没有很强的、额外的假设,系统中固有的反馈回路使得我们无法为校正的影响impact
提供理论上的保证。
对于数据集,我们通常需要对不同数据区间对应的子集进行校正。因为很有可能模型对 “女性” 用户预测的平均 CTR
偏高,对“男性”用户预测的平均 CTR
偏低,但是整体预测的平均 CTR
较好。这时我们需要分别针对 “女性” 用户、“男性” 用户分别进行模型校正。
可扩展scalable
的机器学习的一个重要方面是管理 installation
的规模,包括构成机器学习系统的所有配置、开发人员、代码、计算资源。一个有趣的案例是机器学习特征空间的管理。
我们可以将特征空间刻画为上下文和语义的一组信号,其中每个信号(例如“广告中的单词”、“原产国”等等)都可以转换为一组实值特征以供学习。在大多数系统中,许多开发人员可能会异步地进行信号开发。一个信号可能有许多版本,比如特征升级。工程团队可能会消费那些并不是他们直接开发的信号。信号可以在多个不同的学习平台上使用,并应用于不同的学习问题。
为了处理 use cases
的组合增长,我们部署了元数据索引,用于管理数百个活跃模型对数千个输入信号的消费。
有效的自动化信号消费管理可以确保在第一时间内正确地完成更多的学习。这减少了浪费和重复的工程工作,节省了很多工程时间。在运行学习算法之前验证配置的正确性,可以消除很多模型不可用的情况,从而节省大量潜在的资源浪费。
这里我们简要报告几个(可能令人惊讶)没有产生显著收益的方向。
积极的特征哈希 Aggressive Feature Hashing
:近年来,出现了一系列工作围绕使用特征哈希来降低大规模机器学习的内存成本。我们测试了这种方法,但是发现:这种方式会带来模型预测能力的明显下降,因此无法应用。
dropout
:基于 dropout
的正则化并不会带来任何好处,甚至会降低模型预测能力。其根本原因是:在 CTR
预估任务中数据特征非常稀疏,经过 dropout
之后更为稀疏。
在计算机视觉任务中,输入特征是非常密集的,且标签是比较干净的。此时 dropout
将高度相关的特征分离开,从而产生更健壮的分类器。
而在 CTR
预估任务中,输入特征是非常稀疏的,且标签是带噪音的。此时 dropout
会显著降低学习的数据量,降低学习效果。
Feature Bagging
:通过在特征空间上 个重叠子集来获取 个训练样本子集,然后基于这些样本子集训练 个模型。对于未知样本,最终这 个模型的预测均值为该样本的预测结果。这是一种管理 bias-variance tradeoff
的潜在有效方法。该方法略微降低模型预测能力,大约损失 AucLoss
的 0.1%
到 0.6%
。
特征向量归一化Feature Vector Normalization
:由于每个样本的非稀疏特征不同,导致样本特征向量的长度不同。我们尝试将样本归一化 ,最终效果不理想。我们猜测原因是:per-coordinate
的学习率和样本归一化相互作用,导致效果下降。
点击率click-through rate: CTR
预估是价值数十亿美金的在线广告行业的核心问题。为了提高 CTR
预估的准确性,越来越多的数据被牵涉进来,使得 CTR
预估成为一个大规模的机器学习问题,具有海量样本和高维特征。
传统的解决方案是应用以并行方式训练的线性逻辑回归 logistic regression: LR
模型。具有 正则化的 LR
模型可以生成稀疏解,使得在线预估更快。
不幸的是,CTR
预估问题是一个高度非线性的问题。特别是,用户点击的生成涉及很多复杂的因素,例如广告质量、上下文信息、用户兴趣以及这些因素的复杂交互。为了帮助 LR
模型捕获非线性,人们探索了特征工程技术feature engineering technique
,这既费时又费力。
另一个方向是通过精心设计的模型捕获非线性。
Facebook
使用混合模型,将决策树和逻辑回归相结合。决策树起到了非线性特征变换的作用,其输出被馈入 LR
模型。然而,基于树的方法不适合非常稀疏和非常高维的数据。Rendle S. 2010
引入了因子分解机 Factorization Machine: FM
,它涉及使用二阶函数(或使用其它阶数的函数)的特征之间的交互。但是,FM
无法拟合数据中的所有通用非线性模式(比如比二阶更高的高阶模式)。在论文 《Learning Piece-wise Linear Models from Large Scale Data for Ad Click Prediction》
中,作者提出了一个分段线性模型以及针对大规模数据的训练算法,并将其命名为大规模分段线性模型Large Scale Piecewise Linear Model: LS-PLM
。LS-PLM
遵循分而治之的策略,即先将特征空间划分为若干个局部区域,然后在每个区域拟合一个线性模型,最后得到加权线性预测组合的输出。注意:这两步是以监督方式同时学习的,旨在最小化预测损失。
LS-PLM
在三个方面优于 web-scale
的数据挖掘:
nonlinearity
:有了足够多的划分区域,LS-PLM
可以拟合任何复杂的非线性函数。scalability
:和 LR
模型类似,LS-PLM
可以扩展到海量样本和高维特征。论文设计了一个分布式系统,可以在数百台机器上并行训练模型。在阿里巴巴在线生产系统中,每天都会训练和部署数十个具有数千万参数的 LS-PLM
模型。sparsity
:模型稀疏性是工业场景中 online serving
面临的实际问题。论文展示了具有 和 正则化的 LS-PLM
可以实现良好的稀疏性。带有稀疏正则化的 LS-PLM
的学习可以转化为一个非凸、非可微的优化问题,这个问题很难解决。论文针对此类问题提出了一种基于方向导数directional derivatives
和拟牛顿法的有效优化方法。
由于能够捕获非线性模式、以及对海量数据的可扩展性,LS-PLM
已经成为阿里巴巴在线展示广告系统display advertising system
中的主力 CTR
预估模型,并从 2012
年初以来为数亿用户提供服务。它还应用于推荐系统、搜索引擎、以及其它产品系统。
给定数据集 ,其中:
LS-PLM
算法基于分而治之的策略,将整个特征空间划分为一些局部区域,对每个区域采用广义线性分类模型:
其中:
将样本划分到 个区域, 对每个空间进行预测, 用于对结果进行归一化。
为模型参数。其中:
一种简单的情形是:
此时有:
这可以被认为是一种混合模型:
其中:
表示样本划分到区域 的概率。它满足:
表示在区域 中,样本 属于正类的概率。
我们主要研究这种简单的模型。
读者注:该模型的参数空间放大了 倍。考虑到
CTR
预估场景中,逻辑回归模型的参数规模可以高达十亿级,因此 不能太大。但是太小的 无法捕获足够多的非线性,因此该模型比较鸡肋。
下图说明了在一个 demo
数据集中,该 LS-PLM
和 LR
模型的差异。图 A)
是 demo
数据集,这是一个二分类问题,红点属于正类、蓝点属于负类。图 B)
显示了使用 LR
模型的分类结果,图 C)
显示了使用LS-PLM
模型的分类结果。可以清晰地看到 LS-PLM
能够捕获到数据中的非线性模式。
LS-PLM
模型的目标函数为:
其中:
loss
是负的对数似然损失函数:
和 是 和 正则化项:
这些正则化先计算每个维度在各区域的正则化,然后将所有维度的正则化直接累加。
但是, 范数和 范数都是非平滑函数。这导致目标函数是非凸的和非光滑的,使得很难应用那些传统的梯度下降优化方法或 EM
方法。
定义方向导数为:
当 时, 就是使得函数值 下降的方向。其中
对应于参数 的方向。
定义符号函数 为:
定义投影函数 为:
它表示将 投影到 定义的象限 orthant
。
如前所述,我们针对大规模 CTR
预估问题的目标函数既不是凸函数、也不是平滑函数。在这里,我们提出了一种通用且有效的优化方法来解决此类非凸问题。
由于我们目标函数的负梯度并不是对所有的 都存在,因此我们采用方向 来替代,其中该方向是最小化方向导数 。方向导数 对任何 和方向 都存在,这就是下面的引理。
引理:当目标函数 由一个损失函数、一个 正则化项、一个 正则化项组成时(比如前述的目标函数),那么方向导数 对任何 和方向 都存在。
证明过程:
第一项:因为 是光滑的、可微的,所以有:
这里的向量点积是将两个张量展平为两个一维向量,再进行点积。
第二项:
根据:
其中: 为 的第 列组成的向量; 是 的第 列组成的向量。
则有:
第三项:
考虑到:
因此有:
最终得到方向导数。
注意:这里的方向导数中假设 ,即右方向导数。
由于方向导数 对任何 和方向 都存在,因此当 的负梯度不存在时,我们选择最小化方向导数 的方向作为下降方向。
由于代价函数降低的幅度与方向 的长度有关,因此我们约束方向 的长度 ,其中 是一个常数。因此我们得到一个带约束的最优化问题:
命题:给定一个光滑的损失函数 、以及一个目标函数 ,则有界的、且最小化方向导数 的方向 如下:
其中:
证明见原始论文。
受 OWLQN
方法的启发,我们还限制模型参数在每次迭代中不改变符号sign
。在第 次迭代,给定最小化方向导数的方向 和旧的模型参数 ,则下一轮参数的象限约束为:
即:
得到最小化方向导数的方向 之后,我们并不是沿着 的方向更新参数,而是沿着由 LBFGS
计算的下降方向来更新模型参数(从而加快收敛速度,因为二阶优化算法收敛速度更快)。此时需要计算在给定象限上目标函数的逆海森矩阵,其中用到辅助向量 的序列。最后得到参数更新的方向 。 这里我们采用两个技巧:
首先,我们约束参数更新的方向位于针对于 的象限。
其次,由于我们的目标函数是非凸的,我们无法保证 为正定的。我们使用 作为条件来确保 是正定矩阵:当 时,采用 来更新;新当 时,采用 来更新。
其中 为参数更新的方向。
给定参数更新方向,我们使用回溯线性搜索backtracking line search
来找到合适的步长 。和 QWLQN
一样,我们将新的 投影到 给定的象限:
因此要想参数 符号发生改变,唯一的机会是当 时基于 的符号来改变。
LS-PLM
模型优化算法:
输入:训练集
输出:模型参数
步骤:
随机初始化参数 。
迭代: ,其中 为最大迭代步数。迭代步骤为:
计算 、 、 。
判断停止条件:如果 满足停止条件(如 ,或者 ),则停止迭代并返回 。否则继续迭代,并更新 :
上述伪代码相比标准 LBFGS
算法仅有几处不同:
这里我们首先提供针对大规模数据的 LS-PLM
模型的并行实现,然后介绍一个有助于大大加快训练过程的重要技巧。
为了在大规模setting
中应用LS-PLM
模型优化算法,我们使用分布式学习框架实现它,如下图所示。这是 parameter server
的变体。在我们的实现中,每个计算节点同时运行一个 server
节点和一个 worker
节点,目的是:
CPU
的计算能力。在传统的 parameter server setting
中,server
节点作为分布式 KV
存储来使用,具有 push/pull
操作的接口,计算成本低。将 server
节点与 worker
节点一起运行可以充分利用算力。128 GB
。通过运行在同一个计算节点上,server
节点和 worker
节点可以更好地共享和利用大内存。简而言之,框架中有两个角色:
worker
节点。每个 worker
结点存储部分训练样本,以及一个局部模型。该局部模型仅仅保存用于训练本地样本的模型参数。server
节点。每个 server
结点分别独立的存储全局模型中的一部分。在每次迭代过程中:
worker
首先用本地数据和局部模型计算损失和下降方向(数据并行)。server
将损失 loss
、方向 、以及其它需要用于计算 的项汇总,从而计算 (模型并行)。worker
同步最新的 。 除了通用并行实现之外,我们还优化了在线广告环境中的实现。CTR
预估任务中的训练样本通常具有非常相似的共同特征common feature
模式。如下图所示:用户 U1
在一个 session
中看到三条广告,因此产生三个样本。事实上,这三个样本共享 U1
的画像特征(如:年龄、性别、城市、兴趣爱好等)。
由于大量的计算集中在 和 , 因此可以将计算拆解成样本共享特征和样本非共享特征:
其中: 表示样本的共享特征, 为样本的非共享特征。
对于共享特征,每个用户只需要计算一次并保存起来,后续该用户的所有样本都可以直接复用该计算结果。
具体而言,我们在以下三个方面优化了具有共同特征的并行实现技巧::
worker
中。由于阿里巴巴的生产数据具有共享特征的模式,因此该技巧可以大幅度提高训练速度。在 100
个 worker
、每个 worker
12
个 CPU core
、11GB
内存的条件下,实验结果表明:内存显著降低到 1/3
,计算速度加快 12
倍左右。
数据集:我们的数据集来自于阿里巴巴的移动展示广告产品系统。我们在连续的一段时间收集了七个数据集,旨在评估所提出模型的一致性consist
性能。在每个数据集中,训练集/验证集/测试集是从不同的日期不相交地收集的,比例约为 7:1:1
。我们的评估指标为 AUC
。
数据集的详细数据如下表所示。
区域数量 的效果:参数 的物理意义是区域数量,它控制了模型的容量。
越大则模型容量越大,拟合能力越强,但是模型训练代价也越大。因此实际应用中必须在模型的拟合能力和训练成本之间平衡。
模型在数据集 1
上的结果如下图所示。我们测试了 M = 6,12,24,36
。可以看到:
AUC
明显强于 。AUC
相对于 虽然有所提升,但是提升幅度很小。因此后续实验采用 。
正则化的效果:为了使得模型更简单、泛化能力更强,我们使用了了 和 正则化来约束模型使得模型更稀疏。这里我们评估这两个正则化的效果,结果如下表所示。可以看到:
9.4%
的非零权重,从而保留了 18.7%
的特征。1.9%
的非零权重,从而保留了 12.7%
的特征。在这个实验中:; 和 在范围 {0.01, 0.1, 1, 10}
内执行网格搜索,最后 表现最佳。
和 LR
的对比:LS-PLM
和 LR
模型在7
个数据集上的对比如下图所示(评估指标为测试 auc
)。
所有超参数通过 grid search
搜索。其中:
LS-PLM
的超参数 , 最佳超参数为 。LR
采用 正则化,超参数 ,最佳超参数为 。可以看到:
LS-PLM
显著超越了 LR
,平均 AUC
提升为 1.4%
,这对于在线广告系统的整体性能有显著影响。LS-PLM
可以安全地部署到在线生产系统中。