这次的发布包括了四个用到了 Fetch 研究平台(Fetch research platform)的环境和四个用到了 ShadowHand 机器人的平台。这些平台中包含的改造任务比 Gym 上现有的 MuJoCo 持续控制环境要难一点,所有的 MuJoCo 任务都可以简单地被最近发布的算法比如 PPO 解决。此外,我们新发布的环境使用真实的机器人模型,并需要智能体解决实际问题。
环境
该项目发布了 8 个 Gym 机器人环境,使用的是 MuJoCo 物理模拟器。这些环境包括:
Gym 是 OpenAI 发布的用于开发和比较强化学习算法的工具包。它可以教智能体很多事情,比如行走、跑动甚至玩乒乓球等。
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 连续控制问题中使用的形状奖励形成了鲜明对比,比如带有形状奖励的 Walker2d-v2。
我们也为每个环境引入了带有紧密奖励的变体。但是,我们相信稀疏奖励在机器人应用中更为现实,并鼓励每个人使用稀疏奖励变体。
Hindsight Experience Replay
除却这些新的机器人环境,我们也给出了 Hindsight Experience Replay(HER)的代码,它是一个可从失败中汲取教训的强化学习算法。我们的结果表明 HER 通过仅有的稀疏奖励可从绝大多数新机器人问题中习得成功的策略。下面我们也展示了一些未来研究的潜在方向,可以进一步提升 HER 在这些任务上的表现。
理解 HER
要理解 HER,我们需要先看一看 FetchSlide 的内容,一个我们要学习去滑动在桌子上的冰球然后打击目标的任务。我们第一次尝试非常可能失败。除非我们非常走运,后面几次同样也会失败。一般强化学习算法不会从这样的经验学习什么,因为他们的奖励(reward)是固定值(在这个案例中是-1),这样的奖励不包含学习信号,从而算法不会去学习。
HER 形式化的关键是人在直觉上的行动: 即使我们在任何特定的目标上还没有成功,但至少实现了一个不同的方法。所以为什么我们不假设使用我们开始时希望实现的目标,来替代我们最初原始设定的目标?按这样做的话,强化学习算法从它达到一定目标时就能得到一个学习信号;即使它不是我们原本想要达到的。如果我们重复这个过程,我们终将学到怎样去达成任意的目标,包括哪些我们非常想要达到的目标。
这个方法使我们可以学习怎样去在桌子上滑动一个冰球,即便我们的奖励是稀疏的,并且我们可能永远不会在早期击到目标。我们叫这个技术 Hindsight Experience Replay,因为它会在这一集结束之后选择目标的重放经验(一种在策略之外的强化学习算法像 DQN 或 DDPG)。HER 可以被任何策略之外的强化学习算法包含在内(举例,HER 可以被 DDPG 包括,我们写作「DDPG+HER」)。
结果
我们发现 HER 在基于目标的环境和稀疏奖励中表现得极其出色。我们在新的任务中对比了 DDPG+HER 和原版 DDPG,该对比中的所有环境分别包含稀疏和密集型奖励两种版本。
HandManipulateBlockRotateXYZ-v0 中四个不同配置下的中位测试成功率(曲线)和四分位距(阴影区域)。数据在训练期间进行绘制,并在每一种配置上使用五个随机 Seed 求均值。
带有稀疏奖励的 DDPG+HER 明显优于其它所有的配置,并且只有稀疏奖励能在这个挑战性的任务中学习到成功的策略。有趣的是,DDPG + HER 在密集奖励的情况下也能够学习,但表现并不好。此外,原版 DDPG 在两种情况下都没有较好的表现。我们发现这种趋势在大多数环境中都是正确的,读者可以在技术报告论文中查看详情。
研究问题:HER
虽然 HER 是很有前途的方式,它能用像我们在本文提出的机器人环境那样的稀疏奖励来学习基于目标的复杂任务,但它仍有很大的提升空间。与我们最近发布的 Requests for Research 2.0 相似,我们对如何具体提升 HER 有一些思考与探索。
自动 Hindsight 目标创建:我们现有有一个硬编码的策略来选择我们希望替换的 Hindsight 目标。如果这个策略可以被学习替代,那么将会很有意思。
无偏 HER:目标置换以无原则的方式改变经验的分布。这种偏差在理论上会导致不稳定性,尽管我们在实践中并没有发现这种情况。不过,通过重要性采样,我们可以推导出 HER 的无偏版本。
HER+HRL:将 HER 与最近在层级强化学习(HRL)中的新观点结合起来可能会很有意思。它不仅能将 HER 用与目标,同时还能通过高层次的策略应用到动作生成,因此我们可以假定高层级要求实现原始目标 B。
更丰富的价值函数:扩展最近的研究并在额外的输入上调整值函数,如折扣因子或有效的阈值等。
更快的信息传播:大多数离策略深度强化学习算法使用目标网络来稳定训练。然而由于变化需要时间来传播,这将会影响训练的速度。此外,我们也在实验中注意到它经常是决定 DDPG + HER 学习速度的最重要因素。
在策略 HER:目前,HER 只能被用于离策略算法,因为我们替代了目标,使得经验变得极其离策略。但是,当前最优的算法比如 PPO 展示了非常吸引人的稳定属性。调查 HER 能否与这样的在策略算法相结合会很有趣,比如通过重要性采样。在这一方向上已经有一些初步成果。
高频动作强化学习:当前的强化学习算法对采取动作的频率非常敏感,这就是为什么跳帧技术经常用于 Atari。在连续控制领域,随着动作采取的频率趋向无穷大,表现趋向于零。这是由于两个原因:不一致的探索(exploration),和需要更多次的 Bootstrap 来及时传播关于回报的信息。
把 HER 与强化学习的最新进展相结合。最近有大量的研究提升了强化学习的不同方面。比如,HER 能够与 Prioritized Experience Replay、distributional RL、entropy-regularized RL 相结合。
使用基于目标的环境
引入「目标」的理念需要对现有的 Gym API 做若干反向兼容的更改:
所有基于目标的环境使用 gym.spaces.Dict 观察空间。环境被期望包含一个智能体试图达成的期望目标(desired_goal),已经被达成的目标,以及实际观察(比如机器人的状态)。
我们展示了环境的奖励函数,并允许再计算带有已更改目标的奖励。这允许 HER 风格的算法替代目标。
下面是一个示例,它与其中一个基于目标的新环境交互,并执行目标替换:
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('reward is {}, substitute_reward is {}'.format(
reward, substitute_reward))
新的基于目标的环境可以被用于与 Gym 兼容的强化学习算法,比如 Baselines。用 gym.wrappers.FlattenDictWrapper 来向量化基于字典的观察空间为一个数组:
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
原文链接:https://blog.openai.com/ingredients-for-robotics-research/