计算广告Ad Click Prediction: a View from the Trenches工程实践视角下的广告点击率预估

Posted 天泽28

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算广告Ad Click Prediction: a View from the Trenches工程实践视角下的广告点击率预估相关的知识,希望对你有一定的参考价值。

计算广告(一)Ad Click Prediction: a View from the Trenches

——工程实践视角下的广告点击率预估

这是谷歌发表于KDD2013的一篇文章,从年份来看,已经有些年头了,至今已经有800多次被引,这篇文章一出,对工业界做广告的互联网公司还是有比较深远的影响,比如我厂的经典深度学习框架abacus,就借鉴了其中很多重要的思想。从这篇论文的标题也能看出它的主旋律:工程实践。顺便提一下,因为是2013年,那会深度学习刚刚在CV上有点苗头,广告领域有条件的大公司基本还是大规模的LR,没条件的可能连模型都没有,整一些大盘后验统计数据也挺好用。今天再来重读一下经典,又去看这篇文章的原因是前面在写推荐系统(五)wide&deep时,因为wide&deep模型的wide侧使用的优化器为FTRL,虽然对FTRL早已有耳闻,但还没真正去看过原始论文,所以决定再去看一看。其实这篇文章也不是最原始的论文,最原始的论文为[1],这篇论文从理论上介绍了FTRL。而《Ad Click Prediction: a View from the Trenches》这篇论文则注重在把理论运用到实践中,因此这篇论文的作者数量高达15+个。这篇论文的motivation为:在线服务的内存是有限的,如何减少模型的体积,即如何能使得模型变得更加稀疏,减少特征数量。 论文原文为:

Because trained models are replicated to many data centers for serving (see Figure 1), we are much more concerned with sparsification at serving time rather than during training.

基于这个motivation,来看看谷歌提供了哪些可借鉴的经验,这篇文章最难能可贵的地方在于不仅介绍了成功的经验,还介绍了失败的经验,这与一般的吹逼学术论文不太一样。
这篇博客的目录大纲遵循论文的section顺序,如下所示:

  1. FTRL优化算法
  2. Per-Coordinate Learning Rates
  3. Probabilistic Feature Inclusion
  4. Encoding Values with Fewer Bits
  5. Training Many Similar Models
  6. A Single Value Structure
  7. Computing Learning Rates with Counts
  8. Subsampling Training Data
  9. 一些失败的方法

一、FTRL优化算法
为了减少特征的数量,增加模型参数的稀疏性,学术界及工业界提出了各种办法,比如L1正则,FOBOS、RDA等方法。谷歌在论文[1]中提出了FTRL算法,FTRL结合了FOBOS(Forwrad-Backward spliting,前向后向切分)和RDA(Regularized Dual Averaging,正则对偶平均,微软于2010年发表)的优势,同时拥有了更高的稀疏性及精度。
通常来说,梯度下降类算法在batch模式下,增加L1正则后,通常可以产出稀疏解,但是在online模式下,因为只过一次样本的原因,每次梯度方向并不是朝着全局最优解方向去的,因此即使使用了L1正则,也很难产生稀疏解。FOBOS通过直接截断梯度在无精度损失的情况下增加了稀疏解,而RDA直接摒弃了梯度下降,对凸函数直接求解,RDA在优化速度和稀疏性方面都要比FOBOS好,但是精度方面却有所下降。关于FOBOS和RDA这两种方法的原理,这里不多赘述了,有兴趣的可以去看一位大佬写的资料:在线最优化求解
先来看下FOBOS和RDA的公式:

  • FOBOS
    w t + 1 = arg min ⁡ w g t ⋅ w + λ ∥ w ∥ 1 + 1 2 σ 1 : t ∥ w − w t ∥ 2 2 (1) w_t+1 = \\argmin_w\\g_t \\cdot w + \\lambda\\left\\|w\\right\\|_1 + \\frac12\\sigma_1:t\\left\\|w-w_t \\right\\|_2^2\\ \\tag1 wt+1=wargmingtw+λw1+21σ1:twwt22(1)
  • RDA
    w t + 1 = arg min ⁡ w g 1 : t ⋅ w + t λ ∥ w ∥ 1 + 1 2 σ 1 : t ∥ w − 0 ∥ 2 2 (2) w_t+1 = \\argmin_w\\g_1:t \\cdot w + t\\lambda\\left\\|w\\right\\|_1 + \\frac12\\sigma_1:t\\left\\|w-0 \\right\\|_2^2\\ \\tag2 wt+1=wargming1:tw+tλw1+21σ1:tw022(2)

