MIT学霸亲授:这才是强化学习RL正确打开方式


把“强化学习”这四个字,拆成“打怪升级”来说

1. 啥叫强化学习?  
   想像你第一次玩《王者荣耀》。没人告诉你“按哪个键能赢”,你只能靠“打一把→掉血→哦我死了→下次别这么走”这种“试错”来变强。  
   强化学习(RL)就是让电脑也这么干:不停试错,从“挨打”里自己总结套路。  
   能用在哪儿?  
   • 机器人:让机械狗自己学会后空翻。  
   • 物流:让快递小车自己找最短路线。  
   • 游戏:AI 把《Dota2》世界冠军按在地上摩擦。  
   • 科学:甚至能帮忙“捏”核聚变反应堆里的等离子体,让它别炸。

2. 为啥 RL 听起来像“劝退”?  
   因为现在网上的教程,80% 是“先背100个公式,再跑一个月代码”。作者直接开骂:  
   “这圈子就是故意把新人搞懵的!”  
   他想干的事:把门槛削到最低——哪怕你昨天才学会写“Hello World”,今天也能让 AI 动起来的那种。

3. 作者是谁?  
   Joseph,MIT 博士毕业,现在全职做“让 RL 跑得飞快又不掉头发”的项目——PufferLib。  
   口号:比别的库简单,还快1000倍。  
   开源、免费、缺人,Discord 群里天天有人问“我卡住了”。

4. 怎么开始?分 10 步,像打副本一样:

【第1关】先跑起来再说  
   ① 把 PufferLib 文档打开,照抄一个“极简小游戏”(比如 2 行高的 Flappy Bird:只能上下飞,撞天花板-1分,其余0分)。  
   ② 点运行,看到 AI 像无头苍蝇一样乱撞——恭喜,你正式入门了!

【第2关】知道为啥能跑  
   ③ 读 Karpathy 的博客(就是那个写“像素鸟”的大佬)。  
   ④ 弄懂四个词:观察(observation)、动作(action)、奖励(reward)、结束(terminal)。  
   ⑤ 再训练一个稍微复杂的“多智能体找目标”小游戏,看它们互相抢分。

【第3关】自己造地图  
   ⑥ 写个 300 行以内的小游戏(贪吃蛇、弹球、你画我猜都行)。  
   ⑦ 调参、看 AI 是不是越来越“像人”。  
   ⑧ 把成品发到群里,大佬会帮你改代码,顺便收你进组织。

【第4关】开始“知其所以然”  
   ⑨ 读一篇叫 PPO 的论文(别怕,核心公式就一句话:别把步子迈太大,容易扯着蛋)。  
   ⑩ 再读“37 个 PPO 实现细节”,原来调参=玄学+血泪。

【第5关】真·项目  
   ⑪ 选个你想做的游戏/现实问题(比如“AI 打穿《宝可梦 红》”)。  
   ⑫ 500~1000 行代码搞定,提交到 PufferLib,你的名字就进开源贡献者列表。

【第6关】读10篇“神作”  
   ⑬ 作者列了10篇论文,全是“AI 把人类按地上摩擦”的名场面,比如:  
      • 《Dota2 AI 5v5 打赢世界冠军》  
      • 《AlphaGo 虐李世石》  
      • 《机械手拧魔方》  
   ⑭ 每篇都有博客版,先读故事,再啃公式。

这些论文,必读!
强化学习领域真正重要的论文列表,其实很短!看看我的编程和机器学习建议文章,以及我的快速入门指南,你就能明白为什么了。下面这10篇论文,无论你下一步想做什么,都应该读:

