online learning
在线学习算法的特点是:每来一个训练样本,就用该样本产生的loss和梯度对模型迭代一次,一个一个数据地进行训练,因此可以处理大数据量训练和在线训练。常用的有在线梯度下降(OGD)和随机梯度下降(SGD)等
部分内容摘自https://blog.csdn.net/guohecang/article/details/52561278
准确地说,Online Learning并不是一种模型,而是一种模型的训练方法,Online Learning能够根据线上反馈数据,实时快速地进行模型调整,使得模型及时反映线上的变化,提高线上预测的准确率。Online Learning的流程包括:将模型的预测结果展现给用户,然后收集用户的反馈数据,再用来训练模型,形成闭环的系统。如下图所示:
Online Learning有点像自动控制系统,但又不尽相同,二者的区别是:Online Learning的优化目标是整体的损失函数最小化,而自动控制系统要求最终结果与期望值的偏差最小。
Online Learning训练过程也需要优化一个目标函数(红框标注的),但是和其他的训练方法不同,Online Learning要求快速求出目标函数的最优解,最好是能有解析解。
一般的做法有两种:Bayesian Online Learning和Follow The Regularized Leader。
Bayesian Online Learning
贝叶斯方法能够比较自然地导出Online Learning的训练方法:给定参数先验,根据反馈计算后验,将其作为下一次预测的先验,然后再根据反馈计算后验,如此进行下去,就是一个Online Learning的过程,如下图所示。
FTRL
除了Online Bayesian Learning,还有一种做法就是FTRL(Follow The Regularized Leader)。
FTRL的网上资料很多,但是大部分介绍怎么样产生稀疏化解,而往往忽略了FTRL的基本原理。顾名思义,FTRL和稀疏化并没有关系,它只是一种做Online Learning的思想。
先说说FTL(Follow The Leader)算法,FTL思想就是每次找到让之前所有损失函数之和最小的参数。流程如下:
其中,arg min f(x) 是指使得函数 f(x) 取得其最小值的自变量 x值。
FTRL算法就是在FTL的优化目标的基础上,加入了正规化,防止过拟合:
FTRL算法的损失函数,一般也不是能够很快求解的,这种情况下,一般需要找一个代理的损失函数。
代理损失函数需要满足几个要求:
- 代理损失函数比较容易求解,最好是有解析解
- 优化代理损失函数求的解,和优化原函数得到的解差距不能太大
为了衡量条件2中的两个解的差距,这里需要引入regret的概念。
Online Learning实践
前面讲了Online Learning的基本原理,这里以移动端推荐重排序为例,介绍一下Online Learning在实际中的应用。
推荐重排序介绍
目前的推荐系统,主要采用了两层架构,首先是触发层,会根据上下文条件和用户的历史行为,触发用户可能感兴趣的item,然后由排序模型对触发的item排序,如下图所示:
推荐重排序既能融合不同触发策略,又能较大幅度提高推荐效果(我们这里主要是下单率)。在移动端,屏幕更加小,用户每次看到的item数目更加少,排序的作用更加突出。
美团重排序Online Learning架构
美团Online Learning架构如下图所示:
线上的展示日志,点击日志和下单日志会写入不同的Kafka流。读取Kafka流,以HBase为中间缓存,完成label match(下单和点击对映到相应的展示日志),在做label match的过成中,会对把同一个session的日志放在一起,方便后面做skip above:
训练数据生成
移动端推荐的数据跟PC端不同,移动端一次会加载很多item,但是无法保证这些item会被用户看到。为了保证数据的准确性,我们采用了skip above的办法,如下图所示:
假设用户点击了第i个位置,我们保留从第1条到第i+2条数据作为训练数据,其他的丢弃。这样能够最大程度的保证训练样本中的数据是被用户看到的。
特征
用的特征如下图所示:
算法选择
我们尝试了FTRL和BPR效果,线下实验效果如下表:
BPR的效果略好,但是我们线上选用了FTRL模型,主要原因是FTRL能够产生稀疏化的效果,训练出的模型会比较小。
模型训练
训练算法不断地从HBase中读取数据,完成模型地训练,训练模型放在Medis(美团内部地Redis)中,线上会用Medis中的模型预测下单率,根据预测的下单率,完成排序。
online learning相关推荐
- learning to rank_排序
20210415 ndcg 一个正确结果位置的随机结果是0.45左右 20210412 考察产业匹配MRR评估指标的随机情况是什么样的 随机情况下会是什么样的 可以根据ndcg的值来看是否随机 202 ...
- 【Learning Notes】线性链条件随机场(CRF)原理及实现
1. 概述 条件随机场(Conditional Random Field, CRF)是概率图模型(Probabilistic Graphical Model)与区分性分类( Discriminativ ...
- 几何深度学习(Geometric Deep Learning)技术
几何深度学习(Geometric Deep Learning)技术 几何深度学习综述 从论文Geometric Deep Learning: Grids, Groups, Graphs, Geodes ...
- 深度学习编译器综述The Deep Learning Compiler
深度学习编译器综述The Deep Learning Compiler The Deep Learning Compiler: A Comprehensive Survey 参考文献: https:/ ...
- 全文翻译(全文合集):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning
全文翻译(全文合集):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning 摘要 人们越来越需要将机器学习应用到各种各样 ...
- 全文翻译(二): TVM: An Automated End-to-End Optimizing Compiler for Deep Learning
全文翻译(二): TVM: An Automated End-to-End Optimizing Compiler for Deep Learning 3.优化计算图 计算图是在DL框架中表示程序的常 ...
- 全文翻译(一):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning
全文翻译(一):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning 摘要 人们越来越需要将机器学习应用到各种各样的硬件 ...
- TVM优化Deep Learning GPU算子
TVM优化Deep Learning GPU算子 高效的深度学习算子是深度学习系统的核心.通常,这些算子很难优化,需要HPC专家付出巨大的努力. 端到端张量IR / DSL堆栈TVM使这一过程变得更加 ...
- 深度学习编译与优化Deep Learning Compiler and Optimizer
深度学习编译与优化Deep Learning Compiler and Optimizer
- Deep Learning部署TVM Golang运行时Runtime
Deep Learning部署TVM Golang运行时Runtime 介绍 TVM是一个开放式深度学习编译器堆栈,用于编译从不同框架到CPU,GPU或专用加速器的各种深度学习模型.TVM支持来自Te ...
最新文章
- 海思3559A上编译GDB源码操作步骤及简单使用
- Linux rsync命令详解
- Java集合总结【面试题+脑图】,将知识点一网打尽!
- 提高项目执行力的六板斧
- 1001: [BeiJing2006]狼抓兔子
- word List 30
- Mockito 101
- c 使用RTP协议发送视频数据
- “稿费+股权”能打造亿万富翁作家?
- Linux 能否拿下苹果 M1 阵地?
- 算法交流:分享我的一个算法,实现项目需求
- GraphQL 技术浅析
- vue安装axios
- 【Magento】magento 1.7.0.2 paypal支付方式,网站标准支付
- 小米如何安装magisk和太极阳(纯小白篇)
- 计算机主板反复启动,主板无限重启怎么回事
- 节假日判断工具(Java)
- 算法的时间复杂度取决于:
- 平衡树(splay)学习笔记(详细,从入门到精(bao)通(ling))(持续更新)
- 蓝旭后端第六次培训课 MySQL(二)