LLM后训练算法-强化学习PPO

本篇博客旨在了解强化学习的基本概念,以及LLM后训练算法中的ppo算法。 本文章会花三章来介绍强化学习,包括强化学习的目的,以及常用强化学习算法。第四章介绍PPO

强化学习是什么?它的目标是什么?

强化学习(Reinforcement Learning,RL)是一种通过与环境交互、根据获得的奖励调整行为策略,从而学习如何做决策的方法。

与监督学习不同,强化学习通常不需要为每个输入直接提供一个正确动作,而是通过奖励信号评价行为的结果,让模型逐步学会什么样的行为能够带来更好的长期收益。

例如,在训练一个机器人走迷宫时,我们可以规定:

  • 到达终点:奖励 +100。
  • 撞墙:奖励 -10。
  • 每移动一步:奖励 -1。

我们不需要提前告诉机器人每一步应该向哪个方向走,而是让它尝试不同的行动,根据获得的奖励逐步改进决策策略。

强化学习的基本要素

强化学习通常可以用一个马尔可夫决策过程(Markov Decision Process,MDP)描述,其基本要素包括:

  • 状态(State,(s_t)):当前环境的情况。
  • 动作(Action,(a_t)):智能体在当前状态下采取的行为。
  • 奖励(Reward,(r_t)):环境对当前行为及其结果给出的反馈。
  • 策略(Policy,(\pi)):根据状态选择动作的规则。
  • 状态转移:执行动作后,环境从当前状态转移到下一个状态。

智能体与环境的交互过程可以表示为:

\(s_t \rightarrow a_t \rightarrow r_t,s_{t+1}\)

不断重复这一过程,就会形成一条轨迹(Trajectory):

\( \tau=(s_0,a_0,r_0,s_1,a_1,r_1,\ldots) \)

强化学习通过这些交互经验,寻找更好的决策策略。

强化学习的目标:最大化长期累计奖励

强化学习并不只是追求某一步获得最高奖励,而是希望整个决策过程获得尽可能高的累计奖励。

从时刻 (t) 开始的累计折扣奖励定义为:

\( G_t=\sum_{k=0}^{T-t}\gamma^k r_{t+k} \)

其中:\(r_{t+k}\) 是未来时刻获得的奖励。\(\gamma\in[0,1]\) 是折扣因子,用于控制未来奖励的重要程度,同时避免无限长轨迹。\(T\) 是轨迹的终止时刻;对于无限时域任务,通常使用无穷级数定义。

强化学习的目标是寻找一个能够最大化长期期望累计奖励的决策策略:

\( \pi^*=\arg\max_\pi J(\pi)\)

其中:

\( J(\pi)=\mathbb E_{\tau\sim\pi}[G_0] \)

这里的期望表示:按照策略 \(\pi\) 与环境交互时,考虑不同可能轨迹后得到的平均累计奖励。

强化学习最终产出的是什么?

强化学习最终产出一个,可以最大化长期奖励的策略:

\( \pi_\theta(a\mid s) \)

其中 \(\theta\) 是策略模型的参数。

对于神经网络策略,训练过程就是不断调整 \(\theta\),使策略产生的行为获得更高的期望累计奖励。需要注意,虽然目的是学习到一个最优策略,但强化学习不一定直接学习策略,也可以先学习价值函数,再利用价值函数构造策略。下边我们先了解强化学习中涉及到的两个价值函数:状态价值函数 (V) 和动作价值函数 (Q)。

2. V 和 Q:如何评价状态与动作?

强化学习为了确定下一步做什么,需要学习当前状态和候选动作的好坏。价值函数就是用来衡量这种收益的工具,有两类价值函数,状态价值函数和动作价值函数。

2.1 状态价值函数 V

状态价值函数(State-value Function)定义为:

\( V^\pi(s)= \mathbb E_\pi[G_t\mid s_t=s] \)

它表示:在策略 \(\pi\) 下,如果当前处于状态 (s),此后继续按照该策略行动,预期能够获得多少累计奖励?

例如,在迷宫中:

  • (V(s)=80):当前状态可能离终点很近。
  • (V(s)=10):当前状态可能处于普通通道。
  • (V(s)=-20):当前状态可能处于危险区域。

2.2 动作价值函数 Q

动作价值函数(Action-value Function)定义为:

\( Q^\pi(s,a)= \mathbb E_\pi[G_t\mid s_t=s,a_t=a] \)

它表示:在状态 (s) 下,先执行动作 (a),之后继续按照策略 (\(\pi\)) 行动,预期能够获得多少累计奖励?

