从头开始训练LLM非常困难,而且非常昂贵。LLM的训练不仅困难,而且非常昂贵。例如,训练ChatGPT花费了超过1亿美元,而训练Llama花费了大约2000万美元。这引发了一个问题,即我们是否能够正确地将LLM与人类偏好对齐,因为我们不能一遍又一遍地重新训练。
AI中的**直接偏好优化(DPO)**是指一种方法,其中AI系统根据直接优化用户偏好来进行决策或预测。这与传统方法形成对比,传统方法是训练模型以最小化预定义的损失函数,这个损失函数可能与实际用户偏好完全一致,也可能不完全一致。
因此,不多说了,让我们深入探讨如何将我们的LLM与人类偏好对齐。
目录:
- LLM训练流程
- DPO的需求
- 理解RLHF(奖励模型+PPO)
- 解码直接偏好优化(DPO)
- DPO背后的数学原理
LLM训练流程
让我们快速描述LLM训练流程,然后我们将了解DPO如何帮助我们。
步骤1:预训练
- 数据收集和多样性: 从互联网收集大量数据集,确保涵盖各种文本来源。数据的多样性对于模型理解各种语言风格、主题和细微差别至关重要。
- 数据清理和预处理: 这涉及删除无关内容、格式问题和噪声。这是一个微妙的过程,需要在清理数据的同时保留有意义的上下文。
- **标记化:**使用字节对编码或WordPiece等技术,将文本分解为可管理的单元(单词、子词)。这一步对于处理语言的细微差别(包括形态和语法)至关重要。
- 使用Transformer架构: 选择Transformer来处理序列数据的有效性以及捕捉文本中的长距离依赖性。
- 训练下一个单词预测: 训练模型预测序列中的下一个单词。这一步是模型学习语言结构和生成连贯文本的基础。然而,在这个阶段,模型缺乏深入理解上下文或用户意图的能力。
步骤1后的输出:
- 模型可以生成文本,但可能会产生与上下文无关或不适当的输出,因为它尚未学习特定用户交互模式或指令。
步骤2:监督微调/指令微调
- 从目标输入和响应中学习: 现在,模型通过用户输入和适当的响应进行训练。这种训练对于模型学习响应的上下文和相关性至关重要。
- 理解指令和知识检索: 模型开始理解指令的含义,并学习如何检索和有效利用其预训练的知识。
步骤2后的输出:
- 模型现在可以更准确地理解和回答问题。它开始建立问题和上下文适当响应之间的关系。
步骤3:从人类反馈中进行强化学习(RHFL)
- 与人类偏好对齐(有益、诚实、无害): 这里的重点是优化模型的输出,使其与道德和实际的人类标准相一致,包括有益性、诚实性和无害性。
- 使用人类反馈训练奖励模型: 为同一提示生成多个输出,并由人类标注者对其进行排名。这个排名数据训练了另一个神经网络,即奖励模型,它理解内容中的人类偏好。
- 用奖励模型替代人类以实现可扩展性: 一旦训练完奖励模型,它就取代了人类在提供反馈方面的角色,从而实现了LLM的大规模、高效的微调。
RHFL的目的:
- 这个阶段对于改进模型的行为至关重要。它确保模型不仅提供准确和相关的响应,而且以符合人类价值观的道德方式提供响应,避免误导、有害或危险的内容。
总结:
- 预训练为理解语言奠定了基础。
- 监督微调/指令微调教会模型对特定指令做出适当的响应。
- RHFL将模型的响应与道德和以人为中心的标准对齐,增强了模型在实际应用中的可靠性和安全性。
端到端LLM训练流程(图片来源)
DPO的需求
在AI中,直接偏好优化(DPO)是一种关键方法,原因有几个,特别是在传统模型可能无法充分与复杂而微妙的人类偏好相一致的情况下。
预定义的指标(如准确性、精确度、召回率)是我们认为用户想要的东西的代理。它们往往无法捕捉到用户满意度的所有方面,特别是在复杂的决策场景中。不同的应用可能需要不同类型的优化。DPO使得模型的目标可以根据特定的用户需求和场景进行定制。
通过直接融入用户反馈,DPO使模型的输出更加贴近用户实际认为有价值或可取的内容。人类的偏好会随着时间的推移而变化,并在不同的环境中有所不同。DPO允许模型动态适应这些不断变化的偏好,保持其相关性和有效性。
在推荐系统、个性化医疗保健或客户服务等应用中,理解和适应个体用户偏好可以显著提高AI系统的效果。而像DPO这样的方法可以潜在地减少AI输出中的偏见。通过从多样化的用户反馈中学习,模型可以更加公平,并且不太可能延续训练数据中存在的现有偏见。
DPO非常重要,因为它可以用来将模型对齐到安全的响应。我们可以很容易地想象,在预训练阶段,模型可能已经学到了关于性行为、化学战争、核技术等方面的知识。DPO可以帮助我们不让这些非常强大的模型进入危险领域。
理解RLHF(奖励模型+PPO)
为了充分理解这一点,让我们谈谈端到端RLHF所需的模型总数。为此,我们需要复制我们的基础模型四次。
- 预训练的基础LLM
- 监督微调(SFT)LLM
- 奖励模型(LLM,但修改为奖励模型)
- PPO优化的语言模型(最终与偏好对齐的LLM)
所有四个模型及其之间的区别RLHF(奖励模型+PPO)(图片来源)
让我们更详细地了解第三和第四个模型,我假设上面的解释至少清楚地解释了基础LLM和SFT。
奖励模型只是复制了SFT模型,并对其进行修改,以删除非嵌入层(最终层的非嵌入层将文本的内部表示转换为可读的文本),并添加一个标量奖励头。该模型接收一个提示并输出一个标量奖励。该层不输出文本,而是输出一个标量值,即表示给定输入的“奖励”或“分数”的单个数字。奖励模型是使用人类反馈进行训练的。这个反馈可以是对AI生成的响应进行排名或评分的形式。
奖励模型是RLHF中的一个关键组成部分。它提供了衡量AI生成响应质量的可量化指标。在进一步训练AI时,这个奖励信号被用来增强好的响应(那些获得更高奖励的响应)并抑制不好的响应(那些获得较低奖励的响应)。
近端策略优化(PPO)模型也是SFT模型的副本,其中的参数将被更新以与人类偏好对齐。PPO是一种强化学习算法,用于微调AI模型(最初的SFT模型)。它优化“策略”,在这个上下文中指的是根据人类价值观生成文本响应的策略。PPO训练的目标是最大化从奖励模型获得的奖励。
希望现在有更多事情变得清晰了,我知道你可能还有一些关于ChatGPT训练方式的问题,请在评论中提出,否则这篇文章会变得太长。
解码直接偏好优化(DPO)
DPO通过完全移除奖励模型来简化这个过程。
DPO (图片来源)
他们通过修改最后一步的损失函数,直接向最终模型提供一个比较数据集。这是一个消除依赖关系的很好的例子,以及简单化可以带来更好结果的方式。
让我们看看它在实践中是如何工作的。
情感生成
假设任务是使我们的模型只生成积极的评论。 *提示 x* 是来自IMDB数据集的电影评论的前缀,策略必须生成一个带有积极情感的完成 *Y*。
x: 钢铁侠是...
y_w: 史上最好的电影,因为...
y_l: 我认为是我看过的最糟糕的漫威电影...
首先,我们训练一个在IMDB电影评论数据集的训练集上生成类似电影数据的SFT。然后,我们使用一个预训练的情感分类器生成带有标签的偏好数据集。
根据分类器的评估,将每个完成标记为“首选”(positive)如果它具有积极情感,标记为“非首选”(non-preferred)如果它具有消极情感。例如,y_w
(最差的电影)将被标记为非首选,y_l
(最好的电影)将被标记为首选。
然后,我们微调模型的参数,最大化生成被情感分类器分类为积极的回复的可能性。为了实现这个目标,在训练过程中我们使用了一个排序损失函数,对于更喜欢负面完成而不是积极完成的模型进行更严厉的惩罚。
我们不断生成新的完成,应用情感分类器,并使用这些数据进一步微调模型。这个迭代的过程帮助模型更擅长生成积极的评论。模型学会调整其语言生成方式,更有可能产生积极情感的完成。
上图显示了模型在各种KL散度分数下生成一系列积极情感句子(高奖励)。他们运行了一套22种不同超参数设置的实验,为不同类型的模型生成了这些数据。(第6.1节)
结论是,DPO在概率分布与原始参考模型不同的完成中提供了最高的偏好一致性。
摘要
在另一个摘要任务中,他们以Reddit的论坛帖子作为输入 X*,然后策略必须生成帖子主要观点的摘要 Y*。
他们在这个实验中使用了Reddit TL;DR摘要数据集以及已经收集到的人类偏好。
同样地,首先对Reddit的回复进行监督微调,以学习生成摘要。然后,他们使用了Anthropic的包含17万个人与助手之间对话的有益和无害对话数据集来使模型与人类偏好保持一致。
DPO背后的数学
让我们看一些看起来吓人的方程式,并试着理解这里发生了什么。论文中指出,我们可以用“一个简单的分类损失”来替换RL。让我们看看他们是什么意思。
损失是衡量我们的模型在给定数据下表现如何的度量。最终,如果我们能最小化损失,我们就赢了,我们的模型正在正确地进行训练。
让我们从一个有赢家(W)和输家(L)的简化版本的方程式开始。
损失 = 赢家(W)- 输家(L)
在我们的情况下,赢家将是我们标记为👍积极的文本完成,输家将是我们标记为👎消极的文本完成。
y_w: 史上最好的电影,因为...👍
y_l: 我认为是我看过的最糟糕的漫威电影...👎
现在因为我们正在最小化损失函数,我们在它前面加了一个负号。
损失 = - {赢家(W)- 输家(L)}
现在上面的方程式看起来有点不同,但这正是它所做的。我知道我们有对数和beta和sigma和pi,但最终,我们试图让W的得分高,L的得分低。
从高层次来看,这是一个简单的二元交叉熵目标,类似于你在机器学习101中学习分类损失函数时学到的内容。
但是这些pi、y_s和x_s在这里是做什么的?
在这个表达式中,x
是提示,y_w
是完成,pi_theta
是语言模型。可以理解为在给定提示的情况下,获胜完成的概率。
x: 钢铁侠是...
👍y_w: 史上最好的(0.7)电影(0.9),因为(0.3)...
👎y_l: 我认为是我看过的最糟糕的(0.7)漫威(0.4)电影(0.15)...
在实践中,我们使用对数概率以保持数值稳定性,但我们可以将整个序列的概率看作是其所有部分的总和。
另一方面,我们有y_l
和在相同提示下给出的输家完成的概率。
希望你能看出我们要去哪里,基本上是赢家的概率减去输家的概率。
其他术语呢?
pi_theta
就是我们正在训练的语言模型。pi_ref
是我们已经学习过的预训练语言模型。
我们之所以除以“参考模型”,是为了确保你的DPO训练语言模型不会偏离原始模型的知识太远。预训练模型已经对世界学到了很多,我们不希望过度拟合只是偏好数据。
我们知道两个分布之间的漂移被称为KL散度。这个方程式使用KL散度,以便在给定输入x
的情况下,y_w
(赢家)的概率从原始语言模型中是高的,我们也希望它在新的语言模型中也是高的。
总的来说,我们有赢家完成的概率减去输家完成的概率。然后我们在分母中除以预训练参考语言模型的概率作为正则化。Beta和Sigmoid
只是用于数值稳定性的其他缩放因子。
现在我们更好地理解了损失方程式,完整的DPO流程相对简单。
- 从我们的参考语言模型中给定一个提示
x
,随机选择两个完成。 - 通过反向传播优化我们的新语言模型到
pi_theta
,以最小化我们的损失。
- 如果完成
y_w
的概率高于y_l
,模型会得到奖励。 - 如果W和L的完成接近预训练模型
pi_ref
的完成,模型会得到奖励。
结论
DPO以高效地增强SFT模型以更好地与特定偏好保持一致而闻名,这是对OpenAI的InstructGPT中引入的RLHF的一种替代方法。它在学术界的有效性,尤其是在资源有限的情况下,令人印象深刻。虽然最初在6B参数的模型上进行了测试,但DPO已成功应用于各种开源模型。然而,它在更大模型上的可扩展性和对分布外数据的泛化性仍然是开放的问题。目前的实验正在探索DPO在自我对弈场景中的潜力,即语言模型评估和改进其输出,但我们仍然需要进一步评估它以真正理解其影响。
参考文献
- https://arxiv.org/abs/2305.18290