Actor-Critic
本讲迁移自原课程讲义,经 AI 事实核查未发现存疑项,未逐页人工审核;如有出入,以原始论文和 CS285 课程资料为准。
学习目标
- 理解 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,揭示折扣因子 作为”旋钮”的两种解读,并给出 A2C/A3C 的架构。Actor-critic 是现代深度 RL(PPO、SAC)的通用骨架。
学习目标
- 理解 actor(策略)+ critic(值函数)如何分工降方差。
- 掌握优势估计 (TD 残差)及其含义。
- 沿 MC↔TD↔n-step 说清偏差-方差权衡。
- 能完整推导 GAE 并解释 的作用。
- 理解折扣因子 的两种方差-偏差解读;掌握 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 估计回报
策略梯度的通用形式是 。整节只回答一个问题:权重 ——也就是”给每个动作记多少功劳”——到底该取什么? 我们沿一条主线一步步走:reward-to-go 与合格 baseline 可在保持 score-function 梯度期望的同时降方差;一旦用 approximate TD/GAE 自举,则通常以偏差换方差。模块 03 已推过其中前几步(似然比、reward-to-go、baseline 的无偏性),这里做递进式回顾并补齐被省略的逻辑链(不再从零重推,详见 模块 03),最终自然地把 critic「逼」出来。
1.1 权重 的一步步精修:总回报 → reward-to-go → 减 baseline
① 最朴素的选择:整条轨迹的总回报。 令 ,即每个动作 都被记上同一条轨迹的全部奖励。问题立刻暴露:这份总和里包含了 时刻之前就已发生的奖励,而那些过去的奖励与”此刻选 “没有任何因果关系——它们对每个动作都只是一份纯噪声,白白把权重搅浑。噪声越多, 抖得越厉害 → 方差大。
② 因果性精修:换成 reward-to-go。 动作 只可能影响 及其之后的奖励,于是把”之前那段奖励”整块丢掉,换成 reward-to-go 。因为丢掉的项在期望意义下与 无关,这样做不引入任何偏差,却实打实降了方差——这正是”从整条总回报精修到 reward-to-go”的来历(纯粹是因果性,详见 模块 03)。可即便只留下未来,reward-to-go 仍是几十上百个随机奖励之和,方差依旧随剩余时域累积:
降方差直觉:方差为什么随时域累积
用 §3 的极简模型量一下 reward-to-go 还剩多少”痛”:设每步奖励近似独立、方差都是 。则单次 reward-to-go 的方差是一条折扣几何和
在近似无折扣()、长度为 的时域里它退化为 ——剩余步数越多,单次回报越吵。更糟的是,把它代回策略梯度、对整条轨迹求和后,梯度的方差会随时域约二次增长(,模块 03 §8)。纯 MC 无论怎么加技巧都绕不开这条:你是在用”一次随机游走的终点”去估计”这一步的价值”,而随机游走越长,终点越不可信。
③ 再减一个 baseline:仍无偏,又降一层方差。 reward-to-go 还是个”绝对量”:若某个状态本身就好、所有动作的回报都很大,那么好动作、坏动作都会拿到同号的大正权重(只是大小略有差别),于是被一起推高——真正有用的”谁比谁好”这点相对信息,淹没在共同的大尺度里,方差依旧很大。补救办法是减去一个只与状态有关、与所选动作无关的基线 :
只依赖状态的 是保证所减 score 项条件期望为零的常用充分条件,因此不改变期望梯度;更一般的边界与证明统一见 模块 03 无偏性权威表。这里不重复另一套条件。那 取什么最好?直觉上应取”这个状态下平均能拿到的回报”——只有高于平均的动作才该被鼓励。而这个”状态的平均回报”正是下面要正名的 ,也顺势把我们引向对 三者关系的精确定义。
1.2 给这些量正名:、、 到底是什么
上面反复出现的”回报""平均回报""比平均好多少”,其实各有精确的名字。一次讲透它们的关系,后面才不会先用后懂:
- 动作值 :在状态 采取动作 、之后一路按策略 走,平均能拿到的 reward-to-go。反过来看:我们手里那条 reward-to-go ,不过是 的一次蒙特卡洛采样——无偏,但正因只采了一次,方差很大。
- 状态值 :在 按 选动作、平均能拿到的回报,也就是各动作的 按策略概率的加权平均。它衡量”状态 本身有多好”,与具体选了哪个动作无关——这恰好就是第 ③ 步要找的那个”状态平均回报”基线。
- 优势 :动作 比”该状态的平均水平”好多少。于是把第 ③ 步的基线取成 ,权重 恰好是在估计优势 。
一句话收口:、、 的分工
是”某个动作”的期望回报, 是”某个状态”的期望回报(对动作求平均), 是这个动作相对该状态平均水平的优势。 而模块 03 一路精修出来的”reward-to-go 减 baseline” ,本质上就是优势 的一次采样估计—— 估 、 顶 。至此 “该取什么”已经有了答案:取优势。剩下的唯一问题是——这两个期望量,我们其实都还没有。
1.3 critic 登场:用学到的期望,替换高方差的采样
把上一步的答案摊开看,会露出两处”欠账”: 只是 的一次高方差采样,而当基线的 干脆是个未知量。要继续降方差,最自然的一步就是:不再用一次采样去凑,而是直接用一个函数逼近器把期望量本身学出来——学 (或 )的这个逼近器,就是 critic(评论家)。这才是”用 critic 估计回报”的真义:并不是凭空拿某个 去替换 reward-to-go,而是我们本就需要 这些期望量,critic 的职责正是估计它们——用一个(相对)平稳的预测值,顶替抖个不停的采样回报,还能借自举 拿到低方差的优势(详见 §2)。
本质 Insight:critic 到底是什么
critic = 把”高方差的一次性回报样本 “,换成”一个学出来的期望回报估计 / ”。 策略梯度权重 里那个抖个不停的采样回报,被一个(相对)平稳的预测值顶替——这正是纯 MC 靠加采样、减 baseline 都做不到的降方差手段:它动的是”回报的表示”本身,而不只是给回报做减法。
易混点: 当”基线” ≠ 当”critic”(自举才算 critic)
初学者常在这里绊一下:§1.1 的”reward-to-go 减 baseline” 里明明已经出现了 ,为什么这里又说”把 换成 critic 估计”?关键在于分清两个符号、两种用途——注意换掉的是采样值 (reward-to-go),不是期望量 (那个我们从来没拿到过)。
- 阶段一 · 只当基线(REINFORCE with baseline)。 :回报信号本身仍是那条采样出来的 , 只负责”减去公共尺度”这一步。 在这里没有参与生成回报,只做方差缩减。
- 阶段二 · 升级为 critic(actor-critic)。 用自举 顶替那条高方差采样回报,于是 。此时同一个 身兼两职:既是基线 ,又通过自举生成回报估计。
判据(Sutton & Barto 的标准划分):只有当值函数被用于自举 bootstrapping 时,它才算 critic。 REINFORCE 里的 基线不算 critic——它没参与自举、只做方差缩减,回报仍是纯 MC。所以”reward-to-go 减 baseline → 把 换成 critic 估计”不是重复、也不矛盾,而正是从 ” 当基线” 跃迁到 ” 当 critic(自举)” 的那一步——这也是下方”三件事”里 (b) 允许 TD/bootstrapping 之所以只属于 critic、而 baseline 给不了的根本原因。
展开:自举 bootstrapping 到底是什么(一眼看懂上面这条判据)
一句话定义。 自举 = 用”你自己当前对价值的估计”去构造更新目标,而不是用真实跑出来的完整回报——一句话,“用估计更新估计”。名字来自”拽着自己的鞋带把自己从地上提起来”(pull oneself up by one’s bootstraps):目标里含着自己产出的估计,自己给自己搭台阶。
对比:自举 vs 不自举。 同样是给 找一个”更新目标”,两条路只差在”未来那段”用什么填:
做法 更新目标 “未来回报”怎么来 是否自举 蒙特卡洛(MC) 全是真实发生的奖励,不含任何估计值 否 时序差分(TD) 只留一步真实奖励 ,其后整段真实回报被自己对下一状态的估计 顶替 是 TD 对应的增量更新就是 :括号里那个 是网络自己刚给出的估计,却被拿去当”真值”更新 ——这就是”用估计更新估计”的字面写照。
回到 Sutton & Barto 判据:两者都学了 ,区别只在 用在哪
“真正的 actor-critic”与”带基线的 REINFORCE”都学了一个 ,唯一分野是这个 有没有进到目标的构造里:
- 只当 baseline(不算 critic): 。方括号里是真实采样回报, 只是被减去用来降方差,没进入目标的构造 → 没自举。
- 用来自举(才算 critic): 。未来真实回报 被 顶替, 进到了目标里 → 自举 → 才是 critic。
一眼判据。 看”下一/未来状态的价值 有没有出现在回报/目标里、去替代真实未来奖励”:出现 → 自举 → critic;没出现(只被减去当基线)→ 不算 critic。
为什么要强调这个区分? 因为自举正是偏差进来的地方:目标里含着不完美的 ,其误差会沿贝尔曼方程回代传播成系统性偏差;换来的是低方差与可在线单步更新。而”只当 baseline”是无偏的(目标用的是真实回报)。所以这条判据恰好标记了 “从哪一步起开始用估计换方差、并因此引入偏差”。
补一句谱系。 自举不是全或无:MC 完全不自举、TD(0) 一步即自举、而 n-step / GAE(λ) 先走几步真实奖励、再用 自举掉剩下的,在偏差-方差之间连续调节(详见 §3、§4 GAE)。
于是系统自然分成两个部件,各司其职:
- Actor(演员) :负责行动,用策略梯度更新。
- Critic(评论家) (或 ):负责评估,用回归/自举更新,为 actor 提供低方差的优势信号。
举例
把纯蒙特卡洛回报想成”打完一整场篮球赛、等终场比分出来,才回头判断第三分钟那次传球到底好不好”——信号既慢又被中间无数偶然因素搅浑(高方差)。critic 则像一位有经验的教练在场边即时点评:球刚出手,他凭经验一句”这球质量不错”就给了反馈,不必等比赛结束。用即时、稳定的点评替代赛后回溯,方差骤降;代价是教练偶尔也会看走眼(这就是 critic 带来的偏差)。
把 换成 critic 估计,一举带来三件事,层层递进:
- (a) 降方差(核心动机)。 用平稳的期望估计顶替嘈杂的单次采样回报,直接压掉 §1.1 里那项随时域累积的方差——这是养 critic 最根本的理由。
- (b) 允许 bootstrapping / TD(顺带的大礼)。 有了 ,可以用 顶替”从 往后的整段回报”。于是不必等整条 episode 跑完,就能在线、单步增量更新——这对长时域、乃至持续(不终止)的任务是决定性的。
- (c) 支撑更干净的优势信号。 critic 给出的 天然是”与动作无关的基线”,让优势 只保留”这个动作比平均好多少”的相对信息(详见 §2)。
为什么这样 · 能不能不这样
为什么值得再养一个网络当 critic? 模块 03 已把方差的其他来源(回报绝对尺度、无关的过去奖励)都无偏地消掉,只剩”蒙特卡洛回报本身”这一项最顽固——它随时域约二次增长(模块 03 §8,)。 用一个学到的估计顶替嘈杂的单次采样回报,把这项方差直接压下去,这是纯 MC 无论加多少技巧都做不到的。
那能不能永远用 MC、根本不碰 critic? 能,MC 无偏、实现最省事;代价是长时域下方差爆炸、样本效率极低。真想不学 critic,也另有出路(下面 §1.4 的对比表会把它们逐一摆开)——所以”要不要 critic”从来不是对错题,而是一道 “偏差与工程成本 vs 方差与样本量” 的权衡题。
1.4 代价与其它出路:没有免费的午餐
诚实的代价:降方差是拿偏差换来的
引入 critic 绝非白拿。 不可能完美(函数逼近误差 + 自举把误差沿贝尔曼方程层层回代传播),于是我们是用”可控的偏差”换来了”大幅下降的方差”。这一对矛盾——bias–variance——就是本章从头贯到尾的中心张力:§3 的 n-step、§4 的 GAE 全都是在这根轴上找甜点。记住这句话,后面所有”旋钮”都只是它的变奏。
那么,能不能换个法子也把方差压下去、还不欠这份偏差?把主要选项摆到一张表上,按 的四种典型选择逐行对比:
| 的选择 | 偏差 | 方差 | 要跑完整 episode? | 样本 / 算力效率 |
|---|---|---|---|---|
| 整条轨迹总回报 | 无偏 | 最高(还裹进与当前动作无关的过去奖励) | 要 | 最差 |
| reward-to-go(MC) | 无偏 | 高(随剩余时域累积) | 要 | 差 |
| + baseline 相减 | 策略梯度无偏( 满足条件正交; 是充分条件);数值上仅当 才无偏估 | 中(扣掉公共尺度) | 要 | 中 |
| critic 自举 (及 n-step / GAE) | 有偏(critic 误差经自举传播) | 低(且可用 调) | 不用(可在线单步) | 好 |
逐条读这张表,就能回答”还有没有更好的方式”:
- 只是加大 batch / 多采样。 无偏、最稳妥,但纯靠 硬压方差,样本与算力成本高,治标不治本——时域一长,需要的样本量就爆炸。
- 只做 baseline 相减(第 3 行)。已经无偏且降方差(模块 03 的主力手段),但回报本身仍是 MC,方差仍随时域累积。critic 更进一步:连回报本身都换成自举估计(第 4 行),这正是 baseline 停下的地方。
- 干脆不要 actor,纯 value-based / Q-learning。 学 再贪心,方差低;但没有显式策略,面对连续动作要解 、面对随机策略 / 策略约束也别扭(详见模块 05)。actor-critic 是折中:保留 actor(策略) 处理连续/随机动作,再用 critic 提供低方差信号。
结论:为什么通常是 critic 赢
没有免费的午餐——critic 用”可控的偏差”换”大幅降方差 + 可在线单步更新”。在样本/算力有限、时域较长的连续控制里,这笔交易通常最划算,所以 actor-critic 成了默认骨架。但”划算”不是绝对:到了仅终局、稀疏奖励的 LLM 场景,critic 又贵又难学准,“多采样 + 组均值基线”(GRPO/RLOO)反而更值——见本讲方法溯源与 模块 13。而”到底该用多大偏差换多少方差”,正是接下来 n-step / GAE 要拧的那个旋钮。
图 2:Actor 行动、环境反馈、Critic 评估并回传优势信号指导 Actor。评估与行动解耦是降方差的关键。
2. 优势估计与 TD 残差
有了 critic ,最直接的优势估计只需一步真实奖励 + 一步自举,无需把整条轨迹采样到底:
就是著名的 TD 残差(temporal-difference error)。它衡量”实际观察到的一步回报”与”critic 当前预测”之间的差距——既是优势的低方差估计,也是训练 critic 的误差信号。
举例
带一个新手下棋:当前局面你估价 (略占优)。走一步后立刻拿到即时收益 ,并把新局面重新估成 。取 ,则 ——意思是”这一步走得比我原先预期好一点点”,于是 critic 会把 往上微调、actor 也更倾向这个动作。反之若算出 ,就说明结果比预期差,该动作会被压低。
推导:为什么 r+γV(s’) 是 Q(s,a) 的(有偏)估计?
依据
模块 02 的贝尔曼方程 。
第 1 步。 取一条真实转移 ,用单个样本 近似 ,得 。
第 2 步。 再用学到的 近似真值 ,得 ,于是 。
偏差来源(局限): 用单个后继状态样本代替转移期望会增加采样方差,但在 时不引入偏差;偏差来自 的函数逼近与自举误差 [1]。
为什么这样 · 能不能不这样
为什么用优势 而不是直接用 ? 真正该驱动更新的是”这个动作比该状态平均好多少”。 里裹着”状态 本身好不好”这块与所选动作无关的公共项;用 把它扣掉,权重的正负号才对齐到”相对优劣”。这与模块 03 的 baseline 是同一件事—— 是只依赖状态的基线,减它不改期望(式 (4.1) 的 就是它的一步 TD 版)。
能不能直接拿 当权重? 能,仍无偏( 不依赖被减的量),但没扣掉公共项,方差更大:所有动作的权重被同一个 大偏置同向抬高,有用的相对信号被淹没(正是模块 03 §5”回报绝对尺度”毛病的翻版)。那能不能反过来把 当 baseline 去减? 不行——那是依赖动作的基线,会引入偏差(模块 03 已证得分函数技巧此时失效)。所以 不是随手记号,而是”基线必须只依赖状态”这条无偏窄路的必然产物。
Critic 怎么训练? 让 拟合 TD 目标(自举)或蒙特卡洛回报(回归):
其中 表示目标网络/停止梯度(把自举目标当常数),否则会追着自己的尾巴、训练不稳。
3. 偏差-方差权衡(MC vs TD, n-step)
优势/回报的估计存在一条连续谱,两端是:
| 估计 | 形式 | 偏差 | 方差 |
|---|---|---|---|
| 蒙特卡洛(MC) | 对策略梯度可无偏;仅当 时才对 数值无偏 | 高(整条轨迹随机性累积) | |
| 一步 TD | 有偏( 不准 + 自举) | 低(只含一步随机性) | |
| n-step | 介于两者 | 介于两者 |
本质 Insight:MC 与 TD 的对立到底是什么?
MC 相信真实采样,不相信 critic——它把回报一路采样到底,只信真金白银的奖励,所以无偏;代价是采了太多随机步,方差爆炸。TD 相信 critic,早早”止损”——只走一步就用 顶替剩下所有未来,方差小;但如果 不准,这个偏差会通过自举一路传染。n-step 是二者之间的滑块:走 步真实奖励再自举, 越大越像 MC(低偏差高方差), 越小越像 TD。GAE 的下一步就是——不选某个固定 ,而是把所有 加权平均。
图 3:从 TD(左)到 MC(右),方差上升、偏差下降。GAE 用 连续地在这条谱上寻找甜点。
玩具例子:把”偏差-方差”算成数字
为了让上面的定性谱变得可触摸,考虑一个极简模型:每步奖励 相互独立、方差都是 ;明确假设当前状态的 无误差,而被自举的末端状态满足 。对 -step 优势 ,两项可分别算:
- 方差来自 个随机奖励项的折扣和:,随 单调上升,上确界 (即 MC)。
- 偏差只来自那一步被自举进来的 critic 误差:,随 单调下降,(MC)时归零。
代入 ,逐个 算出来():
| 方差 | 定位 | |||
|---|---|---|---|---|
| 1(TD) | 1.00 | 1.80 | 4.24 | 最低方差 · 最高偏差 |
| 2 | 1.81 | 1.62 | 4.44 | 偏 TD |
| 3 | 2.47 | 1.46 | 4.60 | 居中 |
| 5 | 3.43 | 1.18 | 4.82 | 偏 MC |
| ∞(MC) | 5.26 | 0 | 5.26 | 无偏 · 最高方差 |
数字把定性谱坐实了: 从 1 走到 ∞,方差 一路涨、偏差 一路降。哪个 最优取决于二者的相对量级(此例里 critic 误差不算大,故小 的 MSE 反而略低;若 更大,甜点就会右移)。GAE 的高明之处在于:它不在这些整数 里挑一个,而是用 对所有 做指数加权,等效地把”有效视野”连续地放到 1 与 ∞ 之间——于是能取到表格行与行”之间” 的偏差-方差组合。
图 4:-step 的方差(红)随 单调上升、偏差(青)单调下降的定量对照。GAE 的 相当于在这条离散刻度上做连续插值。
4. GAE 广义优势估计
广义优势估计(Generalized Advantage Estimation, GAE)(Schulman et al., 2016)不在众多 n-step 里挑一个,而是对所有 n-step 优势做指数加权平均,用一个参数 平滑地控制偏差-方差。
举例
把 想成一个滑块,它调的是”我先相信几步真实奖励,之后再把剩下的未来交给 critic 估计”。滑到 :只信眼前一步真实、马上交给 critic(省心,但 critic 一错就偏);滑到 :一路只认真实奖励、根本不让 critic 插手(诚实,但噪声大)。滑到中间(如 )就像”先自己盯紧眼前十来步、再把更远的未来托付给经验判断”——既借了 critic 的稳,又没被它带偏。
推导:GAE(从 n-step 到指数加权闭式)
记号与假设
TD 残差 ; 为固定 critic;无限时域近似。
第 1 步(n-step 优势用 TD 残差表示)。 定义 步优势
可以验证它等于前 个 TD 残差的折扣和(望远镜求和,中间的 逐项抵消):
第 2 步(望远镜验证,以 n=2 为例)。 展开两个 TD 残差,中间的 一正一负相消:
第 3 步(对所有 n 做几何加权)。 GAE 取权重 (归一化因子 ):
第 4 步(交换求和次序化简——用几何级数求和)。 交换 的求和次序: 出现在所有 的 -step 优势里,对固定 把这些项的权重加总,是一条公比为 的几何级数:。再连同 自带的 ,每个残差的系数正好是 ,于是得到惊人简洁的闭式:
第 5 步(两端极限)。 当 :,退化为一步 TD(低方差、高偏差); 当 :,退化为蒙特卡洛回报减基线(完整 on-policy 轨迹下,对策略梯度无偏,但方差高;若把它当作 的数值估计,仍取决于基线是否等于 )。
局限: GAE 的偏差分析假设 固定且合理; 需调参(常用 0.9–0.97)。它只降低优势估计的方差,不改变策略梯度本身对 on-policy 数据的依赖。
为什么这样 · 能不能不这样
为什么把所有 -step 指数加权,而不是固定选某个 ? 单个 -step 只能落在偏差-方差谱的一个离散刻度上(§3 表格),而最优的 又取决于你事先并不知道的 critic 误差与回报方差。GAE 用几何权重 把所有 揉成一个量,化简后是惊人简洁的 (式 (4.7))——单一连续的 就滑遍整条谱( 退成一步 TD、 退成 MC),还能 反向递推算出。
能不能就固定选某个 (比如 )? 能,实现更直白;但你被钉死在一个刻度上,任务一变(critic 越训越准、或回报变吵)甜点就移走,只能重试不同整数 ,粒度粗且每次重算。为什么偏偏是”指数”衰减、而非别的权重? 几何衰减让加权和望远镜式坍缩成只需一个递推状态的单参数闭式(式 (4.6)→(4.7)),因而可一遍 计算;其他有限窗或特殊核也可能做到线性时间,但通常需要更多状态,且不再有这条简洁的一阶递推。
实现上,式 (4.7) 可用反向递推一遍算出():
推导(另一条路):从 λ-return / TD(λ) 出发,并把每步假设摊开
记号与假设(逐条)
- A1(固定 critic):推导中把 视为常量,不随本次优势计算变化——否则”望远镜抵消”不成立。
- A2(无限时域 / 充分长轨迹):几何级数求和到 ;有限时域时末端用 收尾(实现里对终止步乘 )。
- A3():保证 收敛,“有效视野”有限。
第 1 步(-step 回报 = value 目标)。 定义 -step 回报 ,它是 critic 的一个自举目标。对应优势 。
第 2 步(λ-return = 对所有 -step 目标几何加权)。 TD(λ) 的 -return 定义为
权重 归一(,用到 A2)。
第 3 步(GAE 优势 = λ-return 减 baseline)。 两端同减 (它与 无关,可提出加权和外):
这与主推导第 3 步(式 (4.6))完全一致——两条路(“加权 -step 优势”与”-return 减 baseline”)殊途同归,再经交换求和即得式 (4.7) 的 。
第 4 步(把 读成”有效视野”)。 闭式里权重是 ,等比衰减的有效步数约为 。代入常用超参:
- : 步(退化为 MC,看满整个 -视野)。
- :, 步(只往后看约 17 步再交给 critic)。
- : 步(退化为一步 TD)。
可见 把优势估计的”真实奖励视野”从 1 步连续调到 步——这正是 §5 里” 定问题视野、 定估计视野”分工的量化版本。
本质 Insight:λ 是什么旋钮?
是 “你多信任 critic” 的旋钮。:极度信任 ,只看一步就自举(省方差,但 一错就偏)。:完全不信 的外推,把真实奖励一路采到底(无偏,但方差大)。 联合决定了 TD 残差”往后看多远”的有效视野。实践中 常常是甜点:既借了 critic 的方差红利,又没被它的偏差带偏。
前沿实践
GAE 可用于计算策略梯度中的优势估计;其定义与偏差—方差讨论见原论文 [1]。无 critic 的组相对方法则使用组内回报构造优势,属于另一种工程取舍。
本质 Insight:baseline、critic、GRPO 组均值都是同一个”控制变量”
把本讲和上一讲的降方差工具摆到一起,会发现它们都在利用控制变量(control variate):baseline 、学出来的 critic 、n-step/GAE 里被减掉的那个 ,以及 GRPO 的同题组基线。严格的“减基线不改期望”要求基线不依赖当前被评分动作;因此组采样时应使用留一均值才严格无偏。GRPO 常用的“含自身组均值再除组标准差”是实用的归一化估计,并不满足最朴素的无偏控制变量证明。差别不仅在控制变量怎么来,也在是否引入有限组相关性与归一化偏置:AC 用学出来的 ,critic-free 方法用同组样本换掉 critic。详见 模块 13 §11。
批判性追问:“critic 降方差”这句要打几个折扣
本讲反复说”用 critic 估计回报降方差”,但这句话有两处必须说破的代价:
- 降方差可能引入偏差,且自举会传播函数逼近误差。 critic 一旦不准(),TD 目标 就含有估计误差;反复自举会传播这份误差。它并非必然“复利放大”:表格型 on-policy TD 在标准条件下可收敛;真正危险的是自举再叠加 off-policy 与函数逼近,即模块 05 的 “致命三要素”(deadly triad),此时才可能发散。AC 的降方差不是免费的,但风险强弱取决于采样分布、表示与优化条件。
- GAE 的”甜点 “依赖你并不知道的量。 图 3 / §4 里那个”恰到好处的 “看着诱人,可它的最优值取决于critic 误差有多大、回报方差有多大这些事先未知的量(下一条”深化拓展”把这句坐实成公式)。所以 只能靠调参去逼近, 是经验缺省而非普适最优;换个任务、换个 critic,甜点就会移动。把 当成”总是对的”是常见误区。
深化拓展:GAE 的 如何权衡偏差与方差
增大时,GAE 通常减少对短期自举估计的依赖并纳入更多未来残差,因此常表现为偏差下降、方差上升。但相邻 TD 残差共享价值估计项,不能仅由“逐步奖励独立”推出残差独立;最优 也不具有脱离完整误差模型的通用单调公式。它取决于 critic 误差、奖励与状态相关性、轨迹截断等因素,应通过验证选择 [1]。
5. 折扣因子作为方差-偏差旋钮
不只是”未来打折”这么简单。在 actor-critic 语境里,它有两种互补解读,都指向” 是另一个方差-偏差旋钮”。
5.1 解读一:有效时域 = 方差控制
让”有效时域”约为 步。 越小,只在意近期回报,式 (4.7) 里 的求和项迅速衰减 → 方差更小;但也更短视,对真正需要长期规划的任务引入偏差(把远期真实回报打折甚至忽略)。
推导:折扣等价于”每步 1−γ 概率终止”的几何时域
第 1 步。 设一个无折扣过程,但每步以概率 突然终止(吸收态,之后奖励为 0)。则第 步奖励仍”存活”的概率是 。
第 2 步。 该随机终止过程的期望回报 ,正是折扣回报。
结论: 折扣 ⇔ 引入一个几何分布的随机时域,均值 。这解释了为什么小 = 短时域 = 低方差但短视。
5.2 解读二:γ 与 λ 分工
Schulman 在 GAE 论文里明确区分两者: 决定”我们真正想优化多长的时域”(可视为问题定义/偏差项), 决定”在给定 下如何在偏差-方差间平衡估计”。二者都能降方差,但 的降方差以改变优化目标本身(更短视)为代价,而 只影响估计不改目标。
陷阱
把 调小来”稳住训练”是常见但危险的手段:它确实降方差、加速收敛,但你已经偷偷改了任务——优化的是一个更短视的目标,可能学不会需要长期布局的行为。若要长时域最优,应优先用 、critic、更多样本来降方差,而非一味压低 。
6. on-policy Actor-Critic 的架构
把前面拼起来,得到最基础的 on-policy(批)actor-critic 训练循环。它有一个最容易被初学者忽略的结构特征:系统里同时存在两套参数、两个损失——actor 的策略参数 (由策略梯度上升)与 critic 的值函数参数 (由回归损失下降)。整节把这个循环拆开讲透:先给逐步伪代码,再对比 batch 与在线两种形态,接着摊开关键设计选择,最后走一遍完整的数据流并列出实践陷阱。
6.1 完整算法:batch actor-critic 主循环
“batch”指的是每次迭代先用当前策略 采一整个 batch 的数据,再在这批数据上依次拟合 critic、算优势、更新 actor,然后把数据丢弃、进入下一轮。§2 已给出优势 与 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)
把两套更新并排写出,对比最清楚——它们方向相反、各管各的参数:
本质 Insight:一次迭代里”谁给谁供货”
这一轮里两套参数是单向供货的流水线:critic 先把自己拟合到回报目标 上(步 (2)),再把拟合好的 借给步 (3) 生成低方差的优势 ;actor 拿这个 当”每个动作记多少功劳”的权重去做策略梯度(步 (4)–(5))。critic 只负责”评分”、不直接被策略梯度碰( 里把 当常量、对 停梯度);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 给 actor 供优势信号 (“这个动作比平均好多少”);GAN 里 discriminator 给 generator 供真实度信号(“这个样本有多像真的”)。两边都是”评估者算一个标量,喂给生成/决策者去改行为”,且都交替推进——正是本节这条”先拟合评估者、再更新行动者”的流水线。
- (2) 移动靶导致同款不稳定。 评估者要评的对象(actor 的策略 / 的生成分布)一直在变,于是评估者永远在追一个移动靶;反过来评估者不准又会把行动者带偏。两边都极度依赖”评估者与生成者更新节奏的平衡”:GAN 的经典处方是”每更新一次 ,先训 走 步”,AC 的对应处方是本节 §6.3 的”每次 actor 更新配 步 critic 回归”——这两条其实是同构的调参处方,都在防”评估者跟不上 / 或过拟合当前对手”这同一种病。
不像的关键:合作 vs 对抗(这才是本质分野)
- (1) 合作 vs 对抗。 AC 里 actor 与 critic 利益一致:critic 只想把 估准来帮 actor,两者在同一个回报目标上一起往上爬,更像策略迭代 / 坐标上升。GAN 则是零和的 : 与 目标严格对立。
- (2) 评估者的目标不同。 critic 回归的是由 actor 自己 rollout 导出的 Bellman / TD 目标(),目标跟随 actor 一起漂移;discriminator 则是对一个固定的真实数据分布做分类,靶子的”真”那一侧不随 变。
- (3) 收敛对象不同。 AC 追的是策略迭代的不动点(最优策略 + 其相容值函数);GAN 追的是一个纳什均衡。
- (4) 梯度怎么流不同。 在随机策略的 AC 里,actor 把 critic 给的标量优势当权重用(score-function / 似然比梯度 ),梯度并不穿过 critic 反传—— 是被 detach 的常量(正是上面”对 停梯度”)。GAN 的 generator 则把梯度穿过 discriminator 一路反传回 。
一个漂亮补全:确定性策略 AC(DPG/DDPG)才与 GAN 结构真正对上
第 (4) 点那处”穿不穿过评估者”的错位,在确定性策略 actor-critic(DPG / DDPG) 里恰好被补齐:那里 actor 是确定性映射 ,其目标是最大化 ,梯度 确确实实穿过 critic 反传回 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 版 |
|---|---|---|
| 数据收集 | 先采整批 条轨迹/转移,再统一处理 | 每步产生一个转移 立即用 |
| 更新时机 | 一批采完后集中更新 actor/critic | 每步(或极小 mini-batch)就更新一次 |
| 梯度方差 | 低( 平均掉噪声) | 高(单样本估计,抖动大) |
| 样本相关性 | 可跨多环境采样、相关性低 | 单条轨迹内相邻样本强相关,估计有偏移 |
| 稳定性 | 好(大 batch + 一致梯度) | 差(需小学习率 / target network 兜底) |
| 内存 | 高(要存整批数据) | 低(几乎只存当前转移) |
| 可并行性 | 天然可并行(多环境同步拼大 batch) | 需异步多 worker 才能并行 |
| 样本效率 | on-policy,用后即弃,效率一般 | 同为 on-policy,但单步更新更”新鲜” |
接回 §7:这两种形态正是 A2C 与 A3C
把上表落到具体算法:同步并行的 batch actor-critic ≈ A2C—— 个环境同步走 步、拼成一个 的大 batch 统一更新,正是 6.1 主循环的向量化版本;而在线、异步的版本 ≈ A3C——每个 worker 各自与环境交互、走几步就把梯度异步推给全局参数。二者的取舍(一致梯度 vs 无等待、去相关 vs 陈旧梯度)在 §7 已详细展开,这里不重复;只强调一点:“batch vs online”这条轴,本质就是”A2C vs A3C”那条轴,实践经验也一致——同步大 batch 通常更稳更快。
6.3 关键设计选择
主循环里每一步都藏着一个要拍板的旋钮。逐个摊开——大多都能回接到本讲前面的偏差-方差主线:
| 设计选择 | 选项与取舍 | 实践缺省 |
|---|---|---|
| critic 目标:MC 还是自举 | MC 目标 无偏但方差大、要跑完整段;自举目标 低方差但有偏(详见 §3、§4 GAE) | 常用 GAE 折中() |
| 每次 actor 更新配几步 critic 回归 | 太小 → critic 跟不上、优势不准; 太大 → critic 过拟合当前 batch、且拖慢、还可能过度自举放大偏差 | 取几步(如 1–5)或几个 epoch |
| actor / critic 共享还是分离网络 | 共享底层特征(一个躯干两个头)省参数、特征互促,但两个损失尺度要平衡(给 critic 损失一个系数 ,即 ),否则一方主导;分离网络各自独立、调参更省心但更费参数 | 连续控制常分离;像素输入常共享 CNN 躯干 + 系数 |
| 要不要 target network / 停梯度 | 自举目标里的 必须停梯度(否则追自己尾巴,式 (4.2));on-policy batch AC 里通常停梯度即够,target network 更多是 off-policy(模块 05)的稳定手段 | 停梯度必做;target net 视情况 |
| 与(online 时)状态分布相关性 | 既是问题定义也是方差旋钮(§5);online 单条轨迹相邻状态强相关,会让梯度估计偏移——这正是 batch/多环境采样要去相关的原因 | ;多环境去相关 |
| batch / 轨迹条数 | 越大方差越低、梯度越稳,但每次迭代越慢、样本消耗越大; 太小则回到 online 的高方差困境 | 按算力取尽量大的 |
6.4 一步步走一遍:数据如何在一轮里流动
把一次迭代拆成”采样 → 拟合 → 算优势 → 更新策略”四个环节,看清数据怎么一路流下去(这张示意与 §讨论课 的 图 6 是同一回路的 batch 版):
worked:用具体数字走一轮(一步 TD 优势)
设 ,某轮采到 batch 里的一条转移 ,非终止()。当前 critic 给出 、。
- 步 (2) 拟合 critic。 自举回归目标 ;critic 对该样本的损失贡献 ,回归会把 往 方向拉。
- 步 (3) 算优势。 若优势在 critic 更新前用旧值计算,则 ——“这一步比 critic 原先预期好”。若先更新 critic,则必须代入更新后的具体值,结果不再固定为 2.4。
- 步 (4)–(5) 更新 actor。 该样本对策略梯度的贡献是 :正优势会提高 在 的概率。批内标准化通常改善数值尺度;其中除以正标准差只做缩放,但减去 batch 均值可能改变单样本符号和有限样本梯度方向。
整个 batch 的所有样本都各算一份 ,平均成 后走一步——这就是”用 batch 均值近似期望梯度”的字面含义。
常见陷阱 / 实践
- critic 没拟合好就更新 actor(最致命)。 步 (3) 的优势完全依赖 ;若 critic 还没大致拟合到位( 太少、或初始化后头几轮), 系统性偏错,整批策略梯度会被同向带偏并经后续自举放大。实践上常让 critic 先热身几步、或给足 ,再信它的优势。
- on-policy 约束:batch 必须来自当前 。 策略梯度 只对当前策略采出的数据无偏(似然比推导见 模块 03、本讲 §1)。所以主循环步 (6) 用后即弃: 一更新,旧 batch 就”过期”,不能再拿来更新——想复用旧数据得上重要性采样或 off-policy 机制(模块 05)。
- 优势标准化。 每个 batch 可把 标准化到零均值、单位方差(步 (3))以改善数值尺度。除以正标准差只缩放;减去 batch 均值则可能改变单样本符号和有限样本梯度方向。注意要用当前 batch 的统计量。
- 学习率与 actor/critic 步数配比。 critic 通常需要比 actor 更快/更多地更新( 略大或 ),好让优势信号先靠谱;但 critic 过度拟合当前 batch 又会放大自举偏差。 与 的配比是 batch AC 最需要调的一组超参。
小结: batch actor-critic 就是”采一批 → 拟合 critic → 借 critic 算优势 → 用优势做一次策略梯度 → 丢弃重来”,两套参数 用两个方向相反的损失各自更新。把它同步并行化就是 A2C(§7),把 GAE 插进步 (3) 就得到 PPO 的优势估计骨架(模块 06)。
本质 Insight:actor-critic vs 纯策略梯度 / 纯价值方法
纯策略梯度(模块 03)无偏但高方差;纯价值方法(模块 05,学 后贪心)低方差但对连续动作难 、且有致命三要素风险。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。
熵正则项:维持探索、抵御熵坍缩
回看 §讨论课的 A2C 伪代码,actor 损失里有一项 。这里把它单拎出来讲清”为什么”。策略熵定义为
在损失里减去 等价于在目标里加上一个熵奖励——鼓励策略在拿到高优势的同时尽量别太确定。它的作用有三:
- 维持探索:没有它,策略会迅速把概率质量堆到当前看起来最好的动作上,过早变得近乎确定,从此再也采不到别的动作、学不到更优解。
- 抵御”熵坍缩”(entropy collapse):一旦某动作概率逼近 1, 与梯度趋于病态、训练僵死。熵项给了一个”往回拉向均匀”的力,防止这种正反馈塌缩。
- 平滑优化地形:熵项让目标更光滑,减少陷入尖锐次优峰的概率。
调参直觉
常从一个小值(如 )起步,随训练退火到接近 0:早期需要探索,后期需要收敛到确定性好策略。注意这里的熵项只是启发式正则;把熵提升为优化目标的一等公民(、并自动调 )就得到最大熵 RL / SAC——见 §8 与 模块 07。这里首次出现的 是熵的权重(又称”温度”):它衡量”回报”与”随机性”孰轻孰重, 越大越鼓励策略保持随机、探索更足,实践中可自动调节;它和前面第 6 节更新式里的学习率 只是恰好同字母,含义完全不同,勿混。
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 学 (而非 ),可用回放缓冲区的历史数据 → 样本效率高;代价是要面对模块 05 的”致命三要素”(自举+off-policy+函数逼近)带来的不稳定。
- 最大熵 RL / Soft AC:在目标里加入策略熵项 ,鼓励”在获得高回报的同时尽量随机”。好处:更强探索、更鲁棒、训练更稳。SAC 是连续控制的 SOTA 之一。
前沿实践与指路
- PPO 是 on-policy actor-critic 的实例:actor 用裁剪式策略梯度、critic 提供 GAE 优势——你已掌握它的全部零件(模块 03 IS/裁剪 + 本模块 GAE),细节见模块 06。
- SAC/软 AC 的完整推导(最优性变量、soft 贝尔曼、自动温度 )见模块 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 用回归的 ,优势 = 回报 − 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:优势里只累加 之后的奖励 ,而非整条轨迹总回报——过去的奖励与当前动作无关,去掉它无偏且降方差。
- 优势归一化:每个 batch 可把 标准化到零均值、单位方差()以改善数值尺度。中心化可能改变单样本符号与有限 batch 的梯度方向,不能简单等同于只改学习率。
- 折扣 :既是问题定义也是方差旋钮(见 §5);bootstrap 项在终止步要乘 ,否则把”回合结束”错当成”还有未来”。
- 熵正则:actor 损失加 维持探索; 常从小值起、随训练退火。
- critic 目标停梯度:TD 目标 里的 要 detach/停梯度,否则半梯度变成”追移动靶”。
常见 bug
- 误以为 baseline 有偏:只要 baseline 不依赖动作 ,——期望完全不变(证明见 §3.3)。把它当成”有偏近似”而不敢用,是最常见的误解。
- batch 维度错位:、、mask 必须逐元素对齐 ;常见错误是对 batch 求了 而非逐样本、或把 的时间轴与状态轴转置,导致梯度”看起来在训练其实在乱学”。
- 把总回报当 reward-to-go:用整条轨迹回报乘每个 ,方差暴涨且收敛慢。
- 归一化用错统计量:优势归一化要用当前 batch 的 ;跨 batch 复用旧统计量会引入偏移。
3.3 手算:为什么”降方差不改期望”
推导:一个两动作的数字例子(baseline 把方差压到 0,期望梯度不变)
设置
单状态、两个动作,softmax 策略 。score 函数对 logit 的分量:,。取回报 。
第 1 步(无 baseline 的估计)。 逐样本梯度 :
期望(真实梯度):。方差:。
第 2 步(减去 baseline )。 :
期望:——和第 1 步 式(4.13) 完全一样。方差:——直接归零!
为什么期望不变(一般证明)。 因为 score 的期望恒为零:
故对任何与动作无关的 有 ,从梯度里加/减它不引入偏差。在本段对称二动作例子中, 恰好把方差降为零;一般的方差最小 baseline 还取决于 score-function 梯度范数,状态价值只是常用选择。
图 6:A2C 单步 update 的闭环——并行采样 → 拼 batch → 用 critic 自举算 TD 优势 → 合并 actor/critic 损失 → 更新参数 → 继续采样(on-policy,用后即弃)。
方法溯源:动机 · 启发 · 局限
把本讲的方法按”为什么被提出”重新串一遍,能看清 actor-critic 家族其实是一条持续与方差搏斗的演化线:每一步都在为上一步的高方差、或为降方差新引入的偏差”打补丁”。下表按时间与逻辑给出每个关键方法的动机、启发与遗留局限。
| 方法 / 代表作(年代) | 动机(要解决什么) | 启发 / 脉络 | 关键局限(→ 引出谁) |
|---|---|---|---|
| REINFORCE(Williams, 1992;对照起点) | 直接对策略参数做梯度上升,无需模型也无需值函数 | 似然比 / score-function 估计() | 只用蒙特卡洛回报, 方差随时域累积而爆炸 → 呼唤 baseline 与 critic |
| Actor-Critic(Barto–Sutton–Anderson, 1983) | 用一个学到的”评论家” 的低方差估计,替代嘈杂的单次采样回报 | 动物学习中”预测器 + 控制器”的分工;TD 自举(脉络上其实早于 REINFORCE) | critic 不准会引入偏差,且自举把误差沿时间传播 → 需要在偏差-方差间折中 |
| 优势函数 | 从回报里减去与动作无关的 baseline,降方差且不改期望 | 统计里的控制变量(control variate) | 单步优势 偏差偏大、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) | 不在某个固定 -step 里二选一,用 在偏差-方差谱上连续插值 | TD() / 资格迹(eligibility trace)的指数加权 | 假设 critic 固定且合理、 需调参;终局稀疏奖励下意义有限 → 引出 critic-free 的 GRPO/RLOO(模块 13) |
演进故事线:一条与方差搏斗的主线
整条线的起点是 REINFORCE 的致命高方差:它诚实地把整条轨迹的蒙特卡洛回报当学习信号,无偏,但长时域的随机性层层累积,梯度噪声大到几乎学不动。第一记补丁是引入学到的 critic(actor-critic):用 顶替嘈杂的采样回报,方差骤降——代价是 critic 不准会带来偏差,而且自举让这个偏差沿贝尔曼回代传播。于是”降方差”与”控偏差”成了一对必须同时照看的矛盾。
第二记补丁是把偏差-方差做成可调旋钮:n-step 用”走几步真实奖励再自举”取折中,GAE 更进一步——不在某个整数 上死磕,用 对所有 -step 做指数加权,把”有效视野”连续地放在一步 TD(低方差高偏差)与蒙特卡洛(无偏高方差)之间。与此并行的另一条支线是并行化:A3C 用异步 worker 打散样本相关性,但”梯度陈旧”弊大于利,A2C 用同步大 batch 反而更稳更快——并行的真正价值不在”异步”而在”去相关”。
遗留局限如何催生下一步
这条家族树的每个”局限”都精确地指向了后继者:critic 的偏差与调参负担,加上 GAE 在仅终局、稀疏奖励场景里意义有限,直接催生了大模型时代 critic-free 的 GRPO / RLOO——用蒙特卡洛式的”组均值”基线替掉学出来的 critic;A2C 的同步向量化采样思路则被 PPO(模块 06)继承为标准工程。换句话说,本讲不是终点,而是”如何低方差地估计优势”这一问题的一个阶段性答案。
9. 小结与要点
- Actor-Critic = 策略(actor,策略梯度更新)+ 值函数(critic,回归/自举更新);critic 用低方差估计代替蒙特卡洛回报。
- 优势的 TD 估计 ;用目标网络/停梯度稳住自举。
- MC↔TD↔n-step 是一条偏差-方差谱:MC 无偏高方差,TD 低方差有偏,n-step 居中。
- GAE:, 为 TD、 为 MC; 是”信任 critic 多少”的旋钮, 反向递推可算。
- 是另一个方差-偏差旋钮:小 = 短有效时域 = 低方差但短视(且改变了优化目标本身)。
- A2C(同步)通常 ≥ A3C(异步);并行的真正价值是打散样本相关性。
- 框架可扩展到 off-policy(SAC/软 AC,样本高效、鲁棒)——完整理论见模块 07;PPO 是本框架的 on-policy 实例(模块 06)。
承上启下
我们已经走完”策略优化”这条主线:模仿 → RL 目标 → 策略梯度 → actor-critic。接下来转向另一大家族:完全不显式表示策略,而是学 再贪心的基于价值的方法(Q-learning、DQN、致命三要素)——模块 05。