这份列表不是按照历史顺序来排列的,也不是那些“大部分已经过时的算法”。作者关注的是那些定义了RL核心能力的结果,以及它们之间的共同点。请注意,OpenAI/DeepMind的大部分研究成果都有配套的博客文章,比正式的论文更容易理解。你可以先从博客开始,但如果你想做研究,还是要读完整的论文。我们还有几篇PufferLib和Neural MMO的论文,你想看也可以,但你最好还是直接读我们的博客、文档和源代码。

  1. 《用深度强化学习控制托卡马克等离子体的磁场》核聚变!作者认为这是该领域最重要的论文。PPO(一个算法)加一个单层LSTM(一种神经网络)就解决了Dota游戏。作者看到很多顶尖研究员低估了这个结果,浪费时间去开发花哨的方法来解决一些“小儿科”的问题。如果你不相信Dota游戏有多难,可以自己去玩玩看!别忘了看附录
  2. 《用多智能体强化学习在星际争霸II中达到宗师水平》:另一个用RL解决的极难问题。这排第二是因为DeepMind用了模仿学习(就是先模仿人类玩)来辅助,而且用了更复杂的方法。他们经常这么干,作者不确定这些复杂方法是否真的必要。
  3. 《用深度神经网络和树搜索掌握围棋游戏》:这是一个里程碑式的历史性成果,它引爆了现代强化学习领域。你甚至可以说它排第一。围棋的复杂性很难推理,如果光看“分支因子”(就是每一步可能有多少种选择),它不如Dota或星际争霸2。
  4. 《学习灵巧的单手操作》:让机器人手学会用强化学习玩魔方!这个项目开创了“领域随机化”(domain randomization,就是在大量略微不同的问题上训练,让AI更泛化)来提高泛化能力和鲁棒性。
  5. 《开放式学习带来通用型智能体》:也叫XLand。通过训练任务的随机化,AI可以泛化到训练中没见过的新任务。里面有很多混杂的变量和方法上的变化,但最终结果是一个很有说服力的论证,证明RL可以泛化。
  6. 《多智能体自发课程中的涌现工具使用》:3v3躲猫猫,带可移动障碍物。Dota中使用的技术的一个更纯粹的版本,应用于一个更简单但仍然复杂的任务。
  7. 《用基于群体的深度强化学习在第一人称多人游戏中达到人类水平》:3v3夺旗模式,基于Quake(雷神之锤)的FPS游戏机制。
  8. 《NetHack学习环境》:一个超级难的强化学习环境。你可能无法用通用方法解决它,除非你同时解决了AI的“终极难题”。作者称之为“AI完备”问题。
  9. 《近端策略优化》:大多数现代强化学习的基础核心算法。PufferLib 3.0算法就是PPO的增强版。
  10. 《用广义优势估计进行高维连续控制》:PPO能work,一半功劳在于这个优势函数。PufferLib 3.0的一个增强就是把GAE和VTrace结合起来了。
  11. 《用深度强化学习玩Atari游戏》深度Q学习(Deep Q Learning)的开山之作,它开启了现代强化学习的时代。


【第7关】炼丹心法  
   ⑮ 记日志:别只记“得了几分”,要记“发生了什么”。  
   ⑯ 把游戏调成“一秒跑几万步”,越快越好。  
   ⑰ 怀疑人生时,先检查“是不是奖励给错了”。

作者把他多年的经验浓缩成几条建议,句句都是干货!

怎么着手解决一个新问题:

  • 从第一性原理出发: AI一开始是“白纸一张”,啥也不懂,训练刚开始的时候,它就是乱按一通来找“信号”(就是找奖励)。而且它还是个“瞎子”,就算环境的画面完全随机化,它也能获得一些奖励。为了真正从奖励中学习,AI需要“看”到。
  • 观测空间要包含关键信息: AI需要什么信息才能解决问题?把这些信息放进“观测空间”里。动作也是同理。
  • 衡量指标很重要: 什么信息能告诉你AI工作正常?把它们记录下来。你几乎总是需要一个单一的实数指标来衡量整体表现。不要只记录原始奖励,因为你可能会调整这个数字的尺度,导致结果无法比较。记录一个“分数”。比如,我们可能给AI打破砖块0.25或0.5的奖励,但我们记录的是实际获得的点数。如果你能把分数缩放到0到1之间就更好了!
  • 日志别太多,只记录有用的: 记录任何你真正会看的额外数据,但不要记录一大堆你不会用的东西。好的选择包括碰撞率、出界率等等,因为这些是“理智检查”,对于适用的问题,这些值应该接近0。
  • 环境要简单,要快,别抽象! 写最简单的环境,而且要快!不要做任何抽象!这点太重要了,所以说两遍:不要做任何抽象!
  • 尽早频繁地开始训练: 你希望迭代速度尽可能快。秒级比分钟级好,如果是小时级,那你就输了。
  • 训练没成功,怀疑数据: 如果训练没效果,怀疑你的数据有问题。
  • 环境要“可玩”: 让你的环境可以“玩”。你看到发生的事情合理吗?你期望得到奖励时,奖励有被分配吗?
  • 检查AI状态: 对一个检查点(就是训练过程中的某个保存点)进行评估。看看AI有没有陷入一些无法恢复的“退化”状态
  • 循序渐进,别乱改: 对于更难的问题,要慢慢地、逐步地扩大规模,不要在没有在最新版本上训练出一个像样的模型之前,做大量的修改。不要在不断变化的新环境上尝试新算法。在稳定的问题上进行研究,然后再在新环境上尝试。