假设在某个状态下有三个候选动作:

动作 Q 值
向左 80
向右 20
向前 -10

如果这些 Q 值准确,那么选择向左能够获得最高的预期回报。

2.3 V 和 Q 的关系

V 评价状态,Q 评价状态与动作的组合。二者之间存在一个重要关系:

\( V^\pi(s)= \mathbb E_{a\sim\pi(\cdot\mid s)} [Q^\pi(s,a)] \)

也就是说,在策略 \(\pi\) 下,状态价值等于按照当前策略选择动作时,各动作价值的加权平均。如果策略以 70% 的概率向左、20% 的概率向右、10% 的概率向前,那么:

\( V^\pi(s)= 0.7Q^\pi(s,\text{左}) +0.2Q^\pi(s,\text{右}) +0.1Q^\pi(s,\text{前}) \)

因此,V 和 Q 并不是互相独立的概念,而是从不同角度描述同一个决策过程的长期收益。

2.4 Advantage:一个动作比预期好多少?

在策略优化中,我们经常不仅关心动作的绝对价值,还关心它相对于当前状态下通常表现的好坏。这就引出了优势函数(Advantage Function):

\( A^\pi(s,a)=Q^\pi(s,a)-V^\pi(s) \)

例如:

\( Q^\pi(s,a)=80,\qquad V^\pi(s)=50 \)

那么:

\( A^\pi(s,a)=30 \)

这意味着,在当前状态下,执行这个动作的预期回报比遵循当前策略时的平均水平高 30。

如果 \(A^\pi(s,a)>0\),这个动作优于当前策略的平均表现;如果 \(A^\pi(s,a)<0\),它的表现则低于平均水平。

Advantage 在后面的 Policy Gradient 和 PPO 中非常重要,因为它提供了一个判断依据:当前采样到的动作,究竟应该被鼓励还是被抑制?

3. 强化学习的三类常见算法路线

按照主要学习对象与决策方式,可以将强化学习方法概括为三类:

Value-based:学习价值函数,再据此决策。
Policy-based:直接学习策略。
Actor-Critic:同时学习策略和价值函数。

严格来说,Actor-Critic 是结合策略优化与价值估计的一类方法,而不是与前两类完全互斥的分类。它通常属于 Policy-based 方法,同时利用 Critic 提供的价值估计来改进策略学习。

3.1 Value-based:先学价值,再决定行动

Value-based 方法的核心思想是学习一个价值函数,再利用它选择动作。以 Q-learning 为例,其目标是学习最优动作价值函数:

\( Q^*(s,a) \)

它满足 Bellman 最优方程:

\( Q^(s,a)= \mathbb E\left[ r_t+\gamma\max_{a'}Q^(s_{t+1},a') \mid s_t=s,a_t=a \right] \)

直观地说,一个动作的价值等于:当前获得的奖励,加上下一个状态中能够获得的最优未来价值。

Q-learning 通常使用如下时序差分更新:

\( Q(s_t,a_t)\leftarrow Q(s_t,a_t) +\alpha\left[ r_t+\gamma\max_{a'}Q(s_{t+1},a') -Q(s_t,a_t) \right] \)

其中,\(\alpha\) 是学习率。

当 Q 函数学习得足够准确时,可以通过:

\( a^*=\arg\max_a Q(s,a) \)

选择价值最高的动作。

Value-based 方法的优点是概念直观,并且对于离散、动作空间较小的问题,可以通过比较不同动作的价值来做出决策。DQN 就是结合深度神经网络与 Q-learning 的经典算法。不过,这类方法在 LLM 场景中会遇到明显困难。

3.2 Policy-based:直接学习策略

Policy-based 方法不必先学习 Q 函数,再通过对比不同动作的 Q 值来决定行动,而是直接学习策略:

\( \pi_\theta(a\mid s) \)

其优化目标仍然是最大化期望累计奖励:

\( J(\theta)= \mathbb E_{\tau\sim\pi_\theta}[G_0] \)

策略通常由神经网络参数化,通过梯度上升更新:

\( \theta\leftarrow\theta+\alpha\nabla_\theta J(\theta) \)

其中 \(\nabla_\theta J(\theta)\) 是策略目标关于参数的梯度。

Policy Gradient 的重要特点是:它可以直接学习随机策略,而不需要在每一步显式计算所有候选动作的价值,再选择价值最大的动作。这对于动作空间巨大、需要随机探索或希望直接优化生成分布的任务尤其有用。
Policy Gradient 的问题在于:一次行动的回报高不高,一次行动获得的回报高,并不完全代表这个行动本身表现好;可能在当前状态下大部分行动都会去的很高的成绩。因此只用一次行动的回报来估计梯度往往会有较高方差,导致训练不稳定、样本利用效率不高。

