返回 动态 学习 CMS 文章

Karpathy:RLHF 只是勉强算作强化学习,真正的 RL 尚未在 LLM 中实现

Karpathy 认为 RLHF 只是勉强算作 RL,并解释了其局限性及未来真正 RL 的可能性。

RLHF强化学习LLMKarpathy
成长分 / 100 76 综合收获、行动、留存与影响

Karpathy:RLHF 只是勉强算作强化学习,真正的 RL 尚未在 LLM 中实现
为什么值得读理解 RLHF 与真正 RL 的本质区别,避免概念混淆。

了解 RLHF 在 LLM 训练中的实际作用与潜在问题。

关键洞察
  1. RLHF 使用人类偏好作为代理奖励,而非真实目标,容易导致优化偏差。
  2. RLHF 优化过程中模型会找到奖励模型的对抗性样本,导致训练必须提前停止。
  3. RLHF 仍有益处,因为它利用了生成器-判别器差距,并可能减轻幻觉。
转成行动

深入阅读

正文与原文对照

原文保真覆盖:全文原文字符:5386

RLHF 只是勉强算作 RL

基于人类反馈的强化学习(RLHF)是训练大型语言模型的第三个(也是最后一个)主要阶段,位于预训练和监督微调(SFT)之后。我对 RLHF 的吐槽是,它只是勉强算作 RL,而这一点我认为并没有被广泛认识到。RL 是强大的。RLHF 不是。让我们看看 AlphaGo 的例子。AlphaGo 是用真正的 RL 训练的。计算机下围棋,并在最大化奖励函数(赢得比赛)的 rollout 上进行训练,最终超越了最优秀的人类棋手。AlphaGo 不是用 RLHF 训练的。如果是的话,它不会表现得那么好。

用 RLHF 训练 AlphaGo 会是什么样子?首先,你会给人类标注者两个围棋棋盘状态,并问他们更喜欢哪一个:

然后你会收集比如 10 万个这样的比较,并训练一个“奖励模型”(RM)神经网络来模仿人类对棋盘状态的这种“感觉检查”。你会训练它平均上同意人类的判断。一旦我们有了奖励模型的感觉检查,你就针对它运行 RL,学习走出能带来好感觉的棋步。显然,这不会在围棋中带来任何有趣的结果。这有两个根本的、独立的原因:

  1. 感觉可能具有误导性——这不是实际的奖励(赢得比赛)。这是一个糟糕的代理目标。但更糟糕的是,
  2. 你会发现你的 RL 优化会偏离轨道,因为它很快发现对奖励模型来说是对抗性样本的棋盘状态。记住,RM 是一个拥有数十亿参数的大型神经网络,模仿感觉。有些棋盘状态相对于其训练数据是“分布外”的,这些状态实际上并不好,但偶然地它们从 RM 那里获得了非常高的奖励。

出于完全相同的原因,有时我有点惊讶 RLHF 对 LLM 竟然有效。我们为 LLM 训练的 RM 只是一种感觉检查,方式完全相同。它给人类评分者统计上似乎喜欢的助手回复类型打高分。它不是“实际”目标(正确解决问题),而是一个代理目标(看起来对人类不错)。其次,你甚至不能运行 RLHF 太长时间,因为你的模型很快学会以欺骗奖励模型的方式回应。这些预测可能看起来非常奇怪,例如,你会看到你的 LLM 助手开始对许多提示回复一些无意义的内容,比如“The the the the the the”。这对你来说看起来很荒谬,但你看 RM 的感觉检查,发现出于某种原因 RM 认为这些看起来很好。你的 LLM 找到了一个对抗性样本。它相对于 RM 的训练数据是域外的,处于未定义的领域。是的,你可以通过反复将这些特定示例添加到训练集中来缓解这个问题,但下次你会找到其他对抗性样本。因此,你甚至不能运行 RLHF 进行太多优化步骤。你做几百/几千步,然后就必须停止,因为你的优化将开始欺骗 RM。这不是像 AlphaGo 那样的 RL。

然而,RLHF 是构建 LLM 助手的一个净有益的步骤。我认为有几个微妙的原因,但我最喜欢指出的一点是,通过它,LLM 助手受益于生成器-判别器差距。也就是说,对于许多问题类型,人类标注者从几个候选答案中选择最好的一个,比从头开始编写理想答案要容易得多。一个很好的例子是像“写一首关于回形针的诗”这样的提示。一个普通的人类标注者很难从零开始写出一首好诗作为 SFT 示例,但他们可以从几个候选中选出一首看起来不错的诗。所以 RLHF 是一种利用人类监督的“容易性”差距的方式。还有其他一些原因,例如,RLHF 也有助于减轻幻觉,因为如果 RM 足够强大,能够在训练中捕捉到 LLM 编造内容,它可以学会用低奖励来惩罚这种行为,从而教会模型在不确定时避免冒险使用事实知识。但对幻觉及其缓解的令人满意的处理是另一篇完全不同的文章,所以我离题了。总而言之,RLHF 确实 是有用的,但它不是 RL。

目前,在开放领域、大规模上,还没有令人信服地实现和展示过对 LLM 进行生产级 真正的 RL。直观地说,这是因为在开放式问题解决任务中,获得真正的奖励(即相当于赢得游戏)非常困难。在像围棋这样的封闭、类似游戏的环境中,动态受到约束,奖励函数评估成本低且无法作弊,一切都很有趣。但如何为总结一篇文章提供客观奖励?或者回答一个关于 pip 安装问题的有点模糊的问题?或者讲一个笑话?或者将一些 Java 代码重写为 Python?朝着这个方向前进原则上并非不可能,但也并非易事,需要一些创造性思维。但无论谁令人信服地解决了这个问题,都将能够运行真正的 RL。那种导致 AlphaGo 在围棋中击败人类的 RL。只不过这个 LLM 将真正有机会在开放领域问题解决中击败人类。