这次我们来看一门硬核课程的核心章节伯克利 2026 春季深度强化学习课程CS 285 系列风格的第 12 讲主题是强化学习中的变分推断。先说结论这一讲不是教你调一个库而是把强化学习重新放回概率图模型的框架里用变分推断统一策略优化、探索和奖励设计。它最大的价值在于回答一个很多人没想透的问题——策略梯度方法到底在优化什么以及为什么最大熵强化学习、SAC、MPO 这些算法会长得那么像。如果你正在学深度强化学习已经跑过 PPO、SAC但总觉得公式推导是各讲各的那这一讲的内容值得认真过一遍。本文会带你拆解 ELBO 推导、控制即推断Control as Inference建模、策略梯度与变分推断的统一视角并给出可运行的 PyTorch 验证代码和常见学习误区排查。1. 本讲核心内容速览项目项内容课程来源伯克利 2026 春季深度强化学习课程第 12 讲核心主题变分推断与强化学习的理论交叉前置基础概率图模型、策略梯度、动态规划基础关键公式ELBO、最优性变量建模、变分策略分布主要算法联系SAC、MPO、软 Q 学习、最大熵强化学习工程价值统一算法推导视角指导策略优化与探索设计适合读者想深入理解深度强化学习理论的算法工程师、研究生代码实践PyTorch 高斯变分推断、简化最大熵策略优化计算要求CPU 即可完成验证不需要 GPU 大规模训练这一讲的理论密度很高但受益也很直接。弄懂它之后再看 SAC 或者 MPO 的论文你会发现自己能快速抓住对方在优化哪个下界、哪个分布被近似、哪个 KL 项被约束。2. 为什么要从变分推断的角度看强化学习先抛出一个问题经典策略梯度方法REINFORCE、PPO直接把期望回报当作目标函数用梯度上升更新策略参数。这个视角当然能work但它有一个隐患——回报只是一个标量它并不显式地告诉你策略分布应该长什么样。在奖励稀疏、多模态最优行为、需要显式探索的场景里纯期望回报视角会显得很被动。变分推断则提供了一套语言把“好的行为”建模为潜在变量把“最优策略”建模为在某种最优性条件下的后验分布把策略优化转化为“用可参数化的变分分布去逼近这个后验”。这样做的直接收益有三个。第一奖励设计有了概率语义。把奖励函数写成最优性变量的对数条件概率奖励就变成了“观察到最优行为的似然”于是奖励塑形和概率推断可以互相翻译。第二探索有了分布依据。变分推断天然需要计算 KL 散度而 KL 散度会强制策略不要过早坍塌到单一动作。最大熵强化学习里的熵正则项本质上就是为了维持后验逼近时的覆盖度。第三多模态行为可以被描述。期望回报最大化往往鼓励策略输出均值附近的动作而变分后验可以保留多峰分布对应强化学习里的多模态最优策略。所以这一讲并不是在“炫技”而是给你一把能同时打开策略梯度、最大熵 RL、EM 式策略优化的钥匙。3. 变分推断基础从精确后验到 ELBO在进入强化学习之前先把变分推断本身的推导捋清楚。假设我们有观测变量 (x) 和隐变量 (z)联合分布为 (p(x, z))我们关心的是后验 (p(z|x))。问题是这个后验在很多模型里没有解析形式计算它需要边际化[ p(x) \int p(x, z) dz ]这个积分在高维空间里通常不可解所以引入一个变分分布 (q(z|x))用 KL 散度衡量它和真实后验的距离[ \log p(x) \mathbb{E}{q(z|x)}[\log p(x, z) - \log q(z|x)] D{KL}(q(z|x) | p(z|x)) ]其中第一项就是证据下界 ELBO[ \text{ELBO} \mathbb{E}_{q(z|x)}[\log p(x, z) - \log q(z|x)] ]因为 KL 散度非负所以 (\log p(x) \ge \text{ELBO})。最大化 ELBO 等价于同时做两件事拉近 (q(z|x)) 和真实后验 (p(z|x)) 的距离提升数据的对数似然下界。ELBO 还可以改写为另一种常见形式[ \text{ELBO} \mathbb{E}{q(z|x)}[\log p(x|z)] - D{KL}(q(z|x) | p(z)) ]这个形式更直观第一项是重构似然鼓励隐变量能解释数据第二项是正则项约束变分分布不要离先验太远。这就是变分自编码器VAE的优化目标。如果之前对 VAE 的推导一知半解现在可以把 ELBO 的两种写法记牢后面强化学习里的策略优化会反复用到同样的结构。4. 控制即推断把强化学习写成概率图模型第 12 讲的核心建模技巧是把强化学习问题嵌入一个概率图模型。做法如下。在标准 MDP 中智能体在状态 (s_t) 下采取动作 (a_t)获得奖励 (r(s_t, a_t))转移到 (s_{t1})。现在引入一个二值最优性变量 (O_t)定义它的条件概率为[ p(O_t 1 | s_t, a_t) \exp(r(s_t, a_t)) ]也就是说奖励越高观察到“这一步是最优的”这个事件的概率越大。这里做了指数变换所以奖励可以是任意实数但概率值始终在 ((0, 1]) 之间不会越界。整个轨迹的联合分布写作[ p(\tau, O_{1:T}) p(s_1) \prod_{t1}^{T} p(s_{t1}|s_t, a_t) \pi(a_t|s_t) p(O_t1|s_t, a_t) ]其中 (\pi(a_t|s_t)) 是先验策略分布(O_{1:T}) 表示整条轨迹都“最优”。现在强化学习的目标可以重新表述为在给定整条轨迹最优的条件下推断每个状态下应该采取的动作即后验[ p(a_t | s_t, O_{1:T}) ]这个后验在理论上就是“最优策略”。但它同样是不可解的因为需要考虑未来所有时间步的最优性变量。于是变分推断登场用一个参数化的策略分布 (q(a_t|s_t)) 去逼近这个后验。这种视角下(q) 不再只是一个策略网络它同时承担了“变分分布”的角色。策略评估和策略改进变成了变分推断中的 E 步和 M 步。5. 策略梯度与变分推断的统一视角很多人在学策略梯度时记住的是 REINFORCE 的“高回报动作概率上升、低回报动作概率下降”的直观解释。但从变分推断角度看事情还可以更深刻。把轨迹的最优性概率当作观测数据我们想最大化[ \log p(O_{1:T}) ]对 (\log p(O_{1:T})) 做和 ELBO 相同的分解引入轨迹分布 (q(\tau)) 作为变分分布[ \log p(O_{1:T}) \ge \mathbb{E}{q(\tau)}[\log p(\tau, O{1:T}) - \log q(\tau)] ]如果我们把 (q(\tau)) 限制为“由策略 (q(a_t|s_t)) 和环境动态组成的轨迹分布”也就是[ q(\tau) p(s_1) \prod_{t} p(s_{t1}|s_t, a_t) q(a_t|s_t) ]把这一项代入 ELBO会得到一个重要结论[ \log p(O_{1:T}) \ge \mathbb{E}{\tau \sim q}[\sum_t r(s_t, a_t)] \sum_t \mathbb{E}{s_t \sim q}[\mathcal{H}(q(\cdot|s_t))] ]如果忽略熵项这就是标准的期望回报最大化。但变分推断视角会多出一个熵正则项它要求策略不要过早确定性化。这正是最大熵强化学习的目标[ J(\pi) \sum_t \mathbb{E}{(s_t, a_t) \sim \rho{\pi}}[r(s_t, a_t) \alpha \mathcal{H}(\pi(\cdot|s_t))] ]所以Soft Actor-Critic 里面的熵项并不是拍脑袋加的正则它可以从“用变分分布逼近最优性后验”这个目标里严格推导出来。这里有一个很实用的启发当你在调 SAC 的温度参数 (\alpha) 时你实际上是在调节“策略分布离最优后验的 KL 约束有多紧”。(\alpha) 越大策略越保守、探索越充分(\alpha) 越小策略越激进、越容易坍塌。6. 变分推断视角下的策略优化EM 式迭代把变分推断的思路继续推进可以得到一种 EM 式的策略优化框架。前面提到变分分布 (q(a_t|s_t)) 逼近的是“在整条轨迹最优条件下的动作后验”。EM 的每一轮迭代分两步E 步固定当前策略 (q)估计软 Q 函数也就是在变分分布下计算带熵的期望回报。这一步对应策略评估。M 步更新策略分布让它在每个状态下更贴近由软 Q 函数诱导出的目标分布[ q_{\text{new}}(a|s) \propto q_{\text{old}}(a|s) \exp\left(\frac{1}{\alpha} Q_{\text{soft}}(s, a)\right) ]这一步对应策略改进。把这个迭代过程展开你会发现它同时统一了三种常见做法软策略迭代交替执行软策略评估和软策略改进。SAC用两个 Q 网络做 E 步估计用最小化 KL 散度做 M 步更新。MPOMaximum a Posteriori Policy Optimization显式地构造了一个变分分布作为目标策略再用 KL 约束把它投影回参数化策略族。所以这一讲的理论并不只停留在公式层面。如果你训练过 SAC又看过 MPO 的论文现在可以把它们放在同一张图里理解所有基于最大熵的深度强化学习算法本质都在做变分 EM 迭代。7. 从理论到代码用 PyTorch 验证变分推断只看公式容易飘最好动手写一个最小验证。下面给出一个完全可运行的 PyTorch 例子。它做的是最经典的任务用变分分布逼近高斯混合模型的后验观察 ELBO 的变化。这个例子虽然简单但能帮助你确认自己真的理解了 ELBO 的两个项分别起什么作用。代码不需要 GPUCPU 就能跑。import torch import torch.nn as nn import torch.optim as optim import math torch.manual_seed(0) # 真实后验混合高斯 def true_log_prob(z): return torch.logsumexp(torch.stack([ -0.5 * ((z - 3.0) / 0.8) ** 2 - math.log(0.8), -0.5 * ((z 2.0) / 1.2) ** 2 - math.log(1.2) ]), dim0) # 变分分布高斯 q(z) N(mu, sigma) mu nn.Parameter(torch.zeros(())) log_sigma nn.Parameter(torch.zeros(())) optimizer optim.Adam([mu, log_sigma], lr0.05) def sample_q(n1024): sigma torch.exp(log_sigma) eps torch.randn(n) return mu sigma * eps def elbo_loss(): z sample_q() log_q -0.5 * ((z - mu) / torch.exp(log_sigma)) ** 2 - log_sigma - 0.5 * math.log(2 * math.pi) return -(true_log_prob(z).mean() - log_q.mean()) # 最大化ELBO - 最小化负ELBO for step in range(1000): optimizer.zero_grad() loss elbo_loss() loss.backward() optimizer.step() if step % 200 0: print(fstep {step}: ELBO{-loss.item():.4f}, mu{mu.item():.2f}, sigma{torch.exp(log_sigma).item():.2f})运行之后可以看到变分分布会逐渐逼近混合高斯的一个峰。如果初始值落在两个峰之间最终结果会偏向概率质量更大的一侧。这个现象对应了变分推断的 mode-seeking 行为KL(q||p) 倾向于找到一个覆盖较窄的模式而不是完整描述多峰分布。把这个行为迁移到强化学习场景当你用高斯策略逼近多模态最优后验时策略可能只捕捉其中一个模态。这就是为什么真实机器人控制里常常需要更灵活的分布族如流模型、扩散模型来承担变分策略的角色。8. 强化学习变分推断的边界与常见误区这一部分容易被忽略但对理解课程内容很关键。先说适用边界。变分推断视角主要解决“算法推导的一致性问题”它不会自动解决工程上的所有困难。比如奖励稀疏时(\exp(r)) 的方差可能非常大推断会不稳定高斯变分族表达力有限面对多模态策略时会有天然的逼近误差变分推断的优化是高度非凸的初始化对收敛结果影响很大。再说学习中容易踩的误区。第一个误区认为 (\exp(r)) 就是策略。实际上它只是最优性变量的条件概率不是行动分布。策略必须从后验推断中得到直接拿奖励指数当策略既没有归一化也没考虑动态转移。第二个误区混淆熵正则项和探索噪声。最大熵强化学习中的熵项目的是维持策略分布对后验的覆盖度而不是简单地在动作上加高斯噪声。高斯噪声只是加了随机性熵正则项却会改变策略分布的形状两者作用机制不同。第三个误区忽略先验策略项。在软 Q 学习里如果先验策略 (\pi(a|s)) 不是均匀分布那么策略更新的目标应该是“在 KL 约束下贴近软 Q 目标”而不是直接最大化软 Q 值。很多论文复现失败就是因为这里把先验当成了均匀分布。9. 学习路线与验证清单如果你准备把这一讲的内容真正消化掉建议按下面的顺序操作。第一步先推导一遍 ELBO 的分解确保自己能独立写出 (\log p(x) \text{ELBO} D_{KL}) 的完整过程。这一步不需要代码但需要纸笔。第二步运行上面第 7 节的高斯变分推断代码修改目标分布为单峰高斯观察 ELBO 数值变化再改回混合高斯体会 mode-seeking 现象。第三步把最优性变量建模代入简单 MDP。比如一个两状态两动作的网格世界手动写出软 Q 迭代过程。如果熟悉 NumPy这一步可以用几十行代码完成。第四步回到 SAC 原始论文把论文里的软策略改进公式和本讲的 M 步公式对照确认二者只在符号上不同、数学上是同一件事。第五步如果精力充足可以阅读 MPO 的论文重点看它的 E 步和 M 步分别对应本文哪个公式以及它为什么要引入 sample-based 的分布估计。这套流程下来你对深度强化学习算法的理解会发生一个明显变化不再把 PPO、SAC、MPO 当成三个孤立算法而是把它们看成“同一个变分推断框架下的不同参数化与近似策略”。10. 总结与下一步第 12 讲给出的最重要结论是强化学习中的策略优化本质上可以看成在概率图模型里做变分推断。最优性变量把奖励转化为观测似然策略网络成为变分分布策略评估与策略改进对应 EM 迭代熵正则项则来源于 KL 距离约束。这门课的深度在于它不满足于“这样能跑通”而是强调“为什么它会以这种形式出现”。如果你之后要设计新算法或者要理解为什么某种探索机制能 work这套变分推断语言会比盲目调参可靠得多。建议先做两件事第一把 ELBO 的推导独立写一遍第二跑一遍第 7 节的最小代码观察最大化 ELBO 的过程中分布是怎么移动的。前者建立直觉后者验证直觉。之后可以顺着最大熵强化学习和 MPO 继续往下钻。到那个时候你再回头看第 12 讲的标题会发现“变分推断”不是一个锦上添花的数学工具而是理解现代深度强化学习算法的一条主干道。
