Google广告点击率预估实践经验总结:在线学习、内存优化、模型评估、置信估计、校准预测、特征管理

文摘   2024-09-22 12:20   广东  

预测广告点击通过率(CTR)是一个大规模学习问题,对于数十亿美元的在线广告行业至关重要。我们展示了从部署的CTR预测系统中最近实验中提取的一系列案例研究和主题。这些包括在基于FTRL-Proximal在线学习算法(具有出色的稀疏性和收敛特性)的传统监督学习背景下的改进,以及使用每坐标学习率。我们还探索了在现实世界系统中最初可能出现在传统机器学习研究领域之外的一些挑战。这些包括节省内存的有用技巧、评估和可视化性能的方法、为预测概率提供置信估计的实用方法、校准方法,以及自动管理特征的方法。最后,我们还详细说明了几个对我们来说并没有带来好处的方向,尽管在文献中的其他地方有希望的结果。本文的目标是强调理论进步与这个工业环境中的实际工程之间的密切关系,并展示在复杂动态系统中应用传统机器学习方法时出现的挑战的深度。

我们翻译解读论文:广告点击率预测来自战壕的视角,文末有论文链接。

作者:张长旺,图源:旺知识

1. 引言

在线广告是一个数十亿美元的行业,是机器学习领域的一个巨大成功故事之一。赞助搜索广告、上下文广告、展示广告和实时出价拍卖都严重依赖于学习模型准确、快速、可靠地预测广告点击率的能力。这个问题设置也推动了该领域解决即使是十年前也几乎无法想象的规模问题。一个典型的工业模型可能每天提供数十亿次事件的预测,使用相应的大型特征空间,然后从这些数据的大量中学习。在本文中,我们展示了从Google用于预测赞助搜索广告点击率的部署系统中最近实验中提取的一系列案例研究。因为这个问题设置现在已经得到了很好的研究,我们选择关注一系列在工作系统中同样重要但得到较少关注的主题。因此,我们以与传统上对设计有效学习算法问题同样的严谨性,探讨了内存节省、性能分析、预测置信度、校准和特征管理等问题。本文的目标是让读者感受到在真实工业环境中出现的挑战的深度,以及分享可能应用于其他大规模问题领域的技巧和见解。

2. 系统概述

当用户进行搜索q时,一组候选广告会根据广告商选择的关键词与查询q匹配。然后,拍卖机制决定是否向用户展示这些广告,它们展示的顺序,以及如果用户点击了他们的广告,广告商需要支付的价格。除了广告商出价外,拍卖的一个重要输入是,对于每个广告a,估计P(click | q, a),即如果展示广告a,它被点击的概率。我们系统中使用的特征来自多种来源,包括查询、广告创意文本和各种与广告相关的元数据。数据往往是极其稀疏的,通常每个示例中只有一小部分非零特征值。像正则化逻辑回归这样的方法非常适合这个问题设置。需要每天进行数十亿次预测,并在观察到新的点击和非点击时快速更新模型。当然,这个数据速率意味着训练数据集是巨大的。数据由基于Photon系统的流服务提供——有关详细讨论,请参见[2]。因为近年来大规模学习已经得到了如此好的研究(例如,参见[3]),我们没有在本文中详细描述我们的系统架构。我们将注意到,训练方法与Google Brain团队描述的Downpour SGD方法相似[8],不同的是我们训练的是单层模型而不是多层的深度网络。这使我们能够处理比其他报道更大的数据集和更大的模型,据我们所知,我们的模型拥有数十亿个系数。因为训练好的模型被复制到许多数据中心进行服务(见图1),我们更关心服务时的稀疏化,而不是在训练期间。

3. 在线学习与稀疏性

对于大规模学习,在线算法对于广义线性模型(例如,逻辑回归)具有许多优势。尽管特征向量x可能有数十亿个维度,但通常每个实例只有数百个非零值。这使得通过从磁盘或网络上流式传输示例来高效地在大型数据集上进行训练成为可能[3],因为每个训练示例只需要考虑一次。

为了精确地呈现算法,我们需要建立一些符号。我们用粗体表示向量,如gt ∈ Rd,其中t索引当前训练实例;向量gt中的第i个条目表示为gt,i。我们还使用压缩求和符号:

如果我们希望使用逻辑回归来建模我们的问题,我们可以使用以下在线框架。在第t轮,我们需要对由特征向量xt ∈ Rd描述的实例进行预测;给定模型参数wt,我们预测pt = σ(wt · xt),其中σ(a) = 1/(1 + exp(−a))是sigmoid函数。然后,我们观察标签yt ∈ {0, 1},并承受由此产生的LogLoss(逻辑损失),给出为:

给定p的yt的负对数似然。很容易证明▽ℓt(w) = (σ(w · xt) − yt)xt = (pt − yt)xt,这个梯度是我们优化目的所需要的。在线梯度下降1(OGD)对这类问题非常有效,它以最少的计算资源产生出色的预测准确性。然而,在实践中,另一个关键考虑因素是最终模型的大小;由于模型可以稀疏存储,w中的非零系数数量是决定因素。

在线梯度下降(OGD)本质上与随机梯度下降相同;“在线”这个名字强调我们不是在解决批量问题,而是在预测一系列需要不需要IID的示例上。不幸的是,OGD在产生稀疏模型方面并不特别有效。实际上,简单地向损失梯度(▽wℓt(w))添加L1罚项的子梯度几乎永远不会产生完全为零的系数。更复杂的方法,如FOBOS和截断梯度确实成功地引入了稀疏性[11, 20]。Regularized Dual Averaging (RDA)算法产生的准确性与稀疏性权衡比FOBOS更好[32]。然而,我们观察到梯度下降式方法在数据集上比RDA产生更好的准确性[24]。

那么,问题是我们能否同时获得RDA提供的稀疏性和OGD的改进准确性呢?答案是肯定的,使用“跟随(近端)正则化领导者”算法,或FTRL-Proximal。没有正则化,这个算法与标准的在线梯度下降相同,但由于它使用替代的懒惰表示法来表示模型系数w,L1正则化可以更有效地实现。FTRL-Proximal算法以前以一种使理论分析方便的方式被框架化[24]。这里,我们专注于描述一个实际的实现。给定一系列梯度gt ∈ Rd,OGD执行更新

其中ηt是一个非递增的学习率计划,例如,ηt = 1 √t。FTRL-Proximal算法改用更新

我们定义σs以学习率计划为依据,使得σ1:t = 1 ηt。表面上看,这些更新看起来非常不同,但事实上当我们取λ1 = 0时,它们产生相同的系数向量序列。然而,FTRL-Proximal更新与λ1 > 0确实在诱导稀疏性方面做得很好(见下面的实验结果)。粗略一看,人们可能会认为FTRL-Proximal更新比梯度下降更难实现,或者需要存储所有过去的系数。事实上,然而,每个系数只需要存储一个数字,因为我们可以将更新重写为在r w ∈ Rd的argmin:

因此,如果我们存储了:

在第t轮开始时我们通过让

并在每个坐标基础上通过

来求解wt+1的闭合形式。因此,FTRL-Proximal在内存中存储z ∈ Rd,而OGD存储w ∈ Rd。算法1采取这种方法,还添加了每个坐标的学习率计划(接下来讨论),并支持强度λ2的L2正则化。或者,我们可以存储−ηtzt而不是直接存储zt;那么,当λ1 = 0时,我们存储的正是普通的梯度下降系数。注意,当ηt是一个常数值η且λ1 = 0时,很容易看出与在线梯度下降的等价性,因为我们有wt+1 = −ηzt = −η ∑t s=1 gs, 正是梯度下降所扮演的点。

实验结果: 在早期对数据的较小原型版本的实验中,McMahan [24]表明,具有L1正则化的FTRL-Proximal在大小与准确性权衡方面显著优于RDA和FOBOS;这些先前的结果在表1的第2和第3行中总结。在许多情况下,一个简单的启发式方法几乎和更有原则的方法一样好,但这不是其中之一。我们的稻草人算法,OGD-Count,只是维护一个它看到的特征的数量;直到该计数通过阈值k,系数固定为零,但在计数通过k后,在线梯度下降(没有任何L1正则化)像往常一样进行。为了测试FTRL-Proximal与这个更简单的启发式方法,我们在非常大的数据集上运行。我们调整k以产生与FTRL-Proximal相同的准确性;使用更大的k会导致更差的AucLoss。结果在表1的第4行中给出。总的来说,这些结果表明FTRL-Proximal在相同或更好的预测准确性下显著提高了稀疏性。

