FTRL算法是吸取了FOBOS算法和RDA算法的两者优点形成的Online Learning算法。读懂这篇文章,你需要理解LR、SGD、L1正则。

FOBOS算法

前向后向切分(FOBOS,Forward Backward Splitting)是 John Duchi 和 Yoran Singer 提出的。在该算法中,权重的更新分成两个步骤,其中

是迭代次数,

是当前迭代的学习率,

是loss func的梯度,

是正则项,如下:

权重更新的另外一种形式:

对上式argmin部分求导,令导数等于0可得:

这就是权重更新的另外一种形式,可以看到

的更新不仅与

有关,还与自己本身有关,有人猜测这就是前向后向的来源。

L1-FOBOS,正则项为L1范数,其中

合并为一步:

,将二次项乘开,消去常数项得

闭式解:

推导过程略,思路同下方FTRL闭式解的推导过程。

为什么一般设

我们希望这一步更新中,上半步和下半部的步长(学习率)一样。

RDA算法

RDA(Regularized Dual Averaging Algorithm)叫做正则对偶平均算法,特征权重的更新策略如下,只有一步,其中

累积梯度

累积梯度平均值

是正则项,

是一个严格的凸函数,

是一个关于t的非负递增序列:

L1-RDA:

,令

,令

,其中

,并且各项同时乘以t,得:

闭式解:

推导过程略,思路同下方FTRL闭式解的推导过程。

L1-FOBOS与L1-RDA对比

从截断方式来看,在 RDA 的算法中,只要梯度的累加平均值小于参数

就直接进行截断,说明 RDA 更容易产生稀疏性;同时,RDA 中截断的条件是考虑梯度的累加平均值,可以避免因为某些维度训练不足而导致截断的问题,这一点与 TG,FOBOS 不一样。通过调节参数

可以在精度和稀疏性上进行权衡。

为什么

是一个严格的凸函数?

因为凸函数+凸函数=凸函数,可以保证整体的凸性,argmin的部分如果不保证凸性,极值就不存在,则无法更新权重。

为什么

是一个关于t的非负递增序列?

可以认为学习率

可以看作是学习率的倒数,因为学习率设置为随着迭代次数增加而减小的正数,所以

是一个关于t的非负递增序列。

FTRL算法

FTRL 算法综合考虑了 FOBOS 和 RDA 对于梯度和正则项的优势和不足,其中累积梯度

,特征权重的更新公式是:

维度

的学习率设置为

,随着迭代次数增加而减小,

主要作用是保证分母不为0.

使用

替换学习率可将L1-FOBOS、L1-RDA、FTRL写成类似的形式,如下:

各项解释todo

闭式解及其推导过程:

将二次项乘开,消去常数项,得:

,则

,得:

对于单个维度

来说:

对上式,假设

是最优解,令上式导数等于0可得:

我们分三种情况进行讨论

时:

时,满足

,成立

时,

上式不成立

时,

上式不成立

时:

时,不满足

,不成立

时,

,上式不成立

时,

有解,

时:

时,不满足

,不成立

时,

有解,

时,

,上式不成立

综上,可得分段函数形式的闭式解:

论文内的伪代码

引入L2范数与否是等价的

我们不难发现论文[1]中的权重更新公式中是没有L2正则项的,但是伪代码中却有L2正则项系数

,这是因为更新公式中的超参数

,相当于通过调节超参,引入L2范数与否没有区别。论文中的伪代码这样写,相当于减少了一个超参数,如果是调过参的同学就知道减少一个超参数意味着什么。

为什么学习率长这样

类似Adagrad的思想

用硬币实验解释todo

去除正则项的FTRL等价于SGD可推导

论文原话是Without regularization, this algorithm is identical to standard online gradient descent.

如何直观理解累积梯度的作用

在实现上,full train和increment train的有什么区别

FTRL工程实现上的trick

近似代替梯度平方和

如果不理解,回去仔细研究LR的公式。

去除低频特征

由于长尾,大部分特征是稀疏的,且频次很低,online的场景无法用batch的方式去统计特征频次。论文提了两个方案,以泊松概率p决定特征是否更新和建立Bloom Filter Inclusion。我看大部分实现都是用Bloom Filter。

负采样,权重更新时除以负采样率

使用更少的位来进行浮点数编码

四个超参的经验值

如何用FTRL做广告探索todo

[1] McMahan, H. Brendan, et al. "Ad click prediction: a view from the trenches." Proceedings of the 19th ACM SIGKDD international conference on Knowledge discovery and data mining. ACM, 2013.

[2] 张戎 FOLLOW THE REGULARIZED LEADER (FTRL) 算法总结 https://zhuanlan.zhihu.com/p/32903540

