十四、RLHF
关于强化学习,我还有一部分内容想要探讨,其实前文已经提过一嘴,这就是在不可验证领域学习的问题。到目前为止,我们所研究的所有问题都属于所谓的可验证领域。也就是说,我们可以很容易地根据具体答案对任何候选解决方案进行评分。例如,答案是 3,我们可以很容易地根据这个答案对这些解决方案进行评分。我们可以要求模型将答案框起来,然后只需检查框中的内容是否与答案相符。或者你也可以使用所谓的 LLMs 评判器。
因此,LLMs 评判器会查看一个解决方案,获取答案,并基本上根据该方案是否与答案一致来评分。从经验来看,当前能力的 LLMs 已经足够胜任这一任务,能够相当可靠地完成。所以我们也可以应用这类技术。无论如何,我们已经有了一个明确的答案,现在只是在对照检查解决方案。而且我们可以完全自动地完成这一过程,无需任何人工干预。问题在于,我们无法在所谓的不可验证领域中应用这一策略。
通常这些任务都是创意写作类的,比如写一个笑话、写一首诗、总结一段文字或类似的内容。在这些领域里,要对我们不同的解决方案进行评分就变得比较困难,因为这类问题没有所谓的标准答案。
让 LLMs 写一个笑话,往往我们不知道笑点在哪里,或者大概率是一些冷笑话,实际上,我觉得这相当有意思,因为我认为幽默其实是件非常困难的事,而目前这些模型还不具备这种能力。不管怎样,你可以想象生成大量笑话的场景。我们现在面临的问题是如何评估这些笑话的好坏?理论上,我们当然可以像我刚才那样找人来逐一评判这些笑话。
问题在于,如果你正在进行强化学习,你将需要进行数千次更新。每次更新时,你需要查看数千个提示。而对于每个提示,你可能需要查看数百甚至数千种不同的生成结果。这些内容实在太多了,根本看不过来。理论上,你可以让人工逐一检查并打分,判断这个可能好笑,那个可能好笑,再拿这些数据训练模型,至少能让笑话看上去稍微进步一点。但问题是,这要耗费的人力时间实在太多了。
这是一种不可扩展的策略。我们需要某种自动化的策略来实现这一目标。
这篇论文[1](#1)提出了一种解决方案,引入了所谓的"基于人类反馈的强化学习"。这是 OpenAI 当时的一篇论文。这些人中的许多现在都是 Anthropic 的联合创始人。这篇论文基本上提出了一种在不可验证领域进行强化学习的方法。
让我们来看看它是如何运作的。这是核心概念的卡通示意图。正如我提到的,最简单的方法是如果我们有无限的人力时间,我们就可以在这些领域中很好地运行强化学习。
例如,如果我们有无限的人力资源,就可以像往常一样进行强化学习。我只是想打个比方,这些数字只是象征性的------我打算进行 1000 轮更新,每轮更新基于 1000 个提示。对于每个提示,我们将生成 1000 次模拟运行并进行评分。我们可以用这种设置进行强化学习。问题在于,在这个过程中,我需要请人类评估笑话总共 10 亿次。这意味着很多人要看很多非常糟糕的笑话。
我们不想那样做。相反,我们想采用 RLHF 方法。在 RLHF 方法中,我们的核心技巧有点像间接操作。我们打算稍微引入人类的参与。我们的"作弊"方式基本上是训练一个完全独立的神经网络,我们称之为奖励模型。这个神经网络会模仿人类的评分。我们将请人类对演练进行评分。然后,我们将使用神经网络来模仿人类的评分。这个神经网络将成为一种模拟人类偏好的工具。
现在我们有了神经网络模拟器,就可以用它来进行强化学习。举个例子,我们不再询问真实人类,而是向模拟人类征求他们对笑话的评分。一旦有了模拟器,我们就可以大展拳脚了,因为想查询多少次都可以。这是一个完全自动化的过程。我们现在可以通过模拟器进行强化学习。正如你所料,模拟器并不会是一个完美的人类。但如果它至少在统计上与人类判断相似,那么你可能会期望这会产生一些效果。实际上,确实如此。因此,一旦我们有了模拟器,我们就可以进行强化学习,一切都会顺利进行。
这张示意图基本展示了这个过程的大致情况。虽然细节不是特别重要,但核心概念是这样的。
首先我们有一个提示,比如写一个关于鹈鹕的笑话,然后这里有五个不同的版本。我们要做的第一件事就是请一个人将这些笑话从最好到最差进行排序,所以这就是人类的思维,认为哪个笑话是最好的,最有趣的,哪个是最糟糕的笑话等。我们让人类进行排序而不是直接打分,因为这样任务稍微简单些。对人类来说,给出排序比给出精确分数更容易。
现在,这就是对模型的监督。人类已经对它们进行了排序,这就像是他们对训练过程的贡献。但现在,我们要做的是另一件事。奖励模型是一个完全独立的神经网络,与之前的网络完全分离,它很可能也是一个 Transformer,但它并不是一个能生成多样化语言的语言模型。这只是一个评分模型。因此,奖励模型会接收两个输入:第一个是提示词,第二个是候选笑话。这两个输入会进入奖励模型进行评分。例如在这里,奖励模型会接收这个提示和这个笑话。奖励模型的输出是一个单一的数字,这个数字被视为一个分数,范围可以从 0 到 1。0 代表最差分数,1 代表最佳分数。以下是训练过程中某个阶段假设的奖励模型对这些笑话的打分示例。0.1 分表示非常低分,0.8 分则表示非常高分,以此类推。现在我们将奖励模型给出的分数与人类给出的排序进行比较。
实际上有一种精确的数学方法可以计算这一点,基本上就是建立一个损失函数,在这里计算一个对应关系,并基于此更新模型。但我想给你一个直观的理解,比如在这个第二个笑话的例子中,人类认为它是最有趣的,模型也基本同意,0.8 分已经是一个相对较高的分数了。但这个分数本应该更高,所以在更新之后,我们可能会期望这个分数会有所提高,比如网络的更新后可能会变成 0.81 左右。
对于第一个例子,人与奖励模型实际上存在很大的分歧,因为人类认为这应该是第二名,但这里的评分只有 0.1。所以这个分数需要大幅提高。经过更新后,在这种监督机制下,分数可能会显著提升,比如可能达到 0.15 左右。而第 4 个笑话,人类认为这是最差的笑话,但模型实际上给了它相当高的分数。所以你可能会以为更新后这个数值会降到 0.35 左右。本质上我们还是在做之前的工作------通过神经网络训练流程对模型预测结果进行微调。
我们正努力使奖励模型的评分与人类排序保持一致。随着我们根据人类数据更新奖励模型,它能越来越准确地模拟人类提供的评分和排序,进而成为人类偏好的某种模拟器------我们可以在此基础上进行强化学习。但关键在于,我们不会让人类反复看上十亿次笑话来评判。
我们可能需要查看大约 1000 条提示词,每条提示词生成 5 个笑话,所以总共可能有 5000 个笑话需要人工审核。他们只需要给出排序,然后我们训练模型使其与这个排序保持一致。我省略了数学细节,但我想让你理解一个高层次的概念:这个奖励模型基本上是在给我们打分,而我们有一种方法可以训练它,使其与人类的排序保持一致。这就是 RLHF 的工作原理。简单来说,我们基本上是训练人类模拟器,并针对这些模拟器进行强化学习。
现在,我想先谈谈人类反馈强化学习的优势。首先,这种方法让我们能够运用强化学习------众所周知这是一套极其强大的技术体系,并且可以在任意领域中实施,包括那些无法验证的领域。比如摘要生成、诗歌创作、笑话编写或其他任何创意写作领域,实际上涵盖了数学和编程等范畴之外的广阔天地。
实际上,当我们真正应用 RLHF 时,经验表明这是一种提升模型性能的方法。对于这种现象的原因,我有一个最合理的解释,但我并不确定它是否已被充分证实。你可以直观地观察到,当你正确实施 RLHF 时,得到的模型表现确实会稍好一些。但至于原因,我认为并不那么明确。所以这是我的最佳猜测。我猜这很可能主要是由于判别器与生成器之间的差距所致。
这意味着在许多情况下,人类进行辨别要比生成内容容易得多。具体来说,当我们进行监督微调(SFT)时,就是要求人类生成理想的助手回应。正如我所展示的,在许多情况下,写出理想的回应非常简单,但在其他情况下,可能并非如此。例如,在总结、诗歌创作或笑话创作中,作为人类标注者,你该如何在这些情况下获得理想的回应?这需要人类的创造性写作才能实现。而 RLHF(人类反馈强化学习)某种程度上绕过了这个问题,因为我们让数据标注者回答一个简单得多的问题。他们不需要直接创作诗歌。
他们只是从模型中获得了五首诗,然后被要求对它们进行排序。因此,这对人类标注者来说是一项简单得多的任务,并没有要求人们完成极具挑战性的生成任务。比如,我们没有让他们进行创意写作,只是试图让他们区分创意作品并找出最佳的那些。这就是人类提供的信号,仅仅是排序。这就是他们对系统的输入。然后,RLHF 系统只是发现了那些会被人类评为高分的回应类型。因此,这种间接的步骤使得模型能够变得更好。这就是 RLHF 的优势所在。它让我们能够运行强化学习。
实践证明,这种方法能产出更优质的模型。它让人们能够贡献自己的监督指导,甚至无需像撰写理想回复那样完成极其困难的任务。但遗憾的是,RLHF 也伴随着显著的弊端 。因此,最主要的问题在于,我们实际上是在进行强化学习,但并非基于真实人类及其判断,而是基于对人类的有损模拟 ,这种有损模拟可能会产生误导,因为它只是一个模拟,只是一个输出分数的语言模型,而且它可能无法在所有不同情况下完美反映一个真正有头脑的人类的观点。这是第一点。
实际上还有更微妙和隐蔽的问题,严重阻碍了 RLHF 作为一种技术,使我们无法真正将其扩展到更智能的系统。强化学习非常擅长找到方法来操纵模型和模拟环境。我们在这里构建的用于评分的奖励模型,这些模型都是基于 Transformer 架构。这些 Transformer 是庞大的神经网络。它们拥有数十亿参数并模仿人类,但只是以某种模拟的方式实现。事实证明,存在操纵这些模型的方法。
你可以发现各种不属于训练集中的类型数据,而这些输入莫名其妙地获得了极高的评分,但却是虚假的。因此,如果你长时间运行 RLHF(例如进行 1000 次更新,这算是相当多的更新),你可能会期望你的笑话会变得更好,你会得到一些关于鹈鹕的爆笑段子,但实际情况并非如此。
情况是这样的:在最开始的几百步里,关于鹈鹕的笑话可能确实有所改进。但随后它们会急剧恶化,开始产生极其荒谬的结果。比如,关于鹈鹕的最佳笑话开始变成"那个,那个,那个,那个,那个,那个,那个,那个,那个"。
这简直毫无道理,对吧?比如你乍看之下,这怎么会是个顶级笑话呢?但当你把那些"的、的、的、的、的"输入奖励模型时,本该得零分,可实际上模型却疯狂追捧这个笑话。它会告诉你这串"的、的、的、的、的"能得满分1.0分------这明明就是个顶级笑话啊,简直荒谬透顶对不对?但究其原因,这些模型不过是人类的模拟器,本质上就是一堆庞大的神经病。你总能在参数空间的某个犄角旮旯里,找到些能输出荒唐结果的诡异输入组合。
这些例子就是所谓的对抗性样本。虽然我不会深入探讨这个话题,但它们都是针对模型的对抗性输入。这些特定的微小输入会钻模型的空子,最终在输出端产生荒谬的结果。现在你可能会想象这样做。你会说,将这些"垃圾"笑话,添加到数据集中,并给它一个极其糟糕的排序,比如排第 5。确实,你的模型会学到这个,遇到类似笑话它会给出零分。问题在于,模型中基本上总是隐藏着无限数量的无意义的对抗性示例。
如果你多次重复这个过程,不断向奖励模型添加无意义的内容并给予极低评分,那么你将永远无法赢得游戏。你可以进行无数轮这样的操作,而只要时间足够长,强化学习总会找到方法来操控模型。它会发现对抗性样本,它会用毫无意义的结果获得极高的分数。从根本上说,这是因为我们的评分函数是一个巨大的神经网络,而强化学习非常擅长找到欺骗它的方法。
所以 RLHF,基本上可以说,它并不是 RL。我的意思是,显然 RLHF 是 RL,但它不是那种神奇的 RL,这不是你可以无限运行的 RL。 它更像是微调领域的小修小补。虽然能带来一些改进,但本质上并没有建立正确的框架------那种你投入更多算力、运行更长时间就能获得显著提升和神奇效果的体系。所以从这个意义上说,它不是强化学习。它缺乏魔力,从这个角度讲也不是强化学习,但它可以微调你的模型,获得更好的性能。
确实,如果我们回顾一下 ChatGPT,GPT-4o 模型已经经过了 RLHF 的优化,因为它效果不错,但它与我们通常理解的强化学习并不完全相同。 RLHF 更像是一种微调,能稍微提升模型的性能。这大概就是我对它的理解。
- rlhf paper: https://arxiv.org/pdf/2203.02155 ↩︎