深度强化学习实验室

作者:辛靖豪(DeepRL-Lab研究员)

编辑:DeepRL

熟悉强化学习Gym环境的小伙伴应该对 (BWH-v2环境)  BipedalWalkerHardcore-v2(如图1)并不陌生。在这个环境里,这个Agent需要与Environment互动并学会在不同路况下奔跑行走。由于这个环境是的动作空间是4维连续动作空间,同时Agent需要掌握跑步、跨坑、越障、下阶梯等一系列技能。很多小伙伴表示尽管用目前先进的TD3, SAC, PPO等RL算法进行各种头铁的训练,也无法达到很好的效果。在Gym官方的Leaderboard上,有人用A3C+LSTM算法,在32核CPU和3个GPU上训练了73小时后最终解决了该问题,还有人使用CMA-ES算法在64核的Google Compute Engine上训练了100小时才最终解决了该问题,可见该环境的难度不一般。

一、简介

【论文复现】一步步详解用TD3算法通关BipedalWalkerHardcore-v2环境-编程知识网

图1 BipedalWalkerHardcore-v2

一开始笔者用各种算法来攻克这个环境时也是没有得到很好的结果,最终通过一些trick,才最终通关了这个环境(流下了老父亲的泪水)。所以,今天就为大家带来一篇用TD3通关BipedalWalkerHardcore-v2的攻略(在单核CPU上训练大概3h左右收敛),希望能在大家的强化学习炼丹之路上给大伙添把火。代码已放入文章末尾链接中,需要请自取~

 

废话不多说,先让我们来看看Agent的表现吧!

【论文复现】一步步详解用TD3算法通关BipedalWalkerHardcore-v2环境-编程知识网

图1 学习曲线(x-episode; y-reward)

二、BipedalWalkerHardcore-v2介绍

【论文复现】一步步详解用TD3算法通关BipedalWalkerHardcore-v2环境-编程知识网Hardcore version with ladders, stumps, pitfalls. Time limit is increased due to obstacles. Reward is given for moving forward, total 300+ points up to the far end. If the robot falls, it gets -100. Applying motor torque costs a small amount of points, more optimal agent will get better score. State consists of hull angle speed, angular velocity, horizontal speed, vertical speed, position of joints and joints angular speed, legs contact with ground, and 10 lidar rangefinder measurements. There's no coordinates in the state vector.

 

官方传送门:http://gym.openai.com/envs/BipedalWalkerHardcore-v2/

  • Goal:Agent需要学会克服各种障碍向前移动

  • State:  24维向量,包括各部件角速度,水平速度,垂直速度,关节位置,腿与地面的接触以及10个激光雷达测距仪的测量值

  • Action:  4维连续动作空间,取值范围为[-1,1],分别对应机器人胯下两个关节的转矩以及膝关节的转矩

  • Reward:  向前移动会获得到正奖励信号,摔倒会得到-100的奖励信号,同时,驱动各关节转动会得到一定的负奖励信号

  • Done:  摔倒或抵达地图终点会结束当前回合

三、TD3-Twin Delayed Deep Deterministic policy gradient algorithm算法介绍

TD3是一种确定性策略强化学习算法,适合于高维连续动作空间。它的优化目标很简单:

用大白话来讲,就是我要在不同的state下找到对应的action,使得我与环境互动的分数最高。这很直观,有没有~

       为了做到这一件事情,我们分别需要一个Actor和一个Critic。Actor将不同的state映射到对应的action上去,大白话来讲就是决定Agent在各个state下具体采取什么样的动作。而Critic就是为了告诉Agent在不同的state下,采取不同action的最终到底会得多少分,这能帮助Agent选择那些得分更高的action。Actor和Critic分别用不同的神经网络实现。

       那具体是怎么做的呢?我们现在先假定Critic已经学习到了在不同state下采取不同action最终到底会得多少分,看看Actor到底是怎么学习的。

【论文复现】一步步详解用TD3算法通关BipedalWalkerHardcore-v2环境-编程知识网

这是原论文中用于更新Actor参数的梯度表达式,表示Actor网络的参数,表示Critic网络的参数。

看起来很头秃有没有。。。 不要慌!不要慌!我们分成红、蓝、绿三部分分别来看。

首先看蓝色部分,根据我们之前说的,假定Critic已经学成大师,啥东西他都懂(学术一点就是网络已经学好啦,不用再更新啦)。我们以一维动作空间为例,看看蓝色部分到底在讲什么。

【论文复现】一步步详解用TD3算法通关BipedalWalkerHardcore-v2环境-编程知识网

