2.8 策略梯度(Policy Gradient)算法

在强化学习中,经典的 Q-learning / DQN 属于 基于值函数(Value-based) 的方法:它们学习的是 Q ( s , a ) Q(s,a) Q(s,a) V ( s ) V(s) V(s),然后通过 Q Q Q 的大小来间接决定动作。

策略梯度(Policy-based) 方法直接学习一个参数化策略 π θ ( a ∣ s ) \pi_\theta(a|s) πθ(as),通常用神经网络表示:

  • 输入:状态 s s s
  • 输出:对每个动作 a a a 的概率分布 π θ ( a ∣ s ) \pi_\theta(a|s) πθ(as)(离散动作)或分布参数(连续动作)

策略学习的目标是最大化“从初始状态出发的期望回报”。常见写法是最大化初始状态价值的期望:
J ( θ ) = E s 0 [ V π θ ( s 0 ) ] J(\theta)=\mathbb{E}_{s_0}\left[V^{\pi_\theta}(s_0)\right] J(θ)=Es0[Vπθ(s0)]

直观含义:让策略在环境中产生更高的长期奖励。


2.8.1 策略梯度定理的结果形式

策略梯度的推导过程较长,但最终结论是一个非常关键的形式。策略目标 J ( θ ) J(\theta) J(θ) 对参数 θ \theta θ 的梯度可以写为(比例意义下):
∇ θ J ( θ ) ∝ ∑ s ∈ S ν π θ ( s ) ∑ a ∈ A Q π θ ( s , a ) ∇ θ π θ ( a ∣ s ) \nabla_{\theta}J(\theta) \propto \sum_{s\in \mathcal{S}}\nu^{\pi_\theta}(s)\sum_{a\in \mathcal{A}}Q^{\pi_\theta}(s,a)\nabla_\theta \pi_\theta(a|s) θJ(θ)sSνπθ(s)aAQπθ(s,a)θπθ(as)

其中:

  • ν π θ ( s ) \nu^{\pi_\theta}(s) νπθ(s):在策略 π θ \pi_\theta πθ 下,状态 s s s 的访问分布(状态出现的“频率/权重”)
  • Q π θ ( s , a ) Q^{\pi_\theta}(s,a) Qπθ(s,a):在状态 s s s 采取动作 a a a 后的期望折扣回报

∇ θ π θ ( a ∣ s ) \nabla_\theta \pi_\theta(a|s) θπθ(as) 变形为对数梯度形式(利用 ∇ π = π ∇ log ⁡ π \nabla \pi = \pi \nabla \log \pi π=πlogπ):
∑ a π θ ( a ∣ s ) Q π θ ( s , a ) ∇ θ π θ ( a ∣ s ) π θ ( a ∣ s ) = ∑ a π θ ( a ∣ s ) Q π θ ( s , a ) ∇ θ log ⁡ π θ ( a ∣ s ) \sum_{a}\pi_\theta(a|s)Q^{\pi_\theta}(s,a)\frac{\nabla_\theta \pi_\theta(a|s)}{\pi_\theta(a|s)} \mathrm{}= \sum_{a}\pi_\theta(a|s)Q^{\pi_\theta}(s,a)\nabla_\theta \log \pi_\theta(a|s) aπθ(as)Qπθ(s,a)πθ(as)θπθ(as)=aπθ(as)Qπθ(s,a)θlogπθ(as)

因此可以写成期望形式(最常用、最应该记住):
∇ θ J ( θ ) = E π θ [ Q π θ ( s , a ) ∇ θ log ⁡ π θ ( a ∣ s ) ] \nabla_{\theta}J(\theta)=\mathbb{E}_{\pi_\theta}\left[Q^{\pi_\theta}(s,a)\nabla_\theta \log \pi_\theta(a|s)\right] θJ(θ)=Eπθ[Qπθ(s,a)θlogπθ(as)]


2.8.2 为什么它是 On-policy?

注意这个期望 E π θ [ ⋅ ] \mathbb{E}_{\pi_\theta}[\cdot] Eπθ[] 的含义:数据 ( s , a ) (s,a) (s,a) 是由当前策略 π θ \pi_\theta πθ 自己采样得到的。因此策略梯度是 On-policy 方法。


2.8.3 直观理解:为什么 Q Q Q 会“推动”概率增减?

