大模型中的Actor-Critic机制
在大模型的语境中,Actor-Critic 指的是一种强化学习算法,它是训练模型(特别是通过基于人类反馈的强化学习 - RLHF)使其输出更符合人类偏好的核心技术之一。
简单来说,Actor-Critic 结合了两种方法的优点:
- 策略梯度方法 (Policy Gradient Methods - 对应 Actor):直接学习一个策略(Policy),告诉大模型在给定状态下(当前对话历史、提示)应该采取什么动作(生成哪个词/Token)。目标是最大化预期的累积奖励。
- 价值函数方法 (Value Function Methods - 对应 Critic):学习一个价值函数(Value Function),评估在给定状态下遵循当前策略所能获得的预期累积奖励有多好。它不直接告诉模型该做什么动作,而是评估当前状态或状态-动作对的价值。
在 Actor-Critic 框架中:
- Actor (演员/策略网络):
- 这就是被训练的大语言模型本身。
- 它的“策略”就是根据当前的上下文(对话历史、提示)预测下一个最可能出现的Token(单词或子词)的概率分布。
- 在训练过程中,Actor 负责生成文本(采取动作)。
- 目标是学习一个策略,使得生成的文本序列能获得尽可能高的奖励。
- Critic (评论家/价值网络):
- 这是一个独立的神经网络(通常比 Actor 模型小得多)。
- 它的任务是评估 Actor 当前策略的价值。
- 给定一个状态(通常是部分生成的文本序列),Critic 估计从该状态开始,按照 Actor 当前策略继续生成,最终能获得的总期望奖励是多少。这个估计值称为状态价值。
- 换句话说,Critic 告诉 Actor:“根据我(Critic)的评估,你现在所处的这个文本生成位置,按照你现在的写作风格(策略)继续写下去,大概能得多少分(总奖励)”。
Actor-Critic 如何协同工作(训练过程):
- Actor 生成样本: Actor 模型接收一个提示,并根据其当前策略(参数)生成一个完整的文本序列(例如一个回复)。
- 计算奖励: 将生成的文本序列输入到一个奖励模型。这个奖励模型通常是事先训练好的,其目标是模仿人类的偏好(例如,标注员认为哪个回复更好)。奖励模型给生成的序列输出一个标量奖励值,表示该序列的质量(符合人类偏好的程度)。
- Critic 进行评估:
- 在生成过程中(或生成后),Critic 被用来评估生成序列中各个中间状态的价值。
- 例如,Critic 会估计在生成了前 t 个 Token 后的状态
s_t
的价值V(s_t)
。
- 计算优势函数: 这是关键步骤。优势函数
A(s_t, a_t)
衡量在状态s_t
下采取动作a_t
(生成了某个Token)相对于在该状态下采取平均动作(按照当前策略)有多好。它通常近似计算为:
A(s_t, a_t) ≈ Q(s_t, a_t) - V(s_t)
其中Q(s_t, a_t)
是状态-动作价值(在s_t
下采取a_t
然后遵循策略的期望回报),但这很难直接计算。实践中常用时序差分误差 (TD Error) 来近似优势:
A(s_t, a_t) ≈ r_t + γ * V(s_{t+1}) - V(s_t)
r_t
:在s_t
采取a_t
后得到的即时奖励(可能只在序列结束时才有非零奖励,中间步骤奖励常为0)。γ
:折扣因子(未来奖励的衰减率)。V(s_{t+1})
:Critic 对下一个状态s_{t+1}
(生成了a_t
后的状态)的价值估计。V(s_t)
:Critic 对当前状态s_t
的价值估计。- 优势
A(s_t, a_t)
为正 意味着在s_t
生成a_t
比该状态下策略的平均水平更好,应该增加生成这个Token的概率。 - 优势
A(s_t, a_t)
为负 意味着生成a_t
比平均水平更差,应该降低其概率。
- 更新 Actor (策略梯度): 使用计算出的优势函数来更新 Actor 的参数。策略梯度定理表明,为了最大化期望回报,应该沿着以下梯度的方向更新策略:
∇θ J(θ) ≈ E[∇θ log π_θ(a_t | s_t) * A(s_t, a_t)]
θ
:Actor 策略的参数。π_θ(a_t | s_t)
:Actor 策略在状态s_t
下选择动作a_t
(生成某个Token)的概率。- 这个更新规则直观地看:如果一个动作 (
a_t
) 的优势 (A(s_t, a_t)
) 是正的(好于平均水平),就增加在状态s_t
下选择这个动作的概率(∇θ log π_θ(a_t | s_t)
指示了如何调整参数来增加这个概率)。如果优势是负的,就降低这个概率。优势的幅度决定了更新的步长。
- 更新 Critic (价值函数拟合): Critic 也需要被训练得更准确。通常使用均方误差损失来更新 Critic 的参数,使其对状态价值的预测
V(s_t)
尽可能接近实际观测到的回报(或基于观测回报和后续状态价值估计的目标值)。例如,最小化:
Loss = (V(s_t) - (r_t + γ * V_target(s_{t+1})))^2
V_target(s_{t+1})
可以是目标网络(一个较慢更新的 Critic 副本)的估计值,以提高稳定性。
- 迭代: 重复步骤 1-6,使用大量提示和生成样本来训练 Actor 和 Critic。随着 Critic 对价值的评估越来越准,它对 Actor 策略更新的指导也越来越有效;而 Actor 策略的改进又使得生成的数据分布发生变化,促使 Critic 学习评估新的状态。
为什么 Actor-Critic 在大模型 (RLHF) 中至关重要?
- 处理稀疏奖励: 在文本生成中,通常只有在整个序列生成完毕后才能得到一个奖励信号(比如回复是否有帮助)。Actor-Critic 中的 Critic 提供了中间步骤的评估(状态价值),通过优势函数将最终的、稀疏的奖励信号有效地传递回序列中的每一个生成步骤(Token)。这极大缓解了信用分配问题。
- 降低方差: 相比纯策略梯度方法(如 REINFORCE),Critic 提供的基线(
V(s_t)
)显著降低了策略梯度估计的方差,使训练更稳定、更高效。 - 引导策略改进: Critic 持续评估 Actor 策略的“价值”,为 Actor 提供了比单纯依靠最终奖励更丰富、更及时的反馈信号,指导策略朝获得更高期望回报的方向改进。
- 实现 PPO: RLHF 中最常用的算法 PPO (Proximal Policy Optimization) 就是一种非常成功的 Actor-Critic 算法。它通过引入重要性采样、裁剪等技巧,在保证 Actor 更新稳定性的同时,利用 Critic 计算的优势函数进行高效优化。
总结:
在大模型(特别是 RLHF)的背景下,Actor-Critic 是一种核心的强化学习框架:
- Actor 是被训练的大语言模型本身,负责根据策略生成文本。
- Critic 是一个辅助的价值网络,负责评估 Actor 在生成文本过程中各个中间状态的价值(预期总回报)。
- 优势函数(基于 Critic 的评估和实际奖励计算)是关键桥梁,它量化了在特定状态下生成某个 Token 相对于策略平均水平的优劣程度。
- Actor 根据优势函数的信号更新其策略(增加好动作的概率,减少坏动作的概率)。
- Critic 自身也不断更新,以更准确地预测状态价值。
这种 Actor 和 Critic 协同训练、相互促进的机制,使得大模型能够有效地利用来自奖励模型(代表人类偏好)的稀疏反馈信号,逐步学习生成更高质量、更符合人类期望的文本。PPO 作为 Actor-Critic 的成功代表,是当前 RLHF 流程中的标准工作组件。