Ad Click Prediction: a View from the Trenches 阅读

目录

摘要

关键词

1.引言

2.系统概述

3.在线学习与稀疏性


 

 

https://www.eecs.tufts.edu/~dsculley/papers/ad-click-prediction.pdf

摘要

预测广告点击率(CTR)是一个大规模的学习问题,是数十亿美元在线广告业的核心。我们从部署的CTR预测的实验中提出了一系列的案例研究和课题。包括用FTRL-Proximal在线学习算法(其具有优良的稀疏性和收敛性)和使用不同的学习率(the use of per-coordinate learning rates)提升传统的监督学习算法。

我们还探讨了现实世界中出现的一些传统机器学习研究领域之外的挑战。这些方法包括节省内存的实用技巧、评估和可视化性能的方法、为预测概率提供置信估计的实用方法(providing confidence estimates for predicted probabilities)、校准方法和特征的自动管理方法(automated management of features)。最后还探讨了一些其他paper中有不错表现但却对我们工作没有提升的方向。本文的目的是强调在这一工业背景下理论进步与实际工程之间的密切关系,并展示在复杂动态系统中应用传统机器学习方法所面临的挑战。

关键词

在线广告(online advertising),数据挖掘( data mining),大规模学习( large-scale learning)

1.引言

在线广告是一个价值数十亿美元的产业,它是机器学习的成功案例之一。赞助搜索广告、上下文广告、显示广告和广告的实时竞价都严重依赖于所学模型准确、快速、可靠地预测广告点击率的能力。这种解决问题的方法也被用来解决大规模问题,这在10年前也几乎无法想象。一个典型的工业模型可以从大规模的数据中学习,利用相当多的特征,并给数十亿事件提供预测。

在这篇论文中,我们展示了最近在Google部署的用于预测赞助搜索广告的广告点击率的系统中的一系列的研究。一些问题现在已经被广泛的研究,所以我们选择集中在一系列关注较少但在工作系统中同样重要的主题上。因此,我们探索内存节省、性能分析、预测置信度、校准和特征管理等问题,与传统上设计有效学习算法的问题相同。本文的目的是让读者了解真实工业环境中出现的挑战,并分享可能应用于其他大规模问题领域的技巧和见解。

2.系统概述

当用户执行搜索q时,系统依据广告主选择的关键字,从中挑选出查询q相匹配初始候选集。然后由线上服务确定这些广告是否显示给用户,以什么顺序显示,以及如果广告被点击,广告商支付的价格。除了广告商的出价外,线上服务另一个重要的输入是,对于每一个广告a,P(click | q,a)的估计值,即广告显示时被点击的概率。特征来源有很多,包括查询、广告创意文本和各种广告相关元数据。这些特征往往极为稀疏,通常每个样本只有一小部分非零特征值。

带正则的逻辑回归就很适用于这类场景,每天进行数十亿次的预测,并在观察到新的点击和未点击时快速更新模型是很必要的。当然,这意味着训练数据集是巨大的。数据由基于Photon系统的流服务提供-完整讨论请参见[2]。

由于大规模学习在最近几年已经得到了很好的研究(例如,见[3]),因此本文没有在本文中投入大量的篇幅来详细描述我们的系统架构。我们的方法与Google Brain团队提出的Downpour SGD 方法类似,区别在于google训练的是深度模型,我们仅有一层网络。这使我们能够处理更多的数据。因为训练好的模型被复制到许多数据中心进行服务(参见图1),所以我们更关心的是服务时的稀疏化,而不是在培训期间

                                                                            

图1:高级系统概述。稀疏化包括在第3节,概率特征包含在第4节,渐进验证在第5节,校准方法在第7节。

3.在线学习与稀疏性

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

为了精确地给出算法,我们需要建立一些符号。我们用粗体表示向量类似与\mathbf{g}_t \in \mathbb{R}^d,t是样本的索引,\mathbf{g}_t的第i({i}^{th})个元素写成g_{t,i}。我们用如下的形式表示累加和\mathbf{g}_{1:t}=\sum_{s=1}^t \mathbf{g}_s

若我们用逻辑回归,可以用如下的在线学习框架。在第t轮,我们对由特征向量\mathbf{x}_t\in \mathbb{R}_d描述的实例进行预测; 给定模型参数\mathbf{w}_t,我们预测p_t =\sigma (\mathbf{w}_t * \mathbf{x}_t),其中\sigma(a) = 1/(1+exp(-a))是sigmoid函数。然后,我们观察到标签y_t\in \{0,1\},损失函数表示为(LogLoss, lodistic loss):

\l_t(\mathbf{w}_t) = -y_tlogp_t - (1-y_t )log(1-p_t) \ \ \(1)    

其梯度\triangledown_w l_t(\mathbf{w}_t)=(p_t-y_t)\mathbf{x}_t

在线梯度下降(OGD)已被证明对于这些类型的问题非常有效,使用最少的计算资源即可产生出色的预测精度。但是,实际上,另一个关键的考虑因素是最终模型的大小。 由于可以稀疏地存储模型,因此\mathbf{w}中非零系数的数量是内存使用的决定因素。