看一个单步更新的直觉:假设我们做梯度上升
θ ← θ + α   Q π θ ( s , a ) ∇ θ log ⁡ π θ ( a ∣ s ) \theta \leftarrow \theta + \alpha \, Q^{\pi_\theta}(s,a)\nabla_\theta \log \pi_\theta(a|s) θθ+αQπθ(s,a)θlogπθ(as)

  • 如果某次采样到的动作 a a a 得到的 Q π θ ( s , a ) Q^{\pi_\theta}(s,a) Qπθ(s,a) 很大(代表“这动作很赚”),更新方向会让 log ⁡ π θ ( a ∣ s ) \log \pi_\theta(a|s) logπθ(as) 增大,从而让 π θ ( a ∣ s ) \pi_\theta(a|s) πθ(as) 增大(未来更常选它)。
  • 如果 Q π θ ( s , a ) Q^{\pi_\theta}(s,a) Qπθ(s,a) 很小(甚至相对较差),更新会更倾向减少它的概率。

一句话:让策略更偏向高价值动作,远离低价值动作。


2.8.4 REINFORCE:用蒙特卡洛估计 Q Q Q

策略梯度里最麻烦的是 Q π θ ( s , a ) Q^{\pi_\theta}(s,a) Qπθ(s,a) 不知道。REINFORCE 的核心做法是:用完整轨迹的 蒙特卡洛回报 来近似 Q Q Q

对于一次采样得到的轨迹:
( s 0 , a 0 , r 0 , s 1 , a 1 , r 1 , … , s T , a T , r T ) (s_0,a_0,r_0,s_1,a_1,r_1,\dots,s_T,a_T,r_T) (s0,a0,r0,s1,a1,r1,,sT,aT,rT)