比较公式1和公式2能够发现,L1-FOBOS和L1-RDA的区别为(摘自在线最优化求解。):

  • FOBOS计算的是累加梯度及L1正则项只考虑当前模的贡献,而RDA采用了累加的方式
  • FOBOS第三项限制 w w w的变化不能离上一次迭代过的解太远,而后者则限制 w w w不能离0点太远。

而FTRL综合考虑了FOBOS和RDA对于正则项和 w w w限制的区别,其公式为:
w t + 1 = arg min ⁡ w g 1 : t ⋅ w + λ 1 ∥ w ∥ 1 + λ 2 1 2 ∥ w ∥ 2 2 + 1 2 ∑ s = 1 t σ s ∥ w − w s ∥ 2 2 (3) w_t+1 = \\argmin_w\\g_1:t \\cdot w + \\lambda_1\\left\\|w\\right\\|_1 + \\lambda_2\\frac12\\left\\|w \\right\\|_2^2 + \\frac12\\sum_s=1^t\\sigma_s\\left\\|w-w_s \\right\\|_2^2\\ \\tag3 wt+1=wargming1:tw+λ1w1+λ221w22+21s=1tσswws22(3)
公式3看起来很复杂,想要实现更新权重也比较困难,谷歌这篇论文对其重写了下(把公式3中最后一项展开):
w t + 1 = arg min ⁡ w ( g 1 : t − ∑ s = 1 t ) ⋅ w + λ 1 ∥ w ∥ 1 + 1 2 ( λ 2 + ∑ s = 1 t σ s ) ∥ w ∥ 2 2 + 1 2 ∑ s = 1 t σ s ∥ w s ∥ 2 2 = arg min ⁡ w z t ⋅ w + λ 1 ∥ w ∥ 1 + 1 2 ( λ 2 + ∑ s = 1 t σ s ) ∥ w ∥ 2 2 (4) \\beginaligned w_t+1 &= \\argmin_w\\(g_1:t-\\sum_s=1^t )\\cdot w + \\lambda_1\\left\\|w\\right\\|_1 + \\frac12(\\lambda_2 + \\sum_s=1^t\\sigma_s)\\left\\|w \\right\\|_2^2 + \\frac12\\sum_s=1^t\\sigma_s\\left\\|w_s \\right\\|_2^2\\ \\\\ \\tag4 &=\\argmin_w\\z_t \\cdot w + \\lambda_1\\left\\|w\\right\\|_1 + \\frac12(\\lambda_2 + \\sum_s=1^t\\sigma_s)\\left\\|w \\right\\|_2^2\\ \\endaligned wt+1=wargmin(g1:ts=1t)w+λ1w1+21(λ2+s=1tσs)w22+21s=1tσsw以上是关于计算广告Ad Click Prediction: a View from the Trenches工程实践视角下的广告点击率预估的主要内容,如果未能解决你的问题,请参考以下文章

广告点击率预测(CTR) —— 在线学习算法FTRL的应用

如何使用 google click id (GCLID) 提取 AdWords 广告系列、广告组、关键字、广告等

计算广告之CTR预估-FM模型解析

通过屏幕或标签投放广告(ad mob)?

如何设置ad域外电脑禁止访问域内

cordova-plugin-ad-admob 通过 phonegap 构建,无法加载和显示广告