3.1 每坐标学习率

在线梯度下降的标准理论建议使用全局学习率计划ηt = 1 √t,这对所有坐标都通用[34]。一个简单的思想实验表明,这可能不是理想的:假设我们使用逻辑回归估计10个硬币的Pr(heads | coini)。在每一轮t中,一个单一的硬币i被翻转,我们看到了一个特征向量x ∈ R10,其中xi = 1,对于j ̸= i,xj = 0。因此,我们实际上是在解决10个独立的逻辑回归问题,它们被打包成一个单一问题。我们可以运行10个独立的在线梯度下降副本,其中算法实例对于问题i将使用一个像ηt,i = 1 √nt,i这样的学习率,其中nt,i是到目前为止翻转硬币i的次数。如果硬币i比硬币j更频繁地被翻转,那么硬币i的学习率将更快地减少,这反映了我们有更多的数据;学习率将对硬币j保持较高,因为我们对当前估计的置信度较低,因此需要对新数据做出更快的反应。

另一方面,如果我们将这看作是一个单一的学习问题,标准的学习率计划ηt = 1 √ t被应用于所有坐标:也就是说,即使硬币i没有被翻转,我们也减少了硬币i的学习率。这显然不是最佳行为。事实上,Streeter和McMahan [29]已经展示了一个标准算法性能在渐近意义上比运行独立副本要差得多的问题族。2因此,至少对于某些问题,每个坐标的学习率可以提供显著的优势。

回想一下gs,i是梯度gs = ▽ℓs(ws)的第i个坐标。然后,仔细分析显示每个坐标的速率

在某种意义上接近最优。3在实践中,我们使用一个学习率,其中α和β被选择以在渐进验证下获得良好的性能(见第5.1节)。我们还尝试了使用nt,i计数的除0.5以外的幂。α的最优值可以根据特征和数据集变化很大,β = 1通常足够好;这只是确保早期学习率不会太高。正如所述,这个算法要求我们跟踪每个特征的梯度和梯度平方的总和。第4.5节介绍了一个替代的节省内存的公式,其中梯度平方的总和被摊销到许多模型上。关于每个坐标学习率的相对简单的分析出现在[29]中,以及在小型Google数据集上的实验结果;这项工作直接建立在Zinkevich [34]的方法之上。对FTRLProximal的更理论的处理出现在[26]中。Duchi等人[10]分析了RDA和镜像下降版本,并给出了许多实验结果。

实验结果: 我们通过测试两个相同的模型来评估每个坐标学习率的影响,形式上,遗憾(参见,例如,[34])对于标准梯度下降是Ω(T 2 3 ),而独立副本产生遗憾O(T 1 2 )。3对于一个固定的梯度序列,如果我们取α是wi的最大允许幅度的两倍,β = 0,我们限制我们的遗憾在任何非递减每个坐标学习率计划的最佳可能遗憾界限的√2以内[29]。一个使用单一全局学习率,另一个使用每个坐标学习率。为每个模型分别调整基础参数α。我们在代表性数据集上运行,并使用AucLoss作为我们的评估指标(见第5节)。结果表明,使用每个坐标学习率比全局学习率基线减少了11.2%的AucLoss。为了将这个结果放在上下文中,在我们的设置中,AucLoss的1%减少被认为是很大的。

4. 在大规模上节省内存 

如上所述,我们使用L1正则化在预测时节省内存。在这一部分中,我们描述了在训练期间节省内存的其他技巧。

4.1 概率特征包含

