概述
该文是GoogleFTRL在点击率模型上的应用,从技术实现的角度介绍了在线学习算法FTRL的工程实现,并且给出一些内存优化、特征选择等工程细节。从此FTRL算法才大规模推广使用。
该笔记主要介绍一下几类在线学习算法的思路以及FTRL实现细节以及工程上技巧。
问题
点击率预估问题(CTR)是计算广告中非常重要的模块,预估一个用户对广告的点击概率,从而提升广告效果。
LR模型时CTR问题中最经典的模型,而LR模型训练也是无约束最优化问题中经典案例。因此问题最终归约为如何有效优化LR模型;同时还需要考虑模型稀疏性,模型稀疏性可能会和训练数据不足、模型复杂度过高相关,也是控制过拟合的有效手段。
LR模型需要解决问题是
求解方案
批量算法
求解该类问题最经典的算法是GD(梯度下降法也称最速下降法),即沿着梯度方法逐渐优化模型参数。
梯度下降法能够保证精度,要想预防过拟合问题一般会加上正则项,L1或者L2正则。
L1相对于L2正则能够产生更稀疏的参数(为什么?)
在线优化算法
相比于批量GD算法,OGD能够利用实时产生的正负样本,一定程度上能够优化模型效果。
在线优化算法需要特殊关注模型鲁棒性和稀疏性,由于样本是一个一个到来,默写参数可能因为训练样本不足导致过拟合等。因此OGD会着重处理模型稀疏性。
L1正则法
对于L1正则,模型权重更新方式为
模型稀疏控制参数 λ 会将接近0的参数趋近于0.
简单截断法
相对于L1正则属于比较暴力的解决方案,直接将不满足阈值的系数设置为0.
以k为窗口,如果t/k不为整数时采用标准的SGD进行优化,否则采用如下方法
通过参数 θ 控制模型稀疏性。
梯度截断法(TG)
简单截断法比较暴力,不够优雅,因此提出改进思路。
TG和简单截断法的区别在于
注:可以将T1算法按照每一维度进行展开,则L1和简单截断法都是该策略的特殊case。
FOBOS算法
该算法又称为前后项算法,其权重的更新方式分为两个部分
其中 Ψ(W) 是正则项可以对权重进行约束,常用的选择为L1,则对应的方法为L1-FOBOS
RDA算法
RDA(正则对偶平均)是微软的研究成果,其权重更新策略为
实验证明该方法能够产生较好的稀疏和精度。
FTRL
FTRL是Google提出的在线算法,由于其在工程实现上进行了大量优化,在工业界应用非常广泛。
权重更新策略
FTRL更新策略为
其中 g1:t=∑ts=1gt ,相当于新产生的权重验证所有样本的梯度并且和历史权重不偏离太远。最后通过L1正则进行稀疏性约束。这样既保证了权重更新的精度有保证了稀疏性。
另外参数 σs 是一个和学习率相关参数 ∑ts=1σs=1ηt ; 而ηt=1t√,非增序列
公式推导
上面的公式看起来比较复杂,将其展开可以得到
其中 zt−1=g1:t−1−∑t−1s=1σsws,根据定义可以得到zt−1=zt−1+gt−(1ηt−1ηt−1)wt
对上式进行求导可以得到
从上式中可以容易得到w和z必须是异号,否则等式不能成立。
因此根据L1正则的次导数和梯度公式,讨论如下。
- 当 |zti|<λ1 时
w_i > 0,则有 w=−zi−λ11ηt+λ2<0 不成立
w_i < 0,则有 w=−zi+λ11ηt+λ2>0 不成立
w_i=0- 当 zt>λ1 时
由于两者必须异号,此时有w_i < 0
w=−zi+λ11ηt+λ2- 当 zt<−λ1 时同理 w=−zi−λ11ηt+λ2
- 因此有
wi=⎧⎩⎨⎪⎪0,−(zi−sgn(zi)λ1)1ηt+λ2,if |zi|≤λ1 if others
工程优化
- 各个维度采用不同的学习率 ηti=αβ+∑√ts=1g2si
- 稀疏特征处理,Possion Inclusion(通过一定概率扔掉特征)、BloomFilter Iclusion(通过碰撞优化特征)
- 浮点数重新编码
- 训练多个模型,采用不同参数。但是采用相同特征进行存储,特征更新采用加权平均方式进行更新。比较类似于异步梯度下降法
- 学习率更新优化 ∑g21:t=PNP+N 通过正负样本个数进行优化
- 对于CTR模型,负样本数量特别多,考虑采用负样本采样,假设采样概率为r,此时相当于每个样本都有了权重w_t(正样本权重为1,负样本权重为1/r),同时相当于梯度也会乘上该系数,不会改变最终的损失。 El(wt)=stwtl(wt)+(1−st)0=l(wt),其中st=1/wt为该样本被选中的概率
伪代码
根据上面的推导和优化,最终代码如下
经过上面推导,整体还是比较好理解。
总结
FTRL提供了一套完整的在线学习算法和工程框架,根据伪代码可以非常容易实现并且应用。该模型常和其他方法结合使用,例如FTRL+LBFGS等
3608



被折叠的 条评论
为什么被折叠?



