Fine-Tuning Generation Models
FoundModel——LLM训练三步走:预训练、监督微调和偏好
要创建高质量的 LLM,第一步是在一个或多个大规模文本数据集上对模型进行预训练
(见图 12-1)。在训练过程中,模型尝试预测下一个词元,以准确学习文本中的语言和语
义表示。
这一步会生成一个基座模型,通常也称为预训练模型或基础模型。基座模型是训练过程的
关键产物,但对最终用户来说较难直接使用。
在语言建模过程中,LLM 旨在根据输入预测下一个词元。这是一个无数据标注的过程
通过监督微调(SFT),我们可以使基座模型学会遵循指令。在微调过程中,基座模型的参数会更新,以更好地适应目标任务,比如遵循指令。与预训练模型类似,它使用下一个词元的预测任务进行训练,但不是仅预测已有文章中的下一个词元,而是基于用户输入,预测应该回复的下一个词元
在监督微调过程中,LLM 旨在根据带附加标签的输入预测下一个词元。从某种意义上说,标签就是用户的输入
第二次微调的目的是进一步提高模型质量,使其更符合 AI 安全或人类偏好的预期行为。这称为偏好调优。
偏好调优是微调的一种形式,顾名思义,它引导模型输出与我们的偏好保持一致,而偏好由我们提供的数据定义。与监督微调一样,偏好调优可以改进原始模型。此外,它还具有在训练过程中提炼输出偏好的优势。
PreTrain——监督微调supervised fine-tuning()
全量微调
最常见的微调方式是全量微调。与预训练 LLM 类似,全量微调过程涉及更新模型的所有参数,使其符合目标任务的要求。
二者的主要区别在于,全量微调使用的是较小但已标注的数据集,而预训练是在没有任何标注的大型数据集上完成的
你可以使用任何标注数据进行全量微调,这种灵活性使其成为学习领域特定表示的绝佳技术。为了让 LLM 遵循指令,我们需要问答数据,这是一种指令数据。如图 12-7 所示,指令数据包含用户的指令和相应的答案。
在全量微调期间,模型接收输入(指令)并对输出(回复)进行下一个词元预测。这样,模型就不会生成新的问题,而是会遵循指令。
参数高效微调(parameter-efficient fine-tuning,PEFT)
1.适配器
适 配 器(adapter) 是 许 多 基 于 PEFT 的 技 术 的 核 心 组 件。
使 用 适 配 器 的 方 案 是, 在Transformer 内部引入一组额外的模块化组件,通过微调这些组件来提升模型在特定任务上的性能,而无须微调模型的所有权重。这节省了大量时间和计算资源。
适配器是在论文“Parameter-Efficient Transfer Learning for NLP”中提出的。该论文表明, 仅微调 BERT 模型的 3.6% 的参数即可在特定任务上取得与微调全部模型权重相当的性能。 (这些参数通过适配器模块添加,并基于原始 BERT 模型进行了压缩处理。)
然而,仅仅改变一个 Transformer 块是不够的,事实上,这些适配器被添加到了模型的每 个 Transformer 块中
2. 低秩适配(low-rank adaptation,LoRA)
作为适配器的替代方案,低秩适配(low-rank adaptation,LoRA)被引入。
当前,LoRA 是一种应用广泛且有效的参数高效微调技术。与适配器类似,LoRA 也只需要更新少量参数。
它创建了基座模型的一个小型子集来进行微调,而没有向模型添加新层。
在训练过程中,我们只需要更新这些较小的矩阵,而无须对全部权重进行更新。然后,将更新后的变化矩阵(较小的矩阵)与冻结的全部权重组合在一起
你可能会怀疑,使用适配器或 LoRA 方法会导致性能下降。确实如此。那么这种效率与性能的权衡在什么情况下是有意义的呢?
例如,像 GPT-3 这样具有 1750 亿个参数的模型,在其 96 个 Transformer 块中,每一个 Transformer 块的内部都有一个 12 288×12 288 的权重矩阵,这意味着每个 Transformer 块有 1.5 亿个参数。如果我们能成功地将该矩阵适配到秩为 8,那么每个块只需要两个 12 288×8 的权重矩阵,也就是 9.8 万个参数。
这种低秩表示具有非常大的灵活性,它允许我们选择基座模型的特定部分进行微调。例如,我们可以只微调每个 Transformer 块中的查询(query)权重矩阵和值(value)权重矩阵。
3. 压缩模型以实现(更)高效的训练(QLoRA)
我们可以通过降低模型原始权重的内存需求来进一步提升 LoRA 的效率,然后将这些权重投影到较小的矩阵。LLM 的权重是具有特定精度的数值,可以用 float64 或 float32 等位数来表示。
当直接将高精度值映射为低精度值时,多个高精度值可能被映射为相同的低精度值.
QLoRA(LoRA 的量化版本)的作者发现了一种方法,可以在高位数精度和低位数精度之间进行转换,同时不会与原始权重产生太大差异
QLoRA 使用分块量化的方法将某些高精度值块映射为低精度值。QLoRA 并不是直接将高精度值映射为低精度值,而是创建额外的块来量化相似的权重。
神经网络的一个良好特性是其值通常在-1 和 1 之间呈正态分布。
这个特性允许我们根据权重的相对密度将原始权重分配到较低的位数。
结合分块量化,这种标准化过程能够实现用低精度值准确地表示高精度值,同时 LLM 的性能只会略微降低。
我们可以从 16 位浮点数表示转换到仅需 4 位标准化浮点数表示。4 位标准化浮点数表示显著降低了 LLM 在训练过程中的内存需求。请注意,LLM 的量化通常对推理也很有帮助,因为量化后的 LLM 体积更小,所以需要的显存更少。
还有一些更优雅的方法可以进一步优化这一过程,比如双重量化和分页优化器。你可以在前面提到的关于 QLoRA 的论文“QLoRA: Efficient Finetuning of Quantized LLMs”中了解更多的相关内容。
4. 实现Practice
PostTrain——偏好Preference tuning(RL)
那么,究竟如何将我们(人类)对一个答案优于另一个答案的偏好与 LLM 的输出对齐呢?
我们可以让一个人(偏好评估者)评估模型生成内容的质量。假设他给出一个特定分数
如果分数较高,就更新模型,以鼓励它产生更多这类生成内容。
如果分数较低,就更新模型,以抑制它产生这类生成内容。
和之前一样,我们需要大量训练样本。那么我们能否实现偏好评估自动化呢?是的,我们可以通过训练一个叫作奖励模型(reward model)的模型来实现。
Reward Function
奖励模型的预期工作方式是,我们给它一个提示词和一个生成内容,它会输出一个单一的数值,表示该生成内容对于该提示词的偏好 / 质量。
我们不能直接使用奖励模型。奖励模型需要先经过训练才能正确地对生成内容进行评分。因此,我们需要获取一个模型可以学习的偏好数据集。
奖励模型训练数据集
偏好训练数据集的一种常见形式是,每个训练样本都包含一个提示词,以及一个被接受的生成内容和一个被拒绝的生成内容
注意,这并不总是“好”与“差”的对比,有时两个生成内容都很好,只是一个比另一个更好
生成偏好数据的一种方法是向 LLM 提供一个提示词,让它生成两个不同的结果。我们可以请人工标注员选择他们更偏好哪一个。
奖励模型训练步骤
有了偏好训练数据集之后,我们就可以开始训练奖励模型了。
一个简单的步骤是,我们使用奖励模型进行以下操作。 对被接受的生成内容评分,对被拒绝的生成内容评分。
训练目标是确保被接受的生成内容的得分高于被拒绝的生成内容的得分
将上述步骤组合在一起,就得到了偏好调优的三个阶段。 1)收集偏好数据。 2)训练奖励模型。 3)微调 LLM(奖励模型作为偏好评估器)。
近端策略优化(PPO)
奖励模型是一个很好的想法,可以进一步扩展和完善。
例如,Llama 2 训练了两个奖励模型:一个用于对有用性(helpfulness)评分,另一个用于对安全性(safety)评分
使用训练好的奖励模型来微调 LLM 的一种常用方法是近端策略优化
PPO 是一种流行的强化学习技术,通过确保 LLM 不会过度偏离预期奖励来优化经过指令微调的 LLM
训练无奖励模型(DPO)
PPO 的一个缺点是至少需要训练两个模型——奖励模型和 LLM,这导致它的成本可能比实际所需的成本高。
直接偏好优化(direct preference optimization,DPO)
是 PPO 的一种替代方案,它摒弃了基于强化学习的训练过程
DPO 不再使用奖励模型来评判生成内容的质量,而是让 LLM 自己来完成这项工作。
我们使用 LLM 的一个副本作为参考模型,评判参考模型和可训练模型在被接受的生成内容和被拒绝的生成内容的质量方面的偏移。
通过在训练过程中计算这种偏移,我们可以通过跟踪参考模型和可训练模型之间的差异来优化被接受的生成内容相对于被拒绝的生成内容的似然概率。
为了计算这种偏移及其相关分数,我们需要从两个模型中提取被拒绝的生成内容和被接受的生成内容的对数概率。
这个过程是在词元级别进行的,其中概率被组合起来,以计算参考模型和可训练模型之间的偏移。
我们可以使用这些分数优化可训练模型的参数,使其在生成被接受的内容时更有信心,在生成被拒绝的内容时更缺乏信心。与 PPO 相比,DPO 在训练过程中更加稳定,准确度也更高。由于 DPO 的稳定性,我们将使用它对先前经过指令微调的模型进行偏好调优。
SFT 和 DPO 相结合是一个很好的方法,可以先对模型进行微调以实现基本对话功能,然 后根据人类偏好来调整其回答。但是,这也需要付出代价,因为我们需要执行两轮训练, 并且可能需要在两个过程中调整参数。
自 DPO 发布以来,新的偏好对齐方法也不断出现。值得注意的是优势比偏好优化(odds ratio preference optimization,ORPO),它将 SFT 和 DPO 合并为一个训练过程 23 。ORPO 不 需要执行两轮训练,在允许使用 QLoRA 的同时,进一步简化了训练过程。
Reference
图解大模型
Last updated