Karpathy:强化学习不是最终答案,那下一个风口是?
扩大强化学习的规模是时下的一大热点,我昨天刚和朋友聊过这个话题。我相当肯定,RL 会持续带来更多中期收益,但我也并不认为它就是最终的解决方案。 RL 的基本逻辑是:“嘿,这次做得不错(/很糟),那么在未来,我就稍微增加(/减少)我所采取的每一个行动的概率”。你从验证器函数中能获得比显式监督强大得多的杠杆效应,这非常棒。 但首先,从渐进的角度看,这件事就有点可疑了——一旦任务的交互时长增加到几分钟甚至几小时,你真的要费那么大劲,只为了在最终学习到一个单一的标量结果,并用它来直接调整梯度权重吗?其次,除了渐进性问题,对于大多数智能任务而言,这感觉上并不像是人类的学习改进机制。在每一次推演后,我们通过一个复盘/反思阶段——“哪些地方做得好?哪些地方不太好?下次我该尝试什么?”——能提取出远为丰富的监督信息。并且,来自这个阶段的经验教训是明确的,就像一条可以被添加到未来系统提示词中的新指令,并可以选择性地在之后(有点像睡眠)被蒸馏为模型的权重(/直觉)。在英语中,我们称某件事通过这个过程变成了“第二天性”(second nature),而我们目前正缺少这样的学习范式。ChatGPT 中新的“记忆”功能或许就是这种范式的一个雏形,尽管它目前只用于个性化定制,而非解决问题。值得注意的是,在雅达利游戏的 RL 等场景中,并不存在与之对等的机制,因为那些领域里没有大语言模型(LLM),也没有上下文学习(in-context learning)。 示例算法:给定一个任务,先进行几次推演(rollout),然后将所有推演过程(包括每一次的奖励)都塞进一个上下文窗口,再用一个元提示词(meta-prompt)来复盘/反思哪些地方做得好或不好,从而提炼出一条字符串形式的“经验教训”,并将其添加到系统提示词中(或者更通用地说,更新当前的经验教训数据库)。这个想法还有许多细节有待填补,有许多可行的调整,前景并不明朗。 经验教训的示例:我们知道,由于 Token 化处理,大语言模型不太容易看清单词中的字母,也不太容易在残差流(residual stream)中进行计数,这导致了著名的难题——识别“strawberry”中的‘r’。Claude 的系统提示词里打了一个“快速补丁”,即添加了这样一条指令:“如果用户要求你计数字母,请先将字母用逗号隔开,每数一个就给一个显式计数器加一,并以此方式完成任务”。这条字符串就是“经验教训”,它明确地指导了模型该如何完成计数任务。但问题在于,这样的经验教训如何能从 AI 智能体的实践中自发涌现,而不是由工程师硬编码进去?它该如何被泛化?以及如何随着时间推移对这些经验教训进行蒸馏,以避免上下文窗口被无限撑大? 总而言之:RL 将会带来更多进步,因为一个优秀的 RL 系统能起到更强的杠杆作用,更信奉“惨痛教训”(The Bitter Lesson)的理念,并且优于监督微调(SFT)。但这感觉并非故事的全部,尤其是当推演的长度还在不断增加时。在这之后,还有更多的 S 型增长曲线等待我们去发现,这些曲线可能专属于大语言模型,在游戏或机器人这类环境中没有先例,而这,正激动人心。