就像这张图展示的一样,在当前状态s下,Actor的输出为图中的黑色点,很明显,Critic告诉我们在这个状态下采取黑点所代表的动作的最终得分并不是最高的,得分最高的是红点所代表的动作。因此,蓝色部分的梯度说的就是当前的action应该怎么变化才能得到更高的得分。

       Actor在得到这一信息后,便根据它来调节自己的输出值。就像图4表示的一样,绿色部分梯度说的就是Actor的参数应该怎么变化,才能使得在这个状态下的输出值是红点所表示的动作。

【论文复现】一步步详解用TD3算法通关BipedalWalkerHardcore-v2环境-编程知识网

至于红色部分,就很简单啦。我们的目标并不是某一个状态下Actor能获得较高的分数,而是希望Agent能在所有状态下都能做到最好,因此我们希望Actor的梯度是根据所有状态下的计算的,但实际上我们无法获得所有数据,就算能获得,数据量也非常庞大,不利于计算。因此我们选择用Mini-batch的方式进行更新,每次从已有的与环境互动所获得的数据中抽取笔来训练我们的Actor。

到这里,Actor就已经说完啦。我相信这么一捋下来,这个式子也没那么晦涩难懂了吧~ 其实这些数学表达式,看起来很复杂,但只要我们get到它的那个点,你会发现其实他就在说一件很简单的事情啦~~

现在再回过头来看一看Critic,之前我们的假设Critic已经学成大师,但实际上Actor和Critic是共同进步的,就是传说中的策略改进和策略评估。实际上,为准确地估计Q-function一直是学术界各路大神所希望解决的问题。在TD3算法中,作者为了解决以上问题,主要用了以下几个方法

Target Network.使用相对稳定目标网络的输出值来构造Critic学习的Target Value以保证Critic学习的稳定性。

