机器学习之在线学习算法FTRL

现在做在线学习和CTR常常会用到逻辑回归( Logistic Regression),而传统的批量(batch)算法每次迭代对全体训练数据集进行计算,无法有效地处理超大规模的数据集和在线数据流。google提出的FTRL(Follow-the-regularized-Leader)算法,在处理诸如逻辑回归之类的带非光滑正则化项(例如1范数,做模型复杂度控制和稀疏化)的凸优化问题上性能非常出色。

对于ctr预估,输入的特征x往往具有上百亿维度,但是由于是稀疏的,每个样本可能只有几百个非零值。这使得在大数据下,可以的高效的使用流式样本进行模型的流式训练<每个样本只用一次>。从LR模型说起,对于label为{0,1}的情况,LR的loss函数如下:

L t ( w t ) = y t log p t ( 1 y t ) l o g ( 1 p t )

Loss关于参数w的导数 ( p t y t ) x t , p t = σ ( w t x t ) ,这就是用于参数更新的梯度值。在线梯度下降(OGD)或随机梯度下降(SGD)是解决这类问题的非常高效、高精度的且省计算资源的方法。但实际应用中,考虑模型的最终大小<参数空间,非0权重w决定了内存的使用量。而简单的在线梯度下降并很难产生真正的稀疏解。

有如下几个途径使得模型产生稀疏性:

  1. 简单的假如 L 1 范数,但是也有局限性,因为运算时是浮点运算,训练出来的权重w很难出现绝对的零值。
  2. 在1范数的基础上作出截断。这个很好理解,设置一个阀值,做截断保证稀疏。结合L1每在线训练k个数据截断一次。但是问题是,可以丢弃本身权重就较小的特征(如刚开始训练的截断或训练数据中包含该特征的样本数本来就少),破坏了在线训练算法的理论完备性。
  3. 黑盒方法,出掉一些特征,然后重新训练看被消除的特征是否有效,这样需要算法在数据上跑很多次,不实用。
  4. FOBOS和RDA算法:前者是梯度下降类方法,相对OGD可以产生更好的稀疏特征,精度比较好;后者可以在精度与稀疏性之间更好的平衡。

FTRL

FTRL可以看作RDA和FOBOS的混合,但在L1范数或者其他非光滑的正则项下,FTRL比前两者更加有效。下面我们详细介绍一下TFRL。

我们关注梯度训练模块,对于一组梯度 g t R d , t 表示更新次数,OGD对于参数的更新方式是: w t + 1 = w t α t g t 。这里 α 是递减的学习速度。FTRL采用如下的更新方式来替换上面的形式:

w t + 1 = a r g min w ( g 1 : t w + 1 2 s = 1 t σ s w w s 2 2 + λ w 1 )

这里 g 1 : t = s = 1 t g s , σ 1 : t = 1 α t , 这个式子:第一项是梯度更新,第二项保证泛化精度,第三项产生稀疏解。可以改写成:
( g 1 : t s = 1 t σ s w s ) w + 1 α t w 2 2 + λ 1 w 1 + C


待续~~~,理论没搞太明白。

猜你喜欢

转载自blog.csdn.net/wyisfish/article/details/80025010