Online learning是指每次来一个样本,利用一个迭代方法更新模型,使得当前期望loss最小。
梯度下降类的方法精度不错,但是简单的在线梯度下降很难产生真正稀疏的解,而且对于不可微点的迭代会存在一些问题。
SGD:
随机梯度下降法每次用一部分数据算梯度,然后梯度下降,但是SGD精度低、收敛慢、很难得到需要的正则化设计的解,特别是几乎得不到稀疏解。
TG算法
简单截断法
简单截断法以 为窗口,当 不为整数时采用标准的SGD进行迭代,当 为整数时,更新权重时,把绝对值小于阈值的权重置为0。
梯度截断法
简单截断法法简单直观,但是在实际训练过程中, 的某个维度为0可能因为该训练不足引起的,简单的截断过于简单粗暴,会造成该特征的缺失。梯度截断法对对权重的归零和截断处理稍微温柔一些,分段处理,绝对值小于阈值时, ,如果使得 变正负号,就把 置零。
FOBOS算法
FOBOS(Forward-Backward Splitting)是由John Duchi(Berkeley)和Yoram Singer(google)在2009提出的。FOBOS算法把正则化的梯度下降问题分成一个经验损失梯度下降迭代和一个最优化问题。其中第二个最优化问题有两项:第一项2范数那项表示不能离loss损失迭代结果太远,第二项是正则化项,用来限定模型复杂度、抑制过拟合和做稀疏化:
由于求和公式中的每一项都是大于等于0的,所以步骤二可以拆解成对特征权重每一纬度单独求解。可以看出,L1-FOBOS是TG在特定条件下的特殊形式,对截断有了一定的改进。
RDA算法
Lin Xiao. Dual Averaging Methods for Regularized Stochastic Learning and Online Optimization. Journal of Machine Learning Research, 2010
RDA是Simple Dual Averaging Scheme的一个扩展,由Lin Xiao发表与2010年。RDA特征权重的更新策略为:
其中
表示梯度对
的积分平均值;
为正则项;
为一个辅助的严格凸函数;
是一个非负且非自减序列。
在L1正则化下,令
,令
,令
:
针对特征权重的各个维度将其拆解成N个独立的标量最小化问题:
可得:
L1-RDA的“截断阈值”是一个常数,并不随着而变化,因此可以认为L1-RDA比L1-FOBOS在截断判定上更加aggressive,这种性质使得L1-RDA更容易产生稀疏性;此外,RDA中判定对象是梯度的累加平均值,不同于TG或L1-FOBOS中针对单次梯度计算的结果进行判定,避免了由于某些维度由于训练不足导致截断的问题。并且通过调节参数 ,很容易在精度和稀疏性上进行权衡。
FTRL算法
tf.train.FtrlOptimizer(learning_rate, learning_rate_power=-0.5, initial_accumulator_value=0.1, l1_regularization_strength=0.0, l2_regularization_strength=0.0, use_locking=False, name='Ftrl', accum_name=None, linear_name=None, l2_shrinkage_regularization_strength=0.0)
有实验证明,L1-FOBOS这一类基于梯度下降的方法有较高的精度,但是L1-RDA却能在损失一定精度的情况下产生更好的稀疏性。FTRL把这两者进行了结合:
引入L2正则化项并不影响FTRL的稀疏性,仅仅相当于对最优化过程多了一个约束,使得结果求解更加平滑。
令 可得
针对特征权重的各个维度将其拆解成N个独立的标量最小化问题,和RDA类似,可得:
总结
简单截断法、TG、FOBOS属于同一类,都是梯度下降类的算法,并且TG在特定条件可以转换成简单截断法和FOBOS;RDA属于简单对偶平均的扩展应用;FTRL是RDA和FOBOS的结合,同时具备二者的优点。目前来看,RDA和FTRL是最好的稀疏模型Online Training的算法。FTRL并行化处理,一方面可以参考ParallelSGD,另一方面可以使用高维向量点乘,及梯度分量并行计算的思路。
本文参考了[http://www.wbrecom.com/?p=342],原文写的很不错。