原文:
towardsdatascience.com/llm-alignment-reward-based-vs-reward-free-methods-ef0c0f6e8d88?source=collection_archive---------0-----------------------#2024-07-05
LLM 对齐的优化方法
https://medium.com/@anishdubey?source=post_page---byline--ef0c0f6e8d88--------------------------------https://towardsdatascience.com/?source=post_page---byline--ef0c0f6e8d88-------------------------------- Anish Dubey
·发表于 Towards Data Science ·阅读时长 10 分钟·2024 年 7 月 5 日
–
背景
语言模型在基于用户提供的提示生成各种引人注目的文本方面展现了显著的能力。然而,定义什么是“好”文本是具有挑战性的,因为它通常依赖于个人偏好和具体上下文。例如,在讲故事时,创造力是关键;在制作信息内容时,准确性和可靠性至关重要;在生成代码时,确保代码正确运行是必要的。因此,“LLM 对齐问题”,即确保大型语言模型(LLM)按照与人类价值观、意图和偏好一致的方式运作的挑战。
设计一个能够捕捉我们在文本中重视的多种特质(如创造力、准确性或可执行性)的损失函数是极其复杂的,且往往不切实际。像这些概念并不可微分,因此无法进行反向传播,也不能通过简单的下一词生成进行训练。
假设我们能够利用人类反馈来评估生成文本的质量,或者更好的是,使用这些反馈作为引导损失函数来提升模型的表现。这个概念是“人类反馈强化学习”(RLHF)的核心。通过应用强化学习技术,RLHF 使我们能够根据直接的人类反馈微调语言模型,使模型更加符合人类细微的价值观和期望。这种方法为训练不仅更加响应迅速,而且更符合人类偏好复杂性的语言模型开辟了新的可能性。
接下来,我们将通过基于奖励的方法,进一步了解 RLHF,并了解基于无奖励的方法。
什么是通过人类反馈的强化学习(RLHF)和基于奖励的系统?
让我们来了解通过人类反馈的强化学习(RLHF)。它由三个主要阶段组成:
监督微调
奖励建模阶段
RL 微调阶段
监督微调
RLHF 是一个预训练模型,已经在高质量数据集上进行了微调。它的目标很简单,即在给定输入(提示)时,产生一个输出。最终目标是进一步微调该模型,以根据人类的偏好产生输出。因此,让我们称之为基础模型以供参考。目前,这个模型是一个标准的基础模型,它对任何人类偏好一无所知。
奖励建模阶段
奖励模型创新:这是奖励模型如何被融入到 RLHF 中的新创新开始的地方。奖励模型的背后思想是,一个新的 LLM 模型(它可以与上述的基础模型相同)将能够生成人的偏好评分。之所以与大型语言模型相似,是因为该模型也需要理解语言语义,才能评估输出是否符合人类偏好。由于奖励是标量,我们在 LLM 上方添加一个线性层,以生成一个关于人类偏好的标量评分。
数据收集阶段:这个阶段是在监督微调阶段完成的,在该阶段中,基础模型会为给定的文本生成两个输出。示例:对于输入标记 x,基础模型生成两个输出标记 y1 和 y2。这些输出会展示给人工评分员进行评分,并记录每个输出的人工偏好。
训练阶段:一旦数据收集阶段采集到数据样本,奖励模型就会使用以下提示进行训练:“给定以下输入:,LLM 生成了输出。你能评估该输出的表现吗?”模型将输出 r(奖励),我们已经知道从数据收集阶段得到的实际奖励值 r1。现在,可以通过损失函数进行反向传播,模型可以得到训练。以下是模型通过反向传播优化的目标损失函数:
https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/1f126383029386b638a86cd909424bcd.png
该论文中的公式:arxiv.org/pdf/2305.18290
符号说明:
rΦ(x, y):一个由Φ参数化的奖励模型,用于估计奖励。参数化意味着我们不知道实际的值,且需要根据上述方程进行优化。这就是奖励 LLM 模型本身。通常,LLM 的参数在这里被冻结,只有少数参数允许变化。最重要的层是顶部添加的线性层,它负责进行大部分的学习,以评估输出的评分。
Ɗ:一个三元组数据集(x, yw, yl),其中x:输入,yw:赢家输出,yl:输家输出
σ:sigmoid 函数,它将奖励差异映射到一个概率值(0–1 之间)
∑(x, y,w yl) ~Ɗ 表示x, yw, yl都是从 Ɗ 中采样的。
示例场景:假设你正在训练一个奖励模型来评估回答。你有一对针对给定提示的回答,并且人类反馈告诉你哪个回答更好。举个例子,x(“法国的首都是什么?”),你有yw(“法国的首都巴黎。”)作为赢家,以及yl(“法国的首都柏林。”)作为输家。当输入是“法国的首都是什么?”时,奖励模型最终应该学会给“法国的首都巴黎”更高的奖励,而不是“法国的首都柏林”。
RL 微调阶段
强化学习思路:现在,基本模型和奖励模型都已经训练完成,思路是如何利用奖励模型的得分并更新基本模型参数,以反映人类偏好。由于奖励模型输出的是标量分数,并且不可微,我们无法使用简单的反向传播来更新基本模型参数。因此,我们需要其他技术来更新基本模型。这就是强化学习的作用,它通过奖励模型的得分帮助基本模型改变参数。这是通过 PPO(近端策略优化)完成的。理解 PPO 的核心架构并不是理解这个概念所必需的,因此我们不会在这里讲解,但从高层次来说,PPO 的思路是可以使用标量得分来更新基本模型参数。现在让我们了解基本模型和奖励模型如何结合起来,使得基本模型学习人类偏好。
RL 微调思路:在强化学习中,我们有动作、空间和奖励。思路是提出一个策略,让任何动作代理都可以在该空间内采取,从而最大化奖励。这个过程比较复杂,但简化来看,π是我们的基本 LLM 模型。Πref表示基本模型,ΠӨ表示我们正在尝试生成的不同的 LLM 最优模型。我们需要找到ΠӨ(即基本模型的神经网络权重将被微调),从而输出人类更喜欢的结果。问题是我们不知道ΠӨ,而目标是找到这个最优模型。
强化学习训练与反馈循环阶段:输入 x 被提供给两个策略模型,Πref(基准模型)和ΠӨ(我们试图生成的最优模型)。最初,两个模型是相同的。将输入 x 分别传入这两个模型会分别产生两个输出。ΠӨ模型的输出也会输入到奖励模型中(输入:x,输出:y;如上所述),并要求输出奖励分数,即 rΦ(x, y)。现在我们有三个内容:基准模型的输出、最优模型的输出和最优模型的奖励分数。这里有两个优化目标,一个是最大化奖励,因为最终我们希望模型与人类偏好尽可能接近,另一个是最小化与基准模型的差异。最大化奖励很容易,因为它本身就是一个标量值,但如何最小化基准模型和最优模型之间的差异呢?这里我们使用*“Kullback–Leibler 散度”*,它估计两个连续概率分布之间的差异。让我们更深入地了解目标损失函数。
https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/62b0ece843cfa43a76a0035f21c15b45.png
来自本文的方程:arxiv.org/pdf/2305.18290
符号表示法:
rΦ(x, y):表示输入 x 和输出 y 的标量值(来自最优模型)。为了明确起见,最优模型的输出会被输入到奖励模型中。
Dkl (ΠӨ (y | x) || Πref (y | x)):计算两个概率分布之间的Kullback–Leibler 散度。每个模型中的每个标记都是一个概率分布。KL 估计两个分布之间的差异程度。
β:超参数,用于确定最优模型与基准模型接近的重要性。
示例场景:假设你问:“法国的首都是什么?”,Πref(基准模型)回答:“法国的首都是柏林。”而ΠӨ(最优模型)回答:“法国有三个首都,巴黎、凡尔赛和里昂,但巴黎被视为官方首都。”现在 rΦ(“x: 法国的首都是什么…”, “y: 法国有三个首都…”)应该给出较低的分数,因为它不太符合人类的偏好,且 Kullback–Leibler 散度(ΠӨ (y | x) || Πref (y | x))也应该较高,因为两个模型的输出概率分布空间存在差异。因此,这两个项的损失都会较高。我们不希望模型仅仅优化奖励,还希望它能够保持接近基准模型,因此这两个项都用于优化奖励。在接下来的学习迭代中,假设ΠӨ(最优模型)回答“法国的首都是德里”,在这种情况下,模型学习到保持接近Πref(基准模型)并输出更接近基准模型格式的内容,但奖励部分仍然较低。希望在第三次迭代中,ΠӨ(最优模型)能够学习并输出“法国的首都是巴黎”,并获得更高的奖励,同时模型输出与基准模型紧密对齐。
以下图示有助于说明逻辑。我还强烈推荐浏览RLHF 链接,该链接来自 Hugging Face。
https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/751a0f87e0b251e69b17e3e65bad459e.png
作者提供的图片,灵感来自huggingface.co/blog/rlhf
什么是通过无奖励方法的基于人类反馈的强化学习(RLHF)?
在考虑使用基于奖励的方法的 RLHF 之后,我们来讨论无奖励方法。根据论文中的描述:“我们的关键见解是利用从奖励函数到最优策略的分析映射,这使我们能够将奖励函数上的损失函数转换为策略上的损失函数。这种变量变换方法避免了拟合显式的独立奖励模型,同时仍然在现有的人类偏好模型下进行优化。”非常复杂,理解起来有难度,但我们将在下一部分尝试将其分解为简单的阶段。
无奖励方法的关键思想:在 RLHF 中,训练一个单独的新的奖励模型既昂贵又难以维护。有没有什么机制可以避免训练新的奖励模型,而使用现有的基础模型来达到新的最优模型?这正是无奖励方法的做法,即它避免了训练新的奖励模型,并通过改变方程式,使得 DPO(直接偏好优化)的损失函数中不再包含奖励模型项。可以这样理解,我们需要从基础模型(Πref)到达最优模型策略(ΠӨ)。可以通过优化奖励函数空间来帮助建立代理模型,从而达到最优模型策略,或直接学习从奖励到策略的映射函数,并进而优化策略本身。这正是作者们通过移除损失函数中的奖励函数组件,并直接用模型策略参数替代它所尝试的做法。这就是作者们所说的*“利用奖励函数到最优策略的分析映射…到损失函数上”*的核心创新。
DPO 训练与反馈回路阶段:使用Πref(基线模型),输入 x 并要求产生 2 个输出(y1 和 y2)。所有 x、y1 和 y2 都会被人工评分员用来决定胜出的 yw 和失败的 yl。离线数据集收集了三元组信息<x, yw 和 yl>。通过这些信息,我们知道胜出(人类偏好)和失败(人类不偏好)的答案是什么。现在,相同的输入 x 被传入 2 个模型(Πref 基线模型和ΠӨ最优模型)。最初,为了训练目的,两个模型保持相同。将输入 x 分别输入这两个模型,得到相应的两个输出。我们通过*“Kullback-Leibler 散度”*计算输出与参考模型和最优模型的胜出与失败答案之间的差距。让我们深入研究目标损失函数。
公式
https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/62aa446dfe029c31daee49c2f31cb3fb.png
来自arxiv.org/pdf/2305.18290的方程
ΠӨ (yw | x) -> 给定输入 x,模型的对应输出 youtput 与获胜输出 yw 之间的差距是多少。输出 youtput 和 yw 是概率分布,二者之间的差异将通过“Kullback–Leibler 散度”来计算。这将是一个标量值。此外,这也会针对不同组合的Πref (yw | x)、Πref (yl | x)、ΠӨ (yw | x)和ΠӨ (yl | x)进行计算。
β :超参数,用于确定将最佳模型与基线模型接近的重要性。
https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/830c15cf030cab6633ac5e530ebb7464.png
图片来源于作者,灵感来自huggingface.co/blog/rlhf
结论
自然地,问题变成了哪种方法更好,基于奖励的 RLHF 方法使用 PPO,还是无奖励的方法使用 DPO。这个问题没有确切的答案。最近一篇论文比较了*“DPO 是否优于 PPO 用于大语言模型对齐”*(论文 链接)并得出结论,PPO 通常优于 DPO,而且 DPO 在处理超出分布的数据时更为困难。“超出分布”数据指的是人类偏好数据与基线训练数据不同。如果基础模型的训练是在某些数据集上进行,而偏好输出是在另一个数据集上进行,这种情况就可能发生。
总的来说,关于哪种方法更好,研究仍在进行中,但我们已经看到像 OpenAI、Anthropic、Meta 等公司将 RLHF 通过 PPO 和 DPO 两种工具用于大语言模型的对齐。
参考文献
直接偏好优化:你的语言模型实际上是一个奖励模型:
arxiv.org/pdf/2305.18290DPO 是否优于 PPO 用于大语言模型对齐?一项综合研究
arxiv.org/pdf/2404.10719Hugging face RLHF 文章
huggingface.co/blog/rlhf