定义从时刻 t t t 往后的折扣回报(Return):
G t = ∑ t ′ = t T γ t ′ − t r t ′ G_t=\sum_{t'=t}^{T}\gamma^{t'-t}r_{t'} Gt=t=tTγttrt

REINFORCE 的梯度估计写成:
∇ θ J ( θ ) = E π θ [ ∑ t = 0 T G t ∇ θ log ⁡ π θ ( a t ∣ s t ) ] \nabla_\theta J(\theta)= \mathbb{E}_{\pi_\theta}\left[ \sum_{t=0}^{T} G_t \nabla_\theta \log \pi_\theta(a_t|s_t) \right] θJ(θ)=Eπθ[t=0TGtθlogπθ(atst)]

这里每一步都用该步往后的回报 G t G_t Gt 来评价该步的动作。


REINFORCE 算法流程(概念版)

  • 初始化策略参数 θ \theta θ
  • 对每个 episode:
    • 用当前策略 π θ \pi_\theta πθ 采样一条轨迹
    • 对每个时间步 t t t 计算回报
      G t = ∑ t ′ = t T γ t ′ − t r t ′ G_t=\sum_{t'=t}^{T}\gamma^{t'-t}r_{t'} Gt=t=tTγttrt
    • 做梯度上升更新
      θ ← θ + α ∑ t = 0 T G t ∇ θ log ⁡ π θ ( a t ∣ s t ) \theta \leftarrow \theta+\alpha\sum_{t=0}^{T}G_t\nabla_\theta \log \pi_\theta(a_t|s_t) θθ+αt=0TGtθlogπθ(atst)

一个直观案例:为什么 REINFORCE 方差很大?

考虑一个简单情境:一个机器人每步都要走路(动作:左/右),环境有随机风,导致同样的动作序列也可能得到不同回报。

  • 第一次 episode:前面走得不错,后面突然被风吹倒,后续回报很差,导致许多前期动作也被“连坐”认为不好,因为它们共享同一个随机结果的后续回报。
  • 第二次 episode:同样的前期动作,后面没被风吹倒,回报变好,于是这些前期动作又被认为很棒。

这种“后续随机性把信用分配强行传回前面”的现象,会导致 G t G_t Gt 波动很大,从而梯度更新非常不稳定,这就是 REINFORCE 的典型问题:无偏但高方差


2.8.5 Actor-Critic 算法

策略梯度的核心公式是:
∇ θ J ( θ ) = E π θ [ Q π θ ( s , a ) ∇ θ log ⁡ π θ ( a ∣ s ) ] \nabla_\theta J(\theta)=\mathbb{E}_{\pi_\theta}\left[Q^{\pi_\theta}(s,a)\nabla_\theta \log \pi_\theta(a|s)\right] θJ(θ)=Eπθ[Qπθ(s,a)θlogπθ(as)]

REINFORCE 用蒙特卡洛回报 G t G_t Gt 来估计 Q Q Q。Actor-Critic 的思想是:既然 MC 高方差,那就训练一个 Critic 来估计价值,用它给 Actor 提供更稳定的学习信号。

  • Actor:策略网络 π θ ( a ∣ s ) \pi_\theta(a|s) πθ(as),负责“做动作”
  • Critic:价值网络(通常是 V ω ( s ) V_\omega(s) Vω(s) Q ω ( s , a ) Q_\omega(s,a) Qω(s,a)),负责“评价好坏”

2.8.6 更一般的策略梯度形式:把 Q Q Q 替换为 ψ t \psi_t ψt

策略梯度可以写得更一般:
g = E π θ [ ∑ t = 0 T ψ t ∇ θ log ⁡ π θ ( a t ∣ s t ) ] g=\mathbb{E}_{\pi_\theta}\left[\sum_{t=0}^{T}\psi_t \nabla_\theta \log \pi_\theta(a_t|s_t)\right] g=Eπθ[t=0Tψtθlogπθ(atst)]

其中 ψ t \psi_t ψt 是 Critic 提供的“指导信号”,它可以有多种形式。


2.8.7 Critic 信号 ψ t \psi_t ψt 的常见选择(从粗到细)

1)整条轨迹的总回报(最粗糙)

用整条轨迹的折扣总回报评价每一步:
∑ t ′ = 0 T γ t ′ r t ′ \sum_{t'=0}^{T}\gamma^{t'}r_{t'} t=0Tγtrt

缺点:所有时间步共享同一个标量,无法有效做时间维度的信用分配,而且必须等到轨迹结束。


2)从当前步开始的回报(REINFORCE 的 MC Return)

G t = ∑ t ′ = t T γ t ′ − t r t ′ G_t=\sum_{t'=t}^{T}\gamma^{t'-t}r_{t'} Gt=t=tTγttrt

特点:无偏,但高方差。


3)加入 baseline 的版本:降低方差

把回报减去一个只与状态有关的基线 b ( s t ) b(s_t) b(st)
G t − b ( s t ) G_t-b(s_t) Gtb(st)

于是梯度估计变为:
E π θ [ ∑ t = 0 T ( G t − b ( s t ) ) ∇ θ log ⁡ π θ ( a t ∣ s t ) ] \mathbb{E}_{\pi_\theta}\left[ \sum_{t=0}^{T}(G_t-b(s_t))\nabla_\theta \log \pi_\theta(a_t|s_t) \right] Eπθ[t=0T(Gtb(st))θlogπθ(atst)]

为什么不改变期望值(不引入偏差)?

关键点: b ( s t ) b(s_t) b(st) 与动作无关。对固定的 s t s_t st,有
E a t ∼ π θ ( ⋅ ∣ s t ) [ ∇ θ log ⁡ π θ ( a t ∣ s t ) ] = 0 \mathbb{E}_{a_t\sim \pi_\theta(\cdot|s_t)}\left[\nabla_\theta \log \pi_\theta(a_t|s_t)\right]=0 Eatπθ(st)[θlogπθ(atst)]=0

直观解释: log ⁡ π \log \pi logπ 的梯度在策略分布下的期望为 0,因此减去与动作无关的项不改变梯度期望,但可以显著减少方差。

常用基线选择: b ( s t ) = V π θ ( s t ) b(s_t)=V^{\pi_\theta}(s_t) b(st)=Vπθ(st)


4)直接用动作价值函数作为 Critic

如果能学到 Q π θ ( s t , a t ) Q^{\pi_\theta}(s_t,a_t) Qπθ(st,at),就用:
ψ t = Q π θ ( s t , a t ) \psi_t = Q^{\pi_\theta}(s_t,a_t) ψt=Qπθ(st,at)


5)优势函数 Advantage:更“相对”的评价

优势函数定义为:
A π ( s , a ) = Q π ( s , a ) − V π ( s ) A^{\pi}(s,a)=Q^{\pi}(s,a)-V^{\pi}(s) Aπ(s,a)=Qπ(s,a)Vπ(s)

含义:在状态 s s s 下选择动作 a a a,相对于“平均水平”( V ( s ) V(s) V(s))到底好多少:

  • A ( s , a ) > 0 A(s,a)>0 A(s,a)>0:该动作比平均更好,应该提高概率
  • A ( s , a ) < 0 A(s,a)<0 A(s,a)<0:该动作比平均更差,应该降低概率

