用好奇心解决奖励稀疏的任务

我们刚刚发布了新版的ML-Agents 工具包(v0.4),其中一个我们很高兴与大家分享的新功能是,可以通过额外的基于好奇心的内在奖励来训练代理。
由于这项功能有很多需要解读的地方,我想再写一篇博文。从本质上讲,现在有了一种简便的方法,可以在奖励不频繁且分布稀疏的情况下,鼓励代理更有效地探索环境。这些代理可以根据自己对行动结果的惊讶程度,给自己奖励。在本篇文章中,我将解释这一新系统的工作原理,然后展示我们如何利用它来帮助我们的代理解决一项任务,而这项任务对于普通的强化学习(RL)算法来说,解决起来要困难得多。
说到强化学习,主要的学习信号以奖励的形式出现:代理每次做出决定后,都会得到一个标量值。这种奖励通常由环境本身提供,并由环境创建者指定。这些奖励通常对应于达成目标+1.0,死亡-1.0 等。我们可以认为这种奖励是外在的,因为它们来自行为主体之外。如果有外在奖励,那就意味着也一定有内在奖励。内在奖励不是由环境提供的,而是由代理根据某些标准自行产生的。当然,并不是任何内在奖励都可以。我们希望内在奖励最终能达到某种目的,比如改变代理的行为,使其在未来获得更多的外在奖励,或者使代理探索这个世界的程度超出预期。在人类和其他哺乳动物中,对这些内在奖励的追求通常被称为内在动机,并与我们的代入感紧密相连。
强化学习领域的研究人员花了很多心思来开发良好的系统,为代理提供内在奖励,赋予他们类似于我们在自然界代理身上发现的动力。一种流行的方法是赋予代理一种好奇心,并根据代理对周围世界的惊讶程度给予奖励。如果你想一想年幼的宝宝是如何认识世界的,那么他并不是在追求任何特定的目标,而是在玩耍和探索中获得新奇的体验。你可以说孩子很好奇。好奇心驱动探索的理念就是向我们的特工灌输这种动机。如果代理在达到令其惊讶的状态时会得到奖励,那么它就会学习探索环境的策略,以发现更多令人惊讶的状态。一路上,代理希望还能发现外在奖励,如迷宫中遥远的目标位置,或景观中稀少的资源。
我们选择了伯克利大学的 Deepak Pathak 和他的同事去年发表的一篇论文中的一个具体方法。如果您对论文的全部内容感兴趣,可以点击这里阅读。在这篇论文中,作者巧妙地提出了 "好奇心 "这一概念,并对其进行了概括。他们建议训练两个独立的神经网络:一个正向模型和一个反向模型。反演模型经过训练后,可以获取代理收到的当前和下一个观测数据,使用单一编码器对这两个数据进行编码,并利用编码结果预测在两个观测数据发生之间代理所采取的行动。然后对前瞻模型进行训练,使其能够利用编码的当前观测结果和行动,预测编码的下一次观测结果。然后,预测编码和实际编码之间的差值将被用作内在奖励,并反馈给代理。更大的差异意味着更大的惊喜,而惊喜又意味着更大的内在回报。
将这两个模型结合起来使用,奖励不仅能捕捉到令人惊讶的事情,还能具体捕捉到代理根据自己的行动所能控制的令人惊讶的事情。他们的方法允许一个没有任何外在奖励的代理在《超级马里奥兄弟》中仅仅根据其内在奖励取得进步。下图为文件中概述该过程的图表。


该制剂被投放到一个包含九个房间的封闭空间中。其中一个房间里有一个随机放置的开关,而其他房间里则有随机放置的不可移动的石头金字塔。当特工与开关发生碰撞时,开关就会由红变绿。随着颜色的变化,一个由可移动沙砖组成的金字塔会随机出现在环境中的某个房间里。金字塔的顶部是一块金砖。当代理与这块砖相撞时,代理会获得 +2 的外在奖励。诀窍在于,移动到新房间、打开开关或推倒塔楼都没有中间奖励。代理必须学会在没有任何中间帮助的情况下执行这一系列操作。

在这项任务中,使用普通的 "近端策略优化"(PPO,我们在 ML-Agents 中的默认 RL 算法)训练的代理表现很差,即使经过 200,000 步的训练,其表现也往往无法优于偶然性(平均-1 奖励)。
相比之下,使用 PPO 和 "好奇心驱动 "内在奖励训练的代理始终能在 200,000 次事件中解决问题,甚至往往只需一半的时间。

我们还研究了只用内在奖励信号训练的代理,虽然它们没有学会解决任务,但它们学会了一种更有趣的策略,这种策略能让它们在多个房间之间移动,而只用外在奖励信号的策略只能让代理在单个房间内小范围移动。
如果您想使用好奇心来帮助培训环境中的代理,启用它非常简单。首先,抓取最新发布的ML-Agents 工具包,然后在你有兴趣训练的大脑的超参数文件中添加以下一行:`use_curiosity: true`。之后,您就可以像往常一样开始训练过程了。如果你使用 TensorBoard,你会发现现在有了一些新的跟踪指标。其中包括正向和反向模型损失,以及每集累积的内在奖励。
在所有情况下,让你的代理人产生好奇心都无济于事。特别是如果你的环境已经包含了密集的奖励功能,比如我们的爬行者和步行者环境,在这种环境中,大多数操作后都会获得非零奖励,那么你可能不会看到太大的改进。如果你的环境只包含稀疏的奖励,那么添加内在奖励就有可能通过强化学习将这些任务从无法解决变成可以轻松解决。这一点尤其适用于简单的奖励,如任务的输赢或完成/失败。
---
如果您使用了 "好奇 "功能,我很乐意听听您的体验。欢迎通过GitHub 问题页面联系我们,或直接发送电子邮件至ml-agents@unity3d.com。快乐训练
