强化学习中的两个重要函数
动作价值函数 Qπ(s,a) 衡量的是在给定策略 π 下,智能体从状态 s 开始,并采取特定动作 a 后,预期能获得的累积折扣奖励(Expected Discounted Return)。(如果我在状态 s 选择了动作 a,然后从下一步开始严格遵循策略 π,我预期能获得多少总回报?)
状态价值函数与动作价值函数的关系:
-
状态价值函数 Vπ(s) 是在状态 s 下,所有可能动作的 Q 值的加权平均,权重是策略 π 选择这些动作的概率,是 Qπ(s,a) 的期望。即, 一个状态的价值 Vπ(s) 等于你在这个状态下,根据策略 π 选择所有动作的平均价值。
-
Qπ(s,a) 可以用 Vπ 来递归定义,这是 Q 函数的贝尔曼方程(Bellman Equation)的核心:
Qπ(s,a)=E[Rt+1+γVπ(St+1)∣St=s,At=a]
即,在状态 s 采取动作 a 的价值 Qπ(s,a),等于即时奖励 R{t+1} 加上下一个状态 S{t+1} 的折扣价值 γVπ(St+1)。
Vanilla Policy Gradient
策略梯度是强化学习中最基础的一类方法,它直接学习和优化策略 πθ。
训练
- 在第 i 次训练迭代中,算法使用上一次迭代得到的当前策略网络 θi−1。这个策略 πθi−1 被用来与环境进行交互,通常是进行一整条轨迹(episode)的采样,或者采样固定数量的步骤 N。
- 每一步的动作选择: 在环境的每一步中,策略网络 πθi−1 接收当前的状态 st 作为输入,然后根据其当前的策略 πθi−1(a∣st) 来采样或选择1一个作 at。
- 执行与记录: 选定的动作 at 被送给环境执行。环境返回一个新的状态 st+1 和一个奖励 rt。这一步的状态-动作对 (st,at) 以及后续计算所需的奖励(如,优势函数)被记录下来。最终得到的数据集即为 {s1,a1 }, {s2,a2 },…, {sN,aN }。
- 计算目标函数,利用梯度上升策略最大化目标函数 J(θ)⟺LPG(θ),调整策略参数 θ,使得在状态 st 下选择更优的行动 at 的概率更大,从而提高整体的累积奖励。
θ←θ+η∇LPG
策略梯度定理
强化学习的最原始的目标是希望一个策略平均来看能够带来更大的总回报,即最大化策略 πθ 下的累积奖励的期望值,也等价于起始状态 s0 在策略 πθ 下的状态价值函数 Vπθ(s0)
J(θ)=Vπθ(s0)=Eπθ[t=0∑Tγtrt]:=Eτ~Pθ(τ)[G(τ)]
(上式我们用 G(τ) 表示轨迹 τ 下的累积奖励 t=0∑Tγtrt)
πθ 会产生无数个发生概率各不相同的轨迹 τ(概率分布记为 Pθ(τ)),在不同轨迹下的累积奖励 G(τ) 也不同,因此 J(θ) 是一个非常复杂的期望值。虽然难以计算,但我们可以用大数定律(蒙特卡洛方法)无偏地近似这个期望。
理论上我们求 ∇J(θ) 并应用梯度上升策略就可以实现最大化这个目标函数,
∇J(θ)=∇τ∑Pθ(τ)G(τ)=τ∑∇Pθ(τ)G(τ)
但问题在于,一条完整轨迹 τ 的概率 Pθ(τ) 是每一步环境转移概率 P(st+1∣st,,at) 和智能体动作选择概率 πθ(at∣st) 的连乘
Pθ(τ)=P(s0)t=0∏TP(st+1∣st,,at)πθ(at∣st)
由于表达式中含有未知的环境转移概率,因此即便我们解析地写出 Pθ(τ) 的完整形式,也因为连乘导致导数解析式中含环境转移概率,由于不知道环境转移概率,导致导数值不确定。即, ∇Pθ(τ) 是不可计算的。
为了巧妙避开环境转移概率及其导数,我们注意到,如果我们把 Pθ(τ) 改写成 logPθ(τ) 的形式,就可以把连乘变成加法。由于环境转移概率与 θ 无关,这样它们就会从导数表达式中消失。
又注意到 ∇logP=∂θ∂logP=∂P∂logP∂θ∂P=P∇P,我们得到了
∇P(τ;θ)=P(τ;θ)P(τ;θ)∇P(τ;θ)=P(τ;θ)∇logP(τ;θ)
恰巧地把 ∇J(θ) 写成了一个期望的形式
∇J(θ)=Eτ~Pθ(τ)[∇logPθ(τ)G(τ)]
轨迹概率可以逐步拆开为单步的形式
∇=Eτ~Pθ(τ)[(t=0∑T∇logπθ(at∣st))G(τ)]
而同时,考虑到因果性(Causality),虽然 G(τ) 是整条轨迹的回报,但我们知道在时间步 t 采取的动作 at,只能影响其之后的奖励,而不能影响其之前的奖励。因此,对于在时间步 t 发生的事件 (st,at) 来说,我们只需要考虑从 t 时刻开始的未来回报,即累积奖励 Gt 即可。
∇=Eτ~Pθ(τ)[t=0∑T∇logπθ(at∣st)Gt]
这样我们巧妙避开了环境转移概率及其导数。我们终于可以用大数定律(蒙特卡洛方法)无偏地近似这个期望,从而求得 ∇J(θ) 的估计值了。
我们发现这个表达式其实正好是另一个函数的梯度
LPG(θ)=Eτ[logπθ(at∣st)Gt]
因此,在实际实现中,我们优化的目标函数就是它了。我们通过最大化这个目标函数来间接地最大化原始的累积奖励期望 J(θ)。
上面的推导过程又称为策略梯度定理(Policy Gradient Theorem)。
优势函数
即使使用 Gt,蒙特卡洛估计的方差仍然非常大。这是因为 Gt 随每一次采样的轨迹而剧烈变化。高方差意味着训练不稳定,收敛速度慢。
因为对于任何不依赖于动作 at 的函数 b(st),以下恒等式成立:
Eπθ[∇logπθ(at∣st)b(st)]=0
这表明在梯度中减去 b(st) 不会改变梯度的期望(保持无偏性)。
为了降低方差,我们可以在不改变期望梯度 ∇J(θ) 的前提下,引入一个基线函数 b(st),并将权重 Gt 替换为 Gt−b(st),移除 Gt 中与动作选择无关、只与状态本身有关的随机波动。
理论上,能最大限度降低方差的最优基线就是状态价值函数 Vπθ(st)。【推导很复杂】
Vπθ(st) 代表在状态 st 下,智能体平均能获得的长期回报。所以将 Gt 替换为 (Gt−Vπθ(st))。
总结:目标函数
因此,目标函数为
maximize LPG(θ)=Et[logπθ(at∣st)A^t]
其中
A^t=Gt−b
Gt=k=0∑T−tγkrt+k
- A^t 是优势函数(Advantage function),它告诉我们在状态 st 下采取行动 at 比平均行动好多少。
- 优势函数中,Gt 是实际观测到的当前时刻直到回合结束的累积奖励,由未来每个状态 st 下采取行动 at 得到的逐状态奖励 rt和一个折扣因子 γ<1 组成,评估未来可能获得的总体回报。过去的奖励是不可改变的历史,与我们现在决策的价值无关。折扣因子的存在,则确保了即时奖励比遥远的未来奖励价值更大「现在比未来更有价值」。
- b 是一个基线(baseline),通常取 Gt 的平均值或其他估计值。这样当优势函数为正时,可以认为该行动比平均行动好,最大化目标函数;反之则是最小化目标函数。引入基线的目的是降低梯度估计的方差,从而让训练更稳定。
Importance Sampling
On/off-policy 与重要性采样
On-policy 表示学习的智能体与和环境交互的智能体是同一个。
Off-policy 表示学习采取行动的智能体和与环境交互的智能体是不同的。
On-policy 方法的数据利用效率低。主要原因是其数据的“新鲜度”要求极高且不可复用。
- 在 On-policy 学习中,用于更新策略 π 的数据,必须是由当前策略 π 自身与环境互动所采集的。策略更新后,数据即刻作废(Staleness),每进行一次策略 π 的更新,旧策略 πold 采集到的数据就不能再用于训练新策略 πnew。因为如果继续使用,就会违背“更新策略 π 的数据,必须是由当前策略 π 自身采集”的原则,导致训练的目标和实际数据的分布不一致,从而可能引起偏差(Bias)或高方差(High Variance),甚至使训练不稳定。
- 对于策略 π 与环境互动所采集的数据,在强化学习中,通常是指完整的轨迹(Trajectory)(s1,a1,r1,s2,a2,r2,…,sN,aN,rN)。在基于梯度(如策略梯度)的方法中,这些数据用于计算策略梯度 ∇J(θ) 的期望
- 上面的环境交互通常是强化学习中最耗时的部分,每次更新都需要重新进行大量采样,导致总训练时间很长。
为了用旧策略 πθold(行为策略)的数据来计算新策略 πθ(目标策略)下的期望,我们引入重要性采样。
重要性采样是一种统计学工具,其核心作用是允许我们使用一个不同的概率分布(Off-policy)来估计目标概率分布(On-policy)下的期望值。
假设我们有两个概率分布 p(x) 和 q(x),我们想要计算在分布 p(x) 下的某个函数 f(x) 的期望值 Ep[f(x)]。如果直接从 p(x) 采样困难,我们可以从另一个更容易采样的分布 q(x) 进行采样,并通过调整权重来获得正确的期望值:
Ep[f(x)]=∫f(x)p(x)dx=∫f(x)q(x)p(x)q(x)dx=Eq[f(x)q(x)p(x)]
其中 ρ(x)=q(x)p(x) 被称为重要性权重(Importance Weight)。
Off-policy 应用: 我们因此可以引入两个分布:
- 目标分布 p: 是当前要优化的策略 πθ(Target Policy)。
- 采样分布 q: 是用于收集数据的策略 b(Behavior Policy)。
通过重要性采样,我们可以用由行为策略 b 采集的数据(Off-policy 数据)来估计目标策略 πθ 的期望,从而实现 Off-policy 学习。
Off-policy 的策略梯度估计
在 off-policy 学习中,我们从与正在优化的策略不同的其他策略中采样轨迹。像近端策略优化算法(PPO)和广义近端策略优化算法(GRPO)等流行的 PG 的 off-policy 变体,会使用来自 πold 的轨迹来优化当前策略。Off-policy 的策略梯度估计是
g^off-policy=N1i=1∑Nt=0∑Tπθold(at(i)∣st(i))πθ(at(i)∣st(i))∇θlogπθ(at(i)∣st(i))R(τ(i))
这看起来像是 Vanilla PG 的重要性采样版本。
TRPO, PPO
从 Off-policy 的策略梯度估计出发,我们可以构造新的目标函数,使得其导数即为这个公式。
TRPO 给出了一种构造方式
maximizeθE^τ[πθold(at∣st)πθ(at∣st)A^t]
subject to E^τ[KL(πθ(⋅∣st)∥πθold(⋅∣st))]⩽δ.
然而,TRPO 虽然有理论上的单调改进保证,但其带硬性约束的优化问题计算复杂(需要二阶近似、共轭梯度和线性搜索等)。
PPO(Proximal Policy Optimization,近端策略优化)旨在保留 TRPO 限制策略更新幅度的优点,同时大大简化优化过程。
PPO 通过修改目标函数,将 TRPO 的硬性 KL 约束替换为一种软性约束 (PPO-KL) 或截断机制 (PPO-Clip, 最常用),使其可以使用标准的一阶优化方法(如 SGD 或 Adam)进行优化。
-
PPO-Clip:引入了一个截断函数,将概率比率 πθold(a∣s)πθ(a∣s) 限制在一个范围 [1−ϵ,1+ϵ] 内。
LCLIP(θ)=E^τ[min(rt(θ)A^t,clip{rt(θ)}A^t)]
其中 rt(θ)=πθold(at∣st)πθ(at∣st).
-
PPO-KL / PPO-adaptive Penalty:更直接地模仿 TRPO 的 KL 散度约束,但将其作为目标函数中的惩罚项而不是硬性约束。
LKL(θ)=Es,a∼πθold[rt(θ)At−βDKL(πθold(⋅∣s)∣∣πθ(⋅∣s))]
其中β 是一个自适应的惩罚系数。如果新旧策略的平均 KL 散度 DˉKL 大于目标 KL 阈值 dtarget,则增大 β 以更严格地惩罚策略变化。
GRPO
GRPO 是一个更通用的策略优化框架,它推广了 TRPO 和 PPO。它允许使用各种不同的距离度量(不限于 KL 散度)来定义新旧策略之间的信任区域,并提供了一种统一的、可扩展的方法来计算其梯度和更新。关于 GRPO 的介绍,可以参见 HW3 的 README.
Advantage estimation. The core idea of GRPO is to sample many outputs for each question from the policy πθ and use them to compute a baseline. This is convenient because we avoid the need to learn a neural value function Vϕ(s), which can be hard to train and is cumbersome from the systems perspective. For a question q and group outputs {o(i)}i=1G∼πθ(⋅∣q), let r{(i)}=R(q,o{(i)}) be the reward for the i-th output. DeepSeekMath and DeepSeek R1 compute the group-normalized reward for the i-th output as
A(i)=std(r(1),r(2),⋯,r(G))+advantage_epsr(i)−mean(r(1),r(2),⋯,r(G))(Eq.28)
where advantage_eps is a small constant to prevent division by zero. Note that this advantage A{(i)} is the same for each token in the response, i.e., At(i)=A(i),∀t∈1,⋯,∣o(i)∣, so we drop the t subscript in the following.
GRPO objective. The GRPO objective combines three ideas:
- Off-policy policy gradient;
- Computing advantage A{(i)} with group normalization;
- A clipping mechanism, as in PPO.
The purpose of clipping is to maintain stability when taking many gradient steps on a single batch of rollouts. It works by keeping the policy πθ from straying too far from the old policy.
The GRPO-Clip objective uses a min function to clip the probability ratio, preventing the policy from deviating too far from the old policy during training.
Let us first write out the full GRPO-Clip objective, and then we can build some intuition on what the clipping does (Eq.29):
JGRPO−Clip(θ)=Eq∼D,{o(i)}i=1G∼πθ(⋅∣q)[G1i=1∑G∣o(i)∣1t=1∑∣o(i)∣min(πθold(ot(i)∣q,o<t(i))πθ(ot(i)∣q,o<t(i))A(i),clip(πθold(ot(i)∣q,o<t(i))πθ(ot(i)∣q,o<t(i)),1−ϵ,1+ϵ)A(i))]
The hyperparameter ϵ>0 controls how much the policy can change. To see this, we can rewrite the per-token objective in a more intuitive way. Define the function
g(ϵ,A(i))={(1+ϵ)A(i)if A(i)≥0(1−ϵ)A(i)if A(i)<0
We can rewrite the per-token objective as
per-token objective=min(πθold(ot(i)∣q,o<t(i))πθ(ot(i)∣q,o<t(i))A(i),g(ϵ,A(i)))
We can now reason by cases. When the advantage A{(i)} is positive, the per-token objective simplifies to
per-token objective=min(πθold(ot(i)∣q,o<t(i))πθ(ot(i)∣q,o<t(i)),1+ϵ)A(i)
Since A{(i)}>0, the objective goes up if the action ot{(i)} becomes more likely under πθ, i.e., if πθ(ot(i)∣q,o<t(i)) increases. The clipping with min limits how much the objective can increase. So the policy πθ is not incentivized to go very far from the old policy πθold.
Analogously, when the advantage is negative, the model tries to drive down πθ(ot(i)∣q,o<t(i)), but is not incentivized to decrease it below (1−ϵ)πθold(ot(i)∣q,o<t(i)).