关于大模型微调架构设计分析与混淆点辨析
关于大模型微调架构设计分析与混淆点辨析
大模型微调架构、PPO与RLHF的深入理解
大模型微调中PPO的四种结构
PPO在大模型微调中常涉及四个核心模型:
-
Actor Model(策略模型):被微调的目标模型,负责生成文本(动作)。
-
Reference Model(参考模型):通常是SFT阶段冻结的旧版模型,用于计算KL散度,约束Actor不要偏离原始策略太远,实现“近端”优化。
-
Reward Model(奖励模型):独立训练的模型,用于学习人类偏好,对生成文本打分,作为奖励信号。
-
Critic Model(价值模型):评估状态(输入)的长期价值,用于计算优势函数,辅助Actor更稳定地优化。
-
这些模型并非PPO算法本身固有,而是为了将PPO适配到大模型微调场景而设计的多模型协作架构。
在RLHF中使用同样的结构
- RLHF(Reinforcement Learning from Human Feedback,基于人类反馈的强化学习)是一种训练范式,其核心目标是让模型更符合人类偏好。主流RLHF流程(如ChatGPT、InstructGPT)中,PPO是最常用的强化学习优化算法。
在RLHF中,PPO用于第三阶段,即“强化学习微调”阶段。前两阶段分别是:
- 监督微调(SFT):用标注数据训练一个基础对话模型。
- 奖励模型训练:用人类偏好数据训练一个奖励模型。
第三阶段,即用PPO,结合奖励模型给出的分数,对Actor模型进行微调。此时,RLHF中的PPO微调架构就是上述四种模型协作的流程。
- 因此,在RLHF中看到的“四种结构”,其实是PPO在RLHF框架下的实现形式。PPO是RLHF流程的“算法内核”,而RLHF是整个训练框架。
PPO和RLHF的关系
-
PPO是一种强化学习优化算法,目标是高效、稳定地更新策略。
-
RLHF是一种训练范式,依赖人类反馈数据来指导模型学习,PPO是RLHF中的一种主流算法选择。
-
可以这样理解:RLHF = SFT + 奖励模型训练 + PPO(或其他RL算法)。PPO不是RLHF的必须算法,但因其稳定性、可解释性和高效性,成为OpenAI等公司采用的标准。近年也出现了DPO等替代算法,但PPO仍是主流。
困惑解答
困惑来源于“PPO算法本身”和“PPO在RLHF中的具体实现”的混淆:
-
PPO算法本身:是通用的强化学习算法,用于更新策略。
-
RLHF中的PPO架构:是大模型微调中为了适配PPO,专门设计的四模型协作流程。
-
RLHF中看到的“四种结构”,实际上是PPO在大模型微调场景下的工程实现,并非PPO算法本身。但业界已习惯将这套流程统称为“PPO微调”。
大模型微调架构的设计分析
奖励模型的设计
- 在大模型微调的场景中对比传统的强化学习需要一个奖励模型来完成普通强化学习中奖励值生成的机制。
参考模型的设计分析
- 大模型微调架构中要添加Reference Model是将强化学习应用于大语言模型时最关键的“创新”和“改造”之一。添加Reference Model是必须的,主要有以下两个核心原因:
原因一:防止“奖励黑客”(Reward Hacking)与模型崩溃
- 如果只有一个Actor模型和一个Reward Model。Actor的目标是最大化奖励。如果Reward Model有任何缺陷(比如它更喜欢长句子、或者某些特定词汇),Actor会不择手段地利用这些缺陷来获得高分,而完全不顾语言的流畅性、逻辑性和安全性。
- 例子:如果Reward Model发现包含“宇宙”这个词的回答得分更高,Actor可能会开始生成大量无意义但充满“宇宙”一词的文本。这被称为奖励黑客。
- 后果:最终,Actor模型可能会生成语法混乱、事实错误、甚至有害的内容,仅仅是为了“欺骗”Reward Model。这会导致模型性能的灾难性退化(Catastrophic Forgetting),忘记它在SFT阶段学到的所有基本语言能力。
Reference Model的作用就是“锚点”。它通常是SFT阶段得到的那个已经具备良好基础能力的模型。通过引入KL散度惩罚项 K L ( π R e f ∣ ∣ π A c t o r ) KL(\pi_{Ref} || \pi_{Actor}) KL(πRef∣∣πActor),我们告诉Actor:“你可以去探索,去最大化奖励,但你不能离你这个‘受过良好教育的自己’(Reference Model)太远。”
这个KL惩罚项极大地限制了Actor的“胡作非为”,确保它在优化奖励的同时,保留了原有的语言生成能力和知识,只是在风格、对齐和安全性上做得更好。
原因二:提供一个稳定、可计算的“基准策略”
在传统的PPO中,策略的“基准”是不断变化的旧策略。但在RLHF的场景下,我们希望有一个绝对稳定、永不改变的基准来衡量当前模型的偏离程度。
- 这个基准就是SFT模型,它代表了“一个没有经过RL优化,但已经具备良好对话能力的模型是什么样的”。
- 通过与这个固定的基准比较,我们可以精确地控制微调的强度。KL惩罚项的系数越大,Actor就越接近Reference Model,微调就越保守;系数越小,Actor就越自由地去追求奖励。
如果不用Reference Model,只用Actor自身的旧策略。训练会变得非常不稳定。因为每次更新后,“旧策略”都在变,KL约束的目标也在漂移。模型可能会在几次更新后,就彻底偏离了最初的良好状态,而且再也回不来了。
| 特性 | 传统PPO (如玩游戏) | 大模型微调中的PPO (RLHF) |
|---|---|---|
| Actor模型 | 1个 | 1个 (被微调的模型) |
| Critic模型 | 1个 | 1个 (评估状态价值) |
| 奖励信号 | 来自环境 (如游戏得分) | 来自Reward Model (学习人类偏好) |
| 参考模型 | 无 (用Actor的旧快照) | 有 (固定的SFT模型) |
| KL散度约束 | K L ( π o l d / π n e w ) KL(\pi_{old} / \pi_{new}) KL(πold/πnew),防止单次更新步子过大 | K L ( π R e f / π A c t o r ) KL(\pi_{Ref} /\pi_{Actor}) KL(πRef/πActor),防止模型偏离基础能力过远 |
| 核心目标 | 学习一个最优策略来最大化环境奖励 | 在不破坏基础能力的前提下,学习一个更符合人类偏好的策略 |
- 简单来说,添加Reference Model,是为了给强大的但“野性难驯”的LLM套上一个“缰绳”,确保它在追求更高奖励(更对齐人类偏好)的路上,不会跑偏,不会忘记自己“是谁”。
评估模型的设计分析和实际使用混淆点
Critic Model的由来
标准RLHF-PPO架构中,Critic Model是一个独立训练、独立存在的神经网络。它不是凭空产生的,也不是Actor或Reward Model变来的。它的来源和训练方式如下:
- 来源:Critic Model通常被设计为与Actor Model结构完全相同,但参数独立初始化。
- 训练:Critic Model的训练目标与我们之前讨论的普通PPO一样,即拟合价值函数 V ( s ) V(s) V(s)。在RLHF中,它的监督信号(即“真实价值”)通常由Reward Model提供。
具体来说,在每次更新时,Critic Model会做以下事情:
- 对于一个输入
s(即一个prompt),Critic Model预测一个价值 V c r i t i c ( s ) V_{critic}(s) Vcritic(s)。 - Actor Model基于这个prompt生成一个response
a。 - Reward Model对这个
(prompt, response)对打分,得到一个奖励 r r r。 - 这个奖励 r r r 就被当作是 Q ( s , a ) Q(s,a) Q(s,a) 的一个无偏估计。
- Critic的损失函数就是最小化其预测价值与这个奖励之间的差距,例如:
L c r i t i c = ( r − V c r i t i c ( s ) ) 2 L_{critic} = \left( r - V_{critic}(s) \right)^2 Lcritic=(r−Vcritic(s))2
(在实际实现中,可能会使用更复杂的TD-Target,但核心思想是让Critic的预测去对齐Reward Model的打分)。
- 所以,Critic Model是一个专门用来评估“状态(prompt)价值”的独立模型,它的“老师”是Reward Model。
模型微调没有Critic Model—— 两种主流架构
在大模型微调中应用PPO的两种核心架构:
架构一:Actor-Critic 架构(文章所述的标准架构)
- 组件:Actor, Critic, Reward Model, Reference Model。
- 工作流程:
- Actor生成response。
- Reward Model对response打分,得到奖励 r r r。
- Critic预测prompt的价值 V ( s ) V(s) V(s)。
- 使用奖励 r r r 和Critic的预测 V ( s ) V(s) V(s) 来计算优势函数 A ( s , a ) = r − V ( s ) A(s,a) = r - V(s) A(s,a)=r−V(s)。
- Actor使用这个优势函数来更新策略。
- 优点:理论上更“正确”,通过引入Critic降低了策略梯度的方差,训练可能更稳定。
- 缺点:需要额外训练和存储一个Critic模型,增加了计算和内存开销。
架构二:Actor-Only (或REINFORCE-style) 架构(你的实践)
- 组件:Actor, Reward Model, Reference Model。(没有独立的Critic)
- 工作流程:
- Actor生成response。
- Reward Model对response打分,得到奖励 r r r。
- 直接使用奖励 r r r 作为优势函数的估计。即,我们假设 A ( s , a ) ≈ r A(s,a) \approx r A(s,a)≈r。
- Actor使用这个奖励 r r r 来更新策略。
- 优点:
- 更简单:少了一个模型,实现和调试都更简单。
- 更节省资源:减少了计算和显存消耗,这在训练大模型时至关重要。
- 缺点:
- 方差更高:直接使用奖励 r r r 作为优势,没有基线来减去,会导致策略梯度的方差很大,训练可能不如Actor-Critic稳定。
为何Actor-Only架构在LLM微调中如此流行?
尽管有方差高的缺点,但Actor-Only架构(或其变体)在LLM领域非常普遍,主要原因如下:
- 计算成本是首要瓶颈:训练和存储一个与LLM同样大小的Critic模型,其成本是巨大的。对于资源有限的研究者和公司来说,去掉Critic是一个非常有吸引力的选择。
- 奖励模型本身就是强大的基线:在LLM任务中,Reward Model本身已经学习到了一个非常好的“价值评估”。直接使用它的输出作为优势信号,虽然方差大,但信号本身的质量很高。
- 工程上的简化:少一个模型就意味着少一个可能出错的环节,整个训练流程更容易控制和复现。
一个重要的变体:
- 在实践中,即使是Actor-Only架构,也常常会做一个简单的“基线”处理来降低方差。例如,在一个batch内,计算所有奖励的均值,然后用每个奖励减去这个均值:
A i = r i − mean ( r batch ) A_i = r_i - \text{mean}(r_{\text{batch}}) Ai=ri−mean(rbatch)
这是一种非常轻量级的方差缩减技术,不需要额外的Critic模型,但效果显著。
总结与对比
| 特性 | Actor-Critic 架构 (理论) | Actor-Only 架构 (实践) |
|---|---|---|
| 核心组件 | Actor, Critic, Reward, Ref | Actor, Reward, Ref |
| 优势函数来源 | A ( s , a ) = r − V c r i t i c ( s ) A(s,a) = r - V_{critic}(s) A(s,a)=r−Vcritic(s) | A ( s , a ) ≈ r A(s,a) \approx r A(s,a)≈r (或 r − batch_mean r - \text{batch\_mean} r−batch_mean) |
| Critic模型 | 有,独立训练,拟合 V ( s ) V(s) V(s) | 无 |
| 优点 | 理论更优,方差低,训练稳定 | 简单,计算和内存开销小 |
| 缺点 | 复杂,资源消耗大 | 方差高,训练可能不如前者稳定 |
| 适用场景 | 资源充足,追求训练稳定性的场景 | 资源受限,追求效率和简洁性的场景(更常见) |
其他问题
传统PPO中没有参考模型,如何计算KL散度?
传统的PPO算法本身并不强制要求一个独立的参考模型来计算KL散度。
在经典的PPO实现中,KL散度(或类似的策略约束)是在同一个Actor模型的两次迭代之间计算的。具体来说:
- 旧策略:在每次更新前,PPO会保存当前Actor模型的参数,我们称之为 π θ o l d \pi_{\theta_{old}} πθold。
- 新策略:通过采集数据、计算梯度,模型参数被更新为 θ n e w \theta_{new} θnew,形成新策略 π θ n e w \pi_{\theta_{new}} πθnew。
- KL散度计算:PPO的目标函数中包含一个惩罚项,用来限制新策略和旧策略之间的差异。这个差异就是用KL散度 K L ( π θ o l d ∣ ∣ π θ n e w ) KL(\pi_{\theta_{old}} || \pi_{\theta_{new}}) KL(πθold∣∣πθnew) 来衡量的。
关键点:这里的“旧策略”和“新策略”是同一个Actor模型在不同时间点的快照,而不是两个独立的、并行的模型。这种约束的目的是为了确保每次更新的步子不要迈得太大,从而保证训练的稳定性。这正是PPO名称中“Proximal”(近端)的由来。
- 小结: 传统PPO通过比较“过去的自己”和“现在的自己”来实现策略约束,它只需要一个Actor模型(在不同时间点扮演新旧角色)和一个Critic模型。
更多推荐

所有评论(0)