在许多具有高维数据的领域中,绝大多数特征都非常罕见。事实上,在我们的一些模型中,有一半的唯一特征在整个训练集的数十亿个示例中只出现过一次。4追踪这些罕见特征的统计数据代价很高,而这些特征永远不会有任何实际用途。不幸的是,我们事先不知道哪些特征会很少见。在在线设置中预处理数据以删除罕见特征是有问题的:额外的读取然后写入数据非常昂贵,如果一些特征被丢弃(比如说,因为它们出现的次数少于k次),就不再可能尝试使用这些特征来估计预处理的成本。一种通过实现L1正则化来在训练中实现稀疏性的方法不需要跟踪具有零系数的特征的任何统计数据(例如,[20])。这允许不太有信息量的特征在训练过程中被移除。然而,我们发现这种风格的稀疏化与像FTRL-Proximal这样在训练中跟踪更多特征并仅在服务时稀疏化的方法相比,会导致不可接受的准确性损失。另一种常见的解决方案,哈希碰撞,也没有带来有用的好处(见第9.1节)。我们探索的另一种方法是概率特征包含,其中新特征在首次出现时以概率方式包含在模型中。这实现了预处理数据的效果,但可以在在线设置中执行。我们测试了这种方法的两种方法。

泊松包含。当我们遇到一个尚未包含在我们的模型中的特征时,我们仅以概率p将其添加到模型中。一旦一个特征被添加,在随后的观察中我们像通常一样更新其系数值和OGD使用的相关统计数据。一个特征需要被看到多少次才会被添加到模型中遵循几何分布,期望值为1 p。

布隆过滤器包含。我们使用一组滚动计数布隆过滤器[4, 12]来检测在训练中首次遇到的特征。一旦一个特征根据过滤器出现超过n次,我们就将其添加到模型中,并在随后的观察中像上面那样用于训练。注意,这种方法也是概率性的,因为计数布隆过滤器能够产生假阳性(但没有假阴性)。也就是说,我们有时会包含一个实际上出现次数少于n次的特征。

实验结果。这些方法的效果见表2,表明两种方法都很好,但布隆过滤器方法在RAM节省与预测质量损失之间提供了更好的权衡。

4.2 用较少的位编码值


OGD的朴素实现使用32或64位浮点编码来存储系数值。浮点编码通常很有吸引力,因为它们的动态范围大,精度细粒度;然而,对于我们的正则化逻辑回归模型的系数来说,这结果证明是过度的。几乎所有的系数值都在(−2, +2)的范围内。分析表明,细粒度精度也不需要[14],这激发了我们探索使用固定点q2.13编码而不是浮点。在q2.13编码中,我们为二进制小数点左边保留两位,右边保留十三位,为符号保留一位,每个值总共使用16位。这种降低的精度可能会在OGD设置中造成累积舍入误差的问题,OGD设置需要累积大量的小步骤。(事实上,我们甚至在使用32位浮点而不是64位时也看到了严重的舍入问题。)然而,一个简单的随机舍入策略纠正了这一点,代价是增加了一个小的额外遗憾项[14]。关键是通过显式舍入,我们可以确保离散化误差的平均值为零。特别地,如果我们存储系数w,我们设置


其中R是在0和1之间均匀分布的随机偏差。gi,rounded然后以q2.13定点格式存储;超出[−4, 4)范围的值被剪辑。对于FTRL-Proximal,我们可以以这种方式存储ηtzt,其大小与wt相似。


实验结果。在实践中,我们观察到使用q2.13编码的模型与使用64位浮点值的模型相比没有可测量的损失,并且我们节省了75%的系数存储RAM。

4.3 训练许多相似的模型

当测试对超参数设置或特征的更改时,通常很有用评估许多轻微变体。这种常见的用例允许有效的训练策略。这一行中一个有趣的工作是[19],它使用一个固定的模型作为先验,并允许变体对残差错误进行评估。这种方法非常便宜,但不允许评估特征删除或替代学习设置。我们的主要方法依赖于这样一个观察,即每个坐标依赖于一些可以高效共享的数据,而其他数据(例如,系数值本身)特定于每个模型变体,不能共享。如果我们在哈希表中存储模型系数,我们可以使用单个表来存储所有变体,摊销存储密钥(要么是一个字符串,要么是一个多字节哈希)的成本。在下一节(4.5)中,我们将展示每个模型的学习率计数器ni可以被所有变体共享的统计数据所取代,这也减少了存储。任何不包含特定特征的变体将该特征的系数存储为0,浪费了少量空间。(我们通过将这些特征的学习率设置为0来执行。)由于我们仅训练高度相似的模型,因此不表示密钥和每个模型的计数器的内存节省量远大于不共享特征的损失。当一起训练几个模型时,所有每个坐标的元数据(如每个坐标学习率所需的计数)的摊销成本都会降低,额外模型的增量成本仅取决于需要存储的额外系数值。这不仅节省了内存,还节省了网络带宽(值以相同的方式通过网络通信,我们只读取一次训练数据),CPU(只有一个哈希表查找而不是许多,并且仅从训练数据生成特征一次而不是每个模型一次),以及磁盘空间。这种捆绑架构显著增加了我们的训练能力。

