一、算法原理
二、算法逻辑
三、个人理解
- 从loss function的形式来看:FTRL就是将RDA-L1的“梯度累加”思想应用在FOBOS-L1上,并施加一个L2正则项。【PS:paper上是没有加L2正则项的】
- 这样达到的效果是:
-
- 累积加和限定了新的迭代结果W**不要离“已迭代过的解”太远**;
- 因为调整后的解不会离迭代过的解太远,所以保证了每次找到让之前所有损失函数之和最小的参数;
- 保留的RDA-L1中关于累积梯度的项,可以看作是当前特征对损失函数的贡献的一个估计【累积梯度越大,贡献越大。】
- 由于使用了累积梯度,即使某一次迭代使某个重要特征约束为0,但如果后面这个特征慢慢变得稠密,它的参数又会变为非0;
- 保留的RDA-L1中关于累积梯度的项,与v相加,总会比原来的v大,加起来的绝对值更容易大于L1的阈值,保护了重要的特征;
- FTRL的巧妙之处在于:
-
- 在MSE的前面乘以了一个和learning_rate有着神奇关系的参数σ_s。
- 因为这个参数,保证了FTRL在不使用L1时和SGD保持了一致性。
- FTRL使用的自适应learning_rate,其思想和 Adagrad Optimizer 类似的自适应思想:
-
- 如果特征稀疏,learning_rate就大一点;
- 如果特征稠密,learning_rate就小一点;
- FTRL中为什么要同时兼顾FOBOS-L1和RDA-L1??
-
- 因为不是为了产出稀疏而进行变化,真正的目的是产出有效的稀疏解。即稀疏又保留有效特征!!!
- 稀疏靠RDA-L1,保留有效特征靠FOBOS-L1和RDA-L1的累积梯度思想。
- 本质上,FTRL只是一种适用于online-learning的optimizer;
- FTRL-Proximal中的Proximal的含义:
-
- t+1次迭代的解,不能离t次迭代的解太远;
- t+1次迭代的解,不能离0太远;
- 是对具体约束的表达。
小结:
- FOBOS-L1:使用MSE+L1对w_{t+1/2}进行建模,目标是使调整后的梯度在离SGD结果附近的基础上,产出稀疏解;
- RDA-L1:使用累积平均梯度 + L1 + L2进行建模,这里使用L2有两方面的理解:
-
- 能产出极小值点;
- 调整后的梯度不能与零点太远;