Clipped Double-Q Learning. TD3算法独立学习两个Q-function(因此命名为“twin"),用两个中较小的Q值去构造Critic学习的Target Value,以减缓Critic的Overestimation。

Target Policy Smoothing. TD3在构造Target Value时,对目标动作加入了噪声,以帮助Critic学习。这个做法的启发是,在同一状态下采取相似的动作所获得的分数应该没有太大的差别。

       TD3算法的更多细节在这里就不多讲啦,想要更深入学习的同学推荐精读一下原始论文。这里附上算法流程图

【论文复现】一步步详解用TD3算法通关BipedalWalkerHardcore-v2环境-编程知识网

四、通关秘籍

       好啦,终于到了我们的重头戏—通关秘籍。如前文所说,直接用已有的强化学习主流算法(TD3,SAC,PPO等)去训练,即使经过调参也几乎没有任何效果。这里为大家带来几个Trick和在代码实现时的一些细节,帮助大家通关这个环境~  奥利给!!!

 

Trick 1. Done or Dead

       环境中触发Done有三种情况,分别是机器人摔倒到达回合最大时间通关。根据贝尔曼方程,用于Critic更新的Target Value计算方式如下:

如果在到达回合最大时间通关时设置,而舍弃掉的话,是不正确的,因为这是人为终止了本轮回合,实际上若将环境继续运行下去,的值并不为0。而只有机器人摔倒(Dead)时,才等于0(因为该环境并不训练机器人从地上爬起来,所以机器人一旦摔倒,回合便真正结束了,只有便再无奖励信号)。若不对环境的Done状态和Dead状态加以区分,将会造成Critic学习振荡,导致性能下降。实现方式:

【论文复现】一步步详解用TD3算法通关BipedalWalkerHardcore-v2环境-编程知识网

下图为Trick 1 对训练的影响,x轴-episode, y轴-回合总Reward,红色-不使用Trick1,橙色-使用Trick 1

【论文复现】一步步详解用TD3算法通关BipedalWalkerHardcore-v2环境-编程知识网

Trick 2. Reward Shaping

原始环境在摔倒时r=-100,而正常情况下的r大概在[-1,1]区间里,两者数量级相差较大,会导致Q-function突变,不利于学习。摔倒时,设置r=-1会明显改善训练效果。

结合Trick 1, 实现方式为:

【论文复现】一步步详解用TD3算法通关BipedalWalkerHardcore-v2环境-编程知识网

下图为Trick 2 对训练的影响,x轴-运行时间, y轴-回合总Reward,粉色-不使用Trick2,橙色-使用Trick 2

【论文复现】一步步详解用TD3算法通关BipedalWalkerHardcore-v2环境-编程知识网

Trick 3. Data Balance

       在BipedalWalkerHardcore-v2环境下,Agent主要要学会跑步、跨坑、越障、下阶梯等一系列技能。其中,最困难的技能是越障。笔者观察发现,Agent在学习的中前期会出现学会越障这一复杂技能后忘记其他几个简单技能,而又重新学习简单技能。在重拾简单技能后,又忘记越障技能的问题。增大该环境中出现障碍物的概率可以有效帮助Agent同时掌握简单和复杂的技能。具体实现方式为更改BipedalWalkerHardcore-v2源文件bipedal_walker.py

(路径D:\Anaconda\envs\torch\Lib\site-packages\gym\envs\box2d\ bipedal_walker.py,找不到的话直接搜索bipedal_walker.py文件)

第252行如下图所示:

【论文复现】一步步详解用TD3算法通关BipedalWalkerHardcore-v2环境-编程知识网

下图为Trick 3 对训练的影响,x轴-episode, y轴-回合总Reward,蓝色-不使用Trick3,橙色-使用Trick 3

【论文复现】一步步详解用TD3算法通关BipedalWalkerHardcore-v2环境-编程知识网

Trick 3 也启示我们强化学习中同样存在数据不均衡的现象,看来解决强化学习的数据不均衡问题也是一个好方向~

 

Trick 4. Exploration Decay

TD3为确定性策略算法,为鼓励Agent对环境进行探索,需要在Actor输出的动作上加以一定噪声。但噪声对于训练后期算法的收敛是不利的,随着训练的进行逐步减小噪声是一个不错的选择。

 

Hyper-parameters

Width of hidden layer

200

Number of hidden layer

2

Learning rate

0.0001

γ

0.99

Mini-batch size

256

Actor activation function

tanh

Critic activation function

relu

       tau 

0.005

Actor delay frequency

1

Policy_noise

0.2*max_action

Noise_clip

0.5*max_action

Explore_noise

0.25

Noise_decay

0.999

 

终于写完,以上就是和大家分享的所有内容啦~~

 

值得一提的是,这些Trick不仅仅对TD3有效,其他算法使用这些Trick也能获得不错的效果。让我们来看看在PPO上使用这些Trick的结果吧(从我的实验看来,如果不使用这些Trick,PPO几乎无法学习)

总共训练了147600个episode,运行22小时左右。

【论文复现】一步步详解用TD3算法通关BipedalWalkerHardcore-v2环境-编程知识网

 

B站链接:

https://www.bilibili.com/video/BV1oa411F7e7?from=search&seid=3235450248292146996

Github代码链接: 

https://github.com/XinJingHao/TD3-BipedalWalkerHardcore-v2

作者简介:辛靖豪,上海交通大学在读博士、深度强化学习实验室研究员(学习者),主要研究方向为强化学习+自动化控制。

Github:https://github.com/XinJingHao

总结1:周志华 || AI领域如何做研究-写高水平论文

总结2:全网首发最全深度强化学习资料(永更)

总结3:  《强化学习导论》代码/习题答案大全

总结4:30+个必知的《人工智能》会议清单

总结52019年-57篇深度强化学习文章汇总

总结6:   万字总结 || 强化学习之路

总结7:万字总结 || 多智能体强化学习(MARL)大总结

总结8:深度强化学习理论、模型及编码调参技巧

第90篇:Top-K Off-Policy  RL论文复现

第89篇:腾讯开源分布式多智能TLeague框架

第88篇:分层强化学习(HRL)全面总结

第87篇:165篇CoRL2020 accept论文汇总

第86篇:287篇ICLR2021深度强化学习论文汇总

第85篇:279页总结"基于模型的强化学习方法"

第84篇:阿里强化学习领域研究助理/实习生招聘

第83篇:180篇NIPS2020顶会强化学习论文

第82篇:强化学习需要批归一化(Batch Norm)吗?

第81篇:《综述》多智能体强化学习算法理论研究

第80篇:强化学习《奖励函数设计》详细解读

第79篇: 诺亚方舟开源高性能强化学习库“刑天”

第78篇:强化学习如何tradeoff"探索"和"利用"?

第77篇:深度强化学习工程师/研究员面试指南

第76篇:DAI2020 自动驾驶挑战赛(强化学习)

第75篇:Distributional Soft Actor-Critic算法

第74篇:【中文公益公开课】RLChina2020

第73篇:Tensorflow2.0实现29种深度强化学习算法

第72篇:【万字长文】解决强化学习"稀疏奖励"

第71篇:【公开课】高级强化学习专题

第70篇:DeepMind发布"离线强化学习基准“

第69篇:深度强化学习【Seaborn】绘图方法

第68篇:【DeepMind】多智能体学习231页PPT

第67篇:126篇ICML2020会议"强化学习"论文汇总

第66篇:分布式强化学习框架Acme,并行性加强

第65篇:DQN系列(3): 优先级经验回放(PER)

第64篇:UC Berkeley开源RAD来改进强化学习算法

第63篇:华为诺亚方舟招聘 || 强化学习研究实习生

第62篇:ICLR2020- 106篇深度强化学习顶会论文

第61篇:David Sliver 亲自讲解AlphaGo、Zero

第60篇:滴滴主办强化学习挑战赛:KDD Cup-2020

第59篇:Agent57在所有经典Atari 游戏中吊打人类

第58篇:清华开源「天授」强化学习平台

第57篇:Google发布"强化学习"框架"SEED RL"

第56篇:RL教父Sutton实现强人工智能算法的难易

第55篇:内推 ||  阿里2020年强化学习实习生招聘

第54篇:顶会 || 65篇"IJCAI"深度强化学习论文

第53篇:TRPO/PPO提出者John Schulman谈科研

第52篇:《强化学习》可复现性和稳健性,如何解决?

第51篇:强化学习和最优控制的《十个关键点》

第50篇:微软全球深度强化学习开源项目开放申请

第49篇:DeepMind发布强化学习库 RLax

第48篇:AlphaStar过程详解笔记

第47篇:Exploration-Exploitation难题解决方法

第46篇:DQN系列(2): Double DQN 算法

第45篇:DQN系列(1): Double Q-learning

第44篇:科研界最全工具汇总

第43篇:起死回生|| 如何rebuttal顶会学术论文?

第42篇:深度强化学习入门到精通资料综述

第41篇:顶会征稿 ||  ICAPS2020: DeepRL

第40篇:实习生招聘 || 华为诺亚方舟实验室

第39篇:滴滴实习生|| 深度强化学习方向

第38篇:AAAI-2020 || 52篇深度强化学习论文

第37篇:Call For Papers# IJCNN2020-DeepRL

第36篇:复现"深度强化学习"论文的经验之谈

第35篇:α-Rank算法之DeepMind及Huawei改进

第34篇:从Paper到Coding, DRL挑战34类游戏

第33篇:DeepMind-102页深度强化学习PPT

第32篇:腾讯AI Lab强化学习招聘(正式/实习)

第31篇:强化学习,路在何方?

第30篇:强化学习的三种范例

第29篇:框架ES-MAML:进化策略的元学习方法

第28篇:138页“策略优化”PPT–Pieter Abbeel

第27篇:迁移学习在强化学习中的应用及最新进展

第26篇:深入理解Hindsight Experience Replay

第25篇:10项【深度强化学习】赛事汇总

第24篇:DRL实验中到底需要多少个随机种子?

第23篇:142页"ICML会议"强化学习笔记

第22篇:通过深度强化学习实现通用量子控制

第21篇:《深度强化学习》面试题汇总

第20篇:《深度强化学习》招聘汇总(13家企业)

第19篇:解决反馈稀疏问题之HER原理与代码实现

第18篇:"DeepRacer" —顶级深度强化学习挑战赛

第17篇:AI Paper | 几个实用工具推荐

第16篇:AI领域:如何做优秀研究并写高水平论文?

第15篇:DeepMind开源三大新框架!

第14篇:61篇NIPS2019DeepRL论文及部分解读

第13篇:OpenSpiel(28种DRL环境+24种DRL算法)

第12篇:模块化和快速原型设计Huskarl DRL框架

第11篇:DRL在Unity自行车环境中配置与实践

第10篇:解读72篇DeepMind深度强化学习论文

第9篇:《AutoML》:一份自动化调参的指导

第8篇:ReinforceJS库(动态展示DP、TD、DQN)

第7篇:10年NIPS顶会DRL论文(100多篇)汇总

第6篇:ICML2019-深度强化学习文章汇总

第5篇:深度强化学习在阿里巴巴的技术演进

第4篇:深度强化学习十大原则

第3篇:“超参数”自动化设置方法—DeepHyper

第2篇:深度强化学习的加速方法

第1篇:深入浅出解读"多巴胺(Dopamine)论文"、环境配置和实例分析

第14期论文:  2020-02-10(8篇)

第13期论文:2020-1-21(共7篇)

第12期论文:2020-1-10(Pieter Abbeel一篇,共6篇)

第11期论文:2019-12-19(3篇,一篇OpennAI)

第10期论文:2019-12-13(8篇)

第9期论文:2019-12-3(3篇)

第8期论文:2019-11-18(5篇)

第7期论文:2019-11-15(6篇)

第6期论文:2019-11-08(2篇)

第5期论文:2019-11-07(5篇,一篇DeepMind发表)

第4期论文:2019-11-05(4篇)

第3期论文:2019-11-04(6篇)

第2期论文:2019-11-03(3篇)

第1期论文:2019-11-02(5篇)

【论文复现】一步步详解用TD3算法通关BipedalWalkerHardcore-v2环境-编程知识网