用优势函数做策略梯度:
∇ θ J ( θ ) = E π θ [ A π θ ( s , a ) ∇ θ log ⁡ π θ ( a ∣ s ) ] \nabla_\theta J(\theta)= \mathbb{E}_{\pi_\theta}\left[A^{\pi_\theta}(s,a)\nabla_\theta \log \pi_\theta(a|s)\right] θJ(θ)=Eπθ[Aπθ(s,a)θlogπθ(as)]


6)用 TD 误差近似 Advantage:最常见的 Actor-Critic 形式

如果严格用 A ( s , a ) = Q ( s , a ) − V ( s ) A(s,a)=Q(s,a)-V(s) A(s,a)=Q(s,a)V(s),看起来需要同时估计 Q Q Q V V V 两个函数,学习难度会变大。实践中常用 基于 V V V 的时序差分(TD) 来近似 Advantage。

为什么 TD 形式能近似 A ( s t , a t ) A(s_t,a_t) A(st,at)

从 Bellman 关系:
Q π ( s , a ) = r ( s , a ) + γ ∑ s ′ P ( s ′ ∣ s , a ) V π ( s ′ ) Q^{\pi}(s,a)=r(s,a)+\gamma \sum_{s'}P(s'|s,a)V^{\pi}(s') Qπ(s,a)=r(s,a)+γsP(ss,a)Vπ(s)

在一次实际采样的转移 ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st,at,rt,st+1) 上,用单样本近似期望:
Q π ( s t , a t ) ≈ r t + γ V π ( s t + 1 ) Q^{\pi}(s_t,a_t)\approx r_t+\gamma V^{\pi}(s_{t+1}) Qπ(st,at)rt+γVπ(st+1)

代入优势函数:
A π ( s t , a t ) = Q π ( s t , a t ) − V π ( s t ) ≈ r t + γ V π ( s t + 1 ) − V π ( s t ) A^{\pi}(s_t,a_t)=Q^{\pi}(s_t,a_t)-V^{\pi}(s_t)\approx r_t+\gamma V^{\pi}(s_{t+1})-V^{\pi}(s_t) Aπ(st,at)=Qπ(st,at)Vπ(st)rt+γVπ(st+1)Vπ(st)

于是得到经典的 TD 误差(也常被当作优势估计):
δ t = r t + γ V ω ( s t + 1 ) − V ω ( s t ) \delta_t = r_t+\gamma V_\omega(s_{t+1})-V_\omega(s_t) δt=rt+γVω(st+1)Vω(st)


3.2.10.3 Actor 与 Critic 分别怎么学?

Critic:最小化 TD 误差的平方(回归问题)

把 TD 目标当成监督信号,Critic 的损失为:
L ( ω ) = 1 2 ( r t + γ V ω ( s t + 1 ) − V ω ( s t ) ) 2 \mathcal{L}(\omega)=\frac{1}{2}\left(r_t+\gamma V_\omega(s_{t+1})-V_\omega(s_t)\right)^2 L(ω)=21(rt+γVω(st+1)Vω(st))2

用梯度下降更新 ω \omega ω,让 V ω ( s ) V_\omega(s) Vω(s) 更贴近真实的状态价值。


Actor:用 TD 误差作为优势信号做策略梯度更新

使用 δ t \delta_t δt 替代 A ( s t , a t ) A(s_t,a_t) A(st,at)
θ ← θ + α θ ∑ t = 0 T δ t ∇ θ log ⁡ π θ ( a t ∣ s t ) \theta \leftarrow \theta+\alpha_\theta \sum_{t=0}^{T}\delta_t \nabla_\theta \log \pi_\theta(a_t|s_t) θθ+αθt=0Tδtθlogπθ(atst)

直观解释:

  • δ t > 0 \delta_t>0 δt>0:这一步比 Critic 预期的更好,提高该动作概率
  • δ t < 0 \delta_t<0 δt<0:这一步比预期更差,降低该动作概率