4.4 单个值结构

有时我们希望评估非常大的模型变体集合,这些集合只通过添加或删除小组特征而有所不同。在这里,我们可以采用一个更压缩的数据结构,它是有损的并且特别定制的,但在实践中给出了非常有用的结果。这个单个值结构存储每个坐标的一个系数值,该值由包含该特征的所有模型变体共享,而不是为每个模型变体存储单独的系数值。使用位字段来跟踪哪些模型变体包含给定坐标。注意,这在精神上类似于[19]中的方法,但也允许评估特征删除以及添加。与4.3节中的方法相比,RAM成本随着额外模型变体的增加而增长得更慢。学习过程如下。对于OGD中的一个给定更新,每个模型变体使用它包含的坐标子集计算其预测和损失,利用存储的每个系数的单个值。对于每个特征i,每个使用i的模型计算给定系数的新理想值。得到的结果值被平均并存储为将在下一步由所有变体共享的单个值。我们通过将使用单个值结构训练的大组模型变体与使用4.3节设置训练的相同变体进行比较,来评估这个启发式方法。结果表明,变体之间的相对性能几乎相同,但单个值结构节省了一个数量级的RAM。

4.5 使用计数计算学习率

正如第3.1节所述,我们需要为每个特征存储梯度之和以及梯度平方之和。梯度计算的准确性很重要,但学习率计算的粗略近似可能是可以接受的。假设所有包含给定特征的事件具有相同的概率。(一般来说,这是一个糟糕的近似,但对这个问题有用。)进一步假设模型已经准确地学习了概率。如果有N个负事件,P个正事件,那么概率是p = P/(N + P)。如果我们使用逻辑回归,正事件的梯度是p − 1,负事件的梯度是p,学习率方程(2)所需的梯度之和是

这种无情的近似允许我们只跟踪计数N和P,并放弃存储∑ g2 t,i。经验上,使用这种近似计算的学习率对我们来说和使用完整总和计算的学习率一样有效。使用4.3节的框架,总存储成本较低,因为所有变体模型具有相同的计数,因此N和P的存储成本被摊销。计数可以使用变长位编码存储,而且绝大多数特征不需要很多位。

4.6 抽样训练数据

典型的CTR远低于50%,这意味着正例(点击)相对较少。因此,简单的统计计算表明,点击在学习能力上相对更有价值。我们可以利用这一点,通过包含在我们的样本中:

• 至少有一个广告被点击的任何查询。

• 在没有广告被点击的查询中,一部分r ∈ (0, 1]的查询。

在查询级别进行抽样是可取的,因为计算许多特征需要对查询短语进行共同处理。当然,天真地在这种抽样数据上训练会导致显著的预测偏差。这个问题很容易解决,通过为每个示例分配一个重要性权重ωt,

由于我们控制抽样分布,我们不必像在一般样本选择[7]中那样估计权重ω。重要性权重简单地放大了每个事件的损失,方程(1),因此也放大了梯度。为了看到这有预期的效果,考虑在未抽样数据中随机选择的事件t对抽样目标函数的预期贡献。让st是事件t被抽样的概率(要么是1要么是r),因此根据定义st = 1/ωt 。这样,我们有

期望的线性意味着在抽样训练数据上的预期加权目标函数等于原始数据集上的目标函数。实验已经验证了即使对未点击查询进行相当积极的抽样,对准确性的影响也非常轻微,并且预测性能不会特别受到r特定值的影响。

5. 评估模型性能 

通过使用记录的历史数据,以最便宜的方式评估我们的模型质量。(在实时流量上评估模型是重要但更昂贵的评估部分;参见,例如,[30]。)因为不同的指标对模型变化的反应不同,我们发现通常评估模型变化跨多种可能的性能指标是有用的。我们计算诸如AucLoss(即1 − AUC,其中AUC是标准ROC曲线下面积度量[13])、LogLoss(见方程(1))和SquaredError等指标。为了一致性,我们还设计了我们的指标,以便更小的值总是更好的。

