新闻详情

新闻详情

首页 / 资讯中心 / 详情

控制作为变分推断:从概率图模型到最大熵强化学习

发布时间:2026/9/28 1:27:52来源:尧图网络
控制作为变分推断:从概率图模型到最大熵强化学习
之前在做深度强化学习项目时我一直习惯把策略优化理解为“奖励最大化下的损失函数迭代”。这种视角虽然足够支撑大部分实验但遇到探索不足、熵正则系数难调、soft Q 类算法原理说不清的时候总是差点意思。直到系统梳理了伯克利深度强化学习课程中关于“控制作为变分推断”的这一讲我才把最优控制、概率推断和最大熵强化学习真正串成了一条线。这篇文章就以伯克利深度强化学习课程的第十三讲为主线完整拆解“控制作为变分推断”的建模思路、公式推导和代码实践。内容包含概率图模型设计、ELBO 推导、soft optimality、与 SAC 等最大熵算法的关系以及一个可运行的 PyTorch 变分推断示例。无论你是刚接触强化学习理论的新手还是想弄明白最大熵 RL 为什么会带熵正则的进阶开发者都可以从这篇文章里找到想要的答案。1. 为什么说控制可以看作变分推断1.1 强化学习中的两种基本视角绝大多数强化学习入门资料都是从“策略、奖励、价值函数”出发把问题定义为一个序贯决策下的期望回报最大化[ \max_{\pi} ; \mathbb{E}{\tau \sim \pi} \left[ \sum{t1}^{T} r(s_t, a_t) \right] ]这种视角非常直观优化目标就是累积奖励。但深度强化学习里很多现象用这个视角解释不了比如为什么要在策略目标里加一个熵正则项为什么 soft Q-learning 的更新公式里会有 log 和 exp为什么同一个任务奖励尺度变化后温度系数也要跟着调整“控制作为变分推断”提供了另一套解释框架把最优控制问题变成一个概率推断问题。你不是直接最大化奖励而是观测到“这条轨迹表现最优”这个证据然后推断轨迹或动作的后验分布。这个视角最早来源于随机最优控制领域近年来被 Levine 等人重新整理并推广到深度强化学习逐渐成为理解最大熵强化学习算法的理论基础。1.2 最优性变量的引入概率推断的核心是处理观测变量和隐变量。在控制问题里我们想推断的最优轨迹或最优动作是隐变量那观测变量是什么方法是在轨迹上引入一个二元变量 (O_t)它表示“时刻 (t) 的状态动作对是可靠的、最优的”。当 (O_t 1) 时说明智能体在这个时刻做出了合理决策。我们希望这个事件发生的概率越大越好。通过定义[ p(O_t 1 \mid s_t, a_t) \exp(r(s_t, a_t)) ]就能把奖励函数用概率形式表示出来。奖励越大(O_t 1) 的概率越大。虽然这个表达式没有除以配分函数严格来说不是概率但在变分推断框架下指数形式非常方便因为取对数后直接就变成奖励项。1.3 最优策略变成了后验分布有了 (O_t) 之后整个问题就变成了给定观测 (O_{1:T} 1)推断轨迹 (\tau) 的的后验概率[ p(\tau \mid O_{1:T} 1) ]这时“最优策略”不再是一个点估计而是一个后验分布。分布越集中说明智能体对最优行为越确定分布越分散说明还存在多种合理的动作。这种“用分布表示不确定性”的思路正好解释了为什么最大熵强化学习会鼓励探索——因为把策略本身当作推断对象不确定性的来源被建模得更自然。2. 把随机最优控制写成概率图模型2.1 轨迹的联合分布在标准强化学习中策略 (\pi(a_t \mid s_t)) 和动力学 (p(s_{t1} \mid s_t, a_t)) 一起决定了轨迹分布。如果我们希望按概率图模型的风格描述一整条轨迹可以写成[ p(\tau) p(s_1) \prod_{t1}^{T} p(s_{t1} \mid s_t, a_t) \pi(a_t \mid s_t) ]这里的 (\tau (s_1, a_1, \ldots, s_T, a_T, s_{T1}))。这个式子和我们熟悉的轨迹分布是一致的。区别在于在控制作为变分推断的框架里策略 (\pi) 会被视为一个待推断的变分分布 (q(a_t \mid s_t))而不是直接给定的固定对象。2.2 加入最优性变量后的联合分布把上一节的 (O_t) 加入联合分布后整体模型写作[ p(\tau, O_{1:T}) p(s_1) \prod_{t1}^{T} p(s_{t1} \mid s_t, a_t) p(a_t \mid s_t) \exp(r(s_t, a_t)) ]这里有一个细节(p(a_t \mid s_t)) 表示动作的先验分布。如果没有任何先验偏好可以把它设成均匀分布也可以根据任务设置先验比如希望动作不要太大、不要靠近边界等。( \exp(r(s_t, a_t))) 则代表这个 transition 是最优的可能性。从图模型角度看状态和动作之间存在马尔可夫依赖而 (O_t) 像是一个额外的观测节点同时依赖 (s_t) 和 (a_t)。给定 (O_t 1) 之后动作的后验分布就会发生偏移偏移方向正是朝向高奖励区域。2.3 后验轨迹分布在概率图模型里观测到 (O_{1:T} 1) 之后我们希望计算[ p(\tau \mid O_{1:T} 1) \frac{p(\tau, O_{1:T} 1)}{p(O_{1:T} 1)} ]理论上可以把这个后验当作“最优轨迹分布”并由此导出最优策略。但实际计算时分母 (p(O_{1:T} 1)) 涉及对整条轨迹积分状态空间和动作空间稍微大一点就没法直接算。这正是变分推断出场的地方。3. 变分推断从后验到可优化目标3.1 后验难算的原因大多数情况下(p(O_{1:T} 1)) 不能直接求解。因为要做积分[ p(O_{1:T} 1) \int p(\tau, O_{1:T} 1) , d\tau ]轨迹空间是连续高维的而且奖励函数任意复杂积分没有解析形式。哪怕是表格环境随着时间步增加轨迹数量也会指数膨胀。所以我们需要找一个容易处理的分布 (q(\tau)) 去近似真实后验 (p(\tau \mid O_{1:T} 1))。3.2 ELBO 推导变分推断的核心是最小化两个分布的 KL 散度[ \min_q ; \mathrm{KL}(q(\tau) | p(\tau \mid O_{1:T} 1)) ]把条件概率展开可以得到[ \log p(O_{1:T} 1) \mathrm{ELBO} \mathrm{KL}(q(\tau) | p(\tau \mid O_{1:T} 1)) ]因此最小化 KL 等价于最大化 ELBO其中[ \text{ELBO} \mathbb{E}{q(\tau)} \left[ \log p(\tau, O{1:T} 1) \right] \mathbb{E}_{q(\tau)} \left[ -\log q(\tau) \right] ]这个式子非常关键。它把最大化和推断联系了起来第一项是“拟合专家数据/奖励”的概率项第二项是变分分布的熵。3.3 一种实用的变分分布选择直接对整条轨迹做变分近似仍然很复杂。为了使问题可解我们限制 (q(\tau)) 的形式动力学 (p(s_{t1} \mid s_t, a_t)) 保持不变不修正环境动态。只对策略部分做近似用 (q(a_t \mid s_t)) 代替先验动作分布 (p(a_t \mid s_t))。于是[ q(\tau) p(s_1) \prod_{t1}^{T} p(s_{t1} \mid s_t, a_t) q(a_t \mid s_t) ]代入 ELBO 后内部的 (\log q(\tau)) 有一系列对数相消最后剩下[ \text{ELBO} \sum_{t1}^{T} \mathbb{E}_{q(s_t, a_t)} \left[ r(s_t, a_t) \log p(a_t \mid s_t) - \log q(a_t \mid s_t) \right] ]如果先验 (p(a_t \mid s_t)) 是均匀分布那么 (\log p(a_t \mid s_t)) 是常数此时[ \text{ELBO} \mathbb{E}{\tau \sim q}\left[ \sum{t1}^{T} r(s_t, a_t) \right] \sum_{t1}^{T} \mathbb{E}_{q(s_t)}\left[ \mathcal{H}(q(\cdot \mid s_t)) \right] ]推导结果变成了熟悉的“奖励期望 策略熵正则”。这意味着控制作为变分推断确实能推导出最大熵强化学习的目标函数。熵正则项不是人为硬加的技巧而是变分推断带来的自然产物。3.4 自由能视角如果把 (-\log p(\tau, O)) 看成能量函数那么 ELBO 最大化等价于最小化变分自由能[ \mathcal{F}(q) \mathbb{E}_{q}[\text{能量}] - \mathcal{H}(q) ]这里的能量由奖励和先验决定熵项让分布尽量保持多样性。最优的变分分布在“低能量区域集中分布”和“保持覆盖面积”之间平衡。这个视角对理解探索与利用的关系非常有帮助。4. soft optimality 与最大熵强化学习4.1 Soft 价值函数的定义在标准强化学习中价值函数是[ V(s) \max_a Q(s, a) ]而在“控制作为变分推断”框架下最优策略满足玻尔兹曼分布[ q^*(a \mid s) \propto \exp\left( \frac{Q(s, a)}{\alpha} \right) ]因此 soft 价值函数定义为[ V(s) \alpha \log \int \exp\left( \frac{Q(s, a)}{\alpha} \right) da ]这里的 (\alpha) 就是温度系数。它起了两个作用控制分布的锐利程度。平衡奖励和熵的大小。当 (\alpha \to 0) 时soft 价值退化为最大值 ( \max_a Q(s,a))对应标准强化学习。4.2 Soft Q-learning 和 SAC 的联系根据上面的定义可以写出 soft Bellman 更新[ Q(s_t, a_t) r(s_t, a_t) \gamma \mathbb{E}{s{t1}}\left[ V(s_{t1}) \right] ]把 (V) 展开写就是 soft Q-learning 的更新公式。SAC 的 critic 学习的就是这个 soft Q 函数。SAC 的 actor 更新本质上是在最小化[ \mathrm{KL}\left( q(a \mid s) ;\middle|; \frac{\exp(Q(s, a) / \alpha)}{Z(s)} \right) ]这和变分推断中“用简单策略分布去逼近 soft 最优动作后验”是一致的。所以 SAC 中出现的熵正则、log-sum-exp、温度系数并不是设计者拍脑袋想出来的技巧而是从“控制作为变分推断”的视角下推导出来的组成部分。4.3 表格环境下的 soft 价值迭代示例为了把上面的公式落到代码层面先写一个最简单的确定性表格环境示例。假设环境有若干状态每个状态可选动作有限个转移和奖励已知。import math class TabularEnv: def __init__(self): self.states [0, 1, 2] self.actions_map { 0: [0, 1], 1: [0, 1], 2: [0, 1] } def actions(self, s): return self.actions_map[s] def transit(self, s, a): # 确定性环境示例 next_s (s a 1) % len(self.states) reward 1.0 if next_s 2 else 0.0 return reward, next_s def logsumexp(values): m max(values) return m math.log(sum(math.exp(v - m) for v in values)) def soft_value_iteration(env, gamma0.95, alpha1.0, iterations50): V {s: 0.0 for s in env.states} for _ in range(iterations): V_new {} for s in env.states: q_values [] for a in env.actions(s): r, s_next env.transit(s, a) q_values.append(r gamma * V[s_next]) V_new[s] alpha * logsumexp([q / alpha for q in q_values]) V V_new return V def soft_policy_from_v(env, V, alpha1.0, gamma0.95): policy {} for s in env.states: q_values [] actions env.actions(s) for a in actions: r, s_next env.transit(s, a) q_values.append(r gamma * V[s_next]) exp_q [math.exp(q / alpha) for q in q_values] total sum(exp_q) policy[s] {a: p / total for a, p in zip(actions, exp_q)} return policy这个示例展示了 soft 价值迭代的核心思想用 logsumexp 代替 max得到的策略是玻尔兹曼策略而不是贪心策略。温度越高策略越均匀温度越低策略越接近贪心。5. 代码实践用变分推断理解控制5.1 实验目标前面推导了很多公式下面直接动手实现一个最小变分推断示例。假设我们要推断的目标后验是一个双峰分布比如两个高斯混合[ \tilde{p}(x) \propto 0.5 \cdot \mathcal{N}(x \mid -2, 1) 0.5 \cdot \mathcal{N}(x \mid 2, 1) ]我们用一个单高斯变分分布 (q(x) \mathcal{N}(\mu, \sigma^2)) 去近似它。这里不需要知道归一化常数因为 ELBO 里可以只计算 (\log \tilde{p}(x))最后差一个常数并不影响优化。5.2 使用 PyTorch 手写 ELBO下面代码使用 PyTorch 完成 ELBO 最大化import torch import math torch.manual_seed(0) # 未归一化的对数概率对应双峰目标分布 def log_p_tilde(x): log_n1 -0.5 * ((x 2.0) / 1.0) ** 2 - math.log(math.sqrt(2 * math.pi) * 1.0) log_n2 -0.5 * ((x - 2.0) / 1.0) ** 2 - math.log(math.sqrt(2 * math.pi) * 1.0) return torch.logaddexp(log_n1, log_n2) # 变分参数 mu torch.tensor(0.0, requires_gradTrue) log_sigma torch.tensor(1.0, requires_gradTrue) optimizer torch.optim.Adam([mu, log_sigma], lr0.05) for step in range(1000): noise torch.randn(64) sigma torch.exp(log_sigma) x mu noise * sigma log_q -0.5 * ((x - mu) / sigma) ** 2 - log_sigma - 0.5 * math.log(2 * math.pi) elbo (log_p_tilde(x) - log_q).mean() loss -elbo optimizer.zero_grad() loss.backward() optimizer.step() if step % 100 0: print(fstep {step}: mu{mu.item():.4f}, sigma{sigma.item():.4f}, elbo{elbo.item():.4f})运行后会发现单高斯变分分布通常只会收敛到某一个峰附近或者停留在两个峰中间某个位置。具体落在哪取决于初始化和随机种子。5.3 实验结果分析与控制语义这个现象在变分推断里被称为“模式坍塌”mode collapse。单高斯分布的表达能力有限无法同时覆盖两个相距较远的峰。这和控制问题有什么关系如果把“双峰后验”看成“两个同样优秀的动作方案”那么用单高斯策略表示最优动作分布就会丢失多模态性。真实世界中同一状态可能存在多种行为都能达到高奖励比如绕左还是绕右。如果策略分布太简单就会选择其中一种来回切换时可能出现抖动或退化。最大熵强化学习在策略表示上也面临同样问题。高斯策略非常适合连续动作但遇到多模态最优动作时需要用更灵活的分布族比如混合高斯策略。Normalizing Flow 策略。离散动作专用分布。隐变量策略模型。这也是控制作为变分推断框架带给实践的一个指导先想清楚你的策略分布到底需要什么样的表达能力再选择网络结构和训练目标。5.4 从变分推断到深度强化学习变分推断的 ELBO 是 (- \mathrm{KL}(q | \text{目标})) 的变形而策略优化里熟悉的策略梯度目标也可以从类似推导中得到。比如带熵正则的策略梯度[ \nabla_\theta J \mathbb{E}{a \sim q\theta}\left[ \nabla_\theta \log q_\theta(a \mid s) \left( Q(s, a) - \alpha \log q_\theta(a \mid s) \right) \right] ]这里的 (-\alpha \log q_\theta(a \mid s)) 正好对应熵正则的梯度贡献。从控制作为变分推断的角度看这些项不是正则惩罚而是“变分分布与先验之间的 KL 校正”。6. 常见问题与排查思路在学习和复现这类算法时经常会遇到一些现象。下面整理了一张排查表。问题现象常见原因解决思路ELBO 数值持续下降且不稳定学习率过大采样样本太少降低学习率增大 batch size使用 logsumexp 稳定计算单高斯变分分布只覆盖一个峰变分族表达能力不足改用混合高斯、Normalizing Flow 或离散分布Soft Bellman 计算时 exp 溢出Q 值跨度太大直接计算指数先减去最大值再用 logsumexp策略熵太低探索不足温度系数 (\alpha) 太小或奖励尺度太大调大温度系数或对奖励做归一化也可以使用自动熵调节温度系数怎么调都不收敛奖励范围变化太大先固定奖励尺度在 0.1 到 1 范围观察策略熵变化策略梯度方差大缺少 baseline熵项权重过大引入价值函数做 baseline使用 GAE或者降低熵系数引入先验 (p(a \mid s)) 后动作偏离目标先验设计不合理先验均匀分布是一个安全起点再逐步加入任务约束表格环境 soft 价值迭代不收敛遗忘除以温度后直接 softmax确认 logsumexp 输入为 (Q / \alpha)7. 最佳实践与工程建议7.1 优先用数值稳定的 logsumexp无论是 soft Q-learning 还是 soft 价值迭代都不要直接对 Q 值做 exp。如果 Q 值的绝对值较大exp 会溢出或下溢。推荐统一使用类似下面的函数def logsumexp(values, dimNone): import torch if dim is not None: m, _ values.max(dimdim, keepdimTrue) return m.squeeze(dim) torch.log(torch.exp(values - m).sum(dimdim)) else: m values.max() return m torch.log(torch.exp(values - m).sum())7.2 奖励尺度远比想象中重要温度系数 (\alpha) 和奖励 (r) 在目标函数里是线性组合的关系[ \mathbb{E}\left[ \sum r \right] \alpha \mathcal{H} ]奖励量纲直接决定相同熵权重下策略的随机程度。如果奖励范围整体很大熵项可能完全不起作用如果奖励范围很小策略可能一直很随机。实战中推荐先归一化奖励再设定初始温度。7.3 策略分布选择要匹配任务性质连续动作空间常用高斯分布但高斯分布是单峰的。如果任务中存在多个对称解比如双手操作、足式机器人左右对称步态建议考虑混合高斯策略。把最后一层输出映射到多个动作候选。使用隐变量模型增加策略的表达能力。7.4 从表格环境开始验证在实现 SAC 或 Soft Q-learning 之前先在一个确定性表格环境里跑一遍 soft 价值迭代确认 soft Bellman 公式、温度系数、策略导出逻辑没有写错。这个过程成本很低却能避开很多深度网络训练中容易混淆的 bug。7.5 对生产环境保持谨慎变分推断框架下“策略”是一个分布不是确定性的输出。在真实机器人、工业控制等场景中部署时不能直接把高熵分布的动作原样用于执行通常需要配合 safety filter、动作代理或约束优化。最小权限和安全边界原则依然适用于任何控制类项目先在仿真环境中验证模型再小规模上线并且保留人工接管权限。8. 总结与学习路线通过这一讲的学习我主要形成了三个收获。第一控制问题可以改写成概率推断问题。通过引入最优性变量 (O_t)最优策略变成给定“观测最优”后的后验分布这个视角统一了最优控制和概率图模型。第二变分推断的 ELBO 推导可以自然导出“奖励期望 熵正则”的目标函数。这让我理解了 SAC 的 actor 目标为何会带一个 KL 项也理解了温度系数不是可有可无的额外超参数而是平衡拟合与探索的核心变量。第三Soft 价值函数和玻尔兹曼策略之间的关系非常清晰。掌握这种关系之后看 SAC 的论文和源码会轻松很多不再只是盲目调参。如果顺着这条线继续深入推荐做三件事在 Gym 环境里实现一个简单的带熵正则策略梯度对比有无熵项时探索行为的变化。理解并复现 SAC 的自动熵调节技巧观察奖励尺度变化对温度自适应的影响。阅读关于控制作为推断的经典论文并使用概率图模型视角推导一遍 MPC 和时间差学习之间的联系。深度强化学习算法越来越多如果只停留在调库调参阶段遇到新问题很容易失去方向但掌握“控制即变分推断”这种底层视角之后再用 SAC、Soft Q-learning、MPC 等工具就更容易看出它们的共性结构和适用边界。建议在学习过程中把公式推导和代码验证结合起来表格环境可以帮你快速验证直觉连续控制环境能帮你确认工程细节。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Moviepy批量调整视频帧率 2026/9/28 2:14:19

