深度教堂

  • 榜单数据10-16 17:00
  • 论文数据10-16 13:30
  • 周报10-17 11:22

Actor-Critic

未发布阅读约 54 分钟人工撰写已核查审核人 ai-fact-check

CS285CS285 L6(含 GAE)

本讲迁移自原课程讲义,经 AI 事实核查未发现存疑项,未逐页人工审核;如有出入,以原始论文和 CS285 课程资料为准。

第 04 讲核心模块策略梯度与价值方法对应 CS285 L6(含 GAE)

学习目标

  • 理解 actor(策略)+ critic(值函数)如何分工降方差。
  • 掌握优势估计 $A(s,a)=r+\gamma V(s')-V(s)$(TD 残差)及其含义。
  • 沿 MC↔TD↔n-step 说清偏差-方差权衡。
  • 能完整推导 GAE 并解释 $\lambda$ 的作用。
  • 理解折扣因子 $\gamma$ 的两种方差-偏差解读;掌握 A2C/A3C 架构;对 SAC/软 AC 有概览认知。

模块 03 把策略梯度的方差压到只剩”蒙特卡洛回报本身”。本模块给出最后一味药:用一个学到的 critic(值函数)来估计回报,以少量偏差换取巨大的方差下降。我们会把 MC 与 TD 统一在一条偏差-方差谱上,推导 n-step 与 GAE,揭示折扣因子 γ\gamma 作为”旋钮”的两种解读,并给出 A2C/A3C 的架构。Actor-critic 是现代深度 RL(PPO、SAC)的通用骨架。

学习目标

  • 理解 actor(策略)+ critic(值函数)如何分工降方差。
  • 掌握优势估计 A(s,a)=r+γV(s′)−V(s)A(s,a)=r+\gamma V(s')-V(s)(TD 残差)及其含义。
  • 沿 MC↔TD↔n-step 说清偏差-方差权衡。
  • 能完整推导 GAE 并解释 λ\lambda 的作用。
  • 理解折扣因子 γ\gamma 的两种方差-偏差解读;掌握 A2C/A3C 架构;对 SAC/软 AC 有概览认知。

编者按 · 批判性视角

本讲把 actor-critic 当作深度 RL 的”默认骨架”——在机器人与连续控制里这依然成立,但迁移到 LLM 尺度前必须重新评估。在大模型上,critic 是个负担:它意味着再训练一个与策略同量级的 value 模型;而在”仅终局、稀疏奖励”下 value 又很难学准,误差还会经自举传播放大。于是 critic-free 的 GRPO / RLOO 成为潮流,用蒙特卡洛式的”组均值”基线替掉学出来的 critic;同理,GAE 在终局奖励场景里意义也很有限。一句话:AC 仍是连续控制的主力,但”必须有 critic”绝非普遍真理。对照见 模块 13(LLM 与 RL) 与 模块 15(统一视角)。

1. 用 critic 估计回报

策略梯度的通用形式是 ∇θJ=E[∑t∇θlog⁡πθ(at∣st) Ψt]\nabla_\theta J=\mathbb{E}\big[\sum_t\nabla_\theta\log\pi_\theta(a_t\mid s_t)\,\Psi_t\big]。整节只回答一个问题:权重 Ψt\Psi_t——也就是”给每个动作记多少功劳”——到底该取什么? 我们沿一条主线一步步走:reward-to-go 与合格 baseline 可在保持 score-function 梯度期望的同时降方差;一旦用 approximate TD/GAE 自举,则通常以偏差换方差。模块 03 已推过其中前几步(似然比、reward-to-go、baseline 的无偏性),这里做递进式回顾并补齐被省略的逻辑链(不再从零重推,详见 模块 03),最终自然地把 critic「逼」出来。

1.1 权重 Ψt\Psi_t 的一步步精修:总回报 → reward-to-go → 减 baseline

① 最朴素的选择:整条轨迹的总回报。 令 Ψt=R(τ)=∑t′γt′rt′\Psi_t=R(\tau)=\sum_{t'}\gamma^{t'}r_{t'},即每个动作 ata_t 都被记上同一条轨迹的全部奖励。问题立刻暴露:这份总和里包含了 tt 时刻之前就已发生的奖励,而那些过去的奖励与”此刻选 ata_t“没有任何因果关系——它们对每个动作都只是一份纯噪声,白白把权重搅浑。噪声越多,Ψt\Psi_t 抖得越厉害 → 方差大。

② 因果性精修:换成 reward-to-go。 动作 ata_t 只可能影响 tt 及其之后的奖励,于是把”之前那段奖励”整块丢掉,换成 reward-to-go Q^t=∑t′≥tγt′−trt′\hat Q_t=\sum_{t'\ge t}\gamma^{t'-t}r_{t'}。因为丢掉的项在期望意义下与 ata_t 无关,这样做不引入任何偏差,却实打实降了方差——这正是”从整条总回报精修到 reward-to-go”的来历(纯粹是因果性,详见 模块 03)。可即便只留下未来,reward-to-go 仍是几十上百个随机奖励之和,方差依旧随剩余时域累积:

降方差直觉:方差为什么随时域累积

用 §3 的极简模型量一下 reward-to-go 还剩多少”痛”:设每步奖励近似独立、方差都是 σr2\sigma_r^2。则单次 reward-to-go 的方差是一条折扣几何和

Var⁡[Q^t]≈σr2∑k≥0γ2k=σr21−γ2,\operatorname{Var}\big[\hat Q_t\big]\approx\sigma_r^2\sum_{k\ge 0}\gamma^{2k}=\frac{\sigma_r^2}{1-\gamma^2},

在近似无折扣(γ→1\gamma\to1)、长度为 HH 的时域里它退化为 ≈H σr2\approx H\,\sigma_r^2——剩余步数越多,单次回报越吵。更糟的是,把它代回策略梯度、对整条轨迹求和后,梯度的方差会随时域约二次增长(O(T2)O(T^2),模块 03 §8)。纯 MC 无论怎么加技巧都绕不开这条:你是在用”一次随机游走的终点”去估计”这一步的价值”,而随机游走越长,终点越不可信。

③ 再减一个 baseline:仍无偏,又降一层方差。 reward-to-go 还是个”绝对量”:若某个状态本身就好、所有动作的回报都很大,那么好动作、坏动作都会拿到同号的大正权重(只是大小略有差别),于是被一起推高——真正有用的”谁比谁好”这点相对信息,淹没在共同的大尺度里,方差依旧很大。补救办法是减去一个只与状态有关、与所选动作无关的基线 b(st)b(s_t):

Ψt=Q^t−b(st).\Psi_t=\hat Q_t-b(s_t).

只依赖状态的 b(s)b(s) 是保证所减 score 项条件期望为零的常用充分条件,因此不改变期望梯度;更一般的边界与证明统一见 模块 03 无偏性权威表。这里不重复另一套条件。那 b(st)b(s_t) 取什么最好?直觉上应取”这个状态下平均能拿到的回报”——只有高于平均的动作才该被鼓励。而这个”状态的平均回报”正是下面要正名的 VV,也顺势把我们引向对 Q,V,AQ,V,A 三者关系的精确定义。

1.2 给这些量正名:QQ、VV、AA 到底是什么

上面反复出现的”回报""平均回报""比平均好多少”,其实各有精确的名字。一次讲透它们的关系,后面才不会先用后懂:

  • 动作值 Qπ(st,at)=E[Q^t∣st,at]Q^\pi(s_t,a_t)=\mathbb{E}\big[\hat Q_t\mid s_t,a_t\big]:在状态 sts_t 采取动作 ata_t、之后一路按策略 π\pi 走,平均能拿到的 reward-to-go。反过来看:我们手里那条 reward-to-go Q^t\hat Q_t,不过是 QπQ^\pi 的一次蒙特卡洛采样——无偏,但正因只采了一次,方差很大。
  • 状态值 Vπ(st)=Ea∼π[Qπ(st,a)]V^\pi(s_t)=\mathbb{E}_{a\sim\pi}\big[Q^\pi(s_t,a)\big]:在 sts_t 按 π\pi 选动作、平均能拿到的回报,也就是各动作的 QQ 按策略概率的加权平均。它衡量”状态 sts_t 本身有多好”,与具体选了哪个动作无关——这恰好就是第 ③ 步要找的那个”状态平均回报”基线。
  • 优势 Aπ(st,at)=Qπ(st,at)−Vπ(st)A^\pi(s_t,a_t)=Q^\pi(s_t,a_t)-V^\pi(s_t):动作 ata_t 比”该状态的平均水平”好多少。于是把第 ③ 步的基线取成 VV,权重 Ψt=Q^t−V(st)\Psi_t=\hat Q_t-V(s_t) 恰好是在估计优势 AπA^\pi。

一句话收口:QQ、VV、AA 的分工

QQ 是”某个动作”的期望回报,VV 是”某个状态”的期望回报(对动作求平均),A=Q−VA=Q-V 是这个动作相对该状态平均水平的优势。 而模块 03 一路精修出来的”reward-to-go 减 baseline” Q^t−V(st)\hat Q_t-V(s_t),本质上就是优势 AπA^\pi 的一次采样估计——Q^t\hat Q_t 估 QπQ^\pi、V(st)V(s_t) 顶 VπV^\pi。至此 Ψt\Psi_t“该取什么”已经有了答案:取优势。剩下的唯一问题是——这两个期望量,我们其实都还没有。

1.3 critic 登场:用学到的期望,替换高方差的采样

把上一步的答案摊开看,会露出两处”欠账”:Q^t\hat Q_t 只是 QπQ^\pi 的一次高方差采样,而当基线的 Vπ(st)V^\pi(s_t) 干脆是个未知量。要继续降方差,最自然的一步就是:不再用一次采样去凑,而是直接用一个函数逼近器把期望量本身学出来——学 VπV^\pi(或 QπQ^\pi)的这个逼近器,就是 critic(评论家)。这才是”用 critic 估计回报”的真义:并不是凭空拿某个 QQ 去替换 reward-to-go,而是我们本就需要 Q/V/AQ/V/A 这些期望量,critic 的职责正是估计它们——用一个(相对)平稳的预测值,顶替抖个不停的采样回报,还能借自举 A≈rt+γV(st+1)−V(st)A\approx r_t+\gamma V(s_{t+1})-V(s_t) 拿到低方差的优势(详见 §2)。

本质 Insight:critic 到底是什么

critic = 把”高方差的一次性回报样本 Q^t\hat Q_t“,换成”一个学出来的期望回报估计 Vϕ(s)V_\phi(s) / Qϕ(s,a)Q_\phi(s,a)”。 策略梯度权重 Ψt\Psi_t 里那个抖个不停的采样回报,被一个(相对)平稳的预测值顶替——这正是纯 MC 靠加采样、减 baseline 都做不到的降方差手段:它动的是”回报的表示”本身,而不只是给回报做减法。

易混点:VV 当”基线” ≠ VV 当”critic”(自举才算 critic)

初学者常在这里绊一下:§1.1 的”reward-to-go 减 baseline” Ψt=Q^t−V(st)\Psi_t=\hat Q_t-V(s_t) 里明明已经出现了 VV,为什么这里又说”把 Q^t\hat Q_t 换成 critic 估计”?关键在于分清两个符号、两种用途——注意换掉的是采样值 Q^t\hat Q_t(reward-to-go),不是期望量 QπQ^\pi(那个我们从来没拿到过)。

  • 阶段一 · VV 只当基线(REINFORCE with baseline)。 Ψt=Q^t−V(st)\Psi_t=\hat Q_t-V(s_t):回报信号本身仍是那条采样出来的 Q^t\hat Q_t,V(st)V(s_t) 只负责”减去公共尺度”这一步。VV 在这里没有参与生成回报,只做方差缩减。
  • 阶段二 · VV 升级为 critic(actor-critic)。 用自举 Q^t≈rt+γVϕ(st+1)\hat Q_t\approx r_t+\gamma V_\phi(s_{t+1}) 顶替那条高方差采样回报,于是 A^=rt+γVϕ(st+1)−Vϕ(st)=δt\hat A=r_t+\gamma V_\phi(s_{t+1})-V_\phi(s_t)=\delta_t。此时同一个 VϕV_\phi 身兼两职:既是基线 V(st)V(s_t),又通过自举生成回报估计。

判据(Sutton & Barto 的标准划分):只有当值函数被用于自举 bootstrapping 时,它才算 critic。 REINFORCE 里的 VV 基线不算 critic——它没参与自举、只做方差缩减,回报仍是纯 MC。所以”reward-to-go 减 baseline → 把 Q^t\hat Q_t 换成 critic 估计”不是重复、也不矛盾,而正是从 ”VV 当基线” 跃迁到 ”VV 当 critic(自举)” 的那一步——这也是下方”三件事”里 (b) 允许 TD/bootstrapping 之所以只属于 critic、而 baseline 给不了的根本原因。

展开:自举 bootstrapping 到底是什么(一眼看懂上面这条判据)

一句话定义。 自举 = 用”你自己当前对价值的估计”去构造更新目标,而不是用真实跑出来的完整回报——一句话,“用估计更新估计”。名字来自”拽着自己的鞋带把自己从地上提起来”(pull oneself up by one’s bootstraps):目标里含着自己产出的估计,自己给自己搭台阶。

对比:自举 vs 不自举。 同样是给 V(st)V(s_t) 找一个”更新目标”,两条路只差在”未来那段”用什么填:

做法更新目标“未来回报”怎么来是否自举
蒙特卡洛(MC)Q^t=∑t′≥trt′\hat Q_t=\sum_{t'\ge t} r_{t'}全是真实发生的奖励,不含任何估计值否
时序差分(TD)rt+γV(st+1)r_t+\gamma V(s_{t+1})只留一步真实奖励 rtr_t,其后整段真实回报被自己对下一状态的估计 V(st+1)V(s_{t+1}) 顶替是

TD 对应的增量更新就是 V(st)←V(st)+α[ rt+γV(st+1)−V(st) ]V(s_t)\leftarrow V(s_t)+\alpha\big[\,r_t+\gamma V(s_{t+1})-V(s_t)\,\big]:括号里那个 V(st+1)V(s_{t+1}) 是网络自己刚给出的估计,却被拿去当”真值”更新 V(st)V(s_t)——这就是”用估计更新估计”的字面写照。

回到 Sutton & Barto 判据:两者都学了 VV,区别只在 VV 用在哪

“真正的 actor-critic”与”带基线的 REINFORCE”都学了一个 V(s)V(s),唯一分野是这个 VV 有没有进到目标的构造里:

  • 只当 baseline(不算 critic): Ψt=[∑t′≥trt′]−V(st)\Psi_t=\big[\sum_{t'\ge t} r_{t'}\big]-V(s_t)。方括号里是真实采样回报,VV 只是被减去用来降方差,没进入目标的构造 → 没自举。
  • 用来自举(才算 critic): Ψt=[rt+γV(st+1)]−V(st)=δt\Psi_t=\big[r_t+\gamma V(s_{t+1})\big]-V(s_t)=\delta_t。未来真实回报 ∑t′>trt′\sum_{t'>t} r_{t'} 被 γV(st+1)\gamma V(s_{t+1}) 顶替,VV 进到了目标里 → 自举 → VV 才是 critic。

一眼判据。 看”下一/未来状态的价值 V(s′)V(s') 有没有出现在回报/目标里、去替代真实未来奖励”:出现 → 自举 → critic;没出现(只被减去当基线)→ 不算 critic。

为什么要强调这个区分? 因为自举正是偏差进来的地方:目标里含着不完美的 V(st+1)V(s_{t+1}),其误差会沿贝尔曼方程回代传播成系统性偏差;换来的是低方差与可在线单步更新。而”只当 baseline”是无偏的(目标用的是真实回报)。所以这条判据恰好标记了 “从哪一步起开始用估计换方差、并因此引入偏差”。

补一句谱系。 自举不是全或无:MC 完全不自举、TD(0) 一步即自举、而 n-step / GAE(λ) 先走几步真实奖励、再用 VV 自举掉剩下的,在偏差-方差之间连续调节(详见 §3、§4 GAE)。

于是系统自然分成两个部件,各司其职:

  • Actor(演员) πθ(a∣s)\pi_\theta(a\mid s):负责行动,用策略梯度更新。
  • Critic(评论家) Vϕ(s)V_\phi(s)(或 QϕQ_\phi):负责评估,用回归/自举更新,为 actor 提供低方差的优势信号。

举例

把纯蒙特卡洛回报想成”打完一整场篮球赛、等终场比分出来,才回头判断第三分钟那次传球到底好不好”——信号既慢又被中间无数偶然因素搅浑(高方差)。critic 则像一位有经验的教练在场边即时点评:球刚出手,他凭经验一句”这球质量不错”就给了反馈,不必等比赛结束。用即时、稳定的点评替代赛后回溯,方差骤降;代价是教练偶尔也会看走眼(这就是 critic 带来的偏差)。

把 Q^t\hat Q_t 换成 critic 估计,一举带来三件事,层层递进:

  • (a) 降方差(核心动机)。 用平稳的期望估计顶替嘈杂的单次采样回报,直接压掉 §1.1 里那项随时域累积的方差——这是养 critic 最根本的理由。
  • (b) 允许 bootstrapping / TD(顺带的大礼)。 有了 VϕV_\phi,可以用 rt+γVϕ(st+1)r_t+\gamma V_\phi(s_{t+1}) 顶替”从 tt 往后的整段回报”。于是不必等整条 episode 跑完,就能在线、单步增量更新——这对长时域、乃至持续(不终止)的任务是决定性的。
  • (c) 支撑更干净的优势信号。 critic 给出的 V(s)V(s) 天然是”与动作无关的基线”,让优势 A=Q−VA=Q-V 只保留”这个动作比平均好多少”的相对信息(详见 §2)。

为什么这样 · 能不能不这样

为什么值得再养一个网络当 critic? 模块 03 已把方差的其他来源(回报绝对尺度、无关的过去奖励)都无偏地消掉,只剩”蒙特卡洛回报本身”这一项最顽固——它随时域约二次增长(模块 03 §8,O(T2)O(T^2))。VϕV_\phi 用一个学到的估计顶替嘈杂的单次采样回报,把这项方差直接压下去,这是纯 MC 无论加多少技巧都做不到的。

那能不能永远用 MC、根本不碰 critic? 能,MC 无偏、实现最省事;代价是长时域下方差爆炸、样本效率极低。真想不学 critic,也另有出路(下面 §1.4 的对比表会把它们逐一摆开)——所以”要不要 critic”从来不是对错题,而是一道 “偏差与工程成本 vs 方差与样本量” 的权衡题。

1.4 代价与其它出路:没有免费的午餐

诚实的代价:降方差是拿偏差换来的

引入 critic 绝非白拿。VϕV_\phi 不可能完美(函数逼近误差 + 自举把误差沿贝尔曼方程层层回代传播),于是我们是用”可控的偏差”换来了”大幅下降的方差”。这一对矛盾——bias–variance——就是本章从头贯到尾的中心张力:§3 的 n-step、§4 的 GAE 全都是在这根轴上找甜点。记住这句话,后面所有”旋钮”都只是它的变奏。

那么,能不能换个法子也把方差压下去、还不欠这份偏差?把主要选项摆到一张表上,按 Ψt\Psi_t 的四种典型选择逐行对比:

Ψt\Psi_t 的选择偏差方差要跑完整 episode?样本 / 算力效率
整条轨迹总回报 ∑t′γt′rt′\sum_{t'}\gamma^{t'}r_{t'}无偏最高(还裹进与当前动作无关的过去奖励)要最差
reward-to-go(MC) Q^t=∑t′≥tγt′−trt′\hat Q_t=\sum_{t'\ge t}\gamma^{t'-t}r_{t'}无偏高(随剩余时域累积)要差
+ baseline 相减 Q^t−b(st)\hat Q_t-b(s_t)策略梯度无偏(bb 满足条件正交;b(s)b(s) 是充分条件);数值上仅当 b=Vπb=V^\pi 才无偏估 AπA^\pi中(扣掉公共尺度)要中
critic 自举 rt+γVϕ(s′)−Vϕ(s)r_t+\gamma V_\phi(s')-V_\phi(s)(及 n-step / GAE)有偏(critic 误差经自举传播)低(且可用 λ\lambda 调)不用(可在线单步)好

逐条读这张表,就能回答”还有没有更好的方式”:

  • 只是加大 batch / 多采样。 无偏、最稳妥,但纯靠 1/B1/B 硬压方差,样本与算力成本高,治标不治本——时域一长,需要的样本量就爆炸。
  • 只做 baseline 相减(第 3 行)。已经无偏且降方差(模块 03 的主力手段),但回报本身仍是 MC,方差仍随时域累积。critic 更进一步:连回报本身都换成自举估计(第 4 行),这正是 baseline 停下的地方。
  • 干脆不要 actor,纯 value-based / Q-learning。 学 Q⋆Q^\star 再贪心,方差低;但没有显式策略,面对连续动作要解 arg⁡max⁡aQ\arg\max_a Q、面对随机策略 / 策略约束也别扭(详见模块 05)。actor-critic 是折中:保留 actor(策略) 处理连续/随机动作,再用 critic 提供低方差信号。

结论:为什么通常是 critic 赢

没有免费的午餐——critic 用”可控的偏差”换”大幅降方差 + 可在线单步更新”。在样本/算力有限、时域较长的连续控制里,这笔交易通常最划算,所以 actor-critic 成了默认骨架。但”划算”不是绝对:到了仅终局、稀疏奖励的 LLM 场景,critic 又贵又难学准,“多采样 + 组均值基线”(GRPO/RLOO)反而更值——见本讲方法溯源与 模块 13。而”到底该用多大偏差换多少方差”,正是接下来 n-step / GAE 要拧的那个旋钮。

图 2:Actor 行动、环境反馈、Critic 评估并回传优势信号指导 Actor。评估与行动解耦是降方差的关键。

图 2:Actor 行动、环境反馈、Critic 评估并回传优势信号指导 Actor。评估与行动解耦是降方差的关键。

2. 优势估计与 TD 残差

有了 critic VϕV_\phi,最直接的优势估计只需一步真实奖励 + 一步自举,无需把整条轨迹采样到底:

A^(st,at)=rt+γVϕ(st+1)⏟一步 TD 目标 ≈ Q(st,at)−  Vϕ(st)  =:  δt.(4.1)\hat A(s_t,a_t)=\underbrace{r_t+\gamma V_\phi(s_{t+1})}_{\text{一步 TD 目标}\,\approx\,Q(s_t,a_t)}-\;V_\phi(s_t)\;=:\;\delta_t. \tag{4.1}

δt=rt+γVϕ(st+1)−Vϕ(st)\delta_t=r_t+\gamma V_\phi(s_{t+1})-V_\phi(s_t) 就是著名的 TD 残差(temporal-difference error)。它衡量”实际观察到的一步回报”与”critic 当前预测”之间的差距——既是优势的低方差估计,也是训练 critic 的误差信号。

举例

带一个新手下棋:当前局面你估价 V(s)=5V(s)=5(略占优)。走一步后立刻拿到即时收益 r=1r=1,并把新局面重新估成 V(s′)=6V(s')=6。取 γ=0.99\gamma=0.99,则 δ=1+0.99×6−5=0.94>0\delta=1+0.99\times6-5=0.94>0——意思是”这一步走得比我原先预期好一点点”,于是 critic 会把 V(s)V(s) 往上微调、actor 也更倾向这个动作。反之若算出 δ<0\delta<0,就说明结果比预期差,该动作会被压低。

推导:为什么 r+γV(s’) 是 Q(s,a) 的(有偏)估计?

依据

模块 02 的贝尔曼方程 Qπ(s,a)=r(s,a)+γ Es′[Vπ(s′)]Q^\pi(s,a)=r(s,a)+\gamma\,\mathbb{E}_{s'}[V^\pi(s')]。

第 1 步。 取一条真实转移 (st,at,rt,st+1)(s_t,a_t,r_t,s_{t+1}),用单个样本 st+1s_{t+1} 近似 Es′[Vπ(s′)]≈Vπ(st+1)\mathbb{E}_{s'}[V^\pi(s')]\approx V^\pi(s_{t+1}),得 Qπ(st,at)≈rt+γVπ(st+1)Q^\pi(s_t,a_t)\approx r_t+\gamma V^\pi(s_{t+1})。

第 2 步。 再用学到的 VϕV_\phi 近似真值 VπV^\pi,得 Q^=rt+γVϕ(st+1)\hat Q=r_t+\gamma V_\phi(s_{t+1}),于是 A^=Q^−Vϕ(st)=δt\hat A=\hat Q-V_\phi(s_t)=\delta_t。

偏差来源(局限): 用单个后继状态样本代替转移期望会增加采样方差,但在 Vϕ=VπV_\phi=V^\pi 时不引入偏差;偏差来自 Vϕ≠VπV_\phi\ne V^\pi 的函数逼近与自举误差 [1]。

为什么这样 · 能不能不这样

为什么用优势 A=Q−VA=Q-V 而不是直接用 QQ? 真正该驱动更新的是”这个动作比该状态平均好多少”。Q(s,a)Q(s,a) 里裹着”状态 ss 本身好不好”这块与所选动作无关的公共项;用 V(s)V(s) 把它扣掉,权重的正负号才对齐到”相对优劣”。这与模块 03 的 baseline 是同一件事——V(s)V(s) 是只依赖状态的基线,减它不改期望(式 (4.1) 的 δt\delta_t 就是它的一步 TD 版)。

能不能直接拿 QQ 当权重? 能,仍无偏(QQ 不依赖被减的量),但没扣掉公共项,方差更大:所有动作的权重被同一个 V(s)V(s) 大偏置同向抬高,有用的相对信号被淹没(正是模块 03 §5”回报绝对尺度”毛病的翻版)。那能不能反过来把 Q(s,a)Q(s,a) 当 baseline 去减? 不行——那是依赖动作的基线,会引入偏差(模块 03 已证得分函数技巧此时失效)。所以 A=Q−VA=Q-V 不是随手记号,而是”基线必须只依赖状态”这条无偏窄路的必然产物。

Critic 怎么训练? 让 VϕV_\phi 拟合 TD 目标(自举)或蒙特卡洛回报(回归):

TD:min⁡ϕ  (Vϕ(st)−[ rt+γVϕˉ(st+1) ])2,MC:min⁡ϕ  (Vϕ(st)−Q^t)2.(4.2)\text{TD:}\quad \min_\phi\;\big(V_\phi(s_t)-[\,r_t+\gamma V_{\bar\phi}(s_{t+1})\,]\big)^2,\qquad \text{MC:}\quad \min_\phi\;\big(V_\phi(s_t)-\hat Q_t\big)^2. \tag{4.2}

其中 ϕˉ\bar\phi 表示目标网络/停止梯度(把自举目标当常数),否则会追着自己的尾巴、训练不稳。

3. 偏差-方差权衡(MC vs TD, n-step)

优势/回报的估计存在一条连续谱,两端是:

估计形式偏差方差
蒙特卡洛(MC)A^t=∑t′≥tγt′−trt′−b(st)\hat A_t=\sum_{t'\ge t}\gamma^{t'-t}r_{t'}-b(s_t)对策略梯度可无偏;仅当 b=Vπb=V^\pi 时才对 AπA^\pi 数值无偏高(整条轨迹随机性累积)
一步 TDA^t=rt+γV(st+1)−V(st)\hat A_t=r_t+\gamma V(s_{t+1})-V(s_t)有偏(VV 不准 + 自举)低(只含一步随机性)
n-stepA^t=∑k=0n−1γkrt+k+γnV(st+n)−V(st)\hat A_t=\sum_{k=0}^{n-1}\gamma^k r_{t+k}+\gamma^n V(s_{t+n})-V(s_t)介于两者介于两者

本质 Insight:MC 与 TD 的对立到底是什么?

MC 相信真实采样,不相信 critic——它把回报一路采样到底,只信真金白银的奖励,所以无偏;代价是采了太多随机步,方差爆炸。TD 相信 critic,早早”止损”——只走一步就用 V(s′)V(s') 顶替剩下所有未来,方差小;但如果 VV 不准,这个偏差会通过自举一路传染。n-step 是二者之间的滑块:走 nn 步真实奖励再自举,nn 越大越像 MC(低偏差高方差),nn 越小越像 TD。GAE 的下一步就是——不选某个固定 nn,而是把所有 nn 加权平均。

图 3:从 TD(左)到 MC(右),方差上升、偏差下降。GAE 用 \lambda 连续地在这条谱上寻找甜点。

图 3:从 TD(左)到 MC(右),方差上升、偏差下降。GAE 用 λ\lambda 连续地在这条谱上寻找甜点。

玩具例子:把”偏差-方差”算成数字

为了让上面的定性谱变得可触摸,考虑一个极简模型:每步奖励 rtr_t 相互独立、方差都是 σr2\sigma_r^2;明确假设当前状态的 Vϕ(st)V_\phi(s_t) 无误差,而被自举的末端状态满足 Vϕ(st+n)=Vπ(st+n)+εV_\phi(s_{t+n})=V^\pi(s_{t+n})+\varepsilon。对 nn-step 优势 A^t(n)=∑k=0n−1γkrt+k+γnVϕ(st+n)−Vϕ(st)\hat A_t^{(n)}=\sum_{k=0}^{n-1}\gamma^k r_{t+k}+\gamma^n V_\phi(s_{t+n})-V_\phi(s_t),两项可分别算:

  • 方差来自 nn 个随机奖励项的折扣和:Var⁡[A^t(n)]≈σr2∑k=0n−1γ2k=σr21−γ2n1−γ2\operatorname{Var}\big[\hat A_t^{(n)}\big]\approx\sigma_r^2\sum_{k=0}^{n-1}\gamma^{2k}=\sigma_r^2\dfrac{1-\gamma^{2n}}{1-\gamma^2},随 nn 单调上升,上确界 σr21−γ2\dfrac{\sigma_r^2}{1-\gamma^2}(即 MC)。
  • 偏差只来自那一步被自举进来的 critic 误差:∣bias∣≈γn∣ε∣|\text{bias}|\approx\gamma^n|\varepsilon|,随 nn 单调下降,n→∞n\to\infty(MC)时归零。

代入 γ=0.9, σr2=1, ε=2\gamma=0.9,\ \sigma_r^2=1,\ \varepsilon=2,逐个 nn 算出来(MSE=bias2+Var\text{MSE}=\text{bias}^2+\text{Var}):

nn方差 1−γ2n1−γ2\frac{1-\gamma^{2n}}{1-\gamma^2}∣bias∣=γnε\vert \text{bias}\vert =\gamma^n\varepsilonMSE\text{MSE}定位
1(TD)1.001.804.24最低方差 · 最高偏差
21.811.624.44偏 TD
32.471.464.60居中
53.431.184.82偏 MC
∞(MC)5.2605.26无偏 · 最高方差

数字把定性谱坐实了:nn 从 1 走到 ∞,方差 1.00→5.261.00\to5.26 一路涨、偏差 1.80→01.80\to0 一路降。哪个 nn 最优取决于二者的相对量级(此例里 critic 误差不算大,故小 nn 的 MSE 反而略低;若 ε\varepsilon 更大,甜点就会右移)。GAE 的高明之处在于:它不在这些整数 nn 里挑一个,而是用 λ\lambda 对所有 nn 做指数加权,等效地把”有效视野”连续地放到 1 与 ∞ 之间——于是能取到表格行与行”之间” 的偏差-方差组合。

图 4:n-step 的方差(红)随 n 单调上升、偏差(青)单调下降的定量对照。GAE 的 \lambda 相当于在这条离散刻度上做连续插值。

图 4:nn-step 的方差(红)随 nn 单调上升、偏差(青)单调下降的定量对照。GAE 的 λ\lambda 相当于在这条离散刻度上做连续插值。

4. GAE 广义优势估计

广义优势估计(Generalized Advantage Estimation, GAE)(Schulman et al., 2016)不在众多 n-step 里挑一个,而是对所有 n-step 优势做指数加权平均,用一个参数 λ∈[0,1]\lambda\in[0,1] 平滑地控制偏差-方差。

举例

把 λ\lambda 想成一个滑块,它调的是”我先相信几步真实奖励,之后再把剩下的未来交给 critic 估计”。滑到 λ=0\lambda=0:只信眼前一步真实、马上交给 critic(省心,但 critic 一错就偏);滑到 λ=1\lambda=1:一路只认真实奖励、根本不让 critic 插手(诚实,但噪声大)。滑到中间(如 λ=0.95\lambda=0.95)就像”先自己盯紧眼前十来步、再把更远的未来托付给经验判断”——既借了 critic 的稳,又没被它带偏。

推导:GAE(从 n-step 到指数加权闭式)

记号与假设

TD 残差 δt=rt+γV(st+1)−V(st)\delta_t=r_t+\gamma V(s_{t+1})-V(s_t);VV 为固定 critic;无限时域近似。

第 1 步(n-step 优势用 TD 残差表示)。 定义 nn 步优势

A^t(n)=∑k=0n−1γkrt+k+γnV(st+n)−V(st).(4.3)\hat A_t^{(n)}=\sum_{k=0}^{n-1}\gamma^k r_{t+k}+\gamma^n V(s_{t+n})-V(s_t). \tag{4.3}

可以验证它等于前 nn 个 TD 残差的折扣和(望远镜求和,中间的 VV 逐项抵消):

A^t(n)=∑k=0n−1γk δt+k.(4.4)\hat A_t^{(n)}=\sum_{k=0}^{n-1}\gamma^k\,\delta_{t+k}. \tag{4.4}

第 2 步(望远镜验证,以 n=2 为例)。 展开两个 TD 残差,中间的 V(st+1)V(s_{t+1}) 一正一负相消:

δt+γδt+1=(rt+γV(st+1)−V(st))+γ(rt+1+γV(st+2)−V(st+1))=rt+γrt+1+γ2V(st+2)−V(st)=A^t(2).  ✓(4.5)\begin{aligned} \delta_t+\gamma\delta_{t+1}&=\big(r_t+\gamma V(s_{t+1})-V(s_t)\big)+\gamma\big(r_{t+1}+\gamma V(s_{t+2})-V(s_{t+1})\big)\\ &=r_t+\gamma r_{t+1}+\gamma^2 V(s_{t+2})-V(s_t)=\hat A_t^{(2)}.\;\checkmark \end{aligned} \tag{4.5}

第 3 步(对所有 n 做几何加权)。 GAE 取权重 ∝λn−1\propto\lambda^{n-1}(归一化因子 1−λ1-\lambda):

A^tGAE(γ,λ)=(1−λ)∑n=1∞λn−1A^t(n)=(1−λ)∑n=1∞λn−1∑k=0n−1γkδt+k.(4.6)\hat A_t^{\text{GAE}(\gamma,\lambda)}=(1-\lambda)\sum_{n=1}^{\infty}\lambda^{n-1}\hat A_t^{(n)}=(1-\lambda)\sum_{n=1}^{\infty}\lambda^{n-1}\sum_{k=0}^{n-1}\gamma^k\delta_{t+k}. \tag{4.6}

第 4 步(交换求和次序化简——用几何级数求和)。 交换 n,kn,k 的求和次序:δt+k\delta_{t+k} 出现在所有 n≥k+1n\ge k+1 的 nn-step 优势里,对固定 kk 把这些项的权重加总,是一条公比为 λ\lambda 的几何级数:(1−λ)∑n=k+1∞λn−1=(1−λ)(λk+λk+1+⋯)=(1−λ)⋅λk1−λ=λk(1-\lambda)\sum_{n=k+1}^{\infty}\lambda^{n-1}=(1-\lambda)\big(\lambda^{k}+\lambda^{k+1}+\cdots\big)=(1-\lambda)\cdot\dfrac{\lambda^{k}}{1-\lambda}=\lambda^{k}。再连同 δt+k\delta_{t+k} 自带的 γk\gamma^k,每个残差的系数正好是 (γλ)k(\gamma\lambda)^k,于是得到惊人简洁的闭式:

  A^tGAE(γ,λ)=∑k=0∞(γλ)k δt+k.  (4.7)\boxed{\;\hat A_t^{\text{GAE}(\gamma,\lambda)}=\sum_{k=0}^{\infty}(\gamma\lambda)^k\,\delta_{t+k}.\;} \tag{4.7}

第 5 步(两端极限)。 当 λ=0\lambda=0:A^t=δt\hat A_t=\delta_t,退化为一步 TD(低方差、高偏差); 当 λ=1\lambda=1:A^t=∑kγkδt+k=∑t′≥tγt′−trt′−V(st)\hat A_t=\sum_k\gamma^k\delta_{t+k}=\sum_{t'\ge t}\gamma^{t'-t}r_{t'}-V(s_t),退化为蒙特卡洛回报减基线(完整 on-policy 轨迹下,对策略梯度无偏,但方差高;若把它当作 AπA^\pi 的数值估计,仍取决于基线是否等于 VπV^\pi)。

局限: GAE 的偏差分析假设 VV 固定且合理;λ\lambda 需调参(常用 0.9–0.97)。它只降低优势估计的方差,不改变策略梯度本身对 on-policy 数据的依赖。

为什么这样 · 能不能不这样

为什么把所有 nn-step 指数加权,而不是固定选某个 nn? 单个 nn-step 只能落在偏差-方差谱的一个离散刻度上(§3 表格),而最优的 nn 又取决于你事先并不知道的 critic 误差与回报方差。GAE 用几何权重 (1−λ)λn−1(1-\lambda)\lambda^{n-1} 把所有 nn 揉成一个量,化简后是惊人简洁的 ∑k(γλ)kδt+k\sum_k(\gamma\lambda)^k\delta_{t+k}(式 (4.7))——单一连续的 λ\lambda 就滑遍整条谱(λ=0\lambda=0 退成一步 TD、λ=1\lambda=1 退成 MC),还能 O(T)O(T) 反向递推算出。

能不能就固定选某个 nn(比如 n=5n=5)? 能,实现更直白;但你被钉死在一个刻度上,任务一变(critic 越训越准、或回报变吵)甜点就移走,只能重试不同整数 nn,粒度粗且每次重算。为什么偏偏是”指数”衰减、而非别的权重? 几何衰减让加权和望远镜式坍缩成只需一个递推状态的单参数闭式(式 (4.6)→(4.7)),因而可一遍 O(T)O(T) 计算;其他有限窗或特殊核也可能做到线性时间,但通常需要更多状态,且不再有这条简洁的一阶递推。

实现上,式 (4.7) 可用反向递推一遍算出(O(T)O(T)):

A^tGAE=δt+γλ A^t+1GAE.(4.8)\hat A_t^{\text{GAE}}=\delta_t+\gamma\lambda\,\hat A_{t+1}^{\text{GAE}}. \tag{4.8}

推导(另一条路):从 λ-return / TD(λ) 出发,并把每步假设摊开

记号与假设(逐条)

  • A1(固定 critic):推导中把 V=VϕV=V_\phi 视为常量,不随本次优势计算变化——否则”望远镜抵消”不成立。
  • A2(无限时域 / 充分长轨迹):几何级数求和到 ∞\infty;有限时域时末端用 V(sT)V(s_T) 收尾(实现里对终止步乘 (1−done)(1-\text{done}))。
  • A3(γλ<1\gamma\lambda<1):保证 ∑k(γλ)k\sum_k(\gamma\lambda)^k 收敛,“有效视野”有限。

第 1 步(nn-step 回报 = value 目标)。 定义 nn-step 回报 Gt(n)=∑k=0n−1γkrt+k+γnV(st+n)G_t^{(n)}=\sum_{k=0}^{n-1}\gamma^k r_{t+k}+\gamma^n V(s_{t+n}),它是 critic 的一个自举目标。对应优势 A^t(n)=Gt(n)−V(st)\hat A_t^{(n)}=G_t^{(n)}-V(s_t)。

第 2 步(λ-return = 对所有 nn-step 目标几何加权)。 TD(λ) 的 λ\lambda-return 定义为

Gtλ=(1−λ)∑n=1∞λn−1Gt(n).(4.9)G_t^{\lambda}=(1-\lambda)\sum_{n=1}^{\infty}\lambda^{n-1}G_t^{(n)}. \tag{4.9}

权重 (1−λ)λn−1(1-\lambda)\lambda^{n-1} 归一(∑n≥1(1−λ)λn−1=1\sum_{n\ge1}(1-\lambda)\lambda^{n-1}=1,用到 A2)。

第 3 步(GAE 优势 = λ-return 减 baseline)。 两端同减 V(st)V(s_t)(它与 nn 无关,可提出加权和外):

A^tGAE=Gtλ−V(st)=(1−λ)∑n=1∞λn−1(Gt(n)−V(st))=(1−λ)∑n=1∞λn−1A^t(n).(4.10)\hat A_t^{\text{GAE}}=G_t^{\lambda}-V(s_t)=(1-\lambda)\sum_{n=1}^{\infty}\lambda^{n-1}\big(G_t^{(n)}-V(s_t)\big)=(1-\lambda)\sum_{n=1}^{\infty}\lambda^{n-1}\hat A_t^{(n)}. \tag{4.10}

这与主推导第 3 步(式 (4.6))完全一致——两条路(“加权 nn-step 优势”与”λ\lambda-return 减 baseline”)殊途同归,再经交换求和即得式 (4.7) 的 ∑k(γλ)kδt+k\sum_k(\gamma\lambda)^k\delta_{t+k}。

第 4 步(把 λ\lambda 读成”有效视野”)。 闭式里权重是 (γλ)k(\gamma\lambda)^k,等比衰减的有效步数约为 11−γλ\frac{1}{1-\gamma\lambda}。代入常用超参:

  • γ=0.99,λ=1\gamma=0.99,\lambda=1:11−0.99=100\frac{1}{1-0.99}=100 步(退化为 MC,看满整个 γ\gamma-视野)。
  • γ=0.99,λ=0.95\gamma=0.99,\lambda=0.95:γλ=0.9405\gamma\lambda=0.9405,11−0.9405≈16.8\frac{1}{1-0.9405}\approx16.8 步(只往后看约 17 步再交给 critic)。
  • γ=0.99,λ=0\gamma=0.99,\lambda=0:11 步(退化为一步 TD)。

可见 λ\lambda 把优势估计的”真实奖励视野”从 1 步连续调到 11−γ\frac{1}{1-\gamma} 步——这正是 §5 里”γ\gamma 定问题视野、λ\lambda 定估计视野”分工的量化版本。

本质 Insight:λ 是什么旋钮?

λ\lambda 是 “你多信任 critic” 的旋钮。λ→0\lambda\to 0:极度信任 VϕV_\phi,只看一步就自举(省方差,但 VV 一错就偏)。λ→1\lambda\to 1:完全不信 VϕV_\phi 的外推,把真实奖励一路采到底(无偏,但方差大)。γλ\gamma\lambda 联合决定了 TD 残差”往后看多远”的有效视野。实践中 λ≈0.95\lambda\approx0.95 常常是甜点:既借了 critic 的方差红利,又没被它的偏差带偏。

前沿实践

GAE 可用于计算策略梯度中的优势估计;其定义与偏差—方差讨论见原论文 [1]。无 critic 的组相对方法则使用组内回报构造优势,属于另一种工程取舍。

本质 Insight:baseline、critic、GRPO 组均值都是同一个”控制变量”

把本讲和上一讲的降方差工具摆到一起,会发现它们都在利用控制变量(control variate):baseline b(s)b(s)、学出来的 critic Vϕ(s)V_\phi(s)、n-step/GAE 里被减掉的那个 VV,以及 GRPO 的同题组基线。严格的“减基线不改期望”要求基线不依赖当前被评分动作;因此组采样时应使用留一均值才严格无偏。GRPO 常用的“含自身组均值再除组标准差”是实用的归一化估计,并不满足最朴素的无偏控制变量证明。差别不仅在控制变量怎么来,也在是否引入有限组相关性与归一化偏置:AC 用学出来的 VϕV_\phi,critic-free 方法用同组样本换掉 critic。详见 模块 13 §11。

批判性追问:“critic 降方差”这句要打几个折扣

本讲反复说”用 critic 估计回报降方差”,但这句话有两处必须说破的代价:

  • 降方差可能引入偏差,且自举会传播函数逼近误差。 critic 一旦不准(Vϕ≠VπV_\phi\ne V^\pi),TD 目标 r+γVϕ(s′)r+\gamma V_\phi(s') 就含有估计误差;反复自举会传播这份误差。它并非必然“复利放大”:表格型 on-policy TD 在标准条件下可收敛;真正危险的是自举再叠加 off-policy 与函数逼近,即模块 05 的 “致命三要素”(deadly triad),此时才可能发散。AC 的降方差不是免费的,但风险强弱取决于采样分布、表示与优化条件。
  • GAE 的”甜点 λ\lambda“依赖你并不知道的量。 图 3 / §4 里那个”恰到好处的 λ\lambda“看着诱人,可它的最优值取决于critic 误差有多大、回报方差有多大这些事先未知的量(下一条”深化拓展”把这句坐实成公式)。所以 λ\lambda 只能靠调参去逼近,0.950.95 是经验缺省而非普适最优;换个任务、换个 critic,甜点就会移动。把 λ≈0.95\lambda\approx0.95 当成”总是对的”是常见误区。

深化拓展:GAE 的 λ\lambda 如何权衡偏差与方差

λ\lambda 增大时,GAE 通常减少对短期自举估计的依赖并纳入更多未来残差,因此常表现为偏差下降、方差上升。但相邻 TD 残差共享价值估计项,不能仅由“逐步奖励独立”推出残差独立;最优 λ\lambda 也不具有脱离完整误差模型的通用单调公式。它取决于 critic 误差、奖励与状态相关性、轨迹截断等因素,应通过验证选择 [1]。

5. 折扣因子作为方差-偏差旋钮

γ\gamma 不只是”未来打折”这么简单。在 actor-critic 语境里,它有两种互补解读,都指向”γ\gamma 是另一个方差-偏差旋钮”。

5.1 解读一:有效时域 = 方差控制

γ<1\gamma<1 让”有效时域”约为 11−γ\frac{1}{1-\gamma} 步。γ\gamma 越小,只在意近期回报,式 (4.7) 里 ∑(γλ)kδ\sum(\gamma\lambda)^k\delta 的求和项迅速衰减 → 方差更小;但也更短视,对真正需要长期规划的任务引入偏差(把远期真实回报打折甚至忽略)。

推导:折扣等价于”每步 1−γ 概率终止”的几何时域

第 1 步。 设一个无折扣过程,但每步以概率 1−γ1-\gamma 突然终止(吸收态,之后奖励为 0)。则第 tt 步奖励仍”存活”的概率是 γt\gamma^t。

第 2 步。 该随机终止过程的期望回报 =E[∑t1[存活到 t] rt]=∑tγtrt=\mathbb{E}\big[\sum_t \mathbb{1}[\text{存活到 }t]\,r_t\big]=\sum_t \gamma^t r_t,正是折扣回报。

结论: γ\gamma 折扣 ⇔ 引入一个几何分布的随机时域,均值 11−γ\frac{1}{1-\gamma}。这解释了为什么小 γ\gamma = 短时域 = 低方差但短视。

5.2 解读二:γ 与 λ 分工

Schulman 在 GAE 论文里明确区分两者:γ\gamma 决定”我们真正想优化多长的时域”(可视为问题定义/偏差项),λ\lambda 决定”在给定 γ\gamma 下如何在偏差-方差间平衡估计”。二者都能降方差,但 γ\gamma 的降方差以改变优化目标本身(更短视)为代价,而 λ\lambda 只影响估计不改目标。

陷阱

把 γ\gamma 调小来”稳住训练”是常见但危险的手段:它确实降方差、加速收敛,但你已经偷偷改了任务——优化的是一个更短视的目标,可能学不会需要长期布局的行为。若要长时域最优,应优先用 λ\lambda、critic、更多样本来降方差,而非一味压低 γ\gamma。

6. on-policy Actor-Critic 的架构

把前面拼起来,得到最基础的 on-policy(批)actor-critic 训练循环。它有一个最容易被初学者忽略的结构特征:系统里同时存在两套参数、两个损失——actor 的策略参数 θ\theta(由策略梯度上升)与 critic 的值函数参数 ϕ\phi(由回归损失下降)。整节把这个循环拆开讲透:先给逐步伪代码,再对比 batch 与在线两种形态,接着摊开关键设计选择,最后走一遍完整的数据流并列出实践陷阱。

6.1 完整算法:batch actor-critic 主循环

“batch”指的是每次迭代先用当前策略 πθ\pi_\theta 采一整个 batch 的数据,再在这批数据上依次拟合 critic、算优势、更新 actor,然后把数据丢弃、进入下一轮。§2 已给出优势 A^=δt\hat A=\delta_t 与 critic 的回归目标(式 (4.1)、(4.2)),§4 给出更一般的 GAE;这里把它们组装成一个可执行的主循环,并明确标出两套参数各自的更新:

# Batch Actor-Critic —— 主循环(on-policy / 批)
# 两套参数:actor θ(策略 π_θ)、critic φ(值函数 V_φ)
# 两个损失:critic 回归损失 L(φ)(下降)、actor 策略目标 J(θ)(上升)
for iteration in range(N):

    # (1) 用当前策略 π_θ 采一个 batch 的转移/轨迹(必须来自当前 π_θ:on-policy)
    D = collect_rollouts(π_θ, num=B)            # {(s_i, a_i, r_i, s'_i, done_i)}

    # (2) 拟合 critic V_φ:先给每个样本构造回归目标 y_i,再对整个 batch 回归 K 步
    for i in D:
        if 用蒙特卡洛目标(MC):
            y_i = Σ_{t'≥t} γ^(t'−t) · r_{t'}        # MC 目标:无偏、但方差大(要跑完整段回报)
        else:                                       # 自举 / TD 目标
            y_i = r_i + γ · (1−done_i) · V_φ(s'_i)  # bootstrap:低方差、有偏;V_φ 停梯度当常量
    for k in range(K_critic):                       # 每次 actor 更新配 K_critic 步 critic 回归
        L(φ) = Σ_i ( V_φ(s_i) − y_i )^2             # ← critic 损失(回归),只更新 φ
        φ ← φ − α_φ · ∇_φ L(φ)                      #   梯度下降

    # (3) 用拟合好的 critic 算优势(一步 TD;或 GAE,见 §4 #gae)
    Â_i = r_i + γ · (1−done_i) · V_φ(s'_i) − V_φ(s_i)   # = δ_i;GAE:Â = Σ_k (γλ)^k δ_{t+k}
    Â   = (Â − mean(Â)) / (std(Â) + 1e-8)               # 批内标准化(可选,稳梯度、降方差)

    # (4) 算策略梯度(用 batch 均值近似期望)
    ∇_θ J ≈ (1/N) · Σ_i ∇_θ log π_θ(a_i | s_i) · Â_i    # ← actor 目标 J(θ) 的梯度,只更新 θ

    # (5) 更新 actor(梯度上升)
    θ ← θ + α_θ · ∇_θ J

    # (6) 丢弃 D(on-policy,用后即弃),回到 (1)

把两套更新并排写出,对比最清楚——它们方向相反、各管各的参数:

critic(下降):ϕ←ϕ−αϕ ∇ϕ L(ϕ),    L(ϕ)=∑i(Vϕ(si)−yi)2;\text{critic(下降):}\quad \phi\leftarrow\phi-\alpha_\phi\,\nabla_\phi\,L(\phi),\;\; L(\phi)=\sum_i\big(V_\phi(s_i)-y_i\big)^2; actor(上升):θ←θ+αθ ∇θJ,    ∇θJ≈1N∑i∇θlog⁡πθ(ai∣si) A^i.\text{actor(上升):}\quad \theta\leftarrow\theta+\alpha_\theta\,\nabla_\theta J,\;\; \nabla_\theta J\approx\frac1N\sum_i\nabla_\theta\log\pi_\theta(a_i\mid s_i)\,\hat A_i.

本质 Insight:一次迭代里”谁给谁供货”

这一轮里两套参数是单向供货的流水线:critic 先把自己拟合到回报目标 yiy_i 上(步 (2)),再把拟合好的 VϕV_\phi 借给步 (3) 生成低方差的优势 A^i\hat A_i;actor 拿这个 A^i\hat A_i 当”每个动作记多少功劳”的权重去做策略梯度(步 (4)–(5))。critic 只负责”评分”、不直接被策略梯度碰(∇θJ\nabla_\theta J 里把 A^i\hat A_i 当常量、对 VϕV_\phi 停梯度);actor 只负责”行动”、不参与回归。看懂这条供货关系,就明白为什么下面”critic 没拟合好就更新 actor”是致命的——上游供了脏数据,下游整批梯度都被带偏。

跨域洞见:Actor-Critic 与 GAN 是同一类”双网络耦合训练”吗?(Pfau & Vinyals, 2016)

上面这条”两套参数、先拟合 critic 再更新 actor、交替推进”的结构,会让人立刻想到另一个也靠两网络交替训练的家族——GAN。这不是巧合:Pfau & Vinyals(2016)《Connecting Generative Adversarial Networks and Actor-Critic Methods》 正式把二者放到同一张”双网络耦合优化”的地图上。把它拆成”像""不像”两面,恰好能反过来照亮 AC 的独特性。

像的地方:都是”评估者 ↔ 生成者”的耦合动力学

  • (1) 两网络、交替更新、一个给另一个供信号。 AC 里 critic VϕV_\phi 给 actor 供优势信号 A^\hat A(“这个动作比平均好多少”);GAN 里 discriminator DD 给 generator GG 供真实度信号(“这个样本有多像真的”)。两边都是”评估者算一个标量,喂给生成/决策者去改行为”,且都交替推进——正是本节这条”先拟合评估者、再更新行动者”的流水线。
  • (2) 移动靶导致同款不稳定。 评估者要评的对象(actor 的策略 / GG 的生成分布)一直在变,于是评估者永远在追一个移动靶;反过来评估者不准又会把行动者带偏。两边都极度依赖”评估者与生成者更新节奏的平衡”:GAN 的经典处方是”每更新一次 GG,先训 DD 走 kk 步”,AC 的对应处方是本节 §6.3 的”每次 actor 更新配 KcriticK_{\text{critic}} 步 critic 回归”——这两条其实是同构的调参处方,都在防”评估者跟不上 / 或过拟合当前对手”这同一种病。

不像的关键:合作 vs 对抗(这才是本质分野)

  • (1) 合作 vs 对抗。 AC 里 actor 与 critic 利益一致:critic 只想把 VπV^\pi 估准来帮 actor,两者在同一个回报目标上一起往上爬,更像策略迭代 / 坐标上升。GAN 则是零和的 min⁡Gmax⁡D\min_G\max_D:GG 与 DD 目标严格对立。
  • (2) 评估者的目标不同。 critic 回归的是由 actor 自己 rollout 导出的 Bellman / TD 目标(y=r+γV(s′)y=r+\gamma V(s')),目标跟随 actor 一起漂移;discriminator 则是对一个固定的真实数据分布做分类,靶子的”真”那一侧不随 GG 变。
  • (3) 收敛对象不同。 AC 追的是策略迭代的不动点(最优策略 + 其相容值函数);GAN 追的是一个纳什均衡。
  • (4) 梯度怎么流不同。 在随机策略的 AC 里,actor 把 critic 给的标量优势当权重用(score-function / 似然比梯度 ∇θlog⁡πθ⋅A^\nabla_\theta\log\pi_\theta\cdot\hat A),梯度并不穿过 critic 反传——A^\hat A 是被 detach 的常量(正是上面”对 VϕV_\phi 停梯度”)。GAN 的 generator 则把梯度穿过 discriminator 一路反传回 GG。

一个漂亮补全:确定性策略 AC(DPG/DDPG)才与 GAN 结构真正对上

第 (4) 点那处”穿不穿过评估者”的错位,在确定性策略 actor-critic(DPG / DDPG) 里恰好被补齐:那里 actor 是确定性映射 μθ(s)\mu_\theta(s),其目标是最大化 Qϕ(s,μθ(s))Q_\phi\big(s,\mu_\theta(s)\big),梯度 ∇θQ=∇aQ∣a=μθ(s) ∇θμθ(s)\nabla_\theta Q=\nabla_a Q\big|_{a=\mu_\theta(s)}\,\nabla_\theta\mu_\theta(s) 确确实实穿过 critic QQ 反传回 actor。这才和 GAN 的”generator 的梯度穿过 discriminator”在结构上一一对应——也正是 Pfau & Vinyals 论文的落点:DPG 型 AC 与 GAN 是同一套”可微评估者驱动生成者”的模板。

一句话收口: AC 与 GAN 共享”双网络耦合 / 移动靶 / 必须平衡两者更新节奏”这套动力学与工程病理(所以两边的稳定化技巧常能互相借鉴),但博弈性质相反——AC 是合作(同爬一个目标的策略迭代),GAN 是对抗(零和纳什)。看懂这一层,本节”先 critic 再 actor、交替更新”的处方就不再是 RL 独有的怪癖,而是一切耦合双网络训练的共同纪律。

6.2 batch 版 vs 在线(online)版

同一套 actor-critic 公式,按 “多久更新一次、用多少数据更新” 可以落成两种形态。batch 版攒一整批再更新,在线版每走一步(或几步)就更新一次:

维度batch 版(本节)在线 online 版
数据收集先采整批 BB 条轨迹/转移,再统一处理每步产生一个转移 (s,a,r,s′)(s,a,r,s') 立即用
更新时机一批采完后集中更新 actor/critic每步(或极小 mini-batch)就更新一次
梯度方差低(1/B1/B 平均掉噪声)高(单样本估计,抖动大)
样本相关性可跨多环境采样、相关性低单条轨迹内相邻样本强相关,估计有偏移
稳定性好(大 batch + 一致梯度)差(需小学习率 / target network 兜底)
内存高(要存整批数据)低(几乎只存当前转移)
可并行性天然可并行(多环境同步拼大 batch)需异步多 worker 才能并行
样本效率on-policy,用后即弃,效率一般同为 on-policy,但单步更新更”新鲜”

接回 §7:这两种形态正是 A2C 与 A3C

把上表落到具体算法:同步并行的 batch actor-critic ≈ A2C——NN 个环境同步走 TT 步、拼成一个 (N×T)(N\times T) 的大 batch 统一更新,正是 6.1 主循环的向量化版本;而在线、异步的版本 ≈ A3C——每个 worker 各自与环境交互、走几步就把梯度异步推给全局参数。二者的取舍(一致梯度 vs 无等待、去相关 vs 陈旧梯度)在 §7 已详细展开,这里不重复;只强调一点:“batch vs online”这条轴,本质就是”A2C vs A3C”那条轴,实践经验也一致——同步大 batch 通常更稳更快。

6.3 关键设计选择

主循环里每一步都藏着一个要拍板的旋钮。逐个摊开——大多都能回接到本讲前面的偏差-方差主线:

设计选择选项与取舍实践缺省
critic 目标:MC 还是自举MC 目标 yi=∑t′≥tγt′−trt′y_i=\sum_{t'\ge t}\gamma^{t'-t}r_{t'} 无偏但方差大、要跑完整段;自举目标 yi=ri+γVϕ(si′)y_i=r_i+\gamma V_\phi(s'_i) 低方差但有偏(详见 §3、§4 GAE)常用 GAE 折中(λ≈0.95\lambda\approx0.95)
每次 actor 更新配几步 critic 回归 KcriticK_{\text{critic}}KK 太小 → critic 跟不上、优势不准;KK 太大 → critic 过拟合当前 batch、且拖慢、还可能过度自举放大偏差KK 取几步(如 1–5)或几个 epoch
actor / critic 共享还是分离网络共享底层特征(一个躯干两个头)省参数、特征互促,但两个损失尺度要平衡(给 critic 损失一个系数 cc,即 L=Lπ+c LVL=L_\pi+c\,L_V),否则一方主导;分离网络各自独立、调参更省心但更费参数连续控制常分离;像素输入常共享 CNN 躯干 + 系数 cc
要不要 target network / 停梯度自举目标里的 Vϕˉ(s′)V_{\bar\phi}(s') 必须停梯度(否则追自己尾巴,式 (4.2));on-policy batch AC 里通常停梯度即够,target network 更多是 off-policy(模块 05)的稳定手段停梯度必做;target net 视情况
γ\gamma 与(online 时)状态分布相关性γ\gamma 既是问题定义也是方差旋钮(§5);online 单条轨迹相邻状态强相关,会让梯度估计偏移——这正是 batch/多环境采样要去相关的原因γ=0.99\gamma=0.99;多环境去相关
batch / 轨迹条数 BBBB 越大方差越低、梯度越稳,但每次迭代越慢、样本消耗越大;BB 太小则回到 online 的高方差困境按算力取尽量大的 BB

6.4 一步步走一遍:数据如何在一轮里流动

把一次迭代拆成”采样 → 拟合 VϕV_\phi → 算优势 → 更新策略”四个环节,看清数据怎么一路流下去(这张示意与 §讨论课 的 图 6 是同一回路的 batch 版):

Actor-Critic 示意图 5

worked:用具体数字走一轮(一步 TD 优势)

设 γ=0.9\gamma=0.9,某轮采到 batch 里的一条转移 (s1,a1,r1=2,s1′)(s_1,a_1,r_1{=}2,s'_1),非终止(done=0\text{done}=0)。当前 critic 给出 Vϕ(s1)=5V_\phi(s_1)=5、Vϕ(s1′)=6V_\phi(s'_1)=6。

  • 步 (2) 拟合 critic。 自举回归目标 y1=r1+γVϕ(s1′)=2+0.9×6=7.4y_1=r_1+\gamma V_\phi(s'_1)=2+0.9\times6=7.4;critic 对该样本的损失贡献 (Vϕ(s1)−y1)2=(5−7.4)2=5.76(V_\phi(s_1)-y_1)^2=(5-7.4)^2=5.76,回归会把 Vϕ(s1)V_\phi(s_1) 往 7.47.4 方向拉。
  • 步 (3) 算优势。 若优势在 critic 更新前用旧值计算,则 A^1=r1+γVϕ(s1′)−Vϕ(s1)=7.4−5=2.4>0\hat A_1=r_1+\gamma V_\phi(s'_1)-V_\phi(s_1)=7.4-5=2.4>0——“这一步比 critic 原先预期好”。若先更新 critic,则必须代入更新后的具体值,结果不再固定为 2.4。
  • 步 (4)–(5) 更新 actor。 该样本对策略梯度的贡献是 ∇θlog⁡πθ(a1∣s1)×2.4\nabla_\theta\log\pi_\theta(a_1\mid s_1)\times 2.4:正优势会提高 a1a_1 在 s1s_1 的概率。批内标准化通常改善数值尺度;其中除以正标准差只做缩放,但减去 batch 均值可能改变单样本符号和有限样本梯度方向。

整个 batch 的所有样本都各算一份 ∇θlog⁡π⋅A^\nabla_\theta\log\pi\cdot\hat A,平均成 ∇θJ\nabla_\theta J 后走一步——这就是”用 batch 均值近似期望梯度”的字面含义。

常见陷阱 / 实践

  • critic 没拟合好就更新 actor(最致命)。 步 (3) 的优势完全依赖 VϕV_\phi;若 critic 还没大致拟合到位(KcriticK_{\text{critic}} 太少、或初始化后头几轮),A^i\hat A_i 系统性偏错,整批策略梯度会被同向带偏并经后续自举放大。实践上常让 critic 先热身几步、或给足 KcriticK_{\text{critic}},再信它的优势。
  • on-policy 约束:batch 必须来自当前 πθ\pi_\theta。 策略梯度 ∇θlog⁡πθ⋅A^\nabla_\theta\log\pi_\theta\cdot\hat A 只对当前策略采出的数据无偏(似然比推导见 模块 03、本讲 §1)。所以主循环步 (6) 用后即弃:θ\theta 一更新,旧 batch 就”过期”,不能再拿来更新——想复用旧数据得上重要性采样或 off-policy 机制(模块 05)。
  • 优势标准化。 每个 batch 可把 A^\hat A 标准化到零均值、单位方差(步 (3))以改善数值尺度。除以正标准差只缩放;减去 batch 均值则可能改变单样本符号和有限样本梯度方向。注意要用当前 batch 的统计量。
  • 学习率与 actor/critic 步数配比。 critic 通常需要比 actor 更快/更多地更新(αϕ\alpha_\phi 略大或 Kcritic>1K_{\text{critic}}>1),好让优势信号先靠谱;但 critic 过度拟合当前 batch 又会放大自举偏差。αθ,αϕ\alpha_\theta,\alpha_\phi 与 KcriticK_{\text{critic}} 的配比是 batch AC 最需要调的一组超参。

小结: batch actor-critic 就是”采一批 → 拟合 critic → 借 critic 算优势 → 用优势做一次策略梯度 → 丢弃重来”,两套参数 θ,ϕ\theta,\phi 用两个方向相反的损失各自更新。把它同步并行化就是 A2C(§7),把 GAE 插进步 (3) 就得到 PPO 的优势估计骨架(模块 06)。

本质 Insight:actor-critic vs 纯策略梯度 / 纯价值方法

纯策略梯度(模块 03)无偏但高方差;纯价值方法(模块 05,学 Q⋆Q^\star 后贪心)低方差但对连续动作难 arg⁡max⁡\arg\max、且有致命三要素风险。Actor-critic 取两者之长:用 critic 降方差(借价值方法的力),用 actor 直接输出策略(保留策略梯度对连续/随机动作的天然支持)。这就是为什么它是深度 RL 的通用骨架。

7. 同步/异步:A2C 与 A3C

单一环境采样慢且样本相关性高。并行化是标准解法,衍生出两个经典实现:

A3C(异步)A2C(同步)
并行方式多 worker 各自与环境交互,异步把梯度推给全局参数多 worker 同步采样,汇总成一个大 batch 统一更新
优点无需等待、CPU 利用率高(提出时的主流)梯度更一致、可用大 batch、GPU 友好、可复现性好
缺点异步导致”过时梯度”、结果难复现需等最慢 worker(同步屏障)

本质 Insight

A3C 的 “A” 是 asynchronous,A2C 去掉那个 A(同步)。实践发现A2C 通常和 A3C 一样好甚至更好——异步带来的”梯度陈旧”弊大于利,而同步大 batch 在现代 GPU 上又快又稳。并行的真正价值不在异步,而在打散样本相关性(不同环境的经验去相关,让策略梯度估计更接近真期望)。这条经验直接影响了 PPO 的多环境向量化采样设计。

前沿实验室视角

A3C(DeepMind,Mnih 等,2016) 是把 actor-critic 推向大规模的关键一步:它让多个 worker 各自与环境交互、再把梯度异步汇入共享参数,第一次证明了在 Atari 这类基准上,异步并行的 actor-critic 只用 CPU 也能又快又稳地训练。按我的理解,它更深远的贡献不在”异步”这个技术细节,而在把 actor(策略)+ critic(价值) 这套分工确立为可扩展的默认范式。后来的两条主流路线都建立在这套骨架上:OpenAI 的 PPO(2017) 是 on-policy 的 actor-critic,而最大熵路线的 SAC(Haarnoja 等,2018) 是 off-policy 的 actor-critic——今天大模型 RLHF 里的策略优化,追根溯源仍站在这套结构之上。

架构对比:一张图看清异步 vs 同步

把两种并行方式画到一起,差别一目了然:A3C 让每个 worker 各自与全局参数交互(推梯度、拉参数)、彼此不等待,代价是 worker 用来算梯度的参数可能已经过时(stale gradient);A2C 用一道同步屏障把所有 worker 的经验拼成一个大 batch、算一次一致的梯度再广播,代价是要等最慢的 worker。

图 5:A3C(左)每个 worker 各自异步读写全局参数,易产生过时梯度;A2C(右)用同步屏障拼大 batch、算一次一致梯度再广播,虽需等最慢 worker,但更稳、更适合 GPU。

图 5:A3C(左)每个 worker 各自异步读写全局参数,易产生过时梯度;A2C(右)用同步屏障拼大 batch、算一次一致梯度再广播,虽需等最慢 worker,但更稳、更适合 GPU。

熵正则项:维持探索、抵御熵坍缩

回看 §讨论课的 A2C 伪代码,actor 损失里有一项 −β H(πθ(⋅∣s))-\beta\,\mathcal H\big(\pi_\theta(\cdot\mid s)\big)。这里把它单拎出来讲清”为什么”。策略熵定义为

H(πθ(⋅∣s))=−∑aπθ(a∣s)log⁡πθ(a∣s)  ≥0,(4.11)\mathcal H\big(\pi_\theta(\cdot\mid s)\big)=-\sum_a \pi_\theta(a\mid s)\log\pi_\theta(a\mid s)\;\ge 0, \tag{4.11}

在损失里减去 βH\beta\mathcal H 等价于在目标里加上一个熵奖励——鼓励策略在拿到高优势的同时尽量别太确定。它的作用有三:

  • 维持探索:没有它,策略会迅速把概率质量堆到当前看起来最好的动作上,过早变得近乎确定,从此再也采不到别的动作、学不到更优解。
  • 抵御”熵坍缩”(entropy collapse):一旦某动作概率逼近 1,log⁡π\log\pi 与梯度趋于病态、训练僵死。熵项给了一个”往回拉向均匀”的力,防止这种正反馈塌缩。
  • 平滑优化地形:熵项让目标更光滑,减少陷入尖锐次优峰的概率。

调参直觉

β\beta 常从一个小值(如 0.010.01)起步,随训练退火到接近 0:早期需要探索,后期需要收敛到确定性好策略。注意这里的熵项只是启发式正则;把熵提升为优化目标的一等公民(r+αHr+\alpha\mathcal H、并自动调 α\alpha)就得到最大熵 RL / SAC——见 §8 与 模块 07。这里首次出现的 α\alpha 是熵的权重(又称”温度”):它衡量”回报”与”随机性”孰轻孰重,α\alpha 越大越鼓励策略保持随机、探索更足,实践中可自动调节;它和前面第 6 节更新式里的学习率 αθ,αϕ\alpha_\theta,\alpha_\phi 只是恰好同字母,含义完全不同,勿混。

8. 概览:off-policy 与 Soft Actor-Critic

本模块聚焦 on-policy AC。actor-critic 框架同样能做成off-policy(用经验回放大幅提升样本效率),其中最重要的是 Soft Actor-Critic (SAC)。这里只做概览与指路,完整理论见 模块 07(变分推断与控制即推断)。

  • off-policy AC(DDPG/TD3/SAC):critic 学 Qϕ(s,a)Q_\phi(s,a)(而非 VV),可用回放缓冲区的历史数据 → 样本效率高;代价是要面对模块 05 的”致命三要素”(自举+off-policy+函数逼近)带来的不稳定。
  • 最大熵 RL / Soft AC:在目标里加入策略熵项 E[∑trt+α H(π(⋅∣st))]\mathbb{E}[\sum_t r_t+\alpha\,\mathcal{H}(\pi(\cdot\mid s_t))],鼓励”在获得高回报的同时尽量随机”。好处:更强探索、更鲁棒、训练更稳。SAC 是连续控制的 SOTA 之一。
JMaxEnt(π)=∑tE(st,at)∼dπ[r(st,at)+α H(π(⋅∣st))].(4.12)J_{\text{MaxEnt}}(\pi)=\sum_t\mathbb{E}_{(s_t,a_t)\sim d^\pi}\big[r(s_t,a_t)+\alpha\,\mathcal{H}(\pi(\cdot\mid s_t))\big]. \tag{4.12}

前沿实践与指路

  • PPO 是 on-policy actor-critic 的实例:actor 用裁剪式策略梯度、critic 提供 GAE 优势——你已掌握它的全部零件(模块 03 IS/裁剪 + 本模块 GAE),细节见模块 06。
  • SAC/软 AC 的完整推导(最优性变量、soft 贝尔曼、自动温度 α\alpha)见模块 07。
  • Q-learning/DQN 与致命三要素(off-policy critic 为什么会发散)见模块 05。

讨论课 · Section 3:Policy Gradients and Actor-Critic

本节取自 CS285 Discussion Section 3(Policy Gradients & Actor-Critic),只保留主文没展开的实践落地部分:两段可直接对照实现的伪代码、一份”抄下来就能自查”的清单、以及一个用手算说清”baseline 降方差却不改期望”的小例子。它横跨模块 03(PG)与本模块(AC),是把公式变成能跑的代码的桥梁。

3.1 两段单步更新伪代码

先看无 critic 的 REINFORCE-with-baseline(baseline 用回归的 VϕV_\phi,优势 = 回报 − baseline),再看 A2C(用 critic 自举出 TD 优势)。二者的差别正是”用采样回报 vs 用 critic 自举”:

# REINFORCE with baseline —— 一次迭代(single update)
for iteration in range(N):
    # 1) 用当前策略 π_θ 采样一批轨迹
    trajectories = collect_rollouts(policy_θ, num_traj=B)

    # 2) reward-to-go 回报:只累加 t 之后的奖励(不要用整条轨迹总回报!)
    for τ in trajectories:
        for t in range(len(τ)):
            R[t] = sum(γ**(k - t) * r[k] for k in range(t, len(τ)))

    # 3) 拟合状态价值 baseline  V_φ(s) ≈ E[R_t]
    fit_value(V_φ, states, R)                 # min_φ  Σ (V_φ(s_t) − R_t)^2

    # 4) 优势 = 回报 − baseline,并做批内归一化(降方差、稳梯度)
    A[t] = R[t] − V_φ(s[t])                    # V_φ 视为常量:stop_grad
    A = (A − A.mean()) / (A.std() + 1e-8)

    # 5) 策略梯度上升一步(框架做“下降”,故取负号)
    loss_π = − mean( logπ_θ(a_t | s_t) * A[t] )
    θ ← θ − lr * grad(loss_π, θ)
# A2C(同步 advantage actor-critic)—— 单步更新
# 用 N 个并行环境同步走 T 步,拼成一个 (N×T) 的 batch
for update in range(M):
    batch = step_vec_envs(policy_θ, N_envs, T_steps)   # s, a, r, s_next, done

    # 1) 一步 TD 优势;bootstrap 的 V 必须停梯度(否则追自己的尾巴)
    with no_grad():
        target = r + γ * (1 − done) * V_φ(s_next)      # TD target y ≈ Q(s,a)
        A      = target − V_φ(s)                        # advantage δ

    # 2) critic 损失:回归 TD 目标
    loss_V = mean( (V_φ(s) − target)**2 )

    # 3) actor 损失:策略梯度 + 熵正则(β 维持探索、防熵坍缩)
    loss_π = − mean( logπ_θ(a | s) * A ) − β * entropy(π_θ(·|s))

    # 4) 合并更新(共享躯干时给 critic 一个系数 c 平衡两损失尺度)
    loss = loss_π + c * loss_V
    θ, φ ← Adam.step( grad(loss) )

3.2 实践清单(抄下来自查)

必做项

  • reward-to-go:优势里只累加 tt 之后的奖励 ∑k≥tγk−trk\sum_{k\ge t}\gamma^{k-t}r_k,而非整条轨迹总回报——过去的奖励与当前动作无关,去掉它无偏且降方差。
  • 优势归一化:每个 batch 可把 A^\hat A 标准化到零均值、单位方差(A^←(A^−μ)/(σ+ε)\hat A\leftarrow(\hat A-\mu)/(\sigma+\varepsilon))以改善数值尺度。中心化可能改变单样本符号与有限 batch 的梯度方向,不能简单等同于只改学习率。
  • 折扣 γ\gamma:既是问题定义也是方差旋钮(见 §5);bootstrap 项在终止步要乘 (1−done)(1-\text{done}),否则把”回合结束”错当成”还有未来”。
  • 熵正则:actor 损失加 −β H(π)-\beta\,\mathcal H(\pi) 维持探索;β\beta 常从小值起、随训练退火。
  • critic 目标停梯度:TD 目标 r+γVϕ(s′)r+\gamma V_\phi(s') 里的 VϕV_\phi 要 detach/停梯度,否则半梯度变成”追移动靶”。

常见 bug

  • 误以为 baseline 有偏:只要 baseline b(s)b(s) 不依赖动作 aa,Ea[b(s)∇log⁡π]=b(s)∇θ ⁣∑aπ=b(s)⋅0=0\mathbb{E}_a[b(s)\nabla\log\pi]=b(s)\nabla_\theta\!\sum_a\pi=b(s)\cdot 0=0——期望完全不变(证明见 §3.3)。把它当成”有偏近似”而不敢用,是最常见的误解。
  • batch 维度错位:log⁡π(at∣st)\log\pi(a_t|s_t)、A^t\hat A_t、mask 必须逐元素对齐 (N×T)(N\times T);常见错误是对 batch 求了 log⁡∑exp⁡\log\sum\exp 而非逐样本、或把 A^\hat A 的时间轴与状态轴转置,导致梯度”看起来在训练其实在乱学”。
  • 把总回报当 reward-to-go:用整条轨迹回报乘每个 ∇log⁡πt\nabla\log\pi_t,方差暴涨且收敛慢。
  • 归一化用错统计量:优势归一化要用当前 batch 的 μ,σ\mu,\sigma;跨 batch 复用旧统计量会引入偏移。

3.3 手算:为什么”降方差不改期望”

推导:一个两动作的数字例子(baseline 把方差压到 0,期望梯度不变)

设置

单状态、两个动作,softmax 策略 π=(π1,π2)=(0.5,0.5)\pi=(\pi_1,\pi_2)=(0.5,0.5)。score 函数对 logit θ1\theta_1 的分量:∂θ1log⁡π(a1)=1−π1=0.5\partial_{\theta_1}\log\pi(a_1)=1-\pi_1=0.5,∂θ1log⁡π(a2)=−π1=−0.5\partial_{\theta_1}\log\pi(a_2)=-\pi_1=-0.5。取回报 R(a1)=12, R(a2)=8R(a_1)=12,\ R(a_2)=8。

第 1 步(无 baseline 的估计)。 逐样本梯度 g=R⋅∂θ1log⁡πg=R\cdot\partial_{\theta_1}\log\pi:

g(a1)=12×0.5=6,g(a2)=8×(−0.5)=−4.(4.13)g(a_1)=12\times0.5=6,\qquad g(a_2)=8\times(-0.5)=-4. \tag{4.13}

期望(真实梯度):E[g]=0.5⋅6+0.5⋅(−4)=1\mathbb{E}[g]=0.5\cdot 6+0.5\cdot(-4)=1。方差:Var⁡[g]=0.5(6−1)2+0.5(−4−1)2=25\operatorname{Var}[g]=0.5(6-1)^2+0.5(-4-1)^2=25。

第 2 步(减去 baseline b=E[R]=10b=\mathbb{E}[R]=10)。 gb=(R−b)⋅∂θ1log⁡πg_b=(R-b)\cdot\partial_{\theta_1}\log\pi:

gb(a1)=(12−10)×0.5=1,gb(a2)=(8−10)×(−0.5)=1.(4.14)g_b(a_1)=(12-10)\times0.5=1,\qquad g_b(a_2)=(8-10)\times(-0.5)=1. \tag{4.14}

期望:E[gb]=0.5⋅1+0.5⋅1=1\mathbb{E}[g_b]=0.5\cdot1+0.5\cdot1=1——和第 1 步 式(4.13) 完全一样。方差:Var⁡[gb]=0\operatorname{Var}[g_b]=0——直接归零!

为什么期望不变(一般证明)。 因为 score 的期望恒为零:

Ea∼π[∇θlog⁡π(a)]=∑aπ(a)∇θπ(a)π(a)=∇θ∑aπ(a)=∇θ1=0,(4.15)\mathbb{E}_{a\sim\pi}\big[\nabla_\theta\log\pi(a)\big]=\sum_a \pi(a)\frac{\nabla_\theta\pi(a)}{\pi(a)}=\nabla_\theta\sum_a\pi(a)=\nabla_\theta 1=0, \tag{4.15}

故对任何与动作无关的 b(s)b(s) 有 E[b(s)∇log⁡π]=b(s)⋅0=0\mathbb{E}[b(s)\nabla\log\pi]=b(s)\cdot 0=0,从梯度里加/减它不引入偏差。在本段对称二动作例子中,b=E[R]b=\mathbb E[R] 恰好把方差降为零;一般的方差最小 baseline 还取决于 score-function 梯度范数,状态价值只是常用选择。■\blacksquare

图 6:A2C 单步 update 的闭环——并行采样 → 拼 batch → 用 critic 自举算 TD 优势 → 合并 actor/critic 损失 → 更新参数 → 继续采样(on-policy,用后即弃)。

图 6:A2C 单步 update 的闭环——并行采样 → 拼 batch → 用 critic 自举算 TD 优势 → 合并 actor/critic 损失 → 更新参数 → 继续采样(on-policy,用后即弃)。

方法溯源:动机 · 启发 · 局限

把本讲的方法按”为什么被提出”重新串一遍,能看清 actor-critic 家族其实是一条持续与方差搏斗的演化线:每一步都在为上一步的高方差、或为降方差新引入的偏差”打补丁”。下表按时间与逻辑给出每个关键方法的动机、启发与遗留局限。

方法 / 代表作(年代)动机(要解决什么)启发 / 脉络关键局限(→ 引出谁)
REINFORCE(Williams, 1992;对照起点)直接对策略参数做梯度上升,无需模型也无需值函数似然比 / score-function 估计(∇log⁡π\nabla\log\pi)只用蒙特卡洛回报,Q^t\hat Q_t 方差随时域累积而爆炸 → 呼唤 baseline 与 critic
Actor-Critic(Barto–Sutton–Anderson, 1983)用一个学到的”评论家”VϕV_\phi 的低方差估计,替代嘈杂的单次采样回报动物学习中”预测器 + 控制器”的分工;TD 自举(脉络上其实早于 REINFORCE)critic 不准会引入偏差,且自举把误差沿时间传播 → 需要在偏差-方差间折中
优势函数 A=Q−VA=Q-V从回报里减去与动作无关的 baseline,降方差且不改期望统计里的控制变量(control variate)单步优势 δt\delta_t 偏差偏大、MC 优势方差偏大 → 引出 n-step 与 GAE
A3C(Mnih et al., 2016)单环境采样慢且样本强相关;用多 worker 并行打散相关性异步并行(Hogwild! 式无锁更新)异步导致”梯度陈旧”(stale gradient)、结果难复现 → 引出同步的 A2C
A2C(A3C 的同步版)去掉异步的陈旧梯度,用同步大 batch 得到一致梯度向量化环境 + GPU 批处理需等最慢 worker(同步屏障)→ 其向量化采样思路被 PPO 继承
GAE(Schulman et al., 2016)不在某个固定 nn-step 里二选一,用 λ\lambda 在偏差-方差谱上连续插值TD(λ\lambda) / 资格迹(eligibility trace)的指数加权假设 critic 固定且合理、λ\lambda 需调参;终局稀疏奖励下意义有限 → 引出 critic-free 的 GRPO/RLOO(模块 13)

演进故事线:一条与方差搏斗的主线

整条线的起点是 REINFORCE 的致命高方差:它诚实地把整条轨迹的蒙特卡洛回报当学习信号,无偏,但长时域的随机性层层累积,梯度噪声大到几乎学不动。第一记补丁是引入学到的 critic(actor-critic):用 VϕV_\phi 顶替嘈杂的采样回报,方差骤降——代价是 critic 不准会带来偏差,而且自举让这个偏差沿贝尔曼回代传播。于是”降方差”与”控偏差”成了一对必须同时照看的矛盾。

第二记补丁是把偏差-方差做成可调旋钮:n-step 用”走几步真实奖励再自举”取折中,GAE 更进一步——不在某个整数 nn 上死磕,用 λ\lambda 对所有 nn-step 做指数加权,把”有效视野”连续地放在一步 TD(低方差高偏差)与蒙特卡洛(无偏高方差)之间。与此并行的另一条支线是并行化:A3C 用异步 worker 打散样本相关性,但”梯度陈旧”弊大于利,A2C 用同步大 batch 反而更稳更快——并行的真正价值不在”异步”而在”去相关”。

遗留局限如何催生下一步

这条家族树的每个”局限”都精确地指向了后继者:critic 的偏差与调参负担,加上 GAE 在仅终局、稀疏奖励场景里意义有限,直接催生了大模型时代 critic-free 的 GRPO / RLOO——用蒙特卡洛式的”组均值”基线替掉学出来的 critic;A2C 的同步向量化采样思路则被 PPO(模块 06)继承为标准工程。换句话说,本讲不是终点,而是”如何低方差地估计优势”这一问题的一个阶段性答案。

9. 小结与要点

  • Actor-Critic = 策略(actor,策略梯度更新)+ 值函数(critic,回归/自举更新);critic 用低方差估计代替蒙特卡洛回报。
  • 优势的 TD 估计 A^=δt=rt+γV(st+1)−V(st)\hat A=\delta_t=r_t+\gamma V(s_{t+1})-V(s_t);用目标网络/停梯度稳住自举。
  • MC↔TD↔n-step 是一条偏差-方差谱:MC 无偏高方差,TD 低方差有偏,n-step 居中。
  • GAE:A^t=∑k(γλ)kδt+k\hat A_t=\sum_k(\gamma\lambda)^k\delta_{t+k},λ=0\lambda=0 为 TD、λ=1\lambda=1 为 MC;λ\lambda 是”信任 critic 多少”的旋钮,O(T)O(T) 反向递推可算。
  • γ\gamma 是另一个方差-偏差旋钮:小 γ\gamma = 短有效时域 = 低方差但短视(且改变了优化目标本身)。
  • A2C(同步)通常 ≥ A3C(异步);并行的真正价值是打散样本相关性。
  • 框架可扩展到 off-policy(SAC/软 AC,样本高效、鲁棒)——完整理论见模块 07;PPO 是本框架的 on-policy 实例(模块 06)。

承上启下

我们已经走完”策略优化”这条主线:模仿 → RL 目标 → 策略梯度 → actor-critic。接下来转向另一大家族:完全不显式表示策略,而是学 Q⋆Q^\star 再贪心的基于价值的方法(Q-learning、DQN、致命三要素)——模块 05。

参考来源

  1. [1]High-Dimensional Continuous Control Using Generalized Advantage Estimation(在新窗口打开)arXiv · 2015-06-08 · Section 3 · 访问于 2026-10-17↩
  2. [2]CS 285: Deep Reinforcement Learning(UC Berkeley)(在新窗口打开)UC Berkeley · L6(含 GAE) · 访问于 2026-10-17