5.1 渐进验证

我们通常使用渐进验证(有时称为在线损失)而不是交叉验证或在保留数据集上评估。因为计算梯度的学习需要计算预测,我们可以便宜地流式传输这些预测进行后续分析,每小时聚合一次。我们还在数据的各种子切片上计算这些指标,例如按国家、查询主题和布局分解。在线损失是对我们服务查询准确性的良好代理,因为它只衡量在我们训练之前最近的最数据——与模型服务查询时发生的完全类似。在线损失也比保留验证集有更好的统计数据,因为我们可以使用100%的数据进行训练和测试。这很重要,因为小的改进在规模上可能有有意义的影响,并且需要大量的数据才能以高置信度观察到。绝对指标值通常是误导性的。即使预测是完美的,LogLoss和其他指标也会根据问题的难度(即贝叶斯风险)而变化。如果点击率接近50%,最佳可实现的LogLoss要比点击率接近2%时高得多。这很重要,因为点击率因国家和查询而异,因此平均值在一天的过程中会发生变化。因此,我们总是看相对变化,通常表示为相对于基线模型的指标的百分比变化。我们的经验是,相对变化在时间上更加稳定。我们还确保仅比较从完全相同的数据计算出的指标;例如,在模型上计算的损失指标在同一时间范围内与在另一个模型上计算的相同损失指标不同。

5.2 通过可视化深入理解


大规模学习的一个潜在陷阱是,聚合性能指标可能隐藏特定于数据子集的效果。例如,一个小型聚合准确性获胜可能实际上是由不同国家或特定查询主题中的正面和负面变化的混合引起的。这使得提供不仅在聚合数据上,而且在数据的各种切片上(例如按国家或按主题)的性能指标变得至关重要。因为有数百种有意义的切片方式,所以我们能够有效地检查数据的视觉摘要至关重要。为此,我们开发了一个名为GridViz的高维交互式可视化工具,以全面了解模型性能。


图2显示了GridViz的一个视图,显示了两个模型与控制模型相比按查询主题切片的一组切片。指标值由彩色单元表示,行对应模型名称,列对应数据的每个唯一切片。列宽表示切片的重要性,并且可以设置为反映数量,如展示次数或点击次数。单元的颜色反映了与选定基线的度量值,这使得快速扫描异常和兴趣区域以及对整体性能的直观理解成为可能。当列足够宽时,显示了选定度量的数值。可以选择多个度量;这些在每行中一起显示。当用户将鼠标悬停在单元格上时,会弹出给定单元格的详细报告。


因为有数百种可能的切片,我们设计了一个交互式界面,允许用户通过下拉菜单或对切片名称的正则表达式来选择不同的切片组。列可以排序,并且可以根据手头的数据修改色阶的动态范围。总的来说,这个工具使我们能够显著提高对数据的广泛子集的模型性能的理解,并识别改进的高影响力领域。


6. 置信估计 


对于许多应用来说,不仅要估计广告的CTR,而且要量化预测的预期准确性是很重要的。特别是,这些估计可以用来衡量和控制探索/利用权衡:为了做出准确的预测,系统有时必须展示它拥有很少数据的广告,但这应该与展示已知是好的广告的好处相平衡[21, 22]。置信区间捕捉了不确定性的概念,但由于实际和统计原因,它们不适用于我们的应用。


标准方法将评估一个完全收敛的批量模型的预测置信度,该模型没有正则化;我们的模型是在线的,不假设IID数据(因此收敛甚至没有被很好地定义),并且高度正则化。标准统计方法(例如,[18],第2.5节)还需要求逆一个n × n矩阵;当n以十亿计时,这是不可行的。此外,任何置信估计都必须在预测时非常便宜地计算——比如说,与做出预测本身的时间一样多。我们提出了一个我们称之为不确定性分数的启发式方法,它在计算上是可行的,并且在经验上很好地量化了预测准确性。基本观察是学习算法本身在用于学习率控制的每个特征计数nt,i中保持了不确定性的概念。对于ni较大的特征,得到较小的学习率,正是因为我们相信当前的系数值更有可能是准确的。逻辑损失梯度相对于对数几率得分是(pt − yt),因此绝对值有界为1。因此,如果我们假设特征向量被归一化,使得|xt,i| ≤ 1,我们可以限制观察到一个训练示例(x, y)时对数几率预测的变化。为了简单起见,考虑λ1 = λ2 = 0,使得FTRL-Proximal等同于在线梯度下降。让