3.3 Actor-Critic:让策略学习有一个价值评估器

相比于只看绝对回报值,Actor-Critic更关注该回报的相对优势,即该回报是否超出预期。Actor-Critic 的思路是同时学习两个部分:

Actor:负责学习策略 \(\pi_\theta(a\mid s)\),决定如何行动。
Critic:负责估计 \(V_\phi(s)\) 或 \(Q_\phi(s,a)\),评价状态或动作的长期价值。

在使用状态价值函数的常见形式中,可以通过 Critic 估计优势:

\( A_t\approx \hat Q_t-V_\phi(s_t) \)

随后利用优势指导 Actor 更新策略。例如,Critic 认为某个动作的回报比当前状态的预期价值更高,那么 Actor 就应该提高该动作的概率;反之,则应该降低它的概率。因此,Actor-Critic 的核心是:Actor 负责优化行为,Critic 负责评价行为,从而降低策略梯度估计的方差并提高训练效率。

PPO 常与 Actor-Critic 结合使用:策略网络作为 Actor,价值网络作为 Critic。

4. 从 Policy Gradient 推导 PPO

前面介绍了强化学习的目标,也介绍了Value-Based 和 Policy-Based方法,以及Policy-Based方法中的Policy Gradient 与 Actor-Critic。现在可以回答一个更具体的问题:既然我们已经能够计算策略梯度,为什么还需要 PPO,PPO相对朴素Actor-Critc的区别是什么?

答案是:普通的 Actor-Critic虽然能给出提高期望回报的局部优化方向,但直接进行策略更新,可能造成策略变化过大,从而导致训练不稳定。PPO 就是为了解决这个问题而提出的。

4.1 从最大化期望回报开始

假设策略由神经网络参数 \(\theta\) 决定:

\( \pi_\theta(a\mid s) \)

我们希望最大化期望累计奖励:

\( J(\theta)= \mathbb E_{\tau\sim\pi_\theta}[G_0] \)

直接计算这个目标的梯度并不容易,因为轨迹中的动作来自当前策略,策略参数不仅影响动作概率,还会通过动作影响后续状态分布。

Policy Gradient 定理给出了一个重要结果:
\( \nabla_\theta J(\theta) = \mathbb E_{\substack{s\sim d^{\pi_\theta}\ a\sim\pi_\theta}} \left[ \nabla_\theta\log\pi_\theta(a\mid s) Q^{\pi_\theta}(s,a) \right] \)

其中,\(d^{\pi_\theta}\) 表示当前策略诱导的状态分布。

这个公式的含义是:可以通过采样得到的状态和动作,结合动作的价值,估计策略目标的梯度。

利用:

\( A^\pi(s,a)=Q^\pi(s,a)-V^\pi(s) \)

还可以把 Q 替换为 Advantage:
\( \mathbb E \left[ \nabla_\theta\log\pi_\theta(a\mid s) A^\pi(s,a) \right] \)

这里使用 Advantage 而不是直接使用 Q,主要是因为减去一个只依赖状态的基线 (\(V^\pi(s)\)),在满足相应条件时不会改变期望梯度,却能够降低梯度估计的方差。

因此,我们可以通过以下方式理解策略更新:

(A>0):提高采样动作的概率。
(A<0):降低采样动作的概率。
(|A|) 越大,该动作相对当前策略的表现差异越明显。

这就得到了最基本的策略梯度学习机制。

4.2 普通 Policy Gradient 的问题:更新可能过大

假设旧策略在某个状态下选择动作 (a) 的概率为:

\( \pi_{\text{old}}(a\mid s)=0.1 \)

我们发现这个动作的 Advantage 为正,于是更新策略,提高这个动作的概率。

假设一次更新后:

\( \pi_{\text{new}}(a\mid s)=0.8 \)

表面上看,这是在鼓励一个好动作。但问题在于,原来的 Advantage 是基于旧策略或旧策略诱导的数据估计出来的。一次过大的更新可能改变后续状态分布和动作分布,使原来的估计不再适用于新策略。在深度强化学习中,这可能造成性能突然下降、训练震荡,甚至难以恢复。因此,我们需要的不只是一个能够提高回报的更新方向,还需要一种控制每次更新幅度的机制。

4.3 引入重要性采样比率

