计算广告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顺序,如下所示:
- FTRL优化算法
- Per-Coordinate Learning Rates
- Probabilistic Feature Inclusion
- Encoding Values with Fewer Bits
- Training Many Similar Models
- A Single Value Structure
- Computing Learning Rates with Counts
- Subsampling Training Data
- 一些失败的方法
一、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=wargmingt⋅w+λ∥w∥1+21σ1:t∥w−wt∥22(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:t⋅w+tλ∥w∥1+21σ1:t∥w−0∥22(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:t⋅w+λ1∥w∥1+λ221∥w∥22+21s=1∑tσs∥w−ws∥22(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:t−s=1∑t)⋅w+λ1∥w∥1+21(λ2+s=1∑tσs)∥w∥22+21s=1∑tσs∥w以上是关于计算广告Ad Click Prediction: a View from the Trenches工程实践视角下的广告点击率预估的主要内容,如果未能解决你的问题,请参考以下文章