Moviepy批量调整视频帧率

在多源视频的整合项目中,经常会遇到视频帧率不一致的问题。这种帧率差异不仅会影响视频的播放流畅性,还会造成拼接后视频不同步或卡顿的情况。为了解决这一问题,MoviePy作为一个强大的Python视频编辑库,可以通过简洁的代码轻松实现批量帧率调整。 本文将详细讲解如何利用M…

阅读更多 →
MoviePy批量创建视频幻灯片 2026/9/28 2:14:19

MoviePy批量创建视频幻灯片

在数字内容创作中,视频幻灯片是一种高效且富有表现力的展示方式,广泛应用于个人纪念、商业推广和教育培训等领域。利用Python中的MoviePy库,可以简便地将一系列静态图片转换成动态视频,并通过添加背景音乐和流畅的过渡效果,显著提升视觉体验。 本教程旨在指导自学编程的学…

阅读更多 →
使用NoneBot2可视化平台搭建QQ聊天机器人:本地和云部署教程 2026/9/28 2:14:19

使用NoneBot2可视化平台搭建QQ聊天机器人:本地和云部署教程

NoneBot是一个基于Python 3.8+的异步、开源和可扩展的框架,用于构建和运行聊天机器人,支持各种聊天平台,如Telegram,Discord和WeChat。它是基于nonebot库构建的,提供了一个易于使用的界面,用于创建聊天机器人插件和处理消息。它允许开发人员轻松创建自定义插件和命令,并…