Actor-Critic 的整体流程(概念版)

  • 初始化 Actor 参数 θ \theta θ,Critic 参数 ω \omega ω
  • 对每个 episode(或持续交互的每一步):
    • Actor 用 π θ \pi_\theta πθ 采样动作,与环境交互得到 ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st,at,rt,st+1)
    • 计算 TD 误差
      δ t = r t + γ V ω ( s t + 1 ) − V ω ( s t ) \delta_t=r_t+\gamma V_\omega(s_{t+1})-V_\omega(s_t) δt=rt+γVω(st+1)Vω(st)
    • 更新 Critic(降低 TD 误差)
      ω ← ω + α ω ∑ t δ t ∇ ω V ω ( s t ) \omega \leftarrow \omega+\alpha_\omega \sum_t \delta_t \nabla_\omega V_\omega(s_t) ωω+αωtδtωVω(st)
    • 更新 Actor(用 δ t \delta_t δt 指导策略提升)
      θ ← θ + α θ ∑ t δ t ∇ θ log ⁡ π θ ( a t ∣ s t ) \theta \leftarrow \theta+\alpha_\theta \sum_t \delta_t \nabla_\theta \log \pi_\theta(a_t|s_t) θθ+αθtδtθlogπθ(atst)

一个更贴近直觉的案例:Actor-Critic 如何“更稳定”?

假设一个简单游戏:智能体每一步都能选择:

  • a = 0 a=0 a=0:稳妥拿 1 分
  • a = 1 a=1 a=1:冒险,可能拿 5 分也可能拿 0 分(环境随机)

如果用 REINFORCE(MC 回报)

一次 episode 冒险成功,后续回报很高,导致这条轨迹中所有出现过的“冒险动作”都被大幅提升概率;
另一次 episode 冒险失败,回报很低,又会强烈降低概率。

策略更新会出现“大起大落”,因为 G t G_t Gt 会被后续随机性剧烈影响。

如果用 Actor-Critic(TD + baseline)

Critic 学习到一个“平均预期” V ( s ) V(s) V(s):冒险动作平均可能也就带来某个期望收益。这样 Actor 更新时用的是
δ t = r t + γ V ( s t + 1 ) − V ( s t ) \delta_t = r_t+\gamma V(s_{t+1})-V(s_t) δt=rt+γV(st+1)V(st)

这相当于只在“比预期好/差”的部分推动策略,而不是让整条轨迹的随机性把梯度带飞。结果就是:

  • 更新更平滑
  • 学习更稳定
  • 更容易在长期任务中持续改进

小结:REINFORCE vs Actor-Critic 的核心差异

  • REINFORCE:用 MC 回报 G t G_t Gt 估计 Q Q Q,无偏但高方差,必须等轨迹结束。
  • Actor-Critic:学习一个 Critic(通常是 V ω V_\omega Vω),用 TD 误差 δ t \delta_t δt 近似优势,实现更低方差、更稳定的在线更新。

关键公式脉络:

  1. 策略梯度基本形式:
    ∇ θ J ( θ ) = E π θ [ Q π θ ( s , a ) ∇ θ log ⁡ π θ ( a ∣ s ) ] \nabla_\theta J(\theta)=\mathbb{E}_{\pi_\theta}\left[Q^{\pi_\theta}(s,a)\nabla_\theta \log \pi_\theta(a|s)\right] θJ(θ)=Eπθ[Qπθ(s,a)θlogπθ(as)]
  2. Advantage 形式(更合理):
    ∇ θ J ( θ ) = E π θ [ A π θ ( s , a ) ∇ θ log ⁡ π θ ( a ∣ s ) ] \nabla_\theta J(\theta)=\mathbb{E}_{\pi_\theta}\left[A^{\pi_\theta}(s,a)\nabla_\theta \log \pi_\theta(a|s)\right] θJ(θ)=Eπθ[Aπθ(s,a)θlogπθ(as)]
  3. TD 误差近似 Advantage(Actor-Critic 常用):
    δ t = r t + γ V ω ( s t + 1 ) − V ω ( s t ) \delta_t=r_t+\gamma V_\omega(s_{t+1})-V_\omega(s_t) δt=rt+γVω(st+1)Vω(st)
  4. Critic 用 TD 误差做回归:
    L ( ω ) = 1 2 ( r t + γ V ω ( s t + 1 ) − V ω ( s t ) ) 2 \mathcal{L}(\omega)=\frac{1}{2}\left(r_t+\gamma V_\omega(s_{t+1})-V_\omega(s_t)\right)^2 L(ω)=21(rt+γVω(st+1)Vω(st))2
  5. Actor 用 δ t \delta_t δt 更新策略:
    θ ← θ + α θ ∑ t δ t ∇ θ log ⁡ π θ ( a t ∣ s t ) \theta \leftarrow \theta+\alpha_\theta \sum_t \delta_t \nabla_\theta \log \pi_\theta(a_t|s_t) θθ+αθtδtθlogπθ(atst)
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