GBDT算法是业界比较好用筛选特征的算法,在线学习考虑效率和数据量,经常用GBDT离线筛选特征,输入到在线模型进行实时训练,如今比较好用的方法是GBDT+LR,而FTRL是另外一种很高效的算法,与其类似的有OGD,FOBOS,RDA等,下面将逐一介绍原理以及应用的案例。
点击率预估(CTR)问题是计算广告中非常重要的模块,通过预估用户对广告的点击概率来对广告进行排序,进而提升广告效果和收益效率。对于大规模的在线预测模型,不仅要考虑大的数据量带来的处理效率的问题,还要考虑数据的稀疏性对于模型拟合带来的影响。
经典的LR模型主要通过sigmoid函数,将线性拟合结果转化为概率,通过梯度下降(GD)对最大似然概率(loss函数)的求解最终得到参数的估计值。梯度下降法能够保证精度,要想预防过拟合问题一般会加上正则项,L1相对于L2正则能够产生更系数的参数(why?)
在线学习算法的特点是:每来一个训练样本,就用该样本产生的loss和梯度对模型迭代一次,在线学习算法需要特殊关注模型鲁棒性和稀疏性,由于样本是一个一个到来,参数可能会因为训练样本不足导致过拟合,因此需要算法重点解决模型系数性的问题。对此,业界有以下几种算法从不同角度解决系数问题:
对于L1正则(正则推导),模型权重更新方式为
相对于L1正则,属于简单粗暴的方法,直接将不满足阈值的系数设置为0,。以k为窗口,如果t/k不为整数时,采用标准的SGD进行优化,否则采用如下方法:
在简单截断法的基础上提出了改进:
GD算法:
SGD算法:
与SGD比较,GD需要每次扫描所有的样本以计算一个全局梯度,SGD则随机抽几个数据进行训练,通常SGD可以更快的逼近最优值,效率会高很多
OGD:
online learning强调学习的实时性,流式的,每次训练不用全部样本,而是根据训练好的模型,每来一个样本更新一次模型,这种方法叫做OGD(Online Gradient Descent)
目标函数:
我们将online learning中的累计损失记为 ∑Tt=1lt(ht) ∑ t = 1 T l t ( h t ) ,如果挑选 ht h t 的策略集H是凸的,而且随时函数 lt(ht) l t ( h t ) 关于 ht h t 是凸的,那么我们称这个问题为OCP(Oline Convex Optimization)。通常我们将 ht h t 表示为一个向量。
在线梯度下降算法在t时刻做两步操作:
投影操作:
如果新的 ht+1 h t + 1 在H中,则将其投影:
否则不做任何处理
在线梯度下降只知道当前一个数据所得到的有偏差的梯度,能保证减少 lt(ht) l t ( h t ) ,对别的项的减少程度是未知的,可能会走点弯路。其优势在于每步是需要看一下当前的一个数据,代价很小。
论文:http://www0.cs.ucl.ac.uk/staff/M.Pontil/reading/lsqonline280406.pdf
AOGD:
具体推导见论文:https://papers.nips.cc/paper/3319-adaptive-online-gradient-descent.pdf
FOBOS称为前后项算法,其权重的更新方式分为两个部分:
第一步为标准的梯度下降,然后将结果进行正则化的微调,满足最速下降切保证了一定的稀疏性。其中 ψ(W) ψ ( W ) 是正则项可以对权重进行约束,常用的选择为L1,则对应的方法为L1-FOBOS
RDA(正则对偶平均)是微软的研究成果,其权重更新策略为:
权重更新包括三部分,一部分是线性加权,即对历史梯度进行加权平均;第二部分正则项部分对特征进行稀疏化;第三部分严格递增序列相当于额外的正则项。实验证明可以产生较好的稀疏和精度
FTRL是Google提出的在线算法,由于其在工程实现上进行了大量优化,在工业界应用非常广泛。主要思想概述如下图:
算法流程:
FTRL的权重更新策略为:
- g1:t=∑ts−1gt g 1 : t = ∑ s − 1 t g t 相当于新产生的权重验证所有样本的梯度并且和历史权重不偏离太远,通过L1正则进行稀疏性约束。这样既保证了权重更新的精度又保证了稀疏性。
- 参数 σs σ s 是一个和学习率相关的参数 ∑ts−1σs=1ηt ∑ s − 1 t σ s = 1 η t , ηt=1t√ η t = 1 t 是非增序列
- 公式推导
工程优化:
1. 预测的内存方面:L1范式加策略,训练结果w很稀疏,在用w做predict的时候节省了内存,很直观
2. 训练的内存方面:
1)在线丢弃训练数据中很少出现的特征,即稀疏特征处理:
2)浮点数重新编码
3)训练若干相似model
4)Single Value Structure(据说有公司已经在实际中这么搞,大数据量下也能够保证不错的auc)
5) 使用正负样本的数目来计算梯度的和(所有的model具有同样的N和P)
6) Subsampling Training Data
应用:https://www.cnblogs.com/arachis/p/FTRL.html
算法对比:
不同的方法按照统一的描述形式,区别点主要在第二项和第三项:
- 第一项:梯度或累积梯度
- 第二项:L1正则化项的处理
- 第三项:这个累积家和限定了新的迭代结果x不要离已迭代过的解太远或者离0(center)太远,这一项其实也是low regret的需求
参考:
1. Ad Click Prediction: a View from the Trenches(2013)
2. https://blog.csdn.net/fangqingan_java/article/details/51020653
3. https://blog.csdn.net/fangqingan_java/article/details/48951191
4. https://blog.csdn.net/guohecang/article/details/52388970
5. https://wenku.baidu.com/view/e70abd03551810a6f52486eb.html
6. https://blog.csdn.net/Losteng/article/details/51119764