分享
FTRL算法在使用中需不需要通过Batch Model初始化?
德川在《关于点击率模型,你知道这三点就够了》提到:第
三,应用Online的更新方式去更新模型,还是batch的方式。Online的方式对应的最优化算法主要是minibatch
sgd,Offline的方式可以应用计算广告书里说的LBFGS,Trust region这些。按我个人经验,minibatch
sgd的更新方式对头部的数据学习的会更快更充分,因此更善于fine tuning the head
part。而Offline的方式全局优化历史数据,对于长尾稀疏特征,就比sgd的方式要精细些了。如果业务场景时效性较强,更关注头部,用一个
Online keep更新的模型就足够了,比如新闻推荐的场景。但是如果业务场景有很多长尾流量,需要精细的预估,一个batch的Offline
model是必要的,为了业务的时效性考虑,可以用batch的模型结果去初始化Online的模型更新,定期的batch结合Online的delta
更新,比如搜索广告的场景。我现在是只用FTRL进行训练,训练上十天左右的数据之后在线上提供服务,我发现模型的效果在开始几天都是不错的,过一段时间后效果就下降了。想问下大家在用FTRL的时候有没有用Batch Model初始化。如果初始化,怎么初始化的,因为FTRL不只有weight还有z, n这些值。
回复 ( 4 )
事先声明:离题而答。
Online其实有两种,一种广义,也就是题目中说的“Online的方式更新”,意思就是新的数据来一次更新一次,用过的数据不再去用。从这个意义上讲,所有的stochastic optimization算法都可以直接迁移过来用。
狭义得说,Online其实是指一类能够保证小的算法,算法包括RDA、AOGD、FOBOS,以及FTRL,简要说明了一下,optimization算法是为了保证步迭代后尽可能小,而Online算法是为了保证尽可能小。也就是说,optimization是为了在最后的解上损失上尽可能小,但是不在乎中间迭代过程中的解是否产生损失,而online则认为每一步的解都会产生损失,希望这个整体的损失小,online算法为了小这个目的,往往设计成每次的更新与前几步相似,而且步长还递减(这在新样本无穷无尽的情况下不是什么好性质)。
个人愚见,我认为FTRL的理论意义(从同一个观点理解了几种不同的Online算法,包括RDA、AOGD、FOBOS)是比较大的,理论上很有意思,实际中也已经有很多大厂在用,实际效果非常值得肯定。面对具体业务问题的时候,没必要非得执着于只用时髦的算法,“第三” 中所说online结合batch是比较符合业务实际的思路。
回到点击率预估的问题上来,“Batch Model”初始化 或 用其他offline的优化算法初始化,我认为是必须的,否则一开始的解会很烂。以及,无论你用batch还是online算法,如果你发现“模型的效果在开始几天都是不错的,过一段时间后效果就下降了”,那你就应该调整参数了,而且不能指望算法上线之后,可以永久运行下去,还是需要每隔一段时间就用重新训练。
德川是我。。很少上知乎。
我文章里提到的用batch model去warm up是一个常见的做法,但是也不是说一定就需要,比如今日头条据我了解就是一个一直online更新的模型:)。
batch+online 是比较好的选择。
一直online的话要小心learning rate过度衰减的问题,毕竟业务数据的分布不是一成不变的,learning rate要有个保底的值。
还有某些特征的出现是不连续的,一直online会带来历史知识过时失效的问题。比如新闻建模中,关键词“本拉登”作为一个特征,某一段时间很热,做了大量的update;最近这两天又火起来了,但是作为另一个话题出现,历史上学习的权重就可能对预测结果造成很大的偏差。
Eta的解释比较在理,FTRL确实是朝着 “regret optimization”这个方向的,包括原始的FOBOS算法,里面的lazy update性质的理论解释,也是基于online 模式而不是batch 模式。
个人做过一些广告数据的对比,用vw来对比bfgs、sgd、ftrl-proximal。其中1 pass ftrl得到的avg training loss 低于 10 pass sgd的avg traning loss。在ftrl上增加pass所得到的提升很有限,基本上1-2轮的训练就能达到不错的效果了。