阅读更多 →
一个简单的python文件上传下载web服务器 2026/9/28 2:14:19

一个简单的python文件上传下载web服务器

临时使用网络通过http传输文件非常的方便。默认共享当前文件夹,也可在启动时指定共享的文件夹。也可上传文件。python win32/64 3.6/3.7测试通过。运行后会提示本机ip,在同一局域网下在浏览器内输入网址即可。如果本机有外网ip,一样可用。使用…

阅读更多 →
拳皇97大门bug震笔记 2026/9/28 2:14:19

拳皇97大门bug震笔记

文章目录bug震原理不同bug震的时机把握出招帧数天地返起身帧数分组破解bug震之前发过拳皇97人物整体笔记。因为大门涉及bug震,内容比较多,单独整理下。bug震原理 人物倒地后,起身第一帧是站立状态,而地震雷需要下蹲(并不需要蹲防…

阅读更多 →
真实废弃物图像分类:4800张标注数据实战与避坑指南 2026/9/28 2:14:13

真实废弃物图像分类:4800张标注数据实战与避坑指南

简介:这份生活中真实废弃物图像分类数据集面向计算机视觉初学者与图像分类、分割方向的算法实践者,用于解决垃圾分类场景下真实样本获取难、标注成本高的问题。数据已完成预处理,可直接作为分类网络输入,覆盖纸板、食品有机物、玻…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