控制即推断:从最优控制到概率推断的建模视角转换

发布时间:2026/10/7 14:16:32

控制即推断:从最优控制到概率推断的建模视角转换 1. 为什么值得把控制问题当成推断问题来做第一次看到“Control as Inference”这个说法我脑子里冒出来的疑问很直接控制就是控制推断就是推断一个是让系统按预期动起来一个是根据观测猜隐藏变量这两件事凭什么能凑到一张桌子上后来把随机最优控制的推导从头推了一遍才意识到这个视角的转换不是文字游戏而是实打实能把一套现成的概率工具搬过来用的捷径。先把结论摆在这Control as Inference 的核心操作是给原本确定性的最优控制问题引入一个“最优性变量”把“动作好不好”这件事编码成一个概率分布然后整个控制问题就变成了在这个概率模型下做后验推断。一旦完成这个转换变分推断、KL 散度、消息传递这些在概率图模型里玩烂了的工具全都能直接拿来解控制问题。对于做机器人、做 MPC、做强化学习的人来说这意味着你不再需要单独维护一套最优控制的数学体系而是可以统一在概率框架下处理。这篇文章适合谁看如果你已经接触过最优控制或者强化学习知道 Bellman 方程长什么样但对“为什么控制能写成推断”一直没搞明白那这篇就是写给你的。如果你是完全的新手建议先把 LQR 和动态规划的基本推导过一遍再回来不然中间几步会卡住。我会尽量把每一步的动机讲清楚参数怎么来的、为什么这么选、踩过哪些坑都会摊开说。需要提前说明的是Control as Inference 不是一个单一算法而是一个建模视角。它下面挂着好几条技术路线有的是把最优性当成观测来做平滑有的是用变分推断去逼近后验策略有的直接导出软最优控制soft optimal control。这篇先讲基本理论把框架搭起来后面再谈具体算法实现。2. 从确定性最优控制到概率模型的思维转换2.1 传统最优控制在哪些地方让人别扭传统最优控制的写法大家应该都熟。给定一个动力学系统 $x_{t1} f(x_t, u_t)$要最小化一个累积代价 $\sum_t c(x_t, u_t)$。解这个问题的标准套路是动态规划写出 Bellman 最优方程$$V(x_t) \min_{u_t} \left[ c(x_t, u_t) V(x_{t1}) \right]$$这套东西在确定性、无约束、线性二次型的场景下非常漂亮LQR 能给出解析解。但一旦进入下面这几种情况就开始难受了随机系统动力学带噪声$x_{t1} \sim p(x_{t1}|x_t, u_t)$代价的期望要显式写出来推导立刻变复杂。约束处理硬约束在优化里要靠 QP 或者更复杂的求解器软约束又得手动设计惩罚项权重调起来全凭经验。多模态最优解有些任务天然存在多个同样好的解传统方法只会给你其中一个没法表达“这几个都行”的分布。和概率模型结合做状态估计、做学习型控制的时候你手上已经有一堆概率工具了但控制部分还得单独用另一套语言描述割裂感很强。我最早做 MPC 的时候就吃过这个亏。状态估计用卡尔曼滤波概率框架一套一套的到了控制层又得切回 QP 求解器两边的数学符号对不上调试的时候来回换算特别容易出错。Control as Inference 吸引我的地方就是它试图把这两层统一起来。2.2 引入最优性变量一个关键的建模动作转换的起点是一个看起来有点“作弊”的操作给每个时间步引入一个二值随机变量 $\mathcal{O}_t$表示“在时刻 $t$ 这个状态动作对是不是最优的”。然后定义它的概率$$p(\mathcal{O}_t 1 | x_t, u_t) \propto \exp(-c(x_t, u_t))$$这个式子是整个框架的地基值得多盯几眼。代价 $c$ 越小$\exp(-c)$ 越大$\mathcal{O}_t1$ 的概率就越高。也就是说代价低等价于“最优性事件”发生的概率高。代价为 0 的时候概率正比于 1代价趋于无穷的时候概率趋于 0。为什么用指数形式而不是别的单调递减函数因为指数函数有两条性质特别关键一是它把加法变成乘法累积代价 $\sum_t c_t$ 对应的联合概率就是 $\prod_t \exp(-c_t)$天然可分解二是它和玻尔兹曼分布的形式一致后面做变分推断的时候可以直接借用统计物理里现成的结论。这不是随便选的是精心设计过的。注意这里的 $\propto$ 不能换成 $$因为 $\exp(-c)$ 的积分不一定归一化。实际推导里我们只关心比例关系归一化常数会在后面约掉所以用正比符号就够了。新手容易在这里纠结归一化其实没必要。引入这个变量之后整个轨迹的联合分布可以写成$$p(\tau, \mathcal{O}{1:T}) p(x_1) \prod{t1}^{T} p(x_{t1}|x_t, u_t) \prod_{t1}^{T} p(\mathcal{O}_t | x_t, u_t)$$其中 $\tau (x_1, u_1, x_2, u_2, \ldots, x_T, u_T)$ 是整条轨迹。这个分解结构非常干净动力学负责状态转移最优性变量负责评价每一步的好坏两者通过图模型耦合在一起。2.3 控制问题怎么变成推断问题现在关键的一步来了。在传统控制里我们要求的是 $\arg\min \sum_t c_t$。在概率框架下我们改求的是后验分布$p(\tau | \mathcal{O}_{1:T} 1)$也就是“在所有最优性事件都发生的前提下轨迹应该长什么样”。用贝叶斯公式展开$$p(\tau | \mathcal{O}{1:T}) \frac{p(\tau, \mathcal{O}{1:T})}{p(\mathcal{O}{1:T})} \propto p(x_1) \prod{t1}^{T} p(x_{t1}|x_t, u_t) \exp\left(-\sum_{t1}^{T} c(x_t, u_t)\right)$$看这个结果后验分布里同时包含了动力学约束那个乘积项和代价偏好那个指数项。代价低、动力学可行的轨迹后验概率就高。这不就是我们想要的最优轨迹吗只不过现在它不是一条确定的轨迹而是一个分布。这个视角转换带来的直接好处是原来“求最优解”这个优化问题现在变成了“求后验分布”这个推断问题。而推断问题有一整套成熟工具可以用尤其是变分推断。这就是为什么热词里会出现“变分推断”和“KL 散度”——它们不是硬凑进来的而是这个框架的自然产物。3. 变分推断与 KL 散度在控制里的具体角色3.1 后验为什么难求难在哪上面那个后验分布 $p(\tau | \mathcal{O}{1:T})$ 写出来好看但实际算不了。原因很直接分母 $p(\mathcal{O}{1:T}) \int p(\tau, \mathcal{O}_{1:T}) d\tau$ 需要对所有可能的轨迹积分而轨迹空间是高维连续的这个积分没有解析解数值积分在高维下也不可行。这跟变分自编码器里遇到的问题是同一类后验不可解所以要用一个可解的分布去逼近它。这就是变分推断登场的时机。3.2 用变分分布逼近后验ELBO 的推导我们引入一个变分分布 $q(\tau)$它是我们能够计算和采样的分布通常选高斯或者其它简单形式然后用它去逼近真实后验 $p(\tau | \mathcal{O}_{1:T})$。逼近的好坏用 KL 散度衡量$$\text{KL}(q(\tau) | p(\tau | \mathcal{O}{1:T})) \int q(\tau) \log \frac{q(\tau)}{p(\tau | \mathcal{O}{1:T})} d\tau$$KL 散度越小两个分布越接近。但问题是这个式子里含有我们算不出来的 $p(\tau | \mathcal{O}_{1:T})$。所以要做一步变形把 KL 散度展开$$\text{KL}(q(\tau) | p(\tau | \mathcal{O}{1:T})) \log p(\mathcal{O}{1:T}) - \mathbb{E}{q(\tau)}\left[\log \frac{p(\tau, \mathcal{O}{1:T})}{q(\tau)}\right]$$右边第二项就是所谓的ELBOEvidence Lower Bound证据下界。因为 $\log p(\mathcal{O}{1:T})$ 是常数对 $q$ 而言所以最小化 KL 散度等价于最大化 ELBO。而 ELBO 里只涉及联合分布 $p(\tau, \mathcal{O}{1:T})$ 和变分分布 $q(\tau)$这两个都是可算的。$$\text{ELBO}(q) \mathbb{E}{q(\tau)}\left[\log p(\tau, \mathcal{O}{1:T}) - \log q(\tau)\right]$$把联合分布的具体形式代进去$$\text{ELBO}(q) \mathbb{E}{q(\tau)}\left[\log p(x_1) \sum_t \log p(x{t1}|x_t, u_t) - \sum_t c(x_t, u_t) - \log q(\tau)\right]$$这个式子的物理意义很清晰第一项是初始状态的对数概率第二项是动力学可行性第三项是负代价越大越好第四项是变分分布的熵。最大化 ELBO 就是在“动力学可行”和“代价低”之间找平衡同时保持变分分布有足够的熵不要塌缩成一个点。实操心得ELBO 里的熵项经常被新手忽略但它很重要。如果熵项权重太小$q(\tau)$ 会塌缩到一条轨迹上退化成确定性最优控制失去了概率框架的优势。如果熵项权重太大又会过于分散控制效果变差。这个权衡在软 Actor-Critic 里对应温度参数 $\alpha$调参的时候要重点关注。3.3 KL 散度控制与 MPC 的天然联系热词里同时出现了“KL 散度”和“MPC”这不是巧合。在基于推断的 MPC 里KL 散度扮演了一个非常具体的角色它用来约束更新后的策略不要偏离旧策略太远。具体来说在迭代求解的过程中我们每一轮都会得到一个变分分布 $q_k(\tau)$希望下一轮 $q_{k1}(\tau)$ 比它更好但又不希望步子迈太大导致不稳定。于是加一个 KL 约束$$\max_{q_{k1}} \text{ELBO}(q_{k1}) \quad \text{s.t.} \quad \text{KL}(q_{k1}(\tau) | q_k(\tau)) \leq \epsilon$$这个约束的作用类似于信赖域方法里的信赖域半径或者 PPO 里的 clip 操作。它保证了策略更新的平滑性在 MPC 的滚动时域优化里特别有用——因为 MPC 每个控制周期都要重新求解如果两次求解之间策略跳变太大实际系统会抖得厉害。我实测下来这个 KL 约束在机械臂轨迹跟踪任务里效果很明显。不加约束的时候相邻控制周期的动作会有明显跳变电机声音都不对加上约束之后动作序列平滑很多跟踪误差反而更小。这个经验在教科书里不太会写但实际做 MPC 的人应该都有体会。4. 从理论到实操一个可复现的推导与实现路径4.1 消息传递视角下的后验计算理论讲完了怎么落地最直接的一条路是用消息传递message passing来算后验。因为联合分布是链式结构可以沿着时间轴做前向-后向传递这本质上就是概率图模型里的前向-后向算法只不过用在了控制问题上。前向消息 $\alpha_t(x_t) p(x_t, \mathcal{O}{1:t-1})$ 表示“考虑到过去所有最优性事件当前状态的概率”。后向消息 $\beta_t(x_t) p(\mathcal{O}{t:T} | x_t)$ 表示“从当前状态出发未来所有最优性事件发生的概率”。两者结合就得到状态的后验$$p(x_t | \mathcal{O}_{1:T}) \propto \alpha_t(x_t) \beta_t(x_t)$$后向消息的递推关系特别值得看$$\beta_t(x_t) \int \exp(-c(x_t, u_t)) p(x_{t1}|x_t, u_t) \beta_{t1}(x_{t1}) , dx_{t1} du_t$$对比一下 Bellman 方程$$V(x_t) \min_{u_t} \left[ c(x_t, u_t) \mathbb{E}[V(x_{t1})] \right]$$如果令 $\beta_t(x_t) \exp(-V(x_t))$代入上面的递推式取负对数就得到$$V(x_t) -\log \int \exp(-c(x_t, u_t) - \mathbb{E}[V(x_{t1})]) , du_t$$这个式子和 Bellman 方程长得很像但有一个关键区别min 变成了 soft-minlog-sum-exp。这就是软最优控制的来源。当温度参数趋于 0 的时候soft-min 退化成 min就回到了传统最优控制。所以传统最优控制其实是这个概率框架的一个极限特例。注意这个“soft-min 退化成 min”的结论只在温度参数趋于 0 时成立。实际实现里温度参数不会真的取 0所以你会得到一个“软”的最优策略它在多个接近最优的动作之间会分配概率而不是死磕一个。这在探索和鲁棒性上反而是优势但如果你要的是严格最优就得把温度调得很小。4.2 一个最小可复现的实现框架光看公式容易飘我给一个可以上手跑的最小框架。以离散状态、离散动作的简单系统为例比如 Grid World整个流程分四步第一步定义系统。状态空间 $S$、动作空间 $A$、转移概率 $p(x|x,u)$、代价函数 $c(x,u)$。这些是问题的输入必须显式写出来。第二步后向传递。从 $tT$ 开始往前推初始化 $\beta_T(x) 1$终端没有未来代价然后按递推式# 伪代码离散状态离散动作 beta np.ones(num_states) # 终端后向消息 for t in reversed(range(T)): new_beta np.zeros(num_states) for x in range(num_states): total 0.0 for u in range(num_actions): # 对下一状态求和 for x_next in range(num_states): total (np.exp(-cost[x, u]) * trans_prob[x, u, x_next] * beta[x_next]) new_beta[x] total beta new_beta beta_history[t] beta.copy()第三步前向传递。从初始状态分布开始按动力学往前推得到 $\alpha_t(x_t)$。第四步组合求策略。状态后验正比于 $\alpha_t \cdot \beta_t$动作后验通过下式得到$$p(u_t | x_t, \mathcal{O}{1:T}) \propto \exp(-c(x_t, u_t)) \sum{x} p(x|x_t, u_t) \beta_{t1}(x)$$这个式子就是最终要用的策略。注意它是一个分布不是单个动作。实际执行的时候可以取众数最可能动作也可以按概率采样。4.3 参数选择与数值稳定性处理上面这个框架跑起来有几个参数和数值问题必须处理不然结果会很难看。温度参数 $\tau$不要和轨迹 $\tau$ 混淆。严格来说代价应该写成 $c/\tau$$\tau$ 控制分布的“尖锐程度”。$\tau$ 小分布尖锐接近确定性最优$\tau$ 大分布平坦探索性强。我一般从 $\tau1$ 开始试然后根据任务调整。如果发现策略太随机就调小如果发现策略太死板、容易卡在局部最优就调大。数值下溢。$\exp(-c)$ 在代价很大的时候会下溢到 0导致整个后向消息变成 0。解决办法是在计算前先减去当前步的最小代价或者用 log-sum-exp 技巧# 数值稳定的 soft-min def log_sum_exp(values): max_val np.max(values) return max_val np.log(np.sum(np.exp(values - max_val)))这个技巧在实现里几乎是必须的我见过太多人因为没做这一步结果后向消息全变成 0调试半天找不到原因。终端条件。$\beta_T(x) 1$ 对应“终端无代价”。如果终端有代价 $c_T(x)$应该初始化 $\beta_T(x) \exp(-c_T(x))$。这个细节容易漏漏了的话终端约束就不起作用了。参数作用推荐初值调整方向温度 $\tau$控制分布尖锐度1.0策略太随机调小太死板调大终端 $\beta_T$终端代价编码$\exp(-c_T)$有终端约束时必须设置数值稳定阈值防止下溢减去每步最小值一般不需要调5. 常见问题与排查技巧实录5.1 后向消息全为零怎么办这是新手最常遇到的问题。现象是 $\beta_t(x)$ 在几步之后全部变成 0导致后验无法计算。原因几乎总是数值下溢代价累积之后 $\exp(-\sum c)$ 太小浮点数表示不了。排查顺序先检查有没有做数值稳定处理减去每步最小值或者用 log 域计算再检查代价函数是不是量级太大如果是考虑归一化代价或者调大温度参数最后检查转移概率有没有 0 值如果有$\log 0$ 会出问题需要加一个极小值 $\epsilon$ 平滑。实操心得我习惯在实现里全程用 log 域计算最后再取 exp。虽然写起来麻烦一点但数值稳定性好太多尤其是轨迹长度超过 50 步的时候直接算 exp 几乎必挂。5.2 策略在多个最优解之间反复横跳如果任务有多个同样好的解比如对称的路径后验分布会是多峰的采样出来的动作会在几个峰之间跳。这在某些任务里是好事说明框架正确捕捉了多模态但在需要稳定执行的任务里是灾难。解决办法有两个一是降低温度参数让分布变尖锐集中到一个峰上二是在执行层加一个平滑滤波比如对动作序列做低通滤波或者用 KL 约束限制相邻控制周期的变化。我一般两个一起用效果比较稳。5.3 和传统 MPC 相比计算量大了多少这是实际部署时最关心的问题。老实说基于推断的 MPC 计算量确实比标准 QP 形式的 MPC 大因为要做前向-后向传递还要处理概率分布。在我的测试里同样的问题规模推断版大概慢 2 到 5 倍。但这个比较不完全公平。推断版天然处理了随机性和多模态标准 MPC 要做同样的事得额外加机制。如果你的系统是确定性的、单模态的标准 MPC 确实更快更直接。如果你的系统有随机性、需要探索、或者要和概率状态估计器对接推断版的额外开销是值得的。问题类型推荐方案理由确定性、单模态、实时性要求高标准 MPC计算量小成熟工具多随机系统、需要概率输出推断版 MPC天然处理不确定性需要探索或多模态策略推断版 MPC分布输出不塌缩与概率状态估计器对接推断版 MPC数学框架统一5.4 温度参数和 KL 约束的关系搞不清这两个东西容易混。温度参数是建模层面的它决定了最优性变量概率分布的形状影响的是“什么算最优”。KL 约束是优化层面的它限制的是迭代过程中策略更新的幅度影响的是“怎么逼近最优”。打个比方温度参数像是定义“好”的标准有多严格KL 约束像是每次调整策略时允许走多远。两者独立但会互相影响。温度低的时候分布尖锐KL 约束容易满足温度高的时候分布平坦KL 约束容易触发。调参的时候要一起看不能分开调。6. 这个框架后续能怎么扩展基本理论搭起来之后往下走有几条路。一条是往深度走把变分分布参数化成神经网络用梯度下降优化 ELBO这就通向了软 Actor-Critic 这类算法。另一条是往结构化走利用问题的特殊结构比如线性高斯设计专门的推断算法得到解析解这就是线性二次型高斯下的软最优控制。还有一条是往应用走把框架用到具体的机器人任务、自动驾驶、过程控制里处理实际约束和实时性要求。我个人最感兴趣的是第二条路因为解析解能给出清晰的洞察而且计算效率高。线性高斯下的推导其实很漂亮后验分布还是高斯均值和协方差有闭式解和卡尔曼滤波的形式高度对称。这块内容值得单独写一篇把推导细节和实现技巧都摊开讲。如果你现在就想动手建议从离散 Grid World 开始把上面那个最小框架跑通亲眼看到后验分布长什么样再往连续系统扩展。直接上连续系统容易在数值问题上卡住先离散后连续先简单后复杂这个顺序能省很多时间。
延伸阅读

