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

本文介绍了如何使用TD3算法解决Gym环境中的BipedalWalkerHardcore-v2高难度挑战,分享了通过Done与Dead状态处理、奖励调整、数据平衡和探索策略衰减等技巧,帮助你在3小时内收敛。

深度强化学习实验室

作者:辛靖豪(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小时才最终解决了该问题,可见该环境的难度不一般。

一、简介

图1 BipedalWalkerHardcore-v2

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

 

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

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

二、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到底是怎么学习的。

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

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

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

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

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

至于红色部分,就很简单啦。我们的目标并不是某一个状态下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,SAC,PPO等)去训练,即使经过调参也几乎没有任何效果。这里为大家带来几个Trick和在代码实现时的一些细节,帮助大家通关这个环境~  奥利给!!!

 

Trick 1. Done or Dead

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

如果在到达回合最大时间通关时设置,而舍弃掉的话,是不正确的,因为这是人为终止了本轮回合,实际上若将环境继续运行下去,的值并不为0。而只有机器人摔倒(Dead)时,才等

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值