不幸的是,OGD在生成稀疏模型方面并不是特别有效。实际上,将L_1正则直接加在损失函数的梯度上\triangledown_w l_t(\mathbf{w}_t)基本上不会产生完全为零的系数。更复杂的方法,如FOBOS和截断梯度确实成功地引入了稀疏性,与FOBOS相比,Regularized Dual Averaging (RDA)算法在精度和稀疏性之间取得了更好的折衷。然而,我们观察到梯度下降式方法在我们的数据集上可以产生比RDA更好的精度。那么,问题是,我们能否同时获得RDA提供的稀疏性和OGD提供的精确度?答案是肯定的,使用Follow The (Proximally) Regularized Leader算法,或FTRL neximal。在没有正则化的情况下,该算法与标准的在线梯度下降算法相同,但是由于它使用模型系数\mathbf{w}的一种替代的惰性表示,L_1正则化可以更有效地实现。

FTRL近端算法以前已经被设计成便于理论分析的方式。这里,我们重点描述一个实际的实现。给定一系列的梯度\mathbf{g}_t \in \mathbb{R}^d,OGD的更新方式如下:

\mathbf{w}_{t+1}=\mathbf{w}_t-\eta_t\mathbf{g}_t,其中\eta_t是一个非递增的学习率,例如\eta_t=1/\sqrt{t}。FTRL的更新方式如下:

\mathbf{w}_{t+1}=argmin_\mathbf{w}(\mathbf{g}_{1:t} \cdot \mathbf{w} + 0.5\sum_{s=1}^t \sigma_s||\mathbf{w}-\mathbf{w_s}||_2^2 + \lambda_1||\mathbf{w}||_1)

其中,\sigma_s是学习率,例如\sigma_{1:t}=1/\eta_t,从表面上看,这些更新看起来非常不同,但事实上,当我们取\lambda_1=0时,它们会产生相同的系数向量序列。然而\lambda_1>0,用的FTRL近端更新在稀疏性方面做得很好(见下面的实验结果)。

快速检查后,人们可能会认为FTRL-Proximalupdate比梯度下降更难实现,或者需要存储所有过去的系数。 但是实际上,每个系数仅需要存储一个数字,因为我们可以将更新重写为选取一个\mathbf{w} \in \mathbb{R}_d使得下面的式子最小

(\mathbf{g}_{1:t} - \sum_{s=1}^t\sigma_s \mathbf{w}_s) \cdot \mathbf{w} + \frac{1}{\eta_t}||\mathbf{w}||_2^2+\lambda_1||\mathbf{w}||_1 + (const)

故,若存储\mathbf{z}_{t-1} = \mathbf{g}_{1:t-1}-\sum_{s=1}^{t-1}\sigma_s\mathbf{w}_s,在t轮的开始,更新\mathbf{z}_t = \mathbf{z}_{t - 1} + \mathbf{g}_t + (\frac{1}{\eta_t}- \frac{1}{\eta_{t-1}})\mathbf{w}_t,在t轮的最后存储\mathbf{w}_{t+1}

w_{t+1} = \left\{\begin{matrix} 0 & if \ |z_{t,i}| \leq \lambda_1 \\ -\eta_t(z_{t,i} - sgn(z_{t,i}\lambda_1))& otherwise \end{matrix}\right.

因此,FTRL近端在存储\mathbf{z} \in \mathbb{R}_d,而OGD存储\mathbf{w} \in \mathbb{R}_d。算法1采用这种方法,此外增加了一个不同特征学习率不同,并支持强度\lambda_2L_2正则化。或者,我们可以存储−\eta _tz_t-\eta_tz_t,而不是直接存储z_t;然后,当\lambda_1=0时,我们存储的是传统意义上的提督下降的系数。

注意,当\eta_t是一个常量值\eta\lambda_1=0时,很容易看到与在线梯度下降的等价性,因为我们有\mathbf{w}_{t+1} = -\eta\mathbf{z}_t=-\eta\sum_{s=1}^t \mathbf{g}_s,正是梯度下降的点。

实验结果。在我们数据的较小原型版本的早期实验中,McMahan[24]表明,在所产生的尺寸和精确度权衡方面,采用L1正则化的FTRL Neximal显著优于RDA和FOBOS;这些先前的结果总结在表1第2和第3行。 

 表1:FTRL结果,显示了竞争方法的非零系数值和AUC损失(1−AUC))的相对数量(较小的数值对两者都更好)。总的来说,FTRL在相同或更好的精度下提供了更好的稀疏性(对于我们的应用来说,0.6%的损害是很重要的)。RDA和FOBOS在较小的原型数据集上与FTRL进行了比较,其中有数百万个示例,而OGD计数则在全尺寸数据集上与FTRL进行了比较。

在许多情况下,一个简单的启发式方法几乎和更原则的方法一样有效,但这不是其中之一。我们的strawman算法,OGD Count,简单地保持它看到一个特征的次数;直到这个计数通过阈值k,系数固定为零,但是在计数通过k之后,在线梯度下降(没有任何L1正则化)照常进行。为了测试FTRL neximal是否符合这个更简单的启发式方法,我们在一个非常大的数据集上运行。我们调整k以产生与FTRL近端相等的精确度;使用较大的k会导致更糟糕的AucLoss。结果见表1第4行。总的来说,这些结果表明,FTRL近端在相同或更好的预测精度下,显著改善了稀疏性。

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值