论文《Learning Safety in Model-Based Reinforcement Learning using MPC and Gaussian Processes》讨论的是一个很实际的问题:
如何在性能优化和安全约束之间取得平衡,使强化学习在更新控制器参数时,不会因为探索而把系统带到危险区域。
这篇文章里,作者把三个部分结合起来:
- MPC 负责根据当前模型和约束求控制量;
- 强化学习 负责在线调整 MPC 的参数;
- 高斯过程(GP) 负责估计哪些参数更新仍然是安全的。
1. 问题背景
传统强化学习在机器人控制里常见两个问题:
- 样本效率低,需要大量交互;
- 探索过程可能违反状态约束或输入约束。
而 MPC 天然适合处理约束控制问题。于是论文的核心思路是:
不直接让强化学习输出动作,而是让强化学习去更新 MPC 的参数,再由 MPC 负责执行受约束控制。
这样做的好处是,策略仍然具有优化结构,且更容易把系统安全约束显式写进控制器中。
2. 强化学习优化的对象
这里学习的不是“动作表”本身,而是 MPC 中的一组参数 。这些参数可以理解为:
- 代价函数权重;
- 模型中的部分参数;
- 终端惩罚或约束相关参数。
目标函数写作
$$J(\pi_\theta)=\mathbb{E}_{\tau_{\pi_\theta}}\left[\sum_{k=0}^{\infty}\gamma^k L(s_k, a_k)\right].$$其中:
- 表示第 步状态;
- 表示第 步动作;
- 表示阶段损失;
- 是折扣因子;
- 是由参数 决定的 MPC 策略。
因此,学习的目标就是找到更优的 ,使闭环性能更好,同时不破坏安全性。
3. MPC 在这里扮演什么角色
MPC 不是背景板,而是整个方法的策略核心。给定当前状态 ,MPC 通过在线优化输出控制量:
$$\pi_\theta(s)=\arg\min_{u} Q_\theta(s, u).$$这意味着:
- 强化学习负责“调参数”;
- MPC 负责“解优化并出动作”。
相比直接学习动作策略,这种方式更适合机器人与控制场景,因为它保留了约束、模型和代价函数这些结构化信息。
4. 参数更新的基本形式
若忽略安全限制,参数更新可以写成梯度型形式:
$$\theta^{+}=\theta-\alpha\nabla_{\theta}\sum_{k=0}^{m}\psi(s_k, a_k, s_{k+1}, \theta).$$其中:
- 是学习率;
- 是强化学习中的损失项;
- 是一个批量内的样本数。
这里的重点不是“动作如何更新”,而是“如何更新 MPC 参数 ”。
5. 为什么需要安全约束
如果直接做参数更新,新的 可能导致:
- MPC 解出的动作过激;
- 状态轨迹触碰约束边界;
- 实际系统进入不安全区域。
所以论文在更新时加入一个投影到安全集合的思想:
$$\theta^{+}=\arg\min_{\vartheta}\frac{1}{2}\lVert \vartheta-\theta \rVert_2^2+\alpha\nabla_{\theta}\sum_{k=0}^{m}\psi(s_k, a_k, s_{k+1}, \theta).$$subject to .
其中 是由数据驱动方法估计出来的安全参数集合。
直观地说,这一步不是“想怎么更新就怎么更新”,而是:
先按性能目标提出更新方向,再把更新结果限制在安全区域内部。
6. 高斯过程如何保证安全
论文用高斯过程(Gaussian Process, GP)来估计参数是否安全。其作用不是直接控制,而是构造一个关于安全性的概率模型。
若用 表示某个与安全相关的指标,则安全集合可以表示为
$$S_D=\left\{\theta \;\middle|\; \mathbb{P}\big(z(\theta)\le 0\big)\ge \beta\right\}.$$其中 是设定的安全置信水平。
这表示:
- 当某组参数对应的风险足够低时,才允许强化学习采用它;
- 当 GP 判断某次更新不可靠时,该更新会被拒绝或修正。
这也是整篇论文最关键的思想之一:安全不是靠训练结束后再检查,而是嵌入每次参数更新中。
7. 文中采用的强化学习方法
论文中使用的是 LSTD Q-Learning,更具体地说,是一种二阶最小二乘时序差分 Q 学习方法。
相比传统 Q-Learning,它的特点是:
- 更关注参数化值函数的拟合;
- 样本效率更高;
- 更适合和带结构的控制器参数更新结合。
7.1 Q 函数近似
记参数化的动作价值函数为
$$Q_\theta(s, a)=\phi(s, a)^\top \theta.$$其中 是特征向量, 是待学习参数。
7.2 TD 误差
时序差分误差写作
$$\delta=L(s, a)+\gamma V_\theta(s')-Q_\theta(s, a).$$它衡量“当前估计”和“下一步回报估计”之间的偏差。
7.3 梯度与二阶信息
文中使用二阶形式更新参数,常见表达为
$$p=-\sum_{i=1}^{m}\delta_i\nabla_\theta Q_\theta(s_i, a_i).$$ $$H=\sum_{i=1}^{m}\nabla_\theta Q_\theta(s_i, a_i)\nabla_\theta Q_\theta(s_i, a_i)^\top-\delta_i \nabla_\theta^2 Q_\theta(s_i, a_i).$$于是参数更新可以写成
$$\theta^{+}=\theta + \alpha H^{-1} p.$$如果再考虑安全约束,那么这个更新还需要再经过上一节的安全投影。
8. 整体流程
把整篇论文的方法浓缩后,可以写成如下循环:
- 用当前参数 的 MPC 控制器执行一轮任务;
- 采集轨迹数据 ;
- 计算损失与 TD 误差,得到 RL 更新方向;
- 用 GP 根据已有数据估计安全集合 ;
- 将参数更新限制在 内;
- 用新的参数继续下一轮控制。
9. 这个方法为什么有价值
我认为这篇论文最值得关注的地方有三点:
9.1 把“安全”从后验检查变成了先验约束
很多方法是在训练后再看轨迹是否危险,而这里是在参数更新时直接加入安全判断。
9.2 强化学习没有破坏控制器结构
策略依然由 MPC 求解,不是纯黑箱策略网络,因此更适合工程控制系统。
9.3 数据效率优于完全无模型方法
由于学习对象是 MPC 参数而不是整套动作映射,再加上 LSTD 类方法本身的数据效率,整体会更接近控制场景的实际需求。
10. 一个更直观的理解
可以把它理解成下面这个分工:
| 模块 | 作用 |
|---|---|
| MPC | 根据当前参数和约束,求最优动作 |
| RL | 根据轨迹表现,提出参数更新方向 |
| GP | 判断这次参数更新是否仍然安全 |
所以这不是“RL 替代 MPC”,而是:
RL 负责学,MPC 负责控,GP 负责守住边界。
11. 总结
这篇论文的核心结论可以概括为:
- 学习对象是 MPC 参数 ,而不是直接学习动作;
- 安全约束通过 GP 构造的安全集合 来保证;
- 参数更新既考虑性能提升,也必须满足安全性;
- LSTD Q-Learning 提供了较高的数据利用效率;
- 整体框架非常适合机器人控制和安全强化学习场景。
如果后面你准备把这篇内容继续扩展成“推导版”,我建议下一步可以单独补三块:
- MPC 代价函数和约束的具体形式;
- GP 如何更新安全置信边界;
- LSTD Q-Learning 与普通 Q-Learning 的差异推导。