DeepRL · 2020年12月16日

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

报道:深度强化学习实验室
作者: 辛靖豪
编辑: 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小时才最终解决了该问题,可见该环境的难度不一般。

一、简介

image.png

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

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

image.png

image.png

二、BipedalWalkerHardcore-v2介绍

image.pngHardcore 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/Bi...

  • 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分别用不同的神经网络实现。

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

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

image.png

至于红色部分,就很简单啦。我们的目标并不是某一个状态下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算法的更多细节在这里就不多讲啦,想要更深入学习的同学推荐精读一下原始论文。这里附上算法流程图
image.png

四、通关秘籍

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

Trick 1. Done or Dead

image.png

Trick 2. Reward Shaping
image.png

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行如下图所示:

image.png

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

Trick 4. Exploration Decay

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

Hyper-parameters
image.png
终于写完,以上就是和大家分享的所有内容啦~~

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

image.png

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

image.png

B站链接:

https://www.bilibili.com/vide...

Github代码链接: 

https://github.com/XinJingHao...

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

Github:https://github.com/XinJingHao

推荐阅读

专注深度强化学习前沿技术干货,论文,框架,学习路线等,欢迎关注微信公众号。
深度强化学习实验室.png
更多深度强化学习精选知识请关注深度强化学习实验室专栏,投稿请联系微信 1946738842.
推荐阅读
关注数
2950
内容数
56
专注深度强化学习前沿技术,欢迎关注
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息