ftrl 流式更新 java_深入理解FTRL相关推荐

  1. ftrl 流式更新 java_分布式FTRL优化算法的实现

    之前实现过Parameter Server框架下的分布式FTRL优化算法,用的是DMLC的ps-lite.在PS架构下,集群分为worker.server.scheduler三种线程.其中worker ...

  2. 技术13期:一文读懂Flink的流式处理及窗口理解

    Apache Flink是一个框架和分布式大数据处理引擎,可对有界数据流和无界数据流进行有状态计算.可部署在各种集群环境,对各种大小的数据规模进行快速计算. Flink基本概念 流处理:特点是无限.实 ...

  3. (流式、lambda、触发器)实时处理大比拼 - 物联网(IoT)\金融,时序处理最佳实践

    标签 PostgreSQL , 物联网 , 传感器 , lambda , 调度 , 实时 , 流式更新 , UPSERT , insert on conflict do update 背景 越来越多的 ...

  4. java中Lambda+流式编程讲解(心得篇)

    首先举一个例子来说明,我们要在一群人里面刷选一些,首先自己写一个Person类: package 任务十三__流式计算.公司;import java.util.Objects;/*** @author ...

  5. spring jpa 流式_从响应式Spring Data存储库流式传输实时更新

    spring jpa 流式 这篇文章详细介绍了从数据库到对该数据感兴趣的任何其他组件进行流更新的幼稚实现. 更准确地说,如何更改Spring Data R2DBC存储库以向相关订阅者发出事件. 对R2 ...

  6. websocket 流式传输 交易订单更新

    文章目录 1.获取Binance API和Secret 2. 流式订单更新 2.1. 生成监听键 2.2. Websocket 端点 2.3. 流媒体连接 2.4. 消息处理 2.4.1 订单更新 2 ...

  7. Flink 理解流式计算中的窗口概念

    一.描述 Window 是处理无限流的核心.Flink 认为 Batch 是 Streaming 的一个特例,所以 Flink 底层的引擎是一个流式引擎,在上面实现了流处理和批处理. 而窗口(Wind ...

  8. 流式机器学习算法的入门和认知

    一.流式计算背景 1.概述 其实技术总在更新,做这个行业也是一直要走在学习并适应的路上,这也是人工智能领域最吸引我的地方,其实基础的理论是不变的,但是随着业务的发展,计算能力的发展,上层的实现总是在迭 ...

  9. PAI通过流式机器学习算法解决实时热点新闻挖掘案例

    打开新闻客户端,往往会收到热点新闻推送相关的内容.新闻客户端作为一个承载新闻的平台,实时会产生大量的 新闻,如何快速挖掘出哪些新产生的新闻会成为成为热点新闻,决定着整个平台的新闻推荐质量. 如何从平台 ...

最新文章

  1. Spring Boot2.x-06Spring Boot基础-使用@Conditional注解根据特定的条件装配bean
  2. JVM学习笔记之-JVM性能监控-JVM监控及诊断工具-GUI方式-Visual VM-JProfiler-Arthas
  3. 【收藏】C# WinForm开发系列 - DataGridView 使用方法集锦 - 宁波.Net技术讨论区
  4. CDN帮助网站加速的方法
  5. Linux服务器双网卡双IP和单网卡双IP配置方法(Debian/Ubuntu)
  6. GIT每次上传代码都必须输入用户名解决方案
  7. Conky--linux自定义桌面监控
  8. html拖拽验证,jQuery按住滑块拖动验证插件
  9. STM32 产品与选型
  10. 第三章:x264视频制作meGUI工具使用
  11. python爬取和平精英皮肤_Python——LOL官方商城皮肤信息爬取(一次练手)
  12. 计算机网络-数据交换技术
  13. 2022年全球市场Type-C USB网络摄像头总体规模、主要生产商、主要地区、产品和应用细分研究报告
  14. 计算机专业屏幕尺寸,简单查看电脑屏幕尺寸、配置
  15. 简易的js获取星期几的两种方法
  16. 《博弈心理学》-占据主动的策略思维
  17. java前端页面调用webservice_一个简单的Webservice的demo(中)_前端页面调用
  18. Linux 桥接ping不通外网(特别是校园网) 解决方式及错误总结
  19. 腾讯Oceanus实时计算平台架构设计
  20. Java常见面试题 Java面试必看 (一)

热门文章

  1. 利用在线客服做好新媒体运营工作
  2. java调用Filemaker data api
  3. 易基因|多组学关联研究怎么做? DNA甲基化组+转录组+宏基因组+16S研究思路
  4. 【鸿蒙】HarmonyOS十万个为什么
  5. HyperWorks13安装教程
  6. java fel_FEL表达式的用法
  7. PHP源码01 - php7编译安转、新特性
  8. hbase在zk上的znode数据存储信息
  9. 以太坊Geth RLP编码源码解析
  10. 【plang1.4.3】编写水母动画脚本