假设我们先使用旧策略 \(\pi_{\theta_{\text{old}}}\) 采集一批数据,然后利用这批数据更新当前策略。

如果要评估新策略对某个动作的相对偏好,可以定义概率比率:

\( r_t(\theta)= \frac{\pi_\theta(a_t\mid s_t)} {\pi_{\theta_{\text{old}}}(a_t\mid s_t)} \)

其中:分子是当前正在优化的策略对采样动作给出的概率。分母是采样时的旧策略对同一动作给出的概率。

例如:

\( \pi_{\text{old}}(a_t\mid s_t)=0.2 \)

\( \pi_\theta(a_t\mid s_t)=0.3 \)

那么:

\( r_t(\theta)=\frac{0.3}{0.2}=1.5 \)

表示当前策略给这个动作的概率是旧策略的 1.5 倍。

为什么要引入这个比率?因为采样数据来自旧策略,但我们想优化的是当前策略。重要性采样提供了一种利用旧策略数据估计新策略期望的方法。

为什么我们可以使用旧策略数据来估计新策略期望?重要性采样有一个基本原理。假设数据来自旧分布 \(p(x)\),但我们想计算新分布 \(q(x)\) 下某个函数 \(f(x)\) 的期望:

\( \mathbb E_{x\sim q}[f(x)]= \mathbb E_{x\sim p} \left[ \frac{q(x)}{p(x)}f(x) \right] \)

直观地说:虽然样本是从旧分布采出来的,但我们可以根据新旧分布的概率比,对样本重新加权,从而估计新分布下的期望。把这个原理用于策略优化,就得到 PPO 使用的概率比:
\( \mathbb E_{a\sim\pi_\theta} [f(a)]= \mathbb E_{a\sim\pi_{\theta_{\text{old}}}} \left[ \frac{\pi_\theta(a\mid s)} {\pi_{\theta_{\text{old}}}(a\mid s)} f(a) \right] \)

在 Policy Gradient 的 surrogate objective 中,\(f(a)\) 对应与优势相关的项,因此可以写成:
\( L^{\text{PG}}(\theta)= \mathbb E_t\left[ r_t(\theta) A_t \right] \)

这样,样本虽然来自旧策略,我们仍然可以通过概率比,构造一个用于优化当前策略的目标。这里有一个重要前提:旧策略对相关动作必须具有非零概率,否则重要性采样比无法恢复新策略在这些动作上的贡献。

surrogate objective,即代理目标。它不是完整的新策略期望回报,而是一个基于旧策略数据构造的局部优化目标。

当 \(\theta=\theta_{\text{old}}\) 时:

\( r_t(\theta_{\text{old}})=1 \)

而在旧参数附近,概率比率的梯度满足:
\( \nabla_\theta \log\pi_\theta(a_t\mid s_t) \big|{\theta=\theta{\text{old}}} \)

因此,在旧策略参数处,代理目标的梯度与使用 Advantage 的 Policy Gradient 相对应。这一步很重要:它把原本的策略梯度更新,转换成了一个可以利用固定采样数据优化的目标。但它仍然没有完全解决更新过大的问题。如果反复利用同一批数据进行多轮梯度更新,当前策略可能逐渐偏离采样时的旧策略,代理目标也可能越来越不准确。

ps: 这里可能有读者好奇,为什么要使用旧策略采样。我直接用当前策略采样数据更新模型梯度不可以吗? 可以的。但这样做的问题资源消耗比较大。每次更新梯度就要重新采样数据,对于LLM训练来说,会有大量的计算资源浪费在采样上。我们希望一次采样后能够利用这批数据进行多次更新。 因此重要性采样通过使用旧模型数据估计新模型下的期望,节省了计算资源。

4.4 TRPO:限制新策略与旧策略的距离

TRPO(Trust Region Policy Optimization)进一步提出:不仅要让代理目标提高,还要限制新旧策略之间的差异。

其核心思想是求解类似下面的约束优化问题:

\( \begin{aligned} \max_\theta\quad& \mathbb E_t[r_t(\theta)A_t]\ \text{subject to}\quad& \mathbb E_{s\sim d^{\pi_{\text{old}}}} \left[ D_{\mathrm{KL}} \left( \pi_{\text{old}}(\cdot\mid s) | \pi_\theta(\cdot\mid s) \right) \right] \leq\delta \end{aligned} \)

其中,\(D_{\mathrm{KL}}\) 衡量两个概率分布之间的差异,\(\delta\) 是允许的策略变化范围。这里的约束意味着:在提高代理目标的同时,不允许新策略在平均意义上偏离旧策略太远。

