Transcription
大家好。欢迎来到我们今天的最后一场讲座。我非常高兴向大家介绍 Joseph Suarez 博士。他是 Puffer AI 的创始人,他们致力于强化学习研究。如果您还记得我们早些时候关于无人机的讲座,那正是我们所做工作以及许多其他核心强化学习项目背后的主要驱动力,它们真正处于研究的前沿。Joseph 将与大家分享他在麻省理工学院攻读博士期间的 Neural MMO 项目,以及 Puffer Lib 作为通用强化学习库的介绍。现在我将把话筒交给 Joseph。谢谢。
>> 谢谢 Sam 的介绍。我来共享一下我的屏幕。这个能正常显示吗?好的。
>> 是的,一切正常。
>> 太好了。我将把这些关掉。如果有什么不对的地方,请在 Discord 消息里告诉我。
>> 好的,没问题。
>> 好的,完美。谢谢介绍。大家好。我将要和大家谈谈……糟糕,这是错误的幻灯片。我们可不能不小心讲错讲座。那个讲座会短很多。好了。
今天的讲座题目是“强化学习快 10000 倍”。我将和大家分享我博士期间关于 Neural MMO 的工作,以及我近几年在让强化学习变得超快、超稳定、广泛可用方面所做的工作,还包括一些算法方面的工作。这同时也是一个非常长项目的历程,它始于一个非常非常遥远、可以说是偏离主干道的东西,然后最终回归,变成了一个现在广泛有用的东西,真正帮助人们进入这个领域,也为公司提供部署。
简单介绍一下,我们不会过于技术化。这主要是关于旅程和技术本身。我不会深入探讨强化学习的细节,但对于不熟悉的人来说,它是人工智能的一个子领域,通过互动来训练智能体,通过经验来学习。你有一个叫做“环境”的东西,它可以是游戏、模拟器、机器人,任何可以互动的东西。然后你有一个叫做“智能体”的东西,它是进行互动的那一方。智能体通常由神经网络参数化。所以你有一个神经网络在玩游戏,控制机器人,采取行动,在工业模拟中做决策。这是非常非常广泛的。
现在在我们真正开始之前,先来点有趣的。让某样东西快 500 倍意味着什么?这是一条河豚鱼。如果一条河豚鱼非常非常努力,它可以以每秒 1 到 2 米的速度游泳。让某样东西快 500 倍是什么概念?比这个快 500 倍是什么?一架战斗机。让某样东西从河豚的速度变成战斗机的速度,这是一个相当不错的进步,对吧?那 10000 倍呢?你知道,比河豚快 10000 倍的物体是什么?我当时想,哦,大概是火箭吧,但它们有点慢。所以,这里有四个。所以,重点是,这是一个绝对荒谬的速度提升,对吧?你应该永远无法让任何东西快 10000 倍,因为如果你能,那就意味着那个东西一开始就慢了 10000 倍。而且说实话,你只需要对一个慢了 10000 倍的东西打个喷嚏,就能让它稍微好一点。但出乎意料的是,这在强化学习中确实是这样的,它是一个科学主导的领域,对工程的重视程度如此之低,以至于事情真的比它们本应有的速度慢了 10000 倍。这使得快速迭代强化学习研究变得非常困难。我认为这是你今天没有看到它应有的那么多原因之一,而现在它正在回归,你看到越来越多的人在做这件事,因为快速迭代要容易得多,这促成了一系列算法的进步,我们将对此进行讨论。但首先,这里有一个快速的小结果演示。这是我去年在 RLC 上的讲座,这是训练 Breakout。这只是一个从我本地桌面录制的 GIF,我们训练了一个智能体在 24 秒内玩 Breakout。在 Puffer Lib 之前,训练一个 Breakout 智能体需要几个小时甚至几天的库才能获得一个像样的策略。而在这里,你可以在本地进行训练,速度非常快。你有了一个想法,可以尝试一下,可以尝试另一个想法。迭代周期非常非常快。对研究来说非常非常好。然后如果我们看它玩游戏,我已经拖延了足够长的时间让整个训练完成。好了。你可以看到它解决了整个游戏。每秒训练几百万步,这已经比之前已有的技术快了大约一千倍。我会在最后向大家展示我们如何从那里达到最新水平,现在我们可以在几秒钟内解决这个问题。如果时间允许,我还会现场演示。但这只是一个不错的起点。当然,强化学习的目的不仅仅是解决 Breakout。它是为了解决各种各样的问题,对吧?我们喜欢这些游戏,因为它们快速、可解释,并且能让我们把基础设施做好。我的许多工作都涉及如何让强化学习在大而复杂的环境中变得有用,在那里我们可以提出困难的问题,并研究这个人工智能子领域需要什么才能进步。
这个项目很久以前就开始了,大概是 2017 年。我甚至在那之前就考虑过它了。当时真正相关的问题是,研究智能、做出贡献、创造更好算法的正确环境是什么?然后我们如何构建它?当时很明显,你需要一些计算效率高且可解释的东西。所以你需要一个可以快速运行的模拟器,并且你可以知道发生了什么。你还需要一些真实的东西,但过于追求真实性实际上是一个陷阱,因为很难做到既快速又真实。所以你真正需要的是认知真实性。你需要一些在智力层面与现实世界大致相同的行为,它提出了相同的探索和信用分配挑战。如果你要分解使问题变得困难的因素,你就希望在你构建的任何环境中都存在这些相同的挑战。
所以,当我开始这项工作时,我开始构建一些东西。那是 2017 年,在接下来的几年里,大型实验室开始扩大强化学习的规模。OpenAI 有 Dota。DeepMind 有 AlphaGo 和解决星际争霸的 AlphaStar。你还有一些不太为人所知但仍然非常前沿的项目,如“涌现的工具使用”和“夺旗”。实际上,这个想法是我们要扩大强化学习的规模。我们要看看什么可行。我们要解决一些非常困难的游戏,然后看看会发生什么。它们取得了一些令人难以置信的惊人成果,其中一些至今仍未被超越。但就我自己的工作而言,这些环境大多不是开源的。即使是开源的,它们也非常慢。你需要一千个 GPU 才能做任何事情。你无法快速调整事物并看到,“哦,如果智能体必须这样做怎么办?如果它必须那样做怎么办?”所以,这对我感兴趣的那种东西来说太大了。
所以我决定自己构建一个环境。我最终想到了以大型多人在线游戏作为灵感来源。如果你不熟悉这个类型,原因如下:这个游戏类型被优化到可以在 90 年代的硬件上运行成千上万的玩家。所以比其他游戏类型在计算上更有效率,同时它们仍然对人们来说很有趣。它们并非微不足道,对吧?你会出现涌现的经济、供求关系、对不同技能的专业化,无论是玩家在不同方面都很擅长,还是他们优化他们的角色以针对特定事物进行装备。然后你会看到玩家之间的合作与竞争。这确实是一个非常复杂的世界模拟。我实际上将我在强化学习中的大部分想法直接归功于对 90 年代许多游戏构建方式的深入理解,以及在有限的计算预算下引入有趣游戏玩法所使用的技巧。
所以,我决定构建一个主要受 MMO 启发的自己的环境。当时还有其他一些东西在流传。人工智能生命学当时非常流行。所以,我们如何从生存和自然生态学等事物中汲取灵感?所以,起初它有点混合,但那就是想法。让我们把尽可能多的有趣的东西放入一个我可以回家运行的快速环境中,让很多智能体,很多不同类型的互动,看看我们可以在这种设置下研究什么,而不需要一千个 GPU 来运行它。
所以,这部分首先是关于构建过程。我为此投入了多年时间。我想和大家分享一下幕后发生的一些事情。因为在这些非常长期的项目中,当你做一些非常非常偏离主干道的事情时,正确的问题并不明显。而且你经常会陷入很多兔子洞,回答错误的问题,或者以错误的方式回答正确的问题。我想分享一下这看起来是什么样的,以及这个过程有多么困难。但最终,这一切都使得我今天使用 Puffer 所做的事情成为可能,现在这些东西就是有效的。它们广泛有效,而且我知道,随着我们将其扩展到更复杂Environments,它将继续有效,因为我构建了其中最复杂的一个。
这是我能找到的最早的截图。我 2017 年的第一个提交。我当时真的什么都不知道。我还是决定做了。我当时有一个想法,好吧,MMO 很有趣,AI 很有趣。我当时甚至没有做过真正的强化学习,但我还是做了,我想分享一些早期的截图。这是我制作的第一个原型。你可以看到它只是一个糟糕的仿冒 Minecraft。而且这完全是错误的环境。事实证明,Minecraft 对于这种强化学习来说是一个非常糟糕的环境。我试图让一些智能体四处砍树。它非常慢,对我来说太复杂了,而且它在需要的地方没有必要的复杂性。
所以我回到了起点,最终得到了类似这样的东西。在这个环境中,它是一个更简单的设置,但我们有需要食物、需要水的智能体,所以它们需要这两种资源来生存。它们能够学会这种周期性的觅食模式,它们会在食物和水之间来回往返。起初这甚至不是强化学习。它只是非常简单的遗传算法,但它是什么。我们可以把很多智能体放进一个环境中。我们有办法知道发生了什么。我们可以开始引入更多机制。我们可以加载不同的地图。这是开始。
所以我继续构建了这个。你可以看到左边我正在尝试,嗯,如果有一个市场,它们可以在那里买卖东西呢?如果它们有敌人,比如鸡和地精之类的呢?你可以看到它们可以与之战斗的像素化小角色。只是引入了一些额外的复杂性来观察会发生什么。起初它非常探索性,如果我们有其他地图供它们使用来引入不同类型的探索挑战呢?它们学到了什么?
大约在这个时候,OpenAI 正在进行他们的 Dota 1v1 对战,我在那里实习了大约 6 个月,以真正完成 Neural MMO 的第一个完整版本。他们正在大量考虑不同的强化学习环境,而这里正是构建这类东西的完美场所。这是我当时认为我建造的早期渲染之一。你可以看到我们现在有一个等距渲染。还有一个俯视切换。你可以看到之前的一些堆栈有所扩展。右边有一个小命令控制台,你可以在其中输入不同的内容或按不同的键,你就会得到不同的可视化效果叠加在环境之上,你稍后会看到。这实际上是与环境共同设计了一个可视化工具包。所以我们可以同时迭代构建一个有趣的环境,并可视化这些智能体到底在学习什么。
这是我发布的第一个公开版本。这是 Neural 1.0。你会看到图形在整个过程中会发生很多变化。这不仅仅是为了让它看起来更漂亮。这也是因为很多时候很难知道发生了什么。你知道,这些不是玩游戏的人,也不是做你期望人们做的事情。智能体发现了各种奇怪的东西,而且并不总是清楚智能体是否在做正确的事情,或者环境是否有问题,对吧?所以,你需要很多可视化能力,而早期的一个主要发现是,当你开始扩大环境复杂性时,你实际上需要一个更好的可解释性工具包。
所以,最初的环境有之前的食物和水觅食,智能体还可以用几种不同的战斗风格互相攻击。这很简单,但实际上比多智能体强化学习中的大多数内容要复杂得多,特别是对于可以在一台计算机上运行的多智能体强化学习。这是最初的图形。这是智能体运行时的样子。这些是一些训练过的智能体。它们可以学会探索地图。它们可以学会觅食资源。它们会互相攻击。非常基础,但已经很有趣了。我们早期还做了很多关于静态地图的工作。这是其中一个地方,真的不清楚正确的设置是什么。所以,最初的想法是,嗯,如果我们制作很多不同的地图来应对不同的探索挑战呢?所以,在这个地图中,想法是存在水和食物,智能体在探索地图时必须在食物和水之间来回弹跳。我们确实让它奏效了,智能体都从地图北部开始,它们几乎到达了底部。它们不会覆盖整个地图。但我们意识到,仅仅在一张地图上训练智能体实际上非常困难。信号真的不多。你需要它们在训练期间看到更多不同的东西。所以我们最终意识到,在训练期间至少需要随机化地图。这就是我们在第一个版本中所做的。我们发布了随机生成的地图,一个不错的训练设置,这样你就可以创建一些智能体和一些可视化工具供研究人员使用,以便他们可以普遍地探索这些东西。
之后我完成了我的本科。我开始攻读博士学位,并开始更认真地研究这个问题。当时,主要是想把这个工具打磨好。我们可以看到它正在起作用,但事情仍然很棘手。它仍然很难使用。你并不总是能确切地知道发生了什么。所以,我们开始在平台本身上进行大量迭代。我记得添加的第一个东西是某种持久性进展,智能体可以提高它们收集食物和水的技能,它们可以提高它们的战斗技能,这将使智能体以后更强大。所以它不再那么同质化,对吧?它不再总是相同的行为类型。实际上需要根据周围的其他智能体、你的实力、它们的实力等因素做出一些决策。
现在,我想在这里停一下,不是为了解释这张图,因为这只是一个非常花哨的神经网络架构,而是为了解释为什么我会有这样的图。这回到了一个想法,当你做一些非常偏离主干道的事情时,甚至不清楚你应该问的正确问题是什么。当时,一个问题是,我们到底如何为这些东西设计神经网络?因为我们有一大堆游戏数据在输入端,然后有一大堆动作数据在输出端。这些与你的标准神经网络架构完全不匹配。这是非常结构化的数据,我们必须想出网络来弄清楚如何处理它。它们会变得非常非常大,非常棘手。如果你想要一个非常疯狂的例子,可以搜索 OpenAI 5 Dota 架构。太疯狂了。
所以我提出了一个我认为至少相当不错的东西,它允许你指定环境中所有你可以观察到的对象,它们都可以有许多不同的属性,它会给你一种方法来将它们全部压缩成可以放入神经网络的东西。但这最终是大量的工作。它非常慢,而且非常麻烦,以至于如今我实际上设计环境的方式略有不同,它们可以在内部做同样的事情,但它们发送给智能体的数据看起来不像这样,因为我知道处理起来有多麻烦。所以这就像早期你真的不知道是否需要解决这个问题,或者是否有办法绕过它。最终我们找到了绕过它的方法,但这项工作至少足以支持几年的研究。
Neural MMO 不断发展。它不断变得更加复杂。我相信你会看到一个快速的行为演示。是的。这是我们博士期间可能训练了几年的策略。智能体学会了探索地图。地图变得更大、更复杂。智能体可以升级。这使得事情变得更加困难,因为它们必须考虑,好吧,我强吗?我弱吗?这引入了很多复杂性。而且它相当稳定。我真正高兴的是,你实际上对智能体在学习什么以及它们在做什么有一个很好的了解,这在当时是相当罕见的。所以你可以看到所有智能体都被直接喷到了这个渲染器上。然后你也可以进入智能体,看看它们认为自己的位置是好还是坏。你甚至可以把它平滑到整个地图上,看看,啊,好的,它们已经正确地学会了它们应该靠近食物和水。你可以去看智能体。你可以说,好吧,它们在打架。它要去弄点食物,要去弄点水。酷。这看起来很合理。作为对比,未训练的策略,很明显它们学到了一些合理的东西。这就是随机行为的结果。
所以,我们继续将其构建为一个基准。我们继续撰写关于最新版本的论文,这些是功能。我们看到智能体做的一些事情。我们正在思考的关于最新版本、新功能的新问题。我们开始引入一个成就系统,让它们可以在不同的轴线上取得进展。我们开始尝试是否可以将多个策略放入同一个环境中。很多这样的事情。我们也让它变得更大。所以地图可以达到一千乘一千,它们需要十分钟才能走完。更持久的进展。即使是我们用于实验的小地图,我们也让它们稍微大一点。所以我们真的可以看到,嗯,你知道,它们正在学会覆盖整个合理的地图。在大地图上,它们会覆盖很大一部分。
一旦所有这些都相当稳定,我们就开始寻找方法来使环境更加复杂和有趣,因为这确实还没有太像 MMO,对吧?并没有真正的不同技能,不同的进展,不同的专业化。所以,这是我们接下来想引入的。想法是添加一个装备系统,一个库存系统,大量的职业,大量的资源可以收集,智能体可以在地图上四处走动。它们可以升级采矿技能,捕鱼技能,以及其他一些技能,并且通过这样做可以获得越来越高质量的资源。然后它们可以在全球市场上互相买卖资源。所以它们可以创造自己的小经济。有武器,有不同的弹药,所有这些东西都相互关联。你知道,你总是需要别人有的东西,而你总是拥有别人想要的东西。
所以我们有一个问题,嗯,专业化真的好吗?专业化是否有理由利用其中一个,还是所有智能体都会一直想做同样的事情?我们发现,实际上很快,当你引入任何类似的系统时,专业化是一个相当自然的事情,它就会被激励。即使是一些非常简单的脚本化智能体,我们也发现,四处走动并收集附近的所有资源比寻找特定类型的资源,升级与之相关的技能,然后能够出售该特定技能的高质量物品要差。所以,能够拥有专业,在你的专业领域销售产品,然后购买你所需的一切,这更好。这对每个人都更好。就像模拟中的所有智能体,当你这样做时,最终会获得更好的设备,更好的工具,总体上更好的东西。所以我对这个结果非常满意。它表明,至少在原则上,当你构建这样的东西时,你会激励一些我们关心在现实世界中看到的东西,对吧?专业化和技能多样化等等。
所以,这被纳入了 Neural 2.0,这是我在博士期间作为数据集和基准发布的最后一个主要版本。这是环境。我们在后端也做了很多工作。有一个花哨的架构,允许我们将整个东西保留在 Python 中。所以对研究人员来说非常易于修改,但同时它在后端有一个向量数据库,你甚至不必关心它,你只需要编写普通代码,它仍然能够以每秒几千步的速度运行,这至少在当时非常快。我们也让训练比当时的其他任何东西都快得多,而且我们将其集成到一个非常非常简单的库中,这对于具有这些特性的环境来说非常困难。通常像这样的环境都有专门的庞大训练代码库。所以我们将其缩减到只有几百行训练代码。使用 Clean RL,我们实际上使用了 Puffer Lib 的第一个版本,就像它刚起步的时候一样。这是第一次,所有这些都汇集在一起,成为一个似乎是真正有用且令人惊叹的研究问题。我在博士期间花了大量时间运行该版本及其之前的版本的比赛。所以,我们会去参加会议。在会议之前,我们会挑战人们在 Neural MMO 上训练智能体。这些比赛非常受欢迎。所以我们在 ICHIAI 举办了一场,第二年我们在 NeurIPS 举办了一场,我相信那场是当年 RL 中最大的比赛,然后我们在 2023 年又在 2.0 上举办了一场。想法是训练一个智能体或一个智能体团队。我们收集所有人的智能体,将它们放入同一个环境中,看看它们在各种不同任务上的表现。这很酷,因为我们很快就会看到不同的参与者智能体学习不同的策略,这仅仅是因为作者的方法不同,并不一定是为了激励某一种特定的策略。环境本身就有很多多样性,使得哪些方法是可行的。所以我们会看到一些智能体在地图的外部区域探索。我们会看到一些团队的智能体采取分裂打法。有些会靠得很近。有些会分成两个子团队。有很多策略上的多样性。
在后来的比赛中,我们决定它应该更像一场大逃杀,最后站着的人获胜,因为这给了你一个非常非常明确的目标。我们最终看到了一些我们看到人类玩家在实际大逃杀游戏中使用的策略。在这个类型中,总有一些东西会通过随着时间的推移给你造成伤害来将你推向中心。你会看到玩家做的一件事是,如果他们能做到,如果游戏允许,他们就会在那里站一会儿,承受伤害,这样他们就可以让其他人战斗,然后他们可以在最后阶段进来,消灭最后几个非常虚弱的人。智能体学会了这样做,果然如此。它们还学会了做很多我们在这个类型中看到的其他事情。所以看到这一点非常酷。
早期在比赛中,很多人提交的脚本化智能体都相当不错且具有竞争力。但到最后,我们所有的强化学习方法都远远优于它们。所以这与我们的预期一致。让强化学习运行起来需要一些时间,但一旦你做到了,你就无法与之竞争。
所以,总的来说,在我的博士期间,我期望需要提出很多新的花哨算法来研究我们想要研究的东西。但事实证明,我们使用的基本算法以及大多数人使用的 PPO,即使在小规模下也非常有效。主要的障碍是无法研究正确的问题,缺乏可解释性,不知道如何构建高效的模拟器,这与大多数人关注的问题完全不同,最终成为了主要的瓶颈。Neural MMO 既是一个很好的环境来解决这个问题,也是未来构建模拟器的蓝图。
这就引出了我博士毕业后这几年所做的事情。所以,我们已经完成了所有这些工作。但它还没有普及,对吧?我们大致知道该怎么做,但我们还不知道如何在各种环境中快速让强化学习工作。我们有了蓝图,但还没有设置好所有基础设施和东西。所以,毕业后我做的第一件事就是创建这些非常简单的包装器,利用我从 Neural MMO 中学到的东西,让你能够采用 Neural MMO 或 Net Hack 或几乎任何其他环境,并用最简单的工具来运行它。所以想法是,你不是因为基础设施的限制而研究简单的问题,而是可以研究相当复杂的问题。Puffer Lib 的想法是,这将推动强化学习走向更有趣的问题,一旦我们能够将强化学习应用于更有趣的问题,我们就可以看看能走多远。
接下来是,一旦你有了这个,并且一切都变得简单了很多,速度问题就变得非常非常清楚了,我注意到的第一件事是,实际上强化学习的很多缓慢并非来自训练,而是来自环境,特别是你总是会在不同的进程上运行许多环境的副本,而用于此的 multiprocessing 后端非常慢,通常和在单核上运行一样慢。特别是对于这些更复杂Environments,因为它们不是为此设计的。
所以我从头开始编写了一个新的 multiprocessing 后端,利用我从 Puffer(不是 Puffer,是从 Neural MMO)学到的东西,并考虑了兼容性包装器,它适用于所有环境。我们消除了很多冗余,很多开销,并且立即在许多环境中获得了 10 倍的速度提升,甚至在一些本应快速的标准环境中也获得了合理的性能瓶颈。所以这有点令人大开眼界,因为你不应该能够轻易地让东西快得多,因为东西应该是相当优化的,如果东西不是,那么好吧,还有什么慢的呢?我们还能做什么,只是让一些东西更快。
所以我们意识到,即使我们这样做了,瓶颈仍然不是训练,仍然是环境模拟。所以,好吧,让我们编写一些环境,看看会发生什么。现在,它并没有真正从 C 开始。首先是 S Python,然后一些东西被移植到了其他地方。但最终我们进入了 C。我也开始大量直播我的开发过程,因为我觉得这很有趣。结果是,我坐在那里用 C 编写环境进行研究。很多人觉得,哦,这看起来是个有趣的项目,让我们也来构建一些环境并贡献它们。所以这最终变成了一个大型开源项目,我们有成千上万的人在构建这些环境,它们直接对研究有用,因为现在我们有一个超快的模拟器库,我们可以用它们来测试我们所有的强化学习,而且因为它们是用 C 编写的,你可以将它们编译成 WebAssembly,它们可以直接放在 puffer.ai 网站上,非常简单快捷。
所以这让一切都快了很多。还有一些我在这里略过的额外优化。我制作了一个 Neural MMO 的版本,作为我博士论文的后续,用 C 编写,并使用了新的向量化,使用了 Puffer Lib 中的新东西,它达到了每 GPU 每秒几十万步的训练速度。这意味着我们可以训练比我在博士期间能够训练的数据多一千倍。所以,我们能够训练一个模型,它拥有 12000 年的游戏玩法。这是 2640 亿个观察。所以,超过一个 PB。如果你现在考虑语言模型,它们使用大量数据,训练数万亿个 token。所以,就像,你知道,几十到可能 100 TB 的数据。就像看我们在一个机器上使用了多少数据。简直太大了。结果是,我们能够训练出具有良好对数线性学习曲线的智能体,它们实际上比我更擅长玩游戏,而我编写了游戏。它们还想出了我编写游戏时没有预料到的游戏中的一些东西。这几乎就是完整的 Neural MMO 2。可以说甚至更复杂。有可以升级的技能,不同的职业,有不同的物品,装备,有市场,它们可以买卖东西。它们非常非常擅长解决所有这些问题,特别是它们在战斗中也解决了许多机械上非常困难的问题。
当你让东西变得非常快时,实验本身就变得更容易,因为你可以运行更多的实验。一个非常明显的问题是,超参数是强化学习中的一个主要主要瓶颈。你基本上有很多旋钮需要调整。这与其他人工智能领域类似。在强化学习中,我认为它要困难得多,而且更糟糕,因为你有大量不同的问题需要优化,而不仅仅是一个。这是我们接下来要做的事情,我们制作了一个非常好的超参数扫描算法。我们在所有方面都进行了测试。出乎意料的是,这让研究变得容易多了,因为现在你实际上有了这个整个问题,哦,我的超参数不好吗?这个问题就消失了。我们还对学习算法进行了一些核心改进,这些改进不是那种疯狂的、前沿的花哨新算法,对吧?它不是那种天才的新东西,你会发表,但实际上,当你评估它们在所有环境中的表现时,有一些非常非常好的稳定性改进,它们让我们在许多环境中表现得更好。所以我们在这两方面都有文章。因此,仅仅通过速度和一些小的增强,它已经达到了你可以编写一个环境,在上面运行强化学习的程度。如果它不起作用,运行一个扫描,它几乎可以立即在小型环境中工作,如果它不起作用,那很可能是因为环境有问题,而不是强化学习有问题,就像你那里有 bug,你知道,玩几次看看它是否坏了。
现在,我现在做的事情没有幻灯片,但我会花几分钟谈谈,然后尽可能多地回答大家的问题。在过去 6 到 8 个月里,我一直在深入研究那个兔子洞。好吧,我们让强化学习快了 1000 倍或 2000 倍,不管是什么。我们还能走多远?硬件的极限在哪里?事实证明,我们当时离硬件的极限还远着呢。从环境到向量化,再到训练实现,甚至到我们使用的 PyTorch 本身,一切都设计得很糟糕。所以我们开始做的是,首先,我将 Python 训练代码移植到了 PyTorch 的 C++ API,并开始编写一些自定义内核。起初,这只是,好吧,这些操作有点低效,让我们看看是否可以融合一些东西,我们意识到 PyTorch 有很多分散在各处的小操作,这是千刀万剐的死亡,所以我们开始将操作融合在一起,我们有越来越多的代码在我们的自定义内核中,而不是在 PyTorch 中,训练速度不断提高。它从 2 到 3 百万开始,然后很快就达到了 4 到 5 百万。然后达到了 7 百万。我们吸引了一些新的贡献者对开源感兴趣。它有助于 multiprocessing 后端,有助于一些内核优化。它达到了 9 百万,达到了 11 百万。我们加入了混合精度训练,但由于其数字方式,它在 PyTorch 中不起作用。它达到了每秒 1300 到 1400 万步的训练速度,这完全是闻所未闻的。我认为大多数强化学习领域的人甚至都不会认为这是可能的。而且我已经在几个不同的库上尝试过,除非你通过参数进行大规模作弊,并做一些完全不切实际的配置,否则你无法接近这些速度。但出乎意料的是,如果你自己编写,你就可以。
然后我们几周前看了代码,意识到,嗯,PyTorch 实际上并没有做太多事情了。我们已经把它淘汰了,对吧?就像 PyTorch 做的每一件小事现在都是我们自己的代码在取代它。如果我们直接去掉 PyTorch 呢?这就是我过去几周一直在做的事情。事实证明,这实际上非常容易。而且我们现在没有 PyTorch 的代码比以前有 PyTorch 的代码只多了几百行。所以它并没有真的为我们节省多少代码。而且它正在失去所有这些性能。而且实际上更糟的是,我认为缓慢的东西会阻碍你对研究的思考方式,因为你实际上并没有考虑与硬件协同设计的架构,而你可以在它们上面运行。你没有考虑每浮点运算的性能。你考虑的是你拥有的这个特定非常糟糕的架构实现的性能。而且事实上,它甚至可能让你倾向于认为,哦,你需要大量的环境,因为在较少数量的环境中效率低下,因为实现很糟糕,而且总的来说,由于代码效率低下的地方太多,它确实限制了你拥有的高效解决方案集。所以,真正从头到尾考虑整个堆栈。其结果是,现在我们有了一条更清晰的研究前进道路。我们已经开箱即用地解决了大量问题。人们更容易参与进来。你不需要学习很多东西。你只需要学习一个非常小的低级工具包。你可以在家里的单个 GPU 上运行,即使是一个非常低端的 GPU。如果你没有,你可以在网上租一个,每小时 5 美分,它的训练速度将比市面上任何其他东西都快。而且强化学习的未来现在非常非常光明。在接下来的几个月里,我将清理所有这些东西以进行发布,超快速。在提问之前,让我快速演示一下。然后我们将从那里讨论,只是为了向大家展示这确实是真的。这是在我本地机器上训练 Breakout。这是在我低端机器上,它还在流式传输视频等。在 5070 上是 6 秒。在 5090 上大约是 4 到 5 秒。它是完全可重现的,完全是确定性的训练,而且你解决了整个游戏。而且不仅仅是 Breakout,对吧?当然,我们在其他环境中也进行了测试,而且效果同样好。这就是我今天的内容。所以,我很乐意回答大家的问题。
>> 谢谢 Joseph。太棒了。有人有什么问题吗?
>> 是的。
>> 所以,Joseph,你谈了很多关于一些有用的简单基础知识,以及关于 Neural MMO,它包含了许多更复杂的行为,这些行为非常有趣,可以研究。你认为下一个环境的前沿在哪里?它将走向何方?
>> 我认为我听到了问题的第二部分。这是关于增加环境设计的复杂性以及我们可以解决的问题类型。我听对了吗?
>> 是的,差不多。
>> 是的。所以,我可以向你展示,如果你打开 puffer.ai,我们有很多。而 Neural MMO 基本上是我们目前最难的东西。它仍然需要 6400 亿步才能解决,或者不是解决,而是解决三分之一。它不是一个已解决的环境。所以我的希望是,在下一个版本左右,我们将能够更快地解决它,这是纯粹的速度和我们计划的一些算法进步的结合。一旦我们解决了这个问题,我的预期是我们基本上能够开箱即用地解决中等复杂度的任务,或者通过一次超参数扫描来解决。所以,基本上,如果模拟设置合理,它就会解决。然后我们开始研究更难的任务。现在,对于更难的任务,我们可以做几件事情。首先,我们不仅仅是在玩游戏。我们有关于无人机的东西。所以,感谢 Sam 和 Finn。我们与纽约大学在自动驾驶方面有很大的合作,这实际上被多家公司使用。而且我们还为不同领域的客户提供专业服务。但实际上,游戏确实是一个很好的代理。就像如果你在游戏中表现出色,你就会总体上表现出色,而且我们仍然有很多可以做得更好的地方。我认为从长远来看,我们只需要实现一些更难的游戏。比如一个完整的 MMO 会很棒。我们实际上有一些关于我们如何做到这一点的计划。还有一些其他任务,它们在视觉上要简单得多,但实际上对研究非常有益,比如解决大型迷宫 2048,数独。这些都令人惊讶地是很好的指标,看起来是简单的问题,但实际上在更难的问题上有效。最终,我们将需要将其应用于重要的应用领域。我个人对分子模拟非常感兴趣,用于生物应用和材料科学的分子水平模拟。在我看来,这方面的困难仅仅是缺乏可解释性。所以我想让强化学习在游戏中运行得非常好,主要是在前面,在侧面做客户工作,然后再真正专注于进入一个大的应用领域,因为可解释性。所以当某些东西不起作用时,我希望 100% 确定是因为模拟或问题设置的方式,而不是因为强化学习。这在两年前简直是疯狂的。我们离那还很远,但现在我觉得一年之内就能做到。这很棒。我也认为这将成为人工智能领域最大的爱好领域,因为你可以在家完成,你可以学习一些游戏编程,你可以学习一些低级开发,你可以推进科学并进入人工智能领域。这是学习所有这些东西的一个非常非常好的方法。还有其他问题吗?是的。所以,对于更像现实世界的情况,而不是电子游戏。
好的,所以问题是……当我们看现实世界的问题而不是电子游戏时,主要瓶颈是计算还是环境或模拟的编写方式?
>> 大部分情况下,实际上是可解释性,因为当你构建模拟器时,如果东西不起作用,你需要知道为什么,而且随着强化学习的改进,它越来越多地是因为你错误地编写了模拟器。你确实需要花更多时间编写可视化工具。但
没关系。但在实际问题复杂度层面,我们发现客户端应用程序在正确编写的情况下,并不比电子游戏更难解决。就像这些东西运行得有多好一样,令人震惊。如果它在 2048 游戏中运行得更好,那么它在驾驶中运行得更好。它在金融应用、商业等领域运行得更好。>> 酷。还有其他问题吗?>> 是的。>> 人们参与 Puffer 库的最佳方式是什么?>> 啊,非常感谢。首先,请大家在 GitHub 上给 Puffer 点星,这对我帮助很大。如果您想参与开发,请加入 discord.gg/puffer。我们所有的开发都在那里进行。这里的一切都是开源的。我们甚至有全新的程序员参与进来。如果您学过一门系统课程会更好。您只需要这个。它大部分是简单的 C 语言,可以用来编写环境并开始。然后,我们通常的做法是,我有一个很好的指南,可以引导人们完成。您开始编写非常简单的 M。您编写几个更复杂的 M。从那里,您就能体会到强化学习是如何工作的。您可以通过阅读一些简短的论文来填补空白,然后您就可以开始从事科学和研究方面的项目了。这就是人们通常会经历的流程。>> 酷。我们可能还有时间回答几个问题。>> 您是否看到该游戏模型在网络防御或进攻方面的应用?问题是关于您是否看到强化学习在网络安全或网络进攻方面的任何应用。>> 我知道有人在做这件事,而且他们不用语言模型也能做到。我不知道问题的具体细节,因为您基本上需要一个大型、快速的模拟器,并且您可以模拟演员会采取的行动。如果您要遍历任意 shell 脚本的空间,那么用表格形式的强化学习来做是相当困难的。我认为人们已经找到了更合理的方法来解决这个问题,但我在这方面没有领域专业知识。>> 还有其他问题吗?>> 是的。>> 过去,主要的,我想说的是,监督学习目前是训练不同群体最流行的方法,主要是因为强化学习显然非常慢。但由于您的工作,它变得快了很多,您是否认为未来强化学习有机会,当然,一旦所有能力都被研究透彻,您是否认为强化学习有机会成为训练人工智能的最流行方式?不,我认为它有自己的位置。让我重复一下这个问题。所以问题是,好吧,监督学习是最快的东西。每个人都做监督学习。也许有一些强化学习,但强化学习变得如此之快,是否意味着强化学习现在将成为训练事物的首选方式?我的意思是,我们已经看到人们在语言模型上进行强化学习的后训练。那实际上是一种非常非常弱的强化学习。所以,对我来说,即使那样有用也很有趣。但我认为您只会看到它用于不同的应用。我认为人们说“哦,是的,语言模型可以解决一切问题”的说法通常是错误的,除非它们真的编写了模拟器的代码和强化学习的代码。我不知道那怎么可能,因为事物在计算上是不可约的。您有时必须做这件事,或者运行一个好的模拟器才能得到结果。我认为更有可能看到的是,您将在工业界的零散应用中看到更多的强化学习,在任何目前使用模拟但可以加速的地方,模拟将成为解决问题的一个极其强大的工具,因为您不再是按一下按钮,然后说“好吧,我设置了初始条件,我认为这是合理的。让我们看看结果。”现在您可以设置一个模拟器,指定您想要的结果,看看它是否能达到那里,并看到路径。这使得模拟器更加强大,而这正是我所期待的,特别是它将如何影响科学研究的不同领域。>> 酷。还有其他人有什么问题吗?>> 是的。>> 是的,我有一个问题。>> 我认为最近,我认为谷歌推出了一些新的生成式世界模型之类的东西。所以,我的问题与您对生成式人工智能应用于构建模拟器、世界模型或类似电子游戏的看法有关,以及它是否有助于改进强化学习。>> 所以,使用生成式人工智能来构建模拟器,您具体是指编写模拟器的代码,还是直接生成输出?我所以,我不太确定。我看到谷歌 DeepMind 发布的一个视频,它构建了整个世界环境,这是一个可供用户交互的 playable 环境。所以,我想它可能只是输出本身。>> 是的。所以,对于输出本身,我对这方面的工作持悲观态度,因为那些东西比我正在做的事情慢一万倍以上。它效率低下,而且我们没有理由期望它们拥有的训练数据能够迁移到我们关心的其他应用中。强化学习非常擅长处理棘手、违反直觉的优化问题。所以,你知道,在大量的行走数据或电子游戏数据上进行训练是否有助于您的生成模型解决分子模拟?可能不会。但强化学习可能会做到。所以,我总体上不喜欢这种方法。至于语言模型是否可以编写模拟器的代码,我的意思是,它们可以提供一些帮助。您可以在直播中看到我经常与它们搏斗。实际上,我几乎不怎么在我的模拟器代码中使用 LLM。我主要用它们来处理其他臃肿的代码。从头开始编写模拟器代码实际上非常轻松,而且到目前为止,模型大多会把事情搞砸。但如果有什么的话,如果您要押注大型模型在这方面有用,您就是在押注它们在开发模拟器和改进研究方面有用,而不是用于零输出模拟器。因为对我来说,我不知道如何获得您真正关心的 RL 的训练数据。现在,我并不是说 RL 在所有地方都有用,或者在任何地方都没用,但对于 RL 擅长的特定方法问题,我只是看不到这些方法会超越我们现在用 RL 做的。>> 还有其他人有什么问题吗?>> 不,我想我们到此为止了。Joseph,非常感谢您。>> 谢谢。感谢大家。再见。非常感谢。太棒了。我真的很享受。