本文最后更新于 2026年8月11日 晚上
赵老师开源的 Github 仓库、赵老师的 B站 课程视频
背景来自 XHS 凡生(如有问题,请在下方评论区留言,侵删)
Overview
Actor-critic 方法仍然是策略梯度方法。
- 它们强调一种结合了策略梯度和基于价值的方法的结构。
什么是 “Actor” 和 “Critic”?
- “Actor” 指的是 策略更新(policy update)
- 之所以称为 actor,是因为策略将被应用于采取行动。
- “Critic” 指的是 策略评估(policy evaluation)或 价值估计(value estimation)。
- 之所以称为 critic,是因为它通过评估来批评策略。
Outline:
- 最简单的 Actor-Critic:QAC
- Advantage Actor-Critic:A2C
- 异策略 Actor-Critic (Off-policy actor-critic)
- 如何将 on-policy 的方法转换为 off-policy 的
- 重要性采样 (Importance sampling)
- 确定性 Actor-Critic (DPG)
Actor-Critic
Lec 48
回顾上一讲中介绍的策略梯度思想。
- 一个标量度量 J(θ),可以是 vˉπ 或 rˉπ。
- 最大化 J(θ) 的梯度上升算法是
θt+1=θt+α∇θJ(θt)=θt+αES∼η,A∼π[∇θlnπ(A∣S,θt)qπ(S,A)]
- 随机梯度上升算法是
θt+1=θt+α∇θlnπ(at∣st,θt)qt(st,at)
我们可以从这个算法中看到 “actor” 和 “critic”:
- 这个算法对应于 actor!
- 估计 qt(s,a) 的算法对应于 critic!
如何得到 qt(st,at)?
到目前为止,我们研究了两种估计 action value 的方法:
- Monte Carlo learning:如果使用 MC,对应的算法称为 REINFORCE 或 蒙特卡洛策略梯度 (Monte Carlo policy gradient)。
- Temporal-difference learning:如果使用 TD,这类算法通常称为 actor-critic。
最简单的 Actor-Critic 算法 (QAC)
QAC 的伪代码
- 目标:通过最大化 J(θ) 来搜索最优策略。
- 在每个回合的时间步 t,执行:
- 按照 π(a∣st,θt) 生成 at,观察 rt+1,st+1,然后按照 π(a∣st+1,θt) 生成 at+1。
- Critic(价值更新):
wt+1=wt+αw[rt+1+γq(st+1,at+1,wt)−q(st,at,wt)]∇wq(st,at,wt)
- Actor(策略更新):
θt+1=θt+αθ∇θlnπ(at∣st,θt)q(st,at,wt+1)
补充说明:
- Critic 对应于 “SARSA + 值函数近似”。
- Actor 对应于策略更新算法。
- 该算法是 on-policy
- 由于策略是随机的(π(a∣s,θ)>0),因此不需要再使用 ε-greedy 增加探索性。
- 这种特定的 actor-critic 算法有时被称为 Q Actor-Critic (QAC)
- 虽然简单,但该算法揭示了 actor-critic 方法的核心思想。它可以被扩展以生成许多其他算法,如后面所示。
A2C
Lec 49
接下来,我们将 QAC 扩展为优势 Actor-Critic (Advantage Actor-Critic, A2C)。
核心思想:引入一个基准 (baseline) 来降低方差。
基准不变性
Baseline Invariance
性质:策略梯度对于额外的基准是不变的。
∇θJ(θ)=ES∼η,A∼π[∇θlnπ(A∣S,θt)qπ(S,A)]=ES∼η,A∼π[∇θlnπ(A∣S,θt)(qπ(S,A)−b(S))]
这里,额外的基准 b(S) 是 S 的一个标量函数。
接下来,我们回答两个问题:
为何成立?
这是因为,
ES∼η,A∼π[∇θlnπ(A∣S,θt)b(S)]=0
上式的推导如下,
ES∼η,A∼π[∇θlnπ(A∣S,θt)b(S)]=s∈S∑η(s)a∈A∑π(a∣s,θt)∇θlnπ(a∣s,θt)b(s)=s∈S∑η(s)a∈A∑∇θπ(a∣s,θt)b(s)=s∈S∑η(s)b(s)a∈A∑∇θπ(a∣s,θt)=s∈S∑η(s)b(s)∇θa∈A∑π(a∣s,θt)=s∈S∑η(s)b(s)∇θ1=0
- s∼S 服从分布 η(s);a∼A 服从分布 π(a∣s,θt)
为何有用?
梯度为 ∇θJ(θ)=E[X],其中
X(S,A)≐∇θlnπ(A∣S,θt)[qπ(S,A)−b(S)]
我们有,
- E[X] 不随 b(S) 变化。
- var(X) 会随 b(S) 变化。
- 为什么?因为 tr[var(X)]=E[XTX]−xˉTxˉ,且
E[XTX]=E[(∇θlnπ)T(∇θlnπ)(qπ(S,A)−b(S))2]=E[∥∇θlnπ∥2(qπ(S,A)−b(S))2]
想象一下,如果 b 非常大(例如 100 W),会让方差产生很大波动。
最优基准
Optimal Baseline
目标:选择一个最优基准 b 来最小化 var(X)。
- 好处:当我们使用随机样本来近似 E[X] 时,估计的方差也会很小。
在 REINFORCE 和 QAC 的算法中:
- 没有基准。
- 或者说,b=0,但这不能保证是一个好的基准。
最优基准的表达式
对于任意 s∈S,能够最小化 var(X) 的最优基准为:
b∗(s)=EA∼π[∥∇θlnπ(A∣s,θt)∥2]EA∼π[∥∇θlnπ(A∣s,θt)∥2qπ(s,A)]
证明:
令 xˉ≐E[X]。如果 X 是一个向量,那么其方差 var(X) 是一个矩阵。通常可以选择其迹(trace)作为优化的标量目标函数:
tr[var(X)]=trE[(X−xˉ)(X−xˉ)T]=trE[XXT−xˉXT−XxˉT+xˉxˉT]=E[XTX−XTxˉ−xˉTX+xˉTxˉ]=E[XTX]−xˉTxˉ.(10.6)
在导出上式时,我们使用了迹的性质 tr(AB)=tr(BA),其中 A,B 是两个方阵。如果 xˉ 是不变的,那么式(10.6)表明我们只需要最小化 E[XTX] 就可以最小化 tr[var(X)]。
把 X 代入 E[XTX] 可得
E[XTX]=E[(∇θlnπ)T(∇θlnπ)(qπ(S,A)−b(S))2]=E[∥∇θlnπ∥2(qπ(S,A)−b(S))2],
其中 π(A∣S,θ) 简写为 π。由于 S∼η 且 A∼π,上述方程可以改写为
E[XTX]=s∈S∑η(s)EA∼π[∥∇θlnπ∥2(qπ(s,A)−b(s))2].
目标函数最优的必要条件是 ∇bE[XTX]=0。为确保 ∇bE[XTX]=0,对任意 s∈S,b(s) 应满足
EA∼π[∥∇θlnπ∥2(b(s)−qπ(s,A))]=0.
不难求解上述方程进而得到最优基准函数:
b∗(s)=EA∼π[∥∇θlnπ∥2]EA∼π[∥∇θlnπ∥2qπ(s,A)],s∈S.
□
补充说明:
- 虽然这个基准是最优的,但它很复杂。
- 我们可以去掉权重 ∥∇θlnπ(A∣s,θt)∥2,选择一个次优基准:
b(s)=EA∼π[qπ(s,A)]=vπ(s)
这就是状态 s 的状态价值!
优势 Actor-Critic 算法
当 b(s)=vπ(s) 时,
- 梯度上升算法为:
θt+1=θt+αE[∇θlnπ(A∣S,θt)[qπ(S,A)−vπ(S)]]≐θt+αE[∇θlnπ(A∣S,θt) δπ(S,A)]
其中δπ(S,A)≐qπ(S,A)−vπ(S)
被称为优势函数 (advantage function)。这是因为:
- vπ(s)=EA∼π[qπ(S,A)]
- δπ(S,A) 衡量的是 qπ(S,A) 超出平均的部分
- 上面的算法用到了 expectation,因此可以改造出随机版本,
θt+1=θt+α∇θlnπ(at∣st,θt)[qt(st,at)−vt(st)]=θt+α∇θlnπ(at∣st,θt)δt(st,at)
算法的另一种表达
此外,该算法可以重新表示为:
θt+1=θt+α∇θlnπ(at∣st,θt)δt(st,at)=θt+απ(at∣st,θt)∇θπ(at∣st,θt)δt(st,at)=θt+αstep size(π(at∣st,θt)δt(st,at))∇θπ(at∣st,θt)
- 步长与相对价值 δt 成正比,而不是绝对价值 qt,这更加合理!(我们在乎的是 action value 的相对值,而不是绝对值)
- 它仍然能够很好地平衡探索与利用。
- 分子 δt 较大时,step size 较大,倾向于去选择较大的 action value
- 分母 π(at∣st,θt) 较小时,step size 较大,倾向于去探索 t 时刻概率小的动作
用 TD error 近似优势函数
此外,优势函数可以用 TD error 来近似:
δt=qt(st,at)−vt(st)→rt+1+γvt(st+1)−vt(st)
- 这个近似是合理的,因为,
E[qπ(S,A)−vπ(S)∣S=st,A=at]=E[R+γvπ(S′)−vπ(S)∣S=st,A=at]
- 好处:只需要一个网络来近似 vπ(s),而不需要分别用两个网络来近似 qπ(s,a) 和 vπ(s)。
伪代码
优势 Actor-Critic (A2C) 或 TD Actor-Critic
- 目标:通过最大化 J(θ) 来搜索最优策略。
- 在每个回合的时间步 t,执行:
- 按照 π(a∣st,θt) 生成 at,然后观察 rt+1,st+1。
- TD error(优势函数):
δt=rt+1+γv(st+1,wt)−v(st,wt)
- Critic(价值更新):
wt+1=wt+αwδt∇wv(st,wt)
- Actor(策略更新):
θt+1=θt+αθδt∇θlnπ(at∣st,θt)
它是 on-policy 的。由于策略 π(θt) 是随机的,不需要使用像 ε-greedy 这样的技术。
Off-Policy Actor-Critic
Lec 50
- 策略梯度是 on-policy 的。
- 为什么?因为梯度是 ∇θJ(θ)=ES∼η,A∼π[∗],所以 π 也是 behavior policy。
- 我们能将它转换为 off-policy 吗?
- 可以,通过 重要性采样(importance sampling)
- 重要性采样技术不仅限于 AC,也适用于任何旨在估计期望的算法。
例子
考虑一个随机变量 X∈X={+1,−1}。
如果 X 的概率分布是 p0,
p0(X=+1)=0.5,p0(X=−1)=0.5
那么 X 的期望是,
EX∼p0[X]=(+1)⋅0.5+(−1)⋅0.5=0
问题: 如何使用一些样本 {xi} 来估计 E[X]?
情况 1:同分布的采样
- 样本 {xi} 按照 p0 生成:
E[xi]=E[X],var[xi]=var[X]
- 那么,平均值可以收敛到期望:
xˉ=n1i=1∑nxi→E[X],as n→∞
因为E[xˉ]=E[X],var[xˉ]=n1var[X]
样本、样本均值
情况 2:不同分布的采样
- 样本 {xi} 按照另一个分布 p1 生成:
p1(X=+1)=0.8,p1(X=−1)=0.2
期望是EX∼p1[X]=(+1)⋅0.8+(−1)⋅0.2=0.6
- 如果我们使用样本的平均值,那么毫不意外:
xˉ=n1i=1∑nxi→EX∼p1[X]=0.6=EX∼p0[X]=0
上面例子的情形
问题:我们能使用 {xi}∼p1 来估计 EX∼p0[X] 吗?
- 为什么要这样做?
- 我们可能想要估计 EA∼π[∗],其中 π 是 target policy,而样本来自 behavior policy β。
- 如何做到?
重要性采样
Importance Sampling
注意到,
EX∼p0[X]=x∑p0(x)x=x∑p1(x)f(x)p1(x)p0(x)x=EX∼p1[f(X)]
- 因此,我们可以用估计 EX∼p1[f(X)] 来估计 EX∼p0[X]!
- 如何估计 EX∼p1[f(X)]?
- 很简单。令
fˉ≐n1i=1∑nf(xi),where xi∼p1
那么,EX∼p1[fˉ]=EX∼p1[f(X)],varX∼p1[fˉ]=n1varX∼p1[f(X)]
因此,fˉ 是 EX∼p1[f(X)]=EX∼p0[X] 的一个良好近似:EX∼p0[X]≈fˉ=n1i=1∑nf(xi)=n1i=1∑np1(xi)p0(xi)xi
- p1(xi)p0(xi) 被称为 重要性权重(importance weight)
- 如果 p1(xi)=p0(xi),重要性权重为 1,fˉ 就变成了 xˉ;
- 如果 p0(xi)≥p1(xi),xi 被 p0 采样的频率高于 p1。重要性权重(>1)可以强调这个样本的重要性。
- Q:想求 fˉ=n1∑i=1np1(xi)p0(xi)xi 需要用到 p0(x),但如果我知道 p0(x),为什么不直接 ∑p0(x)x 计算期望?
- 如果真那么好做,那直接求即可!
- 重要性采样适用于 给定 x 容易计算 p0(x),但难以计算期望 的情况。
- 例如,连续情况下,p0 的表达式比较复杂,难以计算
- 或者,p0 没有显式表达式(例如,p0 由神经网络表示)
总结
如果 {xi}∼p1,
xˉ=n1i=1∑nxifˉ=n1i=1∑np1(xi)p0(xi)xi→EX∼p1[X]→EX∼p0[X]
异策略策略梯度定理
The Theorem of Off-policy Policy Gradient
与之前的 on-policy 情况类似,我们需要推导 off-policy 情况下的策略梯度。
定理: 在折扣因子 γ∈(0,1) 的情况下,J(θ) 的梯度为:
∇θJ(θ)=ES∼ρ,A∼β[β(A∣S)π(A∣S,θ)∇θlnπ(A∣S,θ)qπ(S,A)]
其中 β 是行为策略,ρ 是一个状态分布。
证明:
由于 dβ 独立于 θ,因此 J(θ) 的梯度满足
∇θJ(θ)=∇θs∈S∑dβ(s)vπ(s)=s∈S∑dβ(s)∇θvπ(s).(10.12)
根据 引理9.2(见上节),∇θvπ(s) 的表达式为
∇θvπ(s)=s′∈S∑Prπ(s′∣s)a∈A∑∇θπ(a∣s′,θ)qπ(s′,a),(10.13)
其中 Prπ(s′∣s)≐∑k=0∞γk[Pπk]ss′=[(In−γPπ)−1]ss′。将 (10.13) 代入 (10.12) 得
∇θJ(θ)=s∈S∑dβ(s)∇θvπ(s)=s∈S∑dβ(s)s′∈S∑Prπ(s′∣s)a∈A∑∇θπ(a∣s′,θ)qπ(s′,a)=s′∈S∑(s∈S∑dβ(s)Prπ(s′∣s))a∈A∑∇θπ(a∣s′,θ)qπ(s′,a)≐s′∈S∑ρ(s′)a∈A∑∇θπ(a∣s′,θ)qπ(s′,a)=s∈S∑ρ(s)a∈A∑∇θπ(a∣s,θ)qπ(s,a)(将 s′ 换为 s)=ES∼ρ[a∈A∑∇θπ(a∣S,θ)qπ(S,a)].
利用重要性采样,上式可以转换为
ES∼ρ[a∈A∑∇θπ(a∣S,θ)qπ(S,a)]=ES∼ρ[a∈A∑β(a∣S)β(a∣S)π(a∣S,θ)π(a∣S,θ)∇θπ(a∣S,θ)qπ(S,a)]=ES∼ρ[a∈A∑β(a∣S)β(a∣S)π(a∣S,θ)∇θlnπ(a∣S,θ)qπ(S,a)]=ES∼ρ,A∼β[β(A∣S)π(A∣S,θ)∇θlnπ(A∣S,θ)qπ(S,A)].
证明完毕。上述证明类似于定理9.1的证明。
异策略 AC 算法
异策略策略梯度对于基准 b(s) 也是 不变 的。
- 特别地,我们有:
∇θJ(θ)=ES∼ρ,A∼β[β(A∣S)π(A∣S,θ)∇θlnπ(A∣S,θ)(qπ(S,A)−b(S))]
- 为了降低估计方差,常见的方法:选择基准为 b(S)=vπ(S),得到,
∇θJ(θ)=E[β(A∣S)π(A∣S,θ)∇θlnπ(A∣S,θ)(qπ(S,A)−vπ(S))]
- 对应的随机梯度上升算法为:
θt+1=θt+αθβ(at∣st)π(at∣st,θt)∇θlnπ(at∣st,θt)(qt(st,at)−vt(st))
- 与 on-policy 情况类似(Sarsa)
qt(st,at)−vt(st)≈rt+1+γvt(st+1)−vt(st)≐δt(st,at)
算法变为:θt+1=θt+αθβ(at∣st)π(at∣st,θt)∇θlnπ(at∣st,θt)δt(st,at)
因此,也能写作θt+1=θt+αθ(β(at∣st)δt(st,at))∇θπ(at∣st,θt)
伪代码
伪代码:基于重要性采样的异策略 Actor-Critic
(Off-policy Actor-critic Based on Importance Sampling)
- 初始化:给定行为策略 β(a∣s),目标策略 π(a∣s,θ0),其中 θ0 是初始参数向量;价值函数 v(s,w0),其中 w0 是初始参数向量。
- 目标:通过最大化 J(θ) 来搜索最优策略。
- 在每个回合的时间步 t,执行:
- 按照 β(st) 生成 at,然后观察 rt+1,st+1。
- TD error(优势函数):
δt=rt+1+γv(st+1,wt)−v(st,wt)
- Critic(价值更新):
wt+1=wt+αwβ(at∣st)π(at∣st,θt)δt∇wv(st,wt)
- Actor(策略更新):
θt+1=θt+αθβ(at∣st)π(at∣st,θt)δt∇θπ(at∣st,θt)
确定性 Actor-Critic (DPG)
Lec 51
到目前为止,策略梯度方法中使用的策略都是 stochastic 的,因为对于每个 (s,a) 都有 π(a∣s,θ)>0.
能否在策略梯度方法中使用 确定性策略(deterministic policies)?
- 好处:它可以处理连续动作!(无限个 action)
确定性策略的表示
确定性策略梯度定理
The Theorem of Deterministic Policy Gradient
- 之前介绍的策略梯度定理仅对随机策略有效。
- 如果策略必须是确定性的,我们必须推导一个新的策略梯度定理。
- 思想和步骤是类似的。
考虑折扣情况下的平均状态价值度量:
J(θ)=E[vμ(s)]=s∈S∑d0(s)vμ(s)
其中,d0(s) 是满足 ∑s∈Sd0(s)=1 的概率分布。
- d0 被选择为独立于 μ 的分布。在这种情况下,梯度更容易计算。
- 选择 d0 有两个特殊但重要的情况:
- 第一种:d0(s0)=1 且 d0(s=s0)=0,其中 s0 是一个特定的感兴趣的起始状态。
- 此时的目标函数的 J(θ)=∑vμ(s0)
- 第二种:d0 是一个与 μ 不同的 behavior policy 的平稳分布。
定理: 在折扣因子 γ∈(0,1) 的情况下,J(θ) 的梯度为:
∇θJ(θ)=s∈S∑ρμ(s)∇θμ(s)(∇aqμ(s,a))a=μ(s)=ES∼ρμ[∇θμ(S)(∇aqμ(S,a))a=μ(S)]
这里,ρμ 是一个 state 的分布。
证明较为繁琐。
与随机情况的一个重要区别:
- 梯度不涉及动作 A 的分布
- 这是因为,确定性策略会有替换:a=μ(s)
- 确定性策略梯度方法是 off-policy 的。
- 梯度并不涉及动作的分布,因此我们也无需关心动作样本是如何产生的——也就是说,我们可以任意选取 behavior policy 进行样本生成!
确定性 Actor-Critic 的算法
The Algorithm of Deterministic Actor-Critic
基于策略梯度,最大化 J(θ) 的梯度上升算法为:
θt+1=θt+αθES∼ρμ[∇θμ(S)(∇aqμ(S,a))a=μ(S)]
对应的随机梯度上升算法为:
θt+1=θt+αθ∇θμ(st)(∇aqμ(st,a))a=μ(st)
伪代码
确定性 Actor-Critic 算法 (Deterministic Actor-critic Algorithm)
- 初始化:给定行为策略 β(a∣s),确定性目标策略 μ(s,θ0),其中 θ0 是初始参数向量。价值函数 v(s,w0),其中 w0 是初始参数向量。
- 目标:通过最大化 J(θ) 来搜索最优策略。
- 在每个回合的时间步 t,执行:
- 按照 β 生成 at,然后观察 rt+1,st+1。
- TD error:
δt=rt+1+γq(st+1,μ(st+1,θt),wt)−q(st,at,wt)
- Critic(价值更新):
wt+1=wt+αwδt∇wq(st,at,wt)
- Actor(策略更新):
θt+1=θt+αθ∇θμ(st,θt)(∇aq(st,a,wt+1))a=μ(st)
说明:
- 这是一个 off-policy 的实现
- behavior policy 是 β
- target policy 是 μ
- 改造为 on-policy:令 β=μ+noise
- μ 是确定的,但 β 被赋予了一定的随机性
- 如何选择表示 q(s,a,w) 的函数?
- 线性函数:q(s,a,w)=ϕT(s,a)w,其中 ϕ(s,a) 是特征向量。
- 神经网络:深度确定性策略梯度(DDPG)方法。