关于在线机器学习ftrl_proximal_lr的二三件事

来源:互联网 发布:淘宝皇冠店铺100强 编辑:程序博客网 时间:2024/06/05 06:49

题记:一直以为ftrl_proximal_lr模型是为了解决参数在内存中的使用问题。跟大神请教后,ta说:ftrl_proximal 为了解决online中模型稀疏性的问题。

前世今生

直接贴图:

从上面图可以看出来,这个模型的变异点就是梯度优化模块(即所谓的目标函数)。感觉ftrl_proximal_lr是集大家所成的,ftrl_proximal_lr是既能提高OGD准确率也能提供比RDA更好的稀疏性。那我们来分解一下最后的一个等式:第一项是梯度更新,第二项是L1正则项处理(产生稀疏解),第三项累积加和限定了新的迭代结果x不要离已迭代过的解太远(也即FTRL-Proximal中proximal的含义),保证泛化精度。这一项其实也是low regret的需求。所谓的low regret是Online learning中每次学习的误差减去使用用当前为止的最优函数而产生的误差的平均值。
这里写图片描述
上图更好的解释ftrl_proximal_lr的进化过程。

伪代码

这里写图片描述

先贴个图,虽然还没实现,但我在努力看大神的代码和框架,整理好,继续补充进来。
四个参数的设定结合paper里的指导意见以及反复实验测试,找一组适合自己问题的参数就可以了。所谓的per-coordinate,其意思是FTRL是对w每一维分开训练更新的,每一维使用的是不同的学习速率,也是上面代码中lamda2之前的那一项。与w所有特征维度使用统一的学习速率相比,这种方法考虑了训练样本本身在不同特征上分布的不均匀性,如果包含w某一个维度特征的训练样本很少,每一个样本都很珍贵,那么该特征维度对应的训练速率可以独自保持比较大的值,每来一个包含该特征的样本,就可以在该样本的梯度上前进一大步,而不需要与其他特征维度的前进步调强行保持一致。

参考资料如下
http://www.cnblogs.com/EE-NovRain/p/3810737.html
http://www.datakit.cn/blog/2016/05/11/ftrl.html#自动特征管理

原创粉丝点击