更多相关文章

2026/10/7 14:16:32

Agent Skills 技能体系实战:从设计到 GKE 部署

1. 从“skills”这个标题说起:它到底指什么第一次看到“skills”这个标题,很多人会以为是泛泛而谈的“技能”二字,没什么信息量。但结合热词里反复出现的 Google Cloud、Agent Skills、npx、GKE、claude agent skills、codex skills 这些词&a…

2026/10/7 14:16:32

eFuse+MCU:工业电源路径保护方案设计与实践

前阵子帮一个做工业网关的朋友排查现场返修问题,设备返修率一度高得吓人。拆开故障板一看,坏得最集中的不是 DC-DC,也不是负载端的 MCU,而是输入端到 DC-DC 之间那一小段电源路径——走线烧断、防反接 MOS 击穿、甚至 PCB 铜箔直接…

2026/10/7 14:56:35

自主机器人入门指南:ROS、SLAM与路径规划实战

1. 从一堆热词里看“自主机器人基础”到底在讲什么“自主机器人基础”这个标题看起来像是一门课的导论,或者一个系列分享的第一篇。但如果你把围绕它的热搜词摊开来看,会发现大家真正在搜的东西非常具体:ROS怎么装、SLAM怎么建图、路径规划算…

2026/10/7 14:56:35

