选自BAIR
作者:Carlos Florensa
机器之心编译
参与:Panda
强化学习是当前人工智能领域最炙手可热的技术之一。近日,伯克利人工智能研究实验室(BAIR)博客介绍了一种用于强化学习智能体的逆向课程生成(Reverse Curriculum Generation)方法。该方法可以帮助智能体实现更有效的学习,乃至完成其它强化学习智能体无法实现的任务。本研究的论文已经在机器人学习会议(CoRL 2017)上发表,项目代码也已经开源。
强化学习是一种强大的技术,可以解决运动、Atari 游戏、赛车游戏和机器人操作等复杂任务,这项技术是训练一个智能体根据一个奖励函数来优化行为。但是,对于很多任务而言,设计易于训练且能在优化后得到所需行为的奖励函数很困难。假设我们想要一个机器臂学习如何将一个环套到一根钉上。其最自然的奖励函数是让智能体在达到所需的最终配置时得到奖励 1,得到其它结果的奖励为 0。但是,该任务所需的动作(将环与钉的顶部对齐,然后将环滑倒底部)在这样的二元奖励设置下是无法学习得到的,因为我们的初始策略的常用随机探索不可能实现这一目标,如视频 1a 所示。作为替代,我们可以尝试构造奖励函数以使这个问题更加简单,但寻找优良的构造方式需要相当多的专业知识和实验。比如,直接最小化环的中心和钉的底部之间的距离会得到一种不成功的策略——直接将环贴在钉上,如视频 1b 所示。我们提出了一种无需修改奖励函数而有效学习的方法——通过在起始位置上自动生成课程(curriculum)。
视频 1a:在大多数起始位置上,随机初始化的策略无法触及目标,因此无法学习。
视频 1b:根据在环中心与钉底部之间的距离上的惩罚来构造奖励函数会得到我们不想要的结果。
课程而不是塑造奖励
我们希望训练一个能够从任何起始位置达成目标的智能体,而无需专家来塑造奖励。很显然,并非所有起始位置的难度都一样。即使是一个随机智能体,如果放的位置离目标很近,有时候也能到达目标、获得奖励,就能开始学习了!然后这里获得的知识就可以被引导用于解决从离目标更远一点的位置开始的任务。通过选择我们在训练中所使用的起始位置的顺序,我们可以利用问题的这种底层结构并且提升学习效率。这种技术的一项关键优势是不必修改奖励函数,而且直接优化这种稀疏奖励更不容易产生我们不想得到的行为。按顺序排布一组待学习的相关任务的方法被称为课程学习(curriculum learning),而我们面临的一个核心问题是如何选择这种任务顺序。我们的方法(我们将在后面给出更详细的解释)使用了学习智能体的表现来自动生成从目标开始向外扩展的任务课程。
逆向的课程直觉
在面向目标的任务中,任务的目的是从任意起始状态达成某个所需的配置。比如在上面介绍的钉上套环的任务中,我们希望从任意配置开始都能将环套在钉上。从大多数起始位置开始,我们的初始策略的随机探索从来没有达成过目标,因此也就得不到任何奖励。尽管如此,在视频 2a(上)中可以看到,如果初始时在近邻的位置,随机策略也是有可能到达钉底部的。然后,一旦我们学习到了如何从目标周围到达目标,再从更远的地方学习就会更容易,因为如果探索动作将其状态推进到了目标周围,那该智能体就已经知道接下来该如何继续了,如视频 2b(中)所示。最后,该智能体成功地学会了从范围广泛的起始位置开始到达目标,如视频 2c(下)所示。
视频 2a-c:我们的方法首先从目标附近开始努力学习,然后逐渐远离其开始的位置,逆向扩大。
这种逆向的学习方法(或从目标开始向外扩展的方法)的灵感来自动态规划(Dynamic Programming)方法,其中更简单的子问题的解决方案可被用于计算更难问题的解决方案。
中间难度的起点(SoID)
要实现这种逆向课程,我们需要确保这个学习智能体的外扩速度适当。换句话说,我们需要通过数学的方式描述一组可以追踪当前的智能体表现的起始条件并且为我们的强化学习算法提供优良的学习信号。我们特别关注了策略梯度(Policy Gradient)算法,这可以在总预期奖励的估计梯度上的方向上一步步提升参数化的策略。这种梯度估计通常是原来的 REINFORCE 的一种变体,这是通过从状态
收集 N 个在策略(on-policy)轨迹
而估计得到的,参阅:https://link.springer.com/article/10.1007/BF00992696。
在面向目标的任务中,轨迹奖励
是二元的,即表明该智能体是否达成了目标。因此,常用的基准
是估计从状态
开始执行当前策略
时达成目标的概率。因此,我们可以看到,在(1)式中,求和项对应于从起始状态
(成功的概率是 0 或 1)开始收集到的轨迹,而这个求和项会消失。这些轨迹都「浪费了」,因为它们对梯度的轨迹毫无用处——要么太难了,要么就太容易了。我们之前在多任务强化学习上的研究也曾给出过类似的分析,参阅《学界 | 伯克利与 OpenAI 整合强化学习与 GAN:让智能体学习自动发现目标》。在这种情况下,为了避免从我们当前的策略永远完不成目标或已经掌握了的地方开始训练,我们引入了「中间难度起始(SoID:Start of Intermediate Difficulty)」的概念,它是从状态 s0 开始的并且满足:
其中 Rmin 和 Rmax 的值分别是从该起始处开始进行训练的可接受的最小成功概率以及我们宁愿在其它起始处开始训练的最大成功概率。我们在所有的实验中都分别使用了 10% 和 90%。
逆向课程的自动生成
根据上面的直觉知识和推导,我们希望使用从 SoID 状态的轨迹训练我们的策略。不幸的是,在每一次策略更新时寻找完全满足(2)式的所有起始处是不可能的,因此我们引入了一种有效的近似来自动生成这种逆向课程:我们在前一次迭代过程中在起始处附近采样估计是 SoID 的状态。为了做到这一点,我们提出了一种使用在上一次训练迭代过程中收集到的轨迹来过滤非 SoID 起始处的方法,然后再采样附近的状态。视频 3 对该完整算法进行了说明,细节如下:
视频 3:动画演示我们的算法的主要步骤,以及它自动生成适合当前智能体表现的课程的方式。
过滤掉非 SoID
在每个策略梯度训练迭代过程中,我们都从某些起始位置
收集 N 个轨迹。对于大多数起始状态,我们都至少从那里开始收集 3 个轨迹,因此我们可以从这些起始点
开始计算我们的策略的成功概率的蒙特卡洛估计。对于估计不在固定边界 Rmin 和 Rmax 内的每个
,我们就丢弃这个起始处,这样我们就不用在下一次迭代过程中从它开始训练。是之前一个策略的 SoID 的起始处也可能是当前策略的 SoID,因为它们现在已被掌握或因为更新后的策略比它们还差,所以为了维持一个适合当前智能体表现的课程,不断过滤掉非 SoID 的起始处是很重要的。
采样临近区域
在过滤掉非 SoID 之后,我们需要获取新的 SoID 以从我们训练的起始处保持扩张。我们做到这一点的方法是采样近邻剩余 SoID 的状态,因为这些区域的难度对当前策略来说都差不多——因此也可能是 SoID。但采样一个特定状态
的临近区域有什么好方法呢?我们提出从该
开始采用随机探索动作,并记录访问过的状态。将噪声直接应用到状态空间中可以让该技术更好,因为这可能会产生甚至根本不可行的状态或无法从
通过执行动作达到的状态。
假设
为了初始化该算法,我们需要从一个以
为目标的起始处开始,然后从其开始运行布朗运动,从收集到的起始处进行训练,过滤掉非 SoID 并进行迭代。当问题特定时,这通常比较容易做到,而且这比完整演示如何达成目标的假设要更容易一些。
我们的算法利用了从收集到的轨迹起始处中选择起始分布的能力。很多系统中都有这种情况,就像所有的模拟系统一样。Kakade 和 Langford 也在这一假设的基础上进行了开发,并且还提出了证明修改起始分布确实有用的理论证据。
在机器人上的应用
导航到一个固定目标以及为实现目标配置进行精细操作是两种面向任务型的机器人任务。我们分析了我们提出的算法可以如何自动为以下任务生成逆向课程:点群迷宫(Point-mass Maze,图 1a)、蚂蚁迷宫(图 1b)、钉上套环(图 1c)和插入钥匙(图 1d)。
图 1a-d:我们用于阐释我们的方法的表现的任务(从左到右):点群迷宫、蚂蚁迷宫、钉上套环、插入钥匙。
点群迷宫
在这一任务中,我们希望学会从迷宫中的任意起点都能到达图 1a 右上角的红色区域终点。在图 2 中我们可以看到,随机初始化的策略(在迭代 i=1 时)在目标附近以外的所有地方成功完成任务的概率是 0。图 2 中第二行给出了我们的算法在 i=1 时提出目标附近的起始位置的方式。我们可以在后续的列中看到由我们的方法生成的起始处一直保持跟踪训练策略成功的位置区域(有时候,但并不是总是这样),因此能为任意策略梯度学习方法提供优良的学习信号。
图 2:由我们的逆向课程方法生成的策略表现和起始处的快照(为了表达清楚,这里没有给出 replay buffer),我们的方法一直在跟踪处于中间难度水平的区域。
为了避免忘记如何从某些区域到达目标,我们保存了一个 replay buffer,其缓存了作为之前任意一个策略的 SoID 的所有起始处。在每一次训练迭代中,我们都采样一小部分从该 replay 中的状态开始的轨迹。
蚂蚁迷宫
机器人往往需要复杂的协调运动才能达成所需的配置。比如图 1b 中的四足机器人需要知道如何协调自己的力矩以便向目标前进和移动。视频 4 给出了最终的策略,可以看到我们的算法可以学会这种行为,即使在其到达目标的过程中我们只给它提供了成功/失败奖励!我们没有修改它的奖励函数,其中没有包含到目标的距离、质心速度或探索奖励等任何其它东西。
视频 4:当使用我们的逆向课程方法时(即使是稀疏奖励),出现了复杂的协调和对环境接触(environment contacts)的利用。
精细操作
我们的方法可以解决如图 1c 和 1d 中所示的复杂的机器人操作问题。这两个任务都有一个有 7 个自由度的机器臂,并且有复杂的接触约束(contact constraint)。第一个任务要求机器人将一个环套到钉的底部;第二个任务的目标是将一把钥匙插入一把锁,然后顺时针旋转 90 度,再进一步插入,然后再逆时针旋转 90 度。在这两种情况中,都只有当达成所需的最终配置时才会给出奖励。不使用课程的当前最佳的强化学习方法无法学会解决这种任务的方法,但使用我们的逆向课程生成,我们可以从范围宽泛的起始位置得到成功的策略,如视频 5a 和 5b 所示。
视频 5a(上)和视频 5b(下):使用我们的逆向课程方法在钉上套环和插入钥匙任务上所得到的最终策略。该智能体可以从范围宽广的起始位置开始并取得成功,并且还可以利用接触来引导自己。
结论和未来方向
最近的强化学习方法已经从单任务范式变成了解决一组任务的范式。这是为了更加接近真实世界场景,其中每一次需要执行任务时,起始配置、目标和其它参数都会有改变。因此,推进课程学习领域的进展来利用这些任务的底层结构是至关重要的。我们的逆向课程策略是向这个方向迈出的一步,在运动和复杂操作任务上表现出色,而这些任务无法用不使用课程的方法解决。
此外,还可以从我们的操作任务的最终策略的视频中看到,智能体已经学会了利用环境中的接触,而不是避开它们。因此,我们提出的这种方法的基于学习的方面有很大的潜力可以用于解决经典运动规划算法难以解决的问题,比如带有非刚体对象的环境或任务几何参数不确定的情况。我们未来还会将我们的课程生成方法与域随机化(domain randomization,参阅 https://arxiv.org/abs/1703.06907)方法结合起来求解可以迁移到真实世界的策略。
扩展阅读
原文链接:http://bair.berkeley.edu/blog/2017/12/20/reverse-curriculum/
本文为机器之心编译,转载请联系本公众号获得授权。