jxq0816/article/details/83721843 一、算法原理 image.png 二、算法逻辑 image.png 三、个人理解 从loss function的形式来看:FTRL 因为这个参数,保证了FTRL在不使用L1时和SGD保持了一致性。 FTRL使用的自适应learning_rate,其思想和 Adagrad Optimizer 类似的自适应思想: 如果特征稀疏,learning_rate就大一点; 如果特征稠密,learning_rate 就小一点; FTRL中为什么要同时兼顾FOBOS-L1和RDA-L1?? 本质上,FTRL只是一种适用于online-learning的optimizer; FTRL-Proximal中的Proximal的含义: t+1次迭代的解,不能离t次迭代的解太远;
FTRL原理 网上很多资料都是从 FTRL 的几个前辈,FOBOS、RDA 等一步步讲起,本篇就不绕那么大的圈子了,直接从最基本的 OGD 开路到 FTRL 。 正因为 OGD 存在这样的问题,FTRL 才致力于在准确率不降低的前提下提高稀疏性。 另外 FTRL 2013 年的工程论文中也加上了 L2 正则,所以综合上述几点,FTRL 的更新公式变为: \mathbf{w}_{t+1}=\underset{\mathbf{w}}{\operatorname 这牵涉到 FTRL 的学习率设置。 FTRL实现 完整代码见 ( https://github.com/massquantity/Ftrl-LR ) ,实现了多线程版本 FTRL 训练 Logistic Regression 。
这里对FTRL相关发展背景和工程实现的一些指导点做一些介绍,凸优化的理论细节不做详细介绍,感兴趣可以去查阅相应paper,相关paper列表会在文后附上。 ok,背景和一些铺垫终于完成了,下面重点进入FTRL的部分。。。 三、FTRL (Follow-the-regularized-Leader) 【发展历程】 FTRL的理论推进和工程应用首先要感谢这个人:H. 可以看作RDA和FOBOS的混合,但在L1范数或者其他非光滑的正则项下,FTRL比前两者更加有效 【基本思想及迭代公式】 我简单画了个图: ? In AISTATS, 2011 (FOBOS、RDA、FTRL等各种方法对比的paper) [3] L. Xiao.
FTRL及工程实现 FTRL介绍 FTR是FTRL的前身,思想是每次找到让之前所有样本的损失函数之和最小的参数。 FTRL 在FTL的优化目标的基础上,加入了正则化,防止过拟合。FTRL的损失函数一般也不容易求解,这种情况下,一般需要找一个代理的损失函数。 而毫不意外的,FTRL 正是满足这一特性。另一方面,现实中对于 sparsity,也就是模型的稀疏性也很看重。 上面所谓的per-coordinate,其意思是FTRL是对w每一维分开训练更新的,每一维使用的是不同的学习速率,也是上面代码中lamda2之前的那一项。 = FTRL(dim=d, l1=1.0, l2=1.0, alpha=0.1, beta=1.0) ftrl.train(testData, verbos=False, max_itr=100000
zhuanlan.zhihu.com/p/136975128 元学习 https://zhuanlan.zhihu.com/p/72828180 FTML https://zhuanlan.zhihu.com/p/32694097 FTRL 3.2.1 Follow the Online Meta leader 基于FTL(可看预备知识中的FTRL)算法,作者提出FTOML方法来进行在线局部参数更新。 更新公式如下,其中 R_u 为上述的正则项,公式如下,可以发现这里其实为FTRL和meta learning的结合,正则项就是FTRL的正则项, R_u=\lambda_{1}\|\theta\|_{1 总结 作者在文中讲解了往常基于元学习的推荐系统的大概流程,因此对于元学习如何应用于推荐系统不熟悉的小伙伴可以阅读这部分,另一方面,作者针对现有元学习方法应用于在线推荐系统的缺陷,将元学习和FTRL在线学习方法结合
相信大家对这些知识点都已经驾轻就熟,那就直接进入这篇文章的主要切入点,为什么Wide部分要用FTRL训练? ? 为什么Wide部分要用L1 FTRL训练? 这个问题是一个很有意思的问题,可能近几年毕业的同学都不大清楚FTRL是什么了。四五年前FTRL曾风靡全部互联网头部公司,成为线性模型在线训练的主要方法。 所以在四五年前,大部分公司还是线性模型为主的时代,FTRL凭借非常好的在线学习能力成为主流。 也就是说FTRL with L1非常注重模型的稀疏性。这也就是问题的答案,W&D采用L1 FTRL是想让Wide部分变得更加稀疏。 能让FTRL在线学习,而深度部分batch训练吗? ? 这里是「王喆的机器学习笔记」 的第三十二篇文章。
下面是一个Go语言实现的多线程版本的参数服务器(用于Ftrl算法的优化),源码位置:Goline: // data structure of ftrl solver. type FtrlSolver struct return errors.New("[FtrlParamServer-FetchParamGroup] Initialize fast ftrl solver error.") } var fps.FtrlSolver.Init { fps.log.Error("[FtrlParamServer-FetchParam] Initialize fast ftrl solver return errors.New("[FtrlParamServer-FetchParam] Initialize fast ftrl solver error.") } for i fw.FtrlSolver.Init { fw.log.Error("[FtrlWorker-PushParam] Initialize fast ftrl solver error."
FTRL(Follow-the-Regularized-Leader)算法 点击率预测的常用方法之一是使用FTRL优化器进行逻辑回归。 谷歌通过FTRL优化器和相应较大的特征空间来预测每天数十亿的事件。 FTRL是一种懒结合了L1正则、可生成非常稀疏的系数向量的线性模型。 我考虑了在Kaggler FTRL平台上训练模型的所有分类特征。 我最终提交的版本用到了以上三种FTRL模型的集成,我将会在下文描述。 它考虑了三个选定的FFM模型(方法9、10和11)以及一个FTRL模型(方法6)的预测。
FTRL(Follow-the-Regularized-Leader)算法 点击率预测的常用方法之一是使用FTRL优化器进行逻辑回归。 谷歌通过FTRL优化器和相应较大的特征空间来预测每天数十亿的事件。 FTRL是一种懒结合了L1正则、可生成非常稀疏的系数向量的线性模型。 我考虑了在Kaggler FTRL平台上训练模型的所有分类特征。 我最终提交的版本用到了以上三种FTRL模型的集成,我将会在下文描述。 它考虑了三个选定的FFM模型(方法9、10和11)以及一个FTRL模型(方法6)的预测。
除了Online Bayesian Learning,还有一种做法就是FTRL(Follow The Regularized Leader)。 FTRL的网上资料很多,但是大部分介绍怎么样产生稀疏化解,而往往忽略了FTRL的基本原理。顾名思义,FTRL和稀疏化并没有关系,它只是一种做Online Learning的思想。 流程如下: FTRL算法就是在FTL的优化目标的基础上,加入了正规化,防止过拟合: w=argminw∑i=1tfi(w)+R(w) 其中,R(w)是正规化项。 FTRL算法的损失函数,一般也不是能够很快求解的,这种情况下,一般需要找一个代理的损失函数。 特征 用的特征如下图所示: 算法选择 我们尝试了FTRL和BPR效果,线下实验效果如下表: BPR的效果略好,但是我们线上选用了FTRL模型,主要原因是FTRL能够产生稀疏化的效果,训练出的模型会比较小
为了解决这个问题,在线最优化算法如 TG [1]、FOBOS [2]、RDA [3]、FTRL [4,5,6] 应运而生,下面将介绍、对比这些算法。 FTRL-Proximal FTRL_Proximal 是 McMahan 在 2010 提出 [4],在 [5] 与 FOBOS RDA 对比,在 [6] 介绍了 Google FTRL 工程实践。 FTRL 综合了 FOBOS 和 RDA,更新公式为 w_{t+1} = \underset{w}\arg\min \bigg\{ G_{1:t} \cdot w + \frac{1}{2} \sum 与 FOBOS 不同,FTRL 与 RDA 在估计梯度时使用了历史累计梯度信息,而不仅仅是上一轮梯度。 在 [5] 提出把全局学习率改成每个坐标自适应学习率,AUC 提升1%。 横向对比 ? [13] LR+FTRL算法原理以及工程化实现 https://zhuanlan.zhihu.com/p/55135954
that implements the Adam algorithm.class Adamax: Optimizer that implements the Adamax algorithm.class Ftrl : Optimizer that implements the FTRL algorithm.class Nadam: Optimizer that implements the NAdam algorithm.class
为了解决这个问题,在线最优化算法如 TG [1]、FOBOS [2]、RDA [3]、FTRL [4,5,6] 应运而生,下面将介绍、对比这些算法。 FTRL FTRL 是 McMahan 在 2010 提出 [4],在 [5] 与 FOBOS RDA 对比,在 [6] 介绍了 Google FTRL 工程实践。 FTRL 综合考虑了 FOBOS 和 RDA,更新公式为 w_{t+1} = \underset{w}\arg\min \bigg\{ G_{1:t} W + \lambda_1 ||w||_1 +
业内使用较多是 Google 提出的 FTRL 算法。 FTRL 算法核心是一种 online 的逻辑回归,在原始演算法上加入 L1 , L2 正则化和 adaptive learning 。 另外, FTRL 对每一维特征维护一个学习率, 能够得到更佳的模型。 要处理腾讯这种海量数据,算法的并行化必须是标配, FTRL 的并行化可以参考 ParallelSGD 的思路,也可以考虑 Hogwild!的思想;从数据并行,模型并行,或数据+模型并行的角度考虑。 思想的分布式的无锁 FTRL 算法,并且取得了不错的效果,可以支持亿级特征, TB 级训练数据;使用足够多 parameter server 和 worker 时, 可以支持百亿特征, PB 级训练数据
今天为大家带来《深入机器学习系列之Factorization Machines & Online Optimization》 Outline Online Optimization TG FOBOS RDA FTRL 简单截断法 截断梯度法(TG) FOBOS算法 RDA算法 FTRL算法 简单截断法 以k为窗口,当t/k不为整数时采用标准的SGD进行迭代,当t/k为整数时,采用如下权重更新方式: ? FTRL ? 由于 ? 相对于W来说是一个常数,并且令 ? 上式等价于: ? 针对特征权重的各个维度将其拆解成N个独立的标量最小化问题: ? Per-Coordinate Learning Rate 在 FTRL 中,每一个维度上的学习率是单独考虑的:如果特征 1 比特征 2 变化的快,那么特征 1 上的学习率应该下降的更快。 ?
FTRL_Proximal (Google) 1. 背景 众所周知,广告平台的最终目标是追求收益最大化,以 CPC 广告为例,平台收益既与 CPC 单价有关,又与预测 CTR 有关。 ,google 率先把在线算法 FTRL 引入 CTR 预估模型 8。 FTRL 是在传统的在线算法如 FOBOS 和 RDA 的基础上做了优化,它采用和 RDA 一样的 L1 正则,同时和 FOBOS 一样会限制每次更新的距离不能太远。 另外 FTRL 也具有不错的稀疏性和精确度,可以减少内存占用防止过拟合。最后 FTRL_Proximal 还支持动态的学习率,可以对不同完整性的特征采用不同的步长进行梯度下降。 缺点:FTRL 同样具有 LR 的缺点,需要人工特征工程和人工离散化分桶。 引用 1. Chapelle O, Manavoglu E, Rosales R.
parameterType: categorical feasibleSpace: list: - sgd - adam - ftrl experiment需要搜索3种超参数,分别是 --lr学习率,搜索范围从0.01-0.03; --num-layers网络层数,范围是2-5; --optimizer优化算法,候选者是sgd,adam,ftrl : "0.013988097299564232" - name: num-layers value: "4" - name: optimizer value: ftrl value: "0.01858578989212678" - name: num-layers value: "4" - name: optimizer value: ftrl suggestion-skopt这个容器,会随着容器的运行产生新的超参数,并且写到status中,例如第一轮产生的超参数是--lr=0.013988097299564232,--num-layers=4,--optimizer=ftrl
2.8 FTRL 主要用于CTR预测的在线训练,成千上万维度导致大量稀疏特征。 一般希望模型参数更加稀疏,但是简单的L1正则无法真正做到稀疏,一些梯度截断方法(TG)的提出就是为了解决这个问题,在这其中FTRL是兼备精度和稀疏性的在线学习方法。 FTRL的基本思想是将接近于0的梯度直接置零,计算时直接跳过以减少计算量。 这里给出工程上的伪代码,里面的四个参数是可调的。
在模型方面,因为之前没有转化率预测方面的经验,我们查看了kaggle上类似的几个比赛的成功经验,发现在这类问题上表现较好的大概有两类模型:ftrl与ffm这类针对id类稀疏特征的模型,以及xgboost 经过了一些尝试,我们发现ftrl,并没有取得预期的结果,这个不知道是我们的使用姿势不正确,还是app激活数据本身与广告ctr数据有所区别。 我们目前采取的融合策略还是相对简单的,模型数量和种类相对较少,所选模型都是tree based model,复赛中我们希望能结合ftrl,ffm等差异性较大的模型进行融合得到更好的结果。
Oceanus-ML包含多样的数据处理函数,集成丰富的在线学习及深度学习算法(ftrl-lr,ftrl-fm,deepfm等),用户通过简单的拖拽、填写参数,即可搭建起完整的训练框架,并可轻松完成模型的训练 2.3 算法 我们还在不断的增加机器学习和深度学习算法,现已覆盖常用的在线学习算法,包括FTRL、FTRL-FM、DeepFM、特征值分解、核密度分析,包含有监督算法以及无监督算法。