多品牌设备混合接入的恒温恒湿组态改造实战指南

做自控项目的这几年,我最大的感触是:真正让人熬白头的往往不是设备本身有多高端,而是怎么把一堆不同厂家的设备凑到一起协同工作。前段时间我接手了一个机房恒温恒湿改造项目,现场的情况就非常典型——温湿度变送器是A品牌&#x…

2026/10/7 14:56:35

ARMxy模块化工业控制器:储能与自动化场景的PLC+网关+工控机融合方案

1. 这不是又一个“工业控制器”噱头,而是现场工程师等了十年的硬件重构方案ARMxy模块化工业控制器这个词,最近在储能系统集成商、自动化产线调试工程师和中小型设备制造商的朋友圈里反复刷屏。我上个月在东莞一家做锂电PACK产线升级的客户现场&#xff0…

2026/10/7 14:56:34

从零搭建自主机器人:ROS环境搭建、SLAM建图与多传感器融合全流程

1. 从零搭建自主机器人:为什么我劝你先搞懂这套底层逻辑很多人第一次接触自主机器人,脑子里想的都是“我要造一个能自己跑、自己避障、自己建图的小车”。这个想法没错,但如果你一上来就买电机、焊驱动、写PID,大概率会在第三周把…

2026/10/7 14:51:34

Paperxie 深度测评|一站式 AI 论文辅助平台

1. 产品概述 市面上绝大多数 AI 学术工具,都属于单点功能工具:有的只能做文字润色,有的只能画流程图,各模块相互独立。在实际毕设创作中,需要反复在多个网站之间切换,文件导入导出频繁,很容易出…

2026/10/5 6:32:56

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/7 8:18:33

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/6 17:46:51

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:05:03

ESP32免重刷固件:浏览器直接修改NVS键值实现WiFi配置更新

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:05:03

SAP HANA查询结果导出CSV:避开乱码、性能与权限的实用指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:05:03

数字后端Placement阶段Density与Congestion控制实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