强化学习是学到一个策略解决智能体与环境间互动问题的重要学习范式。不过以往的强化学习过程都常常很低效,在复杂环境中往往难以收敛。这一方面由于简单的策略难以完善、细致地描述各种不同环境状态下的不同行为,另一方面也有由于可能的行为的组合太多所以要探索的空间太大了。
OpenAI 的研究人员们这次就开发了一个层次化的强化学习算法,它可以学习到高阶的行动,用来解决一系列不同的任务,同时也可以快速学会解决总共需要上千个步骤的任务。当这个算法用来解决导航问题时,它能够为不同方向的走或者爬行学到一系列高级别的动作,这也让智能体能够快速掌握新的导航任务。
雷锋网 AI 科技评论把 OpenAI 博客的介绍文章编译如下。
方法思路
人类应对复杂问题的方法是把它们分解成一系列小的、可控的步骤。比如“做馅饼”就是由一系列高级别的行为组成的,取面粉、打鸡蛋、摊在平底锅内、设定烤箱等等。人类能够快速学到新任务,靠的就是把已经学过的步骤组合起来,即便每个步骤都可能需要百万个低级别的行动组成,像让不同的肌肉做不同的动作这样。
然而,当前的强化学习算法的运行方式都是在低层次的行动中做暴力搜索,解决新问题的时候需要大量的尝试。对于那些需要依次执行很多个步骤的任务来说,这种搜索方法的效率就会变得非常低。
OpenAI 的研究人员们提出了一种基于层次化强化学习的解决方案。这种方法中,智能体用几个高层次动作组成的序列表征复杂的行为。这样一来,智能体就可以解决复杂得多的任务:整个解决方案中可能需要 2000 步左右的低层次动作,层次化策略就可以把它们转化成 10 个高层次动作组成的序列,那么在这个 10 步动作的序列中进行搜索就比在 2000 步的序列中进行搜索高效得多。
共享层次的元学习
OpenAI 提出的算法 meta-learning shared hierarchies(共享层次的元学习,MLSH),能学到一个层次化的策略,其中的主策略可以在一系列子策略中进行切换。每经过N个时间步长,主策略就会选择一个动作;这里的N可以等于 200。一个执行N个时间步长的子策略就构成了一个高级别的动作。在研究员们研究的导航问题中,一个子策略就对应了在一种不同的方向下走路或者爬行。
在最开始的研究中,层次化策略都是显式地手工编写的。后来,他们把研究方向转变为让模型在与环境的互动中自动学到层次化结构。从元学习的角度,研究者们把好的层次结构定义为能够在以前未见过的任务中迅速达到高回报的结构。这样,MLSH 算法的目标就变成了学到能够在以前未见过的任务中快速学习的子策略。
研究员们在许多不同的任务中训练算法,其中的子策略是共享的,然后对于每个样本任务学到一个新的主策略。在反复训练新的主策略的过程中,它也能自动找到与主策略的学习表现最符合的子策略。
实验结果
类似这个蚂蚁机器人的智能体可以高效地探索空间,它能在向下、向右、向上三个策略之间切换,而不是随机地做出各种尝试。
这个高层次策略都学会了利用一个敌人(子策略从未见过)来让它更快地达到目标。采用的层次强化学习方法把大约需要 3000 个时间步长的迷宫问题简化成了一个 10 步的子策略选择问题。
在训练一整晚后,一个训练用于解决 9 种不同迷宫的 MLSH 的智能体就学到了分别对应着向上、向右和向下的动作,然后它就可以用这些动作帮它走出迷宫。
在“蚂蚁迷宫”环境中,一个 Mujoco 蚂蚁机器人被放在了 9 种不同的迷宫中,然后要从开始位置找到出口。OpenAI 的新算法仅仅通过与环境互动就成功找到了一组各有不同的子策略,把它们组成序列后走出迷宫。这些训练得到的子策略之后就可以用来解决更大的任务。
雷锋网 AI 科技评论编译。
论文地址:https://arxiv.org/abs/1710.09767
GitHub 地址:https://github.com/openai/mlsh (包含训练智能体的代码和评估算法用到的 Mujoco 环境)