并遵循方程(2),我们有


其中η是学习率向量。我们定义不确定性分数为上界u(x) ≡ αη· x;它可以像预测p = σ(w · x)一样,用一个稀疏点积计算。

实验结果。我们通过以下方法验证了这种方法。首先,我们使用稍微不同的特征在真实数据上训练了一个“真实”模型。然后,我们丢弃了真实的点击标签,并根据“真实”模型的预测作为真实CTR采样了新的标签。这是必要的,因为评估置信度程序的有效性需要知道真实标签。然后,我们在重新标记的数据上运行FTRL-Proximal,记录预测pt,这允许我们将预测的准确性与对数几率空间中的准确性进行比较,et = |σ−1(pt)−σ−1(p∗ t)|其中p∗ t是真实CTR(由真实模型给出)。图3将错误et作为不确定性分数ut = u(xt)的函数进行了绘制;存在高度相关性。额外的实验表明,不确定性分数在上述评估制度下的表现与通过在数据的随机子样本上训练的32个模型的bootstrap获得的更昂贵的估计相当。

7. 校准预测


准确和校准良好的预测不仅对运行拍卖至关重要,而且允许整体系统设计松耦合,将拍卖中的优化问题与机器学习机制分开。系统偏差(预测和观察到的CTR之间的平均差异)可能是由多种因素引起的,例如,不准确的建模假设、学习算法的缺陷,或在训练和/或服务时不可用的特征。为了解决这个问题,我们可以使用校准层将预测CTR与观察到的点击率相匹配。如果我们在数据片d上进行校准,那么平均而言,当我们预测p时,实际观察到的CTR接近p。我们可以通过应用校正函数τd(p)来改善校准,其中p是预测的CTR,d是训练数据的分区元素。我们定义成功为在数据的广泛可能分区上给出校准良好的预测。对τ的简单建模方法是拟合一个函数τ(p) = γpκ到数据。我们可以使用Poisson回归在聚合数据上学习γ和κ。一种更通用的方法是使用分段线性或分段常数校正函数,能够应对更复杂的偏差曲线形状。唯一的限制是映射函数τ应该是单调的(单调递增)。我们可以使用等单调回归来找到这样的映射,它在受到该约束的情况下计算输入数据的加权最小二乘拟合(参见,例如,[27, 23])。这种分段线性方法显著减少了预测在范围的高低端的偏差,与上述合理的基线方法相比。值得注意的是,如果没有强有力的额外假设,系统中的固有反馈回路使得为校准的影响提供理论保证是不可能的[25]。


8. 自动化特征管理

可扩展机器学习的一个重要方面是管理安装的规模,包括构成机器学习系统的所有配置、开发人员、代码和计算资源。由几个团队组成的安装,对数十个特定领域的问题的建模,需要一些开销。一个特别有趣的案例是特征空间的管理工作。我们可以将特征空间描述为一组上下文和语义信号,其中每个信号(例如,“广告中的词”、“原产国”等)可以转换为学习的真实值特征集。在大型安装中,许多开发人员可能会异步工作在信号开发上。一个信号可能有许多版本,对应于配置更改、改进和替代实现。一个工程团队可能会消耗他们不直接开发的信号。信号可能会在多个不同的学习平台上使用,并应用于不同的学习问题(例如,预测搜索与展示广告CTR)。为了处理用例的组合增长,我们部署了一个元数据索引,用于管理数百个输入信号由数百个活跃模型消费。索引信号被手动和自动注释,用于各种关注点;例如包括弃用、平台特定可用性和领域特定适用性。由新和活跃模型消耗的信号通过自动警报系统进行审查。不同的学习平台共享一个公共接口,用于向中央索引报告信号消耗。当一个信号被弃用(例如,当提供了一个更新的版本时),我们可以快速识别所有使用该信号的消费者,并跟踪替换工作。当一个信号的改进版本变得可用时,可以提醒消费者尝试新版本。