怎么编码数据:
  • 观测要标准化和中心化: 对观测进行适当的标准化。位置数据尽可能要以AI为中心。你可以通过减去AI的位置并除以最大值来实现。
  • 离散数据要编码: 离散数据不能直接扔进模型,需要编码。如果你把“骑士、国王、女王、兵、车”表示为0、1、2、3、4,直接输入模型会暗示“骑士”比“车”更像“国王”。这还会迫使模型在“潜在空间”(latent space)中学习一个奇怪的决策边界。应该用独热编码(One-hot encode),把“骑士”编码成[1, 0, 0, 0, 0]。对于非常小的值,你可以在环境里完成,但对于更大的值,在策略里做,可以节省带宽。
  • 动作空间要简洁: 动作应该是你的环境最简单的一组控制方式。作者喜欢想象这个环境是在GameBoy上发布的,然后设计与之匹配的控制方式。Neural MMO 3功能包括探索、战斗、装备、消耗品、进程和一个实时市场。但它的动作空间是一个单一的离散动作,而且只用键盘就能玩。但不要为了实现这个而吹大动作空间

【第8~10关】高级副本(选打)  
   • 第8:把 RL 用到你爸妈的工作里(比如给仓库排班、给空调省电)。  
   • 第9:研究“更快、更省显存”的算法——作者直接吐槽:很多论文结果是假的,你得自己试。  
   • 第10:帮 PufferLib 写底层 C++,让速度再翻10倍。

你需要足够的数学基础(CS231n的水平)来理解这个领域的论文,以及足够的编程基础来运行自己的实验。预计需要批判性地阅读大量论文。强化学习领域中“错误”的发表结果比AI其他领域更多,即使是那些有强有力证据的结果也是如此。以下是一些有重要开放问题的研究领域,以及一些相关论文。

  • 离线策略学习(Off-policy learning):在2019年左右RL的“黄金时代”高峰期,OpenAI主要使用在线策略方法,而DeepMind使用离线策略方法。Dota和“涌现工具使用”明确证实了在线策略方法在相对干净的环境中是有效的。我们没有同样明确的离线策略方法成果,因为DeepMind的主要成果往往有更多的“活动部件”(就是更复杂)。在线策略方法效果很好,在无限数据的情况下速度也很快。离线策略方法有时在数据不足的情况下更受青睐。我们能否兼得两者之长?
    • 《Rainbow:结合深度强化学习的改进》:第一个能与PPO竞争的可用离线策略方法。它是一堆花哨的技巧拼凑到DQN上,像个“大杂烩”
    • 《超越Rainbow:在台式PC上高性能深度强化学习》:这篇论文还没引起太多关注,但它是Rainbow的一个很好的后续,平衡了相对慢速模拟器的样本效率和不错的实际训练时间。
    • 《人类水平的Atari,快200倍》:如果你计算环境步数并将计算视为免费,它才快200倍。但结果仍然成立,所以这里可能有些东西。
    • 《IMPALA:用重要性加权Actor-Learner架构实现可扩展分布式深度RL》:引入VTrace来纠正离线策略漂移。我们在PufferLib 3.0中尝试过,它比GAE差。但与GAE结合后,确实整体上有所帮助。
  • 基于模型的学习(Model-based Learning):你能通过预测下一个状态来压缩转换吗?各种方法试图做到这一点,然后通过模型生成的“幻觉数据”进行学习。其他方法只是试图将模型用作辅助损失。这个领域的科学性是“不确定”的,作者不相信任何已发表结果背后的推理。但这里很可能有些东西。可能是离线策略重采样的一种替代方案。
    • 《循环世界模型促进策略演化》:原始的世界模型论文。
    • 《通过世界模型掌握多样化领域》:可能是这个领域最著名的论文,DreamerV3。它竟然能扩展到2亿参数,这在RL中通常是行不通的。
    • 《通过DreamerV3技巧提高近端策略优化的奖励尺度鲁棒性》:我们的论文,表明DreamerV3中引入的技巧并没有按照给定的理由起作用。
  • 搜索(Search):你能探索或模拟不同可能结果的链条,以利用更多计算来改进学习和/或测试时间性能吗?它在几个DeepMind项目中(无论是否能访问模拟器动态)都取得了成功,但它还没有像香草PPO等算法那样广泛应用。
    • 《通过学习模型掌握Atari、Go、国际象棋和将棋》MuZero移除了AlphaGo中你需要设置模拟器状态的要求。
    • 《Go-Explore:一种解决硬探索问题的新方法》:利用可设置的模拟器,以不合理的方式很好地解决了非常困难的探索问题。公平地说,如果可设置状态有用,我们可以将其构建到几乎所有类型的模拟器中。
    • 《EfficientZero V2:用有限数据掌握离散和连续控制》:基于MuZero,声称击败了DreamerV3。

5. 结尾彩蛋  
   作者在线摇人:  
   “GitHub 点星+转发文章=5 秒免费打赏。  
    想深度参与?Discord 搜 puffer,进来直接开麦问,群里24小时有人接梗。”

一句话总结:  
别再被“高数+GPU”吓住,强化学习其实就是——  
“写个小游戏→让 AI 瞎玩→你给分→它变强→你毕业。”