离线强化学习(Offline RL)系列3: (算法篇) Onestep 算法详解与实现
[更新记录]
论文信息: David Brandfonbrener, William F. Whitney, Rajesh Ranganath, Joan Bruna: “Offline RL Without Off-Policy Evaluation”, 2021; arXiv:2106.08909.
本论文由纽约大学(NYU)的David Brandfonbrener以第一作者提出,发表在NeurIPS 2021 顶会上【Accept (Spotlight)】,接收意见: While the method is very simple, the message is clear and the authors have done excellent job on concise and thorough writing and experimentation. As offline RL + D4RL benchmark are becoming mainstream, such work can likely guide the community to explore more impactful research *directions.
摘要:迭代方法(Iterative)相对较差主要是由于在执行off-policy评估时固有的高方差的结果,且因这些估计的重复优化策略而放大,本文提出的基于On-policy的Onestep方法通过一步约束/规则化的策略改进,解决了基于off-policy的multi-step/interative中遇到的iterative error exploitation等问题,在连续(continous)任务达到了SOTA的效果。
文章目录
- 1. 问题 & Preliminaries
- 1.1 Preliminaries
- 1.2 迭代算法的问题
- 2. 理论原理方法
- 2.1 One-step和Multi-step区别
- 2.2 原理 and 算法模板
- 2.2.1 One-step
- 2.2.2 Multi-step
- 2.2.3 Iterative actor-critic
- 2.3 策略优化操作符( Policy improvement Operators)
- 2.3.1 Behavior clone
- 2.3.2 Constraint policy updates
- 2.3.3 Regularized policy update
- 2.3.4 reverse KL
- 3. 实验结果分析
- 3.1 性能分析
- 3.2 学习曲线分析
- 3.3 Overestimate 分析
- 4 非常重要的总结结论与讨论
- 4.1 学习曲线和超参数灵敏性
- 4.2 分布偏移(Distribution shift)
- 4.3 迭代误差利用( Iterative error exploitation)
- 5 什么时候用Multi-step
- 6. OpenReview审稿意见
- 7. 代码实现细节
- 参考文献
- OfflineRL推荐阅读
1. 问题 & Preliminaries
1.1 Preliminaries
经典的BCQ、CQL、BRAC、CRR、AWR等算法都依赖off-policy去评估学习Critic,通过对这些算法进行分析,发现效果不佳的原因大多是由于对 QQQ 函数的错误估计所导致,即使在论文 IQL中,也对OOD之外的state-action不例外,因此对基于Off-policy的迭代算法总结得出如下两个问题:
- Distribution shift: 学习策略与行为策略之间
- iterative error exploitation:策略优化引入了偏差,而动态规划则在整个状态空间中传播了这种偏差。 之前在BCQ中提出了外延误差。
目前经典的解决方法主要包括以下三种:
- policy constraints/regularization: 其目标通过学习参数让行为策略和学习策略how close, 本质是iterative & offpolicy, 比如BCQ、CQL等
- modifications of imitation learning:本质是iterative, 如ABM、CRR、BAIL等
- Q regularization: 防止学习策略选择未知动作方法是加入某种形式的正规化,以鼓励学习策略呆在行为策略附近。比如BRAC、CQL、R_BVE等
1.2 迭代算法的问题
迭代会让误差不断累积放大,之前在Double Q learning中说明过这个问题,作者在这里重新分析了该过程
在论文Error Propagation for API中有明确的定义:
那么有没有办法避免这种问题呢?作者提出只要数据集足够大、行为策略有一个好的状态空间可以确保收敛就都可以的。
但这种很难满足,于是作者提出了Onestep RL方法 (其实Caglar Gulcehre等人之前就研究过Onestep算法在离散动作上的应用,只不过他们称为:行为值估计(Regularized Behavior Value Estimation,R_BVE)), 作者在此处提出的Onestep主要是去解决continous任务,这里面最大的不同在于:
- 连续任务中存在actor-critic的方法,而在离散任务中,策略改进可以 QQQ 函数精确地计算出来。
- Caglar Gulcehre等人将迭代(iterative)算法的性能不佳归因于“高估(overestimate)”,而作者重新定义和区分了distribution shift和迭代iterative误差利用的问题,这些问题结合起来会导致高估。
2. 理论原理方法
在sutton的圣经书中明确解释了1-step和n-step的含义,包含了n-step sarsa等算法的执行过程,在这里多了一个multi-step,这里首先阐述一下One-step、multi-step以及n-step之间的关系,
2.1 One-step和Multi-step区别
从图中我们可以明显看到,onestep在safe policy范围内一次就可以,而multi-step则通过不断地iterative直到最优,这里补充一张R-BVE论文中关于该概念的阐述(更加清晰),后文将从代码角度分析。接着我们看作者提出的template。
2.2 原理 and 算法模板
在这里,作者给结合2.1 中第二幅图得出了一个通用的算法模板(algorithmic template),如下所示:
这里有几个关键变量: KKK 、E\mathcal{E}E 以及 I\mathcal{I}I
2.2.1 One-step
如果 K=1K=1K=1 ,我们就认为是Onestep 操作, 同时通过最大似然法(maximum
likelihood)来学习 β^\hat{\beta}β^ ,并训练策略去估计 QβQ^{\beta}Qβ (备注:作者解释这个时候可以用任意策略去更新 π1\pi_{1}π1 ,且不涉及任何off-policy操作)
2.2.2 Multi-step
如果 K>1K>1K>1 , 我们成称之为 Multi-step 操作, 由于 β\betaβ 是从数据 DND_{N}DN 中收集,所以evaluation operator必须去评估off-policy, 且当 K>2K>2K>2 时,评估策略 πk≠β\pi_{k} \neq \betaπk=β ,每次在估计和改进步骤中去训练直至收敛性。
2.2.3 Iterative actor-critic
Actor-critic 方法看起来有点像Multi-step算法,但不会在每次迭代时训练收敛,而是使用更大的 KKK 。这里每次迭代都包含一个更新 QQQ 估计的梯度step和一个改进 QQQ 估计值的梯度步骤策略。 由于所有evaluation和improvement operator都是基于梯度的,因此该算法可以采用与multi-step算法相同的评估和改进operator。
2.3 策略优化操作符( Policy improvement Operators)
2.3.1 Behavior clone
π←β^\pi \gets \hat{\beta} π←β^
2.3.2 Constraint policy updates
经典的BCQ、BEAR等算法将学习策略限制在一个支撑集范围内,本文直接将BCQ进行了简化,即"Easy-BCQ"(删掉了其中的扰动网络perturbation network), 在这里作者 从 β\betaβ 中采样了 MMM 和tuple 并重新定义了新策略 π^kM\hat{\pi}_{k}^{M}π^kM , 然后从 Q^β\hat{Q}^{\beta}Q^β 中执行
π^kM(a∣s)=1[a=argmaxaj{Q^πk−1(s,aj):aj∼πk−1(⋅∣s),1≤j≤M}]\hat{\pi}_{k}^{M}(a \mid s)=\mathbb{1}\left[a=\arg \max _{a_{j}}\left\{\widehat{Q}^{\pi_{k-1}}\left(s, a_{j}\right): a_{j} \sim \pi_{k-1}(\cdot \mid s), 1 \leq j \leq M\right\}\right] π^kM(a∣s)=1[a=argajmax{Qπk−1(s,aj):aj∼πk−1(⋅∣s),1≤j≤M}]
2.3.3 Regularized policy update
另外作者也提到了regulization方法,同时提了一个reverse KL(没去仔细研究)。
π^kα=argmaxπ∑iEa∼π∣s[Q^πk−1(si,a)]−αD(β^(⋅∣si),π(⋅∣si))\hat{\pi}_{k}^{\alpha}=\arg \max _{\pi} \sum_{i} \underset{a \sim \pi \mid s}{\mathbb{E}}\left[\widehat{Q}^{\pi_{k-1}}\left(s_{i}, a\right)\right]-\alpha D\left(\hat{\beta}\left(\cdot \mid s_{i}\right), \pi\left(\cdot \mid s_{i}\right)\right) π^kα=argπmaxi∑a∼π∣sE[Qπk−1(si,a)]−αD(β^(⋅∣si),π(⋅∣si))
2.3.4 reverse KL
π^kτ=argmaxπ∑iexp(τ(Q^πk−1(si,ai)−V^(si)))logπ(ai∣si)\hat{\pi}_{k}^{\tau}=\arg \max _{\pi} \sum_{i} \exp \left(\tau\left(\widehat{Q}^{\pi_{k-1}}\left(s_{i}, a_{i}\right)-\widehat{V}\left(s_{i}\right)\right)\right) \log \pi\left(a_{i} \mid s_{i}\right) π^kτ=argπmaxi∑exp(τ(Qπk−1(si,ai)−V(si)))logπ(ai∣si)
个人理解总结一下:其实Onestep就是policy的evaluation和improvement分开了,没有通过iterative的方式去更新,而是直接通过on-policy的方式去evaluation了
以上是作者关于方法的而一些定义,下满让我们看一下实验效果。
3. 实验结果分析
3.1 性能分析
这里作者对比了onestep和iterative的结果,表1中清晰表明,除了在random数据集上,onestep效果相比其他算法差之外(作者后面有分析原因),其他效果均不错。
当然作者在这里也分析了onestep、multi-step以及iterative之间的区别
3.2 学习曲线分析
作者在这里解释了说onestep算法相比其他的更加稳定,方差更小,没有大起大落。
3.3 Overestimate 分析
4 非常重要的总结结论与讨论
这一部分也是作者在此论文中的一份非常大的亮点.
4.1 学习曲线和超参数灵敏性
从图中很明显看到,迭代算法开始效果还然后崩溃。正则化可以帮助防止这种崩溃,因为对行为策略的足够强的正则化确保了评估几乎是在策略上的。
4.2 分布偏移(Distribution shift)
这个是个老问题了,不在赘述。
4.3 迭代误差利用( Iterative error exploitation)
在原始离散动作上的onestep方法 R-BVE中,作者明确的给出了由于OOD之外的原因导致 QQQ 函数过高的原因,图中的解释非常的清晰。
Intuition about the problem
KaTeX parse error: Undefined control sequence: \substack at position 51: …amma \underset{\̲s̲u̲b̲s̲t̲a̲c̲k̲{s^{\prime}|| s…
Q^π(s,a)=Qπ(s,a)+Q~βπ(s,a),Q~βπ(s,a):=Eπ∣s0,a0=s,a[∑t=0∞γtεβ(st,at)]\widehat{Q}^{\pi}(s, a)=Q^{\pi}(s, a)+\widetilde{Q}_{\beta}^{\pi}(s, a), \quad \widetilde{Q}_{\beta}^{\pi}(s, a):=\underset{\pi \mid s_{0}, a_{0}=s, a}{\mathbb{E}}\left[\sum_{t=0}^{\infty} \gamma^{t} \varepsilon_{\beta}\left(s_{t}, a_{t}\right)\right] Qπ(s,a)=Qπ(s,a)+Qβπ(s,a),Qβπ(s,a):=π∣s0,a0=s,aE[t=0∑∞γtεβ(st,at)]
作者同时给出了例子说明:
5 什么时候用Multi-step
之前讨论过 multi-step 和 iterative 的算法存在估计误差传播的问题。虽然 multi-step 算法比 one-step 算法会更广泛地传播这种噪声,但它们在传播噪声的同时也传播了有用的信号。所以,当数据集中有足够的覆盖范围来降低噪声的大小时,随着噪声减小,那么信号的传播相对来说就会增强,这可以帮助迭代算法的训练。
6. OpenReview审稿意见
本篇论文每一位审稿人都给出了相当高的分数,且最终录取为spotlight: 【Access】Offline RL Without Off-Policy Evaluation
7. 代码实现细节
作者提供了基于pytorch的源代码
上图中的红色圈是本文非常重要的核心内容。
# trainif cfg.pi.name == 'pi_easy_bcq':pi.update_beta(beta)pi.update_q(q)# train betaif cfg.train_beta:for step in range(int(cfg.beta_steps)):beta.train_step(replay, None, None, None)if step % int(cfg.log_freq) == 0:logger.update('beta/step', step)beta.eval(env, cfg.eval_episodes)logger.write_sub_meter('beta')if step % int(cfg.beta_save_freq) == 0:beta.save(cfg.beta.model_save_path + '_' + str(step) + '.pt')# train baselineif cfg.train_baseline:for step in range(int(cfg.baseline_steps)):baseline.train_step(replay)if step % int(cfg.log_freq) == 0:logger.update('baseline/step', step)baseline.eval(env, beta, cfg.eval_episodes)logger.write_sub_meter('baseline')if step % int(cfg.beta_save_freq) == 0:beta.save(cfg.beta.model_save_path + '_' + str(step) + '.pt')# load beta as init pipi.load_from_pilearner(beta)# iterate between eval and improvementfor out_step in range(int(cfg.steps)): # train Qif cfg.train_q:for in_step in range(int(cfg.q_steps)): q.train_step(replay, pi, beta)step = out_step * int(cfg.q_steps) + in_step if step % int(cfg.log_freq) == 0:logger.update('q/step', step)q.eval(env, pi, cfg.eval_episodes)logger.write_sub_meter('q')if step % int(cfg.q_save_freq) == 0:q.save(cfg.q.model_save_path + '_' + str(step) + '.pt')# train piif cfg.train_pi and cfg.pi.name != 'pi_easy_bcq':for in_step in range(int(cfg.pi_steps)):pi.train_step(replay, q, baseline, beta)step = out_step * int(cfg.pi_steps) + in_stepif step % int(cfg.log_freq) == 0:logger.update('pi/step', step)pi.eval(env, cfg.eval_episodes)logger.write_sub_meter('pi')if step % int(cfg.pi_save_freq) == 0:pi.save(cfg.pi.model_save_path + '_' + str(step) + '.pt')elif cfg.pi.name == 'pi_easy_bcq':step = out_step + 1pi.update_q(q)if step % int(cfg.log_freq) == 0:logger.update('pi/step', step)pi.eval(env, cfg.eval_episodes)logger.write_sub_meter('pi')if cfg.train_q:q.save(cfg.q.model_save_path + '.pt')if cfg.train_pi:pi.save(cfg.pi.model_save_path + '.pt')
参考文献
[1]. David Brandfonbrener, William F. Whitney, Rajesh Ranganath, Joan Bruna: “Offline RL Without Off-Policy Evaluation”, 2021; arXiv:2106.08909.
[2]. Caglar Gulcehre, Sergio Gómez Colmenarejo, Ziyu Wang, Jakub Sygnowski, Thomas Paine, Konrad Zolna, Yutian Chen, Matthew Hoffman, Razvan Pascanu, Nando de Freitas: “Regularized Behavior Value Estimation”, 2021; arXiv:2103.09575.
OfflineRL推荐阅读
离线强化学习(Offline RL)系列3: (算法篇) IQL(Implicit Q-learning)算法详解与实现
离线强化学习(Offline RL)系列3: (算法篇) CQL 算法详解与实现
离线强化学习(Offline RL)系列3: (算法篇) TD3+BC 算法详解与实现(经验篇)
离线强化学习(Offline RL)系列3: (算法篇) REM(Random Ensemble Mixture)算法详解与实现
离线强化学习(Offline RL)系列3: (算法篇)策略约束 - BRAC算法原理详解与实现(经验篇)
离线强化学习(Offline RL)系列3: (算法篇)策略约束 - BEAR算法原理详解与实现
离线强化学习(Offline RL)系列3: (算法篇)策略约束 - BCQ算法详解与实现
离线强化学习(Offline RL)系列2: (环境篇)D4RL数据集简介、安装及错误解决
离线强化学习(Offline RL)系列1:离线强化学习原理入门
离线强化学习(Offline RL)系列3: (算法篇) Onestep 算法详解与实现相关推荐
- 离线强化学习(Offline RL)系列3: (算法篇) IQL(Implicit Q-learning)算法详解与实现
[更新记录] 论文信息:Ilya Kostrikov, Ashvin Nair, Sergey Levine: "Offline Reinforcement Learning with Im ...
- 离线强化学习(Offline RL)系列3: (算法篇)策略约束 - BRAC算法原理详解与实现(经验篇)
论文原文:[Yifan Wu, George Tucker, Ofir Nachum: "Behavior Regularized Offline Reinforcement Learnin ...
- 离线强化学习(Offline RL)系列3: (算法篇) AWAC算法详解与实现
[更新记录] 论文信息:AWAC: Accelerating Online Reinforcement Learning with Offline Datasets [Code] 本文由UC Berk ...
- 离线强化学习(Offline RL)系列3: (算法篇)策略约束 - BEAR算法原理详解与实现
论文信息:Stabilizing Off-Policy Q-Learning via Bootstrapping Error Reduction 本文由UC Berkeley的Sergey Levin ...
- 离线强化学习(Offline RL)系列4:(数据集)Offline数据集特征及对离线强化学习算法的影响
[更新信息] 文章信息:Kajetan Schweighofer, Markus Hofmarcher, Marius-Constantin Dinu, Philipp Renz, Angela Bi ...
- 离线强化学习(Offline RL)系列4:(数据集) 经验样本复杂度(Sample Complexity)对模型收敛的影响分析
[更新记录] 文章信息:Samin Yeasar Arnob, Riashat Islam, Doina Precup: "Importance of Empirical Sample Co ...
- Maven系列第5篇:私服详解
环境 maven3.6.1 开发工具idea jdk1.8 本篇内容 私服介绍 windows中安装nexus私服 linux中安装nexus私服 nexus私服中各种仓库详解 配置本地Maven从n ...
- NeoRL: 接近真实世界的离线强化学习基准
深度强化学习实验室 官网:http://www.neurondance.com/ 论坛:http://deeprl.neurondance.com/ 作者:南栖仙策 编辑:DeepRL 实验室论坛:h ...
- 快手+何向南团队最新论文Counterfactual Interactive Recommender System ,反事实推理融入离线强化学习,解决filter bubble/信息茧房问题
论文名:CIRS: Bursting Filter Bubbles by Counterfactual Interactive Recommender System 目录 链接 1. 相关背景 1.1 ...
最新文章
- WCF学习笔记(二):在WCF中使用集合传输数据
- ecm工作原理 usb_(转)USB中CDC-ECM的了解和配置
- 阿里达摩院悬壶,看医疗AI如何济世
- 利用gulp对项目html,js,css,图片进行压缩
- python 进阶案例_【python3】while和for的进阶案例
- Python精通-Python元组操作
- 超火的漫画线稿上色AI出新版了!无监督训练,效果更美好 | 代码+Demo
- PHP读写指定URL参数的方法
- Three.js – Building a Cube with different mater...
- CNKI翻译助手-连接数据库失败
- 数字证书及CA相关理解
- 自定义C语言头文件书写格式
- android摄像头拍照代码,Android调用摄像头拍照开发教程
- Javascript 计算请假天数
- 鸿蒙系统基于Linux打造,其本质还是安卓系统?
- explicit关键字的作用
- 入门必学的sql语句
- 终于搞定终于搞定linux下阅读pdg(转)
- 涨知识了!这9个鲜为人知的 Python 第三方库真棒!
- Microsoft Edge
热门文章
- 电脑打字前面的那条线叫什么_我29岁那年就学会了打字。这值得吗?
- 解决微信或系统字体放大缩小,html布局错乱混乱的问题
- 软件测试如何测试淘宝购物车
- 大数据助推国家治理现代化
- 学校成立计算机兴趣小组,梅花香自苦寒来——校计算机程序设计兴趣小组暑期活动...
- 【20保研】兰州大学信息科学与工程学院2019年优秀大学生暑期夏令营活动通知...
- GOTS验厂辅导,全球有机纺织品标准(GOTS)审核文件及标准四大特征
- 大虎2021软件校招笔试题
- ios二维码扫描插件,适配当前主流扫描软件,自定义扫描界面。
- UPS电源怎么控制温度和维护保养