为什么这有帮助?因为代理目标是在旧策略附近构造的局部近似。限制策略变化,有助于让这个近似继续有效,也能降低一次更新导致策略性能突然恶化的风险。

TRPO 的理论分析建立在特定假设和性能差异界之上,并非保证每次实际更新都一定提高真实回报。它的主要问题在于,严格处理信赖域约束通常需要较复杂的二阶近似优化、共轭梯度等计算过程,实现成本较高。

于是,一个自然的问题出现了:能否保留 TRPO 限制策略变化的思想,却使用更简单的一阶优化方法?这就是 PPO 的出发点。

4.5 PPO:从硬约束到 Clipping Objective

PPO(Proximal Policy Optimization)提出了一种更简单的策略更新方式:对概率比率进行截断,并使用一个特殊的代理目标,限制策略继续朝有利方向变化时所能获得的优化收益。

PPO-Clip 的目标为:

\( L^{\mathrm{CLIP}}(\theta)= \mathbb E_t \left[ \min \left( r_t(\theta)A_t,, \operatorname{clip} \left( r_t(\theta),1-\epsilon,1+\epsilon \right)A_t \right) \right] \)

其中:
\( \operatorname{clip}(r,1-\epsilon,1+\epsilon) = \begin{cases} 1-\epsilon, & r<1-\epsilon\\ r, & 1-\epsilon\leq r\leq 1+\epsilon\\ 1+\epsilon, & r>1+\epsilon \end{cases} \)

\(\epsilon\) 是一个超参数,用于控制截断区间的宽度。理解这个公式的关键是:PPO 不会无条件地把概率比率截断,而是取原始代理目标和截断代理目标中的较小值。这样,超出截断区间的进一步变化,在有利于优化目标的方向上不再带来额外收益。

情况一:Advantage 为正

当:\( A_t>0 \)

说明这个动作比当前策略的预期表现更好,我们希望提高它的概率。

如果:\( r_t=1.1,\qquad \epsilon=0.2 \)

那么概率提高了 10%,仍在允许区间内,目标可以继续鼓励这个动作。

但如果:\( r_t=1.5 \)

原始代理目标为:\( 1.5A_t \)

截断代理目标为:\( 1.2A_t \)

取二者较小值:\( \min(1.5A_t,1.2A_t)=1.2A_t \)

因此,进一步提高这个动作的概率不会继续增加该样本的代理目标。

情况二:Advantage 为负

当:\( A_t<0 \)

说明这个动作的表现低于预期,我们希望降低它的概率。如果概率比率从 1 降到 0.9,说明当前策略已经降低了这个动作的概率。

但如果:\( r_t=0.5,\qquad \epsilon=0.2 \)

那么:\( r_tA_t=0.5A_t \)

截断后的目标为:\( 0.8A_t \)

因为 (A_t) 为负数:\( 0.8A_t<0.5A_t \)

所以:\( \min(0.5A_t,0.8A_t)=0.8A_t \)

进一步降低这个动作的概率,不会继续增加该样本的代理目标。

因此,PPO 的目标可以用下面的表格总结:

Advantage 希望怎样改变概率 截断的作用
\(A_t>0\) 提高动作概率 不再奖励超出上界的进一步提高
\(A_t<0\) 降低动作概率 不再奖励超出下界的进一步降低

这就是 PPO-Clip 的核心机制。

需要强调,Clipping Objective 并不等于严格限制新旧策略的 KL 距离。它限制的是代理目标对某些过大概率变化所给予的优化收益,因此不能保证每个动作的概率比率始终落在 ([1-\epsilon,1+\epsilon]) 内。实践中仍然可能监控 KL divergence,并在必要时使用额外的控制机制。

4.6 PPO 为什么特别适合实际深度强化学习?

PPO 保留了 Policy Gradient 的直接策略优化方式,同时使用 Clipping Objective 控制过大更新带来的风险。

它的典型训练过程可以概括为:

使用当前策略采样一批轨迹。 -> 计算奖励、价值估计与 Advantage。 -> 固定采样时的旧策略概率。 ->使用概率比率构造 Clipping Objective。->
对同一批数据执行若干轮小批量梯度更新。 -> 更新策略,进入下一轮采样。

相比 TRPO,PPO 通常更容易实现,可以直接使用成熟的一阶优化器,如 Adam,并且能够对同一批采样数据进行多轮小批量更新。

因此,PPO 成为深度强化学习中应用广泛的策略优化算法之一。

posted @ 2026-10-29 16:00  老张哈哈哈  阅读(8)  评论(0)    收藏  举报