OpenAI:我们将发布8个模拟的机器人环境,以及一种叫做“事后经验回顾”(Hindsight Experience Replay,简称HER)的一种Baselines实现,它允许从简单的、二元的奖励中学习,从而避免了对复杂的奖励工程的需求。所有这些都是为我们过去一年的研究而开发的。我们利用这些环境来训练在实体机器人上工作的模型,并且还发布了一组机器人研究的请求。
相关链接:
视频:http://imgcdn.atyun.com/2018/02/videoplayback-1.mp4?_=1
这次发布了包括四个使用Fetch科研平台的环境,以及使用ShadowHand机器人的四个环境。这些环境中所包含的操作任务要比目前在Gym使用的MuJoCo持续控制环境要困难得多,这些环境现在都可以使用像PPO这样的最近发布的算法来解决。此外,我们新发布的环境使用了真实的机器人模型,并要求agent解决实际任务。
这次发布为Gym提供了8个机器人环境,使用了MuJoCo物理模拟器。环境如下:
Fetch
FetchReach-v0(抵达):Fetch必须将它的末端执行器(在机器人技术中,末端执行器是机器人手臂末端的装置,它是用来与环境进行交互的。这个装置的确切性质取决于机器人的应用。)移动到期望的目标位置。
Fetchslide-v0(滑动):Fetch必须在一个长桌上打击一个冰球,这样它就可以滑过,并在期待的目标上停下来。
FetchPush-v0(推动):Fetch必须推动一个立方体,直到它达到一个理想的目标位置。
FetchPickAndPlace-v0(捡起和放置):Fetch必须使用它的夹钳从一个桌子上捡起一个盒子(黑色),并将它移动到桌面上的一个期望的目标上。
ShadowHand(一种机械手臂)
HandReach-v0:ShadowHand必须用它的拇指和一个选定的手指来接触,直到它们在手掌上达到一个理想的目标位置。
HandManipulateBlock-v0(机械手操控一个块):ShadowHand必须操作一个块,直到它达到预期的目标位置并旋转。
HandManipulateEgg-v0(机械手操控一个蛋体):ShadowHand必须操控一个蛋体,直到它达到一个理想的目标位置并旋转。
HandManipulatePen-v0(机械手操控一支笔):ShadowHand必须操控一支笔,直到它达到理想的目标位置并旋转。
所有的新任务都有一个“目标”的概念,例如在滑动任务中冰球的期望位置,或者在机械手操控块任务中的期望方向。如果期望的目标还没有达到,那么所有的环境默认使用的是-1的稀疏奖励。如果达到了(在一定的范围内),那么是0。这与被用于传统的Gym持续控制问题的成型的(shaped)奖励形成了鲜明的对比,例如,Walker2d-v2。
我们还包括一个对每个环境都有密集奖励的变体。然而,我们相信,在机器人应用程序中,稀疏的奖励更现实一些,我们鼓励每个人使用这种稀疏的奖励变体。
除了这些新的机器人环境,我们还发布了事后经验回顾(Hindsight Experience Replay,简称HER)的代码(如下),这是一种可以从失败中学习的强化学习算法。我们的研究结果表明,HER可以从很少的奖励中学习到大多数新的机器人问题的成功策略。在此基础上,我们还展示了未来研究的一些潜在方向,进一步提高了HER算法在这些任务中的性能。
为了了解HER的作用,让我们在FetchSlide(上文提到)的背景下看一看,我们需要学习将一个冰球滑过桌子并击中一个目标。我们的第一次尝试很可能不会成功。除非我们非常幸运,否则接下来的几次尝试也很可能不会成功。典型的强化学习算法不会从这种经验中学到任何东西,因为它们只获得一个不包含任何学习信号的恒定奖励(在这种情况下是-1)。
HER的正式观点是人类直觉上所做的:即使我们没有在一个特定的目标上取得成功,我们至少也取得了一个不同的目标。那么,为什么不只是假装我们想要开始实现这个目标,而不是我们最初想要实现的目标呢? 通过进行这种替换,强化学习算法可以获得一个学习信号,因为它已经达到了一定的目标;即使这不是我们最初想要达到的目标。如果我们重复这个过程,我们最终将学会如何实现任意的目标,包括我们真正想要实现的目标。
这种方法可以让我们学会如何在桌子上滑动一个冰球,尽管我们的奖励是非常稀疏的,即使我们可能从来没有真正达到我们想要的目标。我们将这种技术称为事后经验回顾(HER),因为在事件结束后,它回顾了目标经验(一种通常在DQN和DDPG等非策略的强化学习算法中使用的技术),这些目标经验都是事后选择的。因此,HER可以与任何偏离策略的强化学习算法相结合(例如,HER可以与DDPG算法结合使用,我们将其称为“DDPG+HER算法”)。
我们发现HER在以目标为基础的环境中工作得非常好,而奖励却很稀疏。我们在新任务上比较了DDPG+HER算法和vanilla DDPG算法。这种比较包括每种环境的稀疏和密集版本的奖励。
对于在HandManipulateBlockRotateXYZ-v0上的
四个不同的配置的中位数检测成功率(线)和四分位距(阴影区域)。数据是在训练epoch上进行绘制的(plot),并总结了每个配置的5个不同的随机种子。
DDPG+HER的稀疏奖励远远超过其他的配置,并且在这个具有挑战性的任务上学习了一个成功的策略,只有很稀疏的奖励。有趣的是,DDPG+HER的密集奖励可以学习,但成绩更差。在这两种情况下,Vanilla DDPG大多都无法学习。我们发现这种趋势在大多数环境中都是正确的,并且在我们的技术报告中包含了完整的结果。
虽然HER是一种很有前途的方法,可以通过我们在这里提出的机器人环境来学习复杂的基于目标的任务,但是仍然有很大的改进空间。与我们最近推出的研究请求2.0版本的要求相似,我们有一些关于如何改进HER的方法,以及强化学习的方法。
引入“目标”的概念需要对现有的Gym API进行一些向后兼容的改变:
desired_goal
),它当前实现的反而是(achieved_goal
),以及实际的观察(observation
),例如机器人的状态。这里有一个简单的例子,它与基于目标的环境进行交互,并执行目标替换:
import numpy as np
import gym
env= gym.make(′FetchReach-v0′)
obs= env.reset()
done= False
def policy(observation, desired_goal):
# Here you would implement your smarter policy. In this case,
# we just sample random actions.
return env.action_space.sample()
while not done:
action= policy(obs[′observation′], obs[′desired_goal′])
obs, reward, done, info= env.step(action)
# If we want, we can substitute a goal here and re-compute
# the reward. For instance, we can just pretend that the desired
# goal was what we achieved all along.
substitute_goal= obs[′achieved_goal′].copy()
substitute_reward= env.compute_reward(
obs[′achieved_goal′], substitute_goal, info)
print(′rewardis {}, substitute_rewardis {}′.format(
reward, substitute_reward))
新的基于目标的环境可以与现有的与Gym匹配的强化学习算法,比如Baseline一起使用。使用gym.wrappers.FlattenDictWrapper将基于dict的观察空间flatten为一个数组:
import numpy as np
import gym
env= gym.make(′FetchReach-v0′)
# Simply wrap the goal-based environment using FlattenDictWrapper
# and specify the keys that you would like to use.
env= gym.wrappers.FlattenDictWrapper(
env, dict_keys=[′observation′, ′desired_goal′])
# From now on, you can use the wrapper env as per usual:
ob= env.reset()
print(ob.shape) # is now just an np.array