新信号可以通过自动测试进行审查,并被列入白名单以供包含。白名单既可以用来确保生产系统的正确性,也可以用来学习系统使用自动特征选择。不再被消耗的旧信号被自动标记为代码清理,以及删除任何相关数据。有效的自动信号消费管理确保更多的学习第一次就正确完成。这减少了浪费和重复的工程努力,节省了许多工程小时。在运行学习算法之前验证配置的正确性消除了许多可能导致不可用模型的情况,节省了大量潜在的资源浪费。

9. 不成功的实验 

在这最后一节中,我们简要报告了一些(可能令人惊讶地)没有带来显著好处的方向。

9.1 积极的特征哈希

近年来,围绕使用特征哈希来降低大规模学习RAM成本的研究活动非常活跃。值得注意的是,[31]报告了使用哈希技巧将能够学习个性化垃圾邮件过滤模型的特征空间投影到只有224个特征的空间,从而使得模型小到足以容易地放入一台机器的RAM中,并取得了优异的结果。类似地,Chapelle报告了使用224个结果特征对展示广告数据进行建模[6]。我们测试了这种方法,但发现我们无法在不造成可观察损失的情况下将投影降低到数十亿特征以下。这对我们来说并没有提供显著的节省,我们更倾向于保持可解释的(非哈希)特征向量。

9.2 Dropout


最近的工作对训练中的新颖技术——随机“dropout”感兴趣,特别是在深度信念网络社区[17]。主要思想是在输入示例向量中独立地以概率p随机移除特征,并在测试时通过将结果权重向量乘以(1 − p)来补偿。这被视为一种正则化形式,模拟了对可能的特征子集的装袋。我们尝试了一系列的dropout率,从0.1到0.5,并伴随着对学习率设置的网格搜索,包括改变数据的遍历次数。在所有情况下,我们都发现dropout训练在预测准确性指标或泛化能力方面没有带来好处,而且大多数时候会产生损害。我们认为这些负面结果与视觉社区的有希望结果之间的差异在于特征分布的差异。在视觉任务中,输入特征通常是密集的,而在我们的任务中,输入特征是稀疏的,标签是嘈杂的。在密集设置中,dropout有助于分离来自强相关特征的效果,从而产生更稳健的分类器。但在我们稀疏、嘈杂的设置中添加dropout似乎只是简单地减少了可用于学习的数据量。


9.3 特征装袋

另一个我们研究的训练变体是特征装袋,其中k个模型独立地在特征空间的k个重叠子集上进行训练。模型的输出被平均以进行最终预测。这种方法在数据挖掘社区得到了广泛的应用,最著名的是决策树的集成[9],提供了一种潜在有用的方法来管理偏差-方差权衡。我们还对这作为一种可能有用的方法来进一步并行化训练感兴趣。然而,我们发现特征装袋实际上稍微降低了预测质量,根据装袋方案,AucLoss降低了0.1%到0.6%。

9.4 特征向量规范化

在我们的模型中,每个事件的非零特征数量变化很大,导致不同示例x具有不同的幅度∥x∥。我们担心这种变异可能会减慢收敛速度或影响预测准确性。我们探索了通过与各种范数一起训练x/∥x∥来规范化的几种范数,目标是减少示例向量幅度的变化。尽管一些早期结果表明有小的准确性增益,我们无法将这些转化为整体正面指标。事实上,我们的实验看起来有些有害,可能与每个坐标学习率和正则化相互作用。

作者:张长旺,图源:旺知识

参考资料

标题:Ad Click Prediction: a View from the Trenches

作者:H. Brendan McMahan, Gary Holt, D. Sculley, Michael Young, Dietmar Ebner, Julian Grady, Lan Nie, Todd Phillips, Eugene Davydov, Daniel Golovin, Sharat Chikkerur, Dan Liu, Martin Wattenberg, Arnar Mar Hrafnkelsson, Tom Boulos, Jeremy Kubica

单位:Google, Inc.

标签:在线广告、数据挖掘、大规模学习、机器学习、点击率预测

概述:这篇文章介绍了大规模在线广告系统中预测广告点击率(CTR)的挑战、技术创新和实践经验。

链接:https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/41159.pdf


旺知识
AI技术最新进展、发展趋势、研发经验、从业经验
 最新文章