
LLMs后训练技术总结 原创
目前大部分算法的工作可能都属于LLM的后训练部分,本篇就结合个人实际工作经验来总结一下 post-training language models (PoLMs)的内容。
在开始前再补充说明一下,与后训练不同的另一个课题是预训练pre-training language models (PLMs),PLMs提供通用知识和能力,而 PoLMs 专注于将这些模型适应特定任务和需求。
这篇文总结参考自《A SURVEY ON POST-TRAINING OF LARGE LANGUAGE MODELS》,可以辅助大家快速对LLM后训练技术有一个全面关键的了解。
PoLMs 有一个比较清晰的发展历史,下面结合个人经验简单陈述一下:
- 2018-2021:当时模型量级还不算大,encoder-decoder架构更主流,工作中BERT,GPT,T5还有transformer的各种架构都在用,大家的重点偏向SFT,Pre-trained,当然也会用到CLIP这种偏向多模态的预训练模型。
- 2022-2023:这个时期ChatGPT引起了一波浪潮,大家开始把技术重点转向强化学习(RLHF)、多模态,这块的话因为对数据要求非常高,所以日常工作大多脱离不了洗数据。
- 2024: 这个时期LLM开始百花齐放了,DPO和Reasoning这块流行起来,然后MoE由于非常实用因此也是火起来了,另外大模型落地也需要RAG来减轻幻觉。
- 2025:今年来说研究重点更多的放在多模态和推理这块了。
下面的图可以比较清晰地看出LLMs后训练的发展历史。
后训练可以包括5个方面:
一、微调:提高任务准确性
二、对齐:确保与偏好对齐
三、推理:促进模型深度思考
四、效率:提高资源利用率
五、集成与适应:扩展到多模态,解决垂直领域问题
接下来针对这5个方面进行具体展开,虽然实际工作中有的算法工程师或者研究员的职业范围可能非常垂直,但这篇还是尽量全面地归纳出这篇综述中关键的内容,大家可以从中挑选需要查漏补缺的部分。
一、微调
微调可以分为三种:
- 有监督微调
- 自适应微调
- 强化学习微调
1. 有监督微调
有监督微调(Supervised Fine-Tuning, SFT)使用标注数据集来提高特定任务的准确性。
SFT的时候数据质量很关键,因此会做一些小型的消融实验或者建立一些数据集的评估指标(响应长度、奖励模型得分)等等来进行训练数据的抽样。
训练过程就不多赘述,可以结合算力、数据量、需要达到的kpi来选择全参数量微调或者部分参数微调,一般算法组内会有一些积累的trick可以互相学习。
2. 自适应微调
自适应微调(Adaptive Fine-tuning)可以通过构造指令数据集修改预训练模型的行为,引入了特定任务的指导,可以更好地满足特定需求并处理更广泛的任务。
指令微调(Instruction Tuning),前缀微调(Prefix-Tuning ),提示微调(Prompt-Tuning)都属于 Adaptive Fine-tuning。关于他们的区别之前也有介绍过,可以参考。
这里简单介绍一下:
- 指令微调(Instruction Tuning):通过在专门构建的指令数据集上对基础大语言模型(LLM)进行微调。
- 前缀微调(Prefix-Tuning ):需要在语言模型的每个 Transformer 层中添加一系列可训练的前缀标记(连续向量),同时保持核心模型参数不变进行微调。
- 提示微调(Prompt-Tuning):通过优化输入层的可训练向量而非修改模型内部参数进行微调。
3. 强化学习微调
这块属于比较新的领域,强化微调(Reinforcement Fine-Tuning, ReFT)把强化学习(RL)与监督微调(SFT)相结合,增强模型解决复杂动态问题。
传统的SFT是每个问题使用单个链式思维(CoT)注释,但ReFT会提供多个有效的推理路径,可以提高模型泛化能力和问题解决技能。
ReFT 过程分为了两个阶段。
- SFT 阶段:模型在训练数据上迭代,通过多个周期学习每个问题的正确 CoT 注释。
- ReFT 阶段:从 SFT 训练的模型开始,模型根据当前策略生成替代的 CoT 注释 (𝑒′) ,并将其预测的答案 (𝑦′) 与真实答案 (𝑦) 进行比较。正确答案会获得正向奖励,错误答案则受到负向奖励,这促使模型提高性能。
跟SFT相比,ReFT可以在不增加或增强训练数据的情况下实现改进,还是很值得去做的。
二、对齐
对齐主要分为三类:
- 基于人类反馈的强化学习
- 基于AI反馈的强化学习
- 直接偏好优化
1. 基于人类反馈的强化学习
基于人类反馈的强化学习(Reinforcement Learning from Human Feedback, RLHF)使用人工标注的数据作为奖励信号来学习。
跟SFT不同的是,SFT中标注数据的多样性和质量可能参差不齐,且监督模型捕捉更细微或适应性更强的人类偏好的能力比较有限,因此RLHF可以弥补这一点。
RLHF首先收集以偏好标签或奖励信号形式的人类反馈,然后利用这些信息训练奖励模型。在奖励模型的引导下,策略通过迭代调整以更好地匹配人类偏好。与SFT相比,RLHF融入了连续的、偏好驱动的更新,从而实现更强的对齐效果。
那么这里再具体说一下RLHF的主要组成部分:反馈机制、奖励模型及策略学习策略。
1)反馈机制
反馈机制指如何向奖励模型传达用户偏好。包括下面三类:
- 主要反馈:这种反馈最直接塑造RLHF中奖励模型。
包括批评(Critique)对输出进行显式人类评估,比较(Comparisons)评估多个输出或轨迹,时间反馈(Inter-Temporal Feedback)在不同时间步长提供判断来细化轨迹评估,代理奖励(Proxy Rewards)比较像奖励函数,引导模型朝向用户定义的目标,社会行为(Social Behavior)利用隐含线索(如面部表情)来使代理目标与用户情感对齐,改进(Improvements)强调实时人类干预以逐步完善策略。
- 补充反馈:这种反馈因上下文而异,作为补充输入,加强奖励模型的整体学习过程。
包括紧急停止(Emergency stops, e-stops)允许人类在代理行为中进行干预,通过停止其轨迹而不提供替代方案来防止不良行为;重要性标签(Importance labels)指示特定观察对于实现目标的重要性,提供不直接改变行为的显式反馈。
- 表示特定反馈:这种反馈主要增强表示学习,不直接塑造奖励函数;可以实现对新任务和上下文的更鲁棒泛化。
包括特征轨迹(Feature Traces)提示人类操作员展示给定特征的单调变化,从而实现特征集的动态扩展。相似性查询(Similarity Queries)比较轨迹的三元组,通过轨迹空间中的成对距离引导表示学习。
2)奖励模型
真正的奖励函数 𝑟(𝑥,𝑦) 通常是未知的,因此需要基于人类提供的偏好构建一个可学习的奖励模型 𝑟𝜃(𝑥,𝑦) 。
该模型预测候选输出 𝑦 在给定输入 𝑥 下与人类期望的一致程度。为了获得训练数据来训练 𝑟𝜃(𝑥,𝑦) ,人类评估者根据输出对的相对适宜性进行比较或标注,模型通常使用这些比较上的交叉熵损失进行训练。
为了防止策略 𝜋 过度偏离初始模型 𝜌 ,引入了一个由超参数 𝛽 控制的惩罚项到奖励函数中:
其中 𝜋(𝑦∣𝑥) 是微调后的策略 𝜋 在给定输入 𝑥 时生成输出 𝑦 的概率,而 𝜌(𝑦∣𝑥) 是在初始模型 𝜌 下相应的概率。这一项确保了在 𝜋 适应人类反馈的同时,仍受到 𝜌 中捕获的先验知识的约束。
评估奖励函数 𝑟𝜃(𝑥,𝑦) 非常重要,它直接影响学习效果和策略性能。
3)策略学习
包括在线学习、离线学习以及在线和离线融合的学习,这里就不多赘述了。
2. AI反馈的强化学习
人工智能反馈(Reinforcement Learning with AI Feedback, RLAIF)和RLHF的关键区别在于RLHF依赖于人工生成的偏好,而RLAIF使用人工智能生成的反馈来引导策略更新。RLAIF 的主要优势在于其能够在不需持续人类干预的情况下扩展反馈循环。
除了是AI收集反馈,其他基本和RLHF一样。AI 系统根据预定义的标准生成反馈,这些标准可能包括特定任务的指标、响应的正确性或模型输出的适当性。与需要解释和手动标注的人类反馈不同,AI 反馈可以在广泛的模型输出中一致生成。
这一特性使得 AI 反馈可以持续提供,显著扩展了反馈循环,但利用 AI 生成的标签,可能会引入一致性问题和偏见。
3. 直接偏好优化
RLHF 可能会变得复杂且不稳定,特别是在拟合奖励模型并用于微调大型语言模型的阶段。其难点在于创建一个能够准确反映人类偏好的奖励模型,以及在优化这一估计奖励的同时,使语言模型的通用效果保持接近原始模型的状态。
直接偏好优化(Direct Preference Optimization, DPO)通过直接从偏好数据中学习策略,避免了显式的奖励建模。可以更稳定且计算效率更高,从而缓解上面的问题。
1)DPO的目标
给定一组偏好三元组 (𝑥,𝑦𝑤,𝑦𝑙) ,其中 𝑦𝑤 是首选输出, 𝑦𝑙 是次选输出,对于提示 𝑥 ,DPO最大化观察到的偏好的似然。形式上,DPO采用以下目标函数:
其中 𝜎(⋅) 是sigmoid函数, 𝛽 log𝜋𝜃(𝑦|𝑥) / 𝜋ref(𝑦|𝑥) 表示 𝜋𝜃 和参考策略 𝜋ref 之间的重参数化奖励差异。
通过最大化 𝐿DPO,策略 𝜋𝜃 在不需单独奖励模型的情况下与人类偏好对齐。
由于DPO目标继承了来自RLHF的KL正则化公式,它保留了重要的理论保证——例如,在明确定义的偏好假设下的一致性,同时将训练过程统一为一个阶段。
因此,DPO为使语言模型与人类评估对齐提供了更直接的路径,减少了系统复杂性并提高了训练稳定性。
目标策略通过一系列旨在最小化损失 𝐿DPO 的梯度更新进行精炼。
具体步骤如下:
- step1-生成: 𝜋ref 为每个提示 𝑥 生成候选输出。
- step2-标注:人类标注者比较生成的输出,确定它们的相对偏好。
- step3-优化:利用这些成对偏好, 𝜋tar 进行迭代更新,以更好地模仿人类偏好的输出。
在整个过程中, 𝜋ref 保持不变,提供一个稳定的基线,以便衡量改进。
2)DPO训练细节
DPO框架建立在两个核心模型之上:参考策略 𝜋ref 和目标策略 𝜋tar 。
参考策略𝜋ref 通常是一个预先训练并经过监督微调的语言模型,在整个训练过程中保持不变;而目标策略𝜋tar从 𝜋ref 初始化,并通过基于偏好的反馈进行迭代更新,从而提高与人类判断的一致性。
下面是DPO的整体流程。
3)DPO的变体
目前DPO的变体已经出现很多了,范围从词元级生成优化到控制冗长性和处理列表或负面偏好都有覆盖。
- DPO for Optimizing Generation
这一类型的变体可以更精细地或连续地与人类偏好对齐。包括,
词元级DPO 采用了由 (𝑆,𝐴,𝑓,𝑟,𝜌0) 定义的马尔可夫决策过程(Markov Decision Process, MDP)。这种方法缓解了诸如对不受欢迎的词元产生过高的KL散度等问题。
迭代DPO 采用多轮方法,通过重复的偏好评估不断优化输出,通常由模型本身执行。成对厌恶优化(Pairwise Cringe Optimization, PCO) 将二元反馈扩展到成对设置,使用软边界来平衡探索和利用。
逐步DPO (Step-wise DPO) 将偏好数据集划分为多个部分,并应用迭代更新,每一轮更新后的策略作为下一轮的基线。
- Controllable and Flexible DPO
这一类型的DPO可以管理冗长性并减少对固定参考策略的需求。包括,
R-DPO 通过在目标函数中引入正则化项来惩罚输出长度,解决了过于冗长或冗余的响应问题。
SimPO 通过规范化响应长度并简化损失函数来处理期望和不期望的输出,消除了对参考策略的需求。
RLOO 利用REINFORCE算法而无需训练价值模型,大幅减少了计算开销。它将整个响应视为单个动作,并从稀疏奖励中学习,相比传统的基于PPO的方法简化了实现。
- Listwise DPO
这一类型直接在在一组输出上进行优化。包括,
列表偏好优化(Listwise Preference Optimization, LiPO) 直接在候选响应的排名列表上应用排序学习技术,相对于重复的成对比较提高了效率。
RRHF 将偏好对齐整合到SFT中,消除了对单独参考模型的需求。PRO 将列表偏好分解为更简单的二元任务,简化了SFT期间的对齐。
- Negative DPO
这一类型需要从不期望或有害的输出中学习。 包括,
否定负例(Negating Negatives, NN) 丢弃积极响应并最大化与较少偏好的输出之间的差异。
负面偏好优化(Negative Preference Optimization, NPO) 对负面偏好应用梯度上升,减少有害输出并缓解灾难性崩溃
本篇就先讲微调和对齐这两块的内容,之所以放到一起讲,其实是也是想说明和强调一下,这两块部分可以使LLM便于适配任何特定任务,但这些方法其实都是锦上添花的,这两块真正关键的还是在于数据。
相比于在日常工作中可能随时迸发出灵感的“算法优化”,数据有更多需要关注的部分:数据配比,数据采样策略,数据构造,数据多样性生成等等,有机会的话数据这块也可以单独分享一些trick。
参考文献
[1] A SURVEY ON POST-TRAINING OF LARGE LANGUAGE MODELS
[2] 六万字长文一次性说清 LLM 的后训练技术 - 知乎(https://zhuanlan.zhihu.com/p/49358536242?share_code=1rjaEElW0LSBf&utm_psn=1928046847659864872)
本文转载自瓦力算法学研所,作者:喜欢瓦力的卷卷
