40_可微接触仿真
博士前数学路线图 · 第七批 · 专题 4:可微接触仿真——凸松弛、光滑化与随机化的梯度信号¶
档位:核心档位 3(博士入学)+ 进阶档位 4(博士毕业+) 建议时长:档位 3 约 30–40 h;档位 4 额外 15–25 h 前置:第七批专题 3(时步法与非光滑动力学:Moreau-Jean、Stewart-Trinkle、SAP 的 forward simulation);第二批非光滑分析(Clarke 次微分);第三批数值优化(Newton、IPM、IFT);第一批凸分析(凸锥、投影、KKT);第六批随机优化(ES、REINFORCE、reparameterization) 下游:本批专题 6(接触隐式轨迹优化 / 可微 MPC);第六批专题 4(采样型 MPC:MPPI/CEM);具身智能模块 05(可微分仿真 S04/S05)
前置自测¶
📋 前置自测(答不出 ≥ 2 题 → 先回对应前置专题复习)
-
隐函数定理(Implicit Function Theorem, IFT)的经典陈述是什么?给定 \(F(z,\theta)=0\),在什么条件下能保证 \(z\) 是 \(\theta\) 的局部 \(C^1\) 函数,且 \(\partial z/\partial\theta\) 的表达式是什么?(前置:第三批数值优化 / 第零批多元微积分)
-
什么是线性互补问题(Linear Complementarity Problem, LCP)?写出标准形式 \(0\le z\perp Mz+q\ge0\) 的含义,并说明它与二次规划 KKT 条件的关系。(前置:专题 3 / 第一批凸分析)
-
Clarke 广义梯度 \(\partial_{\mathrm{Cl}} f(x)\) 的定义是什么?对于 \(f(x)=|x|\),\(\partial_{\mathrm{Cl}} f(0)\) 等于什么集合?为什么它是一个集合而不是单个向量?(前置:第二批非光滑分析)
-
reparameterization trick(重参数化)和 score-function(REINFORCE)这两种梯度估计器的公式分别是什么?它们各自要求被估计的函数满足什么条件?(前置:第六批随机优化)
-
库仑摩擦(Coulomb friction)的接触约束在速度级如何表示?为什么 stick(黏着)与 slip(滑动)之间的切换会带来不连续性?(前置:专题 3 / 第七批刚体动力学)
如果第 1、3、4 题答不出,本专题会非常吃力——这三道题分别对应本专题的三大数学支柱:隐函数定理求梯度、非光滑分析定义梯度、随机光滑估计梯度。建议先回前置专题补齐。
本章目标¶
学完本章后,你应当能够:
- 用精确的数学语言说清"接触为何天然不可微"——分辨 Dirac 冲量、stick-slip 切换、激活集切换这三层不连续各自对应的数学对象(分布导数、Clarke 广义梯度、B-subdifferential),而不是泛泛地说"有跳跃"。
- 推导凸松弛路线下的解析梯度:从 Anitescu 凸 QP 松弛出发,对 KKT 系统应用隐函数定理,写出 \(\partial z^\star/\partial\theta\) 的 OptNet 式显式表达式,并判断其存在唯一性所需的 Robinson strong regularity 条件。
- 对比解析光滑(compliant contact、log-barrier)与随机光滑(randomized smoothing)两条路线,说清它们在 bias-variance-物理保真三角中各占据哪个顶点,以及为什么"可微"不等于"梯度有用"。
- 用 Lyapunov / chaos 视角诊断梯度病态(exploding/vanishing BPTT、variance blow-up),并说出四条工程解决方案(短 horizon + critic、α-order hybrid、adaptive barrier、ContactNets)各自的代价。
- 在 Dojo / Brax / MuJoCo-MJX / Drake 四款可微仿真器之间做选型,分辨"可微""GPU 并行""物理保真"三个独立维度,明白不存在三者同时占优的方案。
- 把本专题的梯度信号桥接到下游:解释它如何成为接触隐式轨迹优化(专题 6)的输入,以及它与采样型 MPC(第六批专题 4)的 score-function 估计在数学上的统一关系。
本章知识导航¶
本专题要回答的核心问题只有一句话:当机器人与世界发生接触时,"输出对输入的导数"到底存不存在、怎么算、算出来有没有用? 这看似是一个工程实现问题("PyTorch 能不能 .backward()"),实则是非光滑分析、参数化变分不等式、随机光滑三套数学语言在机器人里最深的一次交汇。
整个专题围绕一条主线展开:先证明接触不可微(动机),再给出召唤梯度的三条路线(凸松弛 / 解析光滑 / 随机光滑),然后诊断这些梯度何时失效(病态分析),最后落到工具选型与下游桥接。
在正式拆解核心知识点之前,§4.0 先回答一个元问题——可微接触凭什么是一个独立的数学难题(backward pass 为何比 forward pass 难一个维度),它是全章的动机入口。下表从 §4.1 起列出本专题的核心知识点及其关系:
| 知识点 | 难度 | 依赖 | 与其他知识点的关系 |
|---|---|---|---|
| §4.1 接触三层不连续 | ⭐⭐ | 前置专题 3 | 全章动机;定义"为何需要特殊处理" |
| §4.2 隐函数定理求梯度 | ⭐⭐⭐ | §4.1 + IFT | 三条路线的共同数学引擎 |
| §4.3 凸松弛的梯度(LCP/NCP) | ⭐⭐⭐ | §4.2 | 路线一;Dojo/Nimble/SAP 的根基 |
| §4.4 解析光滑:compliant + barrier | ⭐⭐⭐ | §4.1, §4.3 | 路线二;Drake/Brax-spring/IPC 的根基 |
| §4.5 随机光滑 | ⭐⭐⭐⭐ | §4.1 + 第六批 | 路线三;与采样 MPC 同源 |
| §4.6 解析光滑 vs 随机光滑的统一 | ⭐⭐⭐⭐ | §4.4, §4.5 | 三角权衡的理论综合 |
| §4.7 梯度病态与 gradient bias | ⭐⭐⭐ | §4.2–§4.6 | 诊断;为何"可微≠有用" |
| §4.8 可微仿真器架构对比 | ⭐⭐⭐ | §4.3–§4.7 | 工程落地;Dojo/Brax/MJX/Drake |
| §4.9 跨专题桥接 | ⭐⭐ | 全章 | 与专题 6、采样 MPC、模块 05 的接口 |
| §4.10 实战选型 | ⭐⭐⭐ | §4.1–§4.9 | 把三条路线压成"选哪种梯度信号"的决策流程 |
知识点之间的关系——三种并列又互补的路线,被同一个数学引擎(IFT)和同一个诊断框架(chaos)串起来:
§4.0 为何可微接触是独立数学难题(元问题:backward ≠ forward)
│
▼
§4.1 接触为何不可微(动机:三层不连续)
│
▼
§4.2 隐函数定理(IFT)——梯度引擎
│
┌─────────────────┼─────────────────┐
▼ ▼ ▼
§4.3 凸松弛 §4.4 解析光滑 §4.5 随机光滑
(LCP/NCP→IFT) (compliant+barrier) (Gaussian smoothing)
│ │ │
└─────────────────┼─────────────────┘
▼
§4.6 解析 vs 随机的统一(bias-variance-保真三角)
│
▼
§4.7 梯度病态诊断(chaos / gradient bias)
│
▼
§4.8 工具选型(Dojo/Brax/MJX/Drake)
│
▼
§4.9 桥接:专题6 接触隐式TO / 第六批 采样MPC / 模块05 可微仿真
│
▼
§4.10 实战选型(一阶 / 零阶/MPPI / 学代理 的决策流程)
推荐阅读路径:
- 主线(必读):§4.0 → §4.1 → §4.2 → §4.3 → §4.5 → §4.7 → §4.8 → §4.9 → §4.10。这条线让你理解"为什么可微接触是独立难题、为什么不可微、怎么用 IFT 算、为什么随机光滑救了场、为什么会病态、用哪个工具、面对具体任务该选哪种梯度信号"。
- 解析光滑支线:读完 §4.3 后插入 §4.4。如果你的目标是 Drake / 操作(manipulation)方向,这条支线是核心。
- 理论深化支线:§4.6 是 §4.4 与 §4.5 的综合,需要先读完两者。档位 4 的读者必读。
注意:导航路线图只展示**结构**,不展开具体内容。每个 § 的完整推导见对应小节。
前置知识桥接¶
本专题站在第七批专题 3(时步法与非光滑动力学)的肩膀上。回顾专题 3 的核心结论:刚体接触的 forward simulation 可以表述为一个测度微分包含(Measure Differential Inclusion, MDI),在每个时步上落地为一个互补问题(LCP 或 NCP)。 在那里我们关心的是"给定当前状态 \((q_k,v_k,u_k)\),如何求解下一步 \((q_{k+1},v_{k+1})\)"——也就是 forward pass。
本专题把问题升级一个维度:不只是求解,还要求出"解对输入的导数" \(\dfrac{\partial(q_{k+1},v_{k+1})}{\partial(q_k,v_k,u_k,\theta)}\)——也就是 backward pass。这一字之差(forward → backward)背后是全新的数学难题:forward pass 只需要"解存在"(MDI 的存在性,专题 3 已解决),backward pass 还需要"解对参数可微"(参数化 VI 的灵敏度,本专题的核心)。
我们还会反复用到三个前置工具,这里先激活它们的核心要点:
- 隐函数定理(第三批 / 第零批):若 \(F(z^\star,\theta)=0\) 且 \(\partial F/\partial z\) 在 \(z^\star\) 处可逆,则 \(z^\star\) 是 \(\theta\) 的局部 \(C^1\) 函数,且 \(\dfrac{\partial z^\star}{\partial\theta}=-\left(\dfrac{\partial F}{\partial z}\right)^{-1}\dfrac{\partial F}{\partial\theta}\)。本专题中 \(F\) 就是接触求解器的最优性条件(KKT 残差或 NCP 残差)。
- Clarke 广义梯度(第二批):对 Lipschitz 但不可微的 \(f\),定义 \(\partial_{\mathrm{Cl}}f(x)=\overline{\mathrm{conv}}\{\lim_k\nabla f(x_k):x_k\to x,\ f\text{ 在 }x_k\text{ 可微}\}\),是一个凸紧集。stick-slip 切换点处的"梯度"正是这样一个集合。
- 重参数化与 score-function(第六批):估计 \(\nabla_\theta\mathbb E_{w}[F(\theta+w)]\) 有两条路——把随机性"推进"函数里(reparameterization / pathwise,需要 \(F\) 可微)或"留在"采样权重里(score-function / REINFORCE,只需 \(F\) 可积)。本专题的随机光滑路线就是这两者在接触上的应用。
如果跳过本章会怎样¶
场景一:你想用可微仿真训练一个抓取策略,直接对 100 步 rollout 调 loss.backward(),结果梯度全是 NaN 或训练完全不收敛。 不学本章你会以为是代码 bug,反复检查实现——但真正的原因是接触刚度引起的 chaotic sensitivity 使 BPTT 梯度按 Lyapunov 指数指数爆炸(§4.7)。这是算法层的根本病态,调小学习率、加梯度裁剪都治不好。
场景二:你读论文看到 Dojo 说"smooth analytic gradients through contact",又看到 Suh 2022 说"first-order gradients 比 zero-order ES 更差",你彻底困惑——到底可微仿真的梯度好不好用? 不学本章你无法调和这个表面矛盾。真相是:两者说的是不同对象——Dojo 的梯度是对**光滑化后**动力学的精确梯度(低 bias),Suh 警告的是对**原始刚性**动力学的梯度(高 variance)。这正是 §4.6 bias-variance 权衡要讲清的事。
场景三:你要为一个抓取任务选可微仿真器,看到 Dojo、Brax、MJX、Drake 各有拥趸,不知如何下手,凭"听说哪个好"随便选了一个。 不学本章你会用单一维度(如"梯度精确")选所有任务——结果可能选了 Dojo 做大规模 RL(吞吐量跟不上),或选 Brax 做系统辨识(软接触 bias 大)。真相是:这四款在"可微/GPU 并行/物理保真"三个**独立**维度上各占一隅,选型必须先识别你的任务卡在哪个维度(§4.8)。不懂这个三维独立性,选型就是抛硬币。
预计阅读时间¶
| 阅读方式 | 时间 | 适合谁 |
|---|---|---|
| 精读(含推导与练习) | 18-22 小时 | 要做可微仿真 / 接触优化研究的读者 |
| 速读(跳过 §4.6 理论综合与 §4.3 的 IFT 矩阵推导细节) | 8-10 小时 | 有凸优化与 AD 基础、只需建立全局图景的读者 |
| 速查(只看导航图、对比表、定理速查表、故障排查手册) | 40-60 分钟 | 选型时回来查、或确认某个引用是否被订正的读者 |
§4.0 为什么"可微接触"是一个独立的数学难题¶
在进入具体推导之前,先回答一个元问题:可微仿真听起来只是"给仿真器加一个 .backward()",为什么要专门花 30-40 学时讲?换句话说,它凭什么是一个独立的数学难题,而不是普通自动微分(Automatic Differentiation, AD)的直接应用?
答案要从三个领域的差异说起。下面这张表把本专题放在第七批"仿真与数值"板块的坐标系里,让你看清它和上下游专题的分工:
| 维度 | 专题 3(时步法) | 专题 4(本专题) | 专题 6(接触隐式 TO) |
|---|---|---|---|
| 核心问题 | 给定 \((q_k,v_k,u_k)\) 如何求 \((q_{k+1},v_{k+1})\) | 如何同时得到 \(\dfrac{\partial(q_{k+1},v_{k+1})}{\partial(q_k,v_k,u_k,\theta)}\) | 如何用这个梯度闭环求解最优 \(u_{0:T-1}\) |
| 代表方法 | Stewart-Trinkle LCP、Moreau-Jean、SAP | 凸松弛 + IFT / Randomized Smoothing / Analytic Barrier | iLQR、DDP、CALIPSO、Contact-Implicit MPC |
| 数学难点 | 测度微分包含(MDI)的解存在性 | Clarke Jacobian、参数化 VI 灵敏度、chaos 放大 | 非凸非光滑 TO 的收敛性 |
| 输出 | 一条轨迹 | 一条轨迹 + 它对所有输入的雅可比 | 一个最优控制序列 |
这张表的核心信息是:专题 3 关心 forward pass(解存在吗、怎么求),专题 4 关心 backward pass(解对参数可微吗、导数怎么算),专题 6 关心如何用这个导数闭环优化。 三者层层递进,本专题是承上启下的枢纽——若仿真器给不出可用梯度,所有 gradient-based 的控制与策略学习(policy learning)都会在 contact-rich 任务上失效。
动机:为什么不能直接套用自动微分¶
读到这里你可能会问:现代深度学习框架(PyTorch、JAX)的自动微分已经如此成熟,能对任意计算图反传梯度。仿真器也是一段代码,把它写进可微框架里,链式法则不就自动给出梯度了吗?为什么还需要专门的理论?
这个想法在**光滑动力学**下完全正确。如果机器人在自由空间飞行(无接触),动力学 \(\dot x=f(x,u)\) 是 \(x,u\) 的光滑函数,AD 给出的梯度就是真正的导数,没有任何问题。困难**只在接触发生时出现**——而接触恰恰是机器人与世界交互的全部意义所在(行走、抓取、推动,无一不是接触)。
接触引入的麻烦可以用一句话概括:接触动力学不是光滑函数,甚至常常不是连续函数。 自动微分有一个隐含前提——被微分的函数处处可微,链式法则才严格成立。当这个前提被破坏,AD 仍然会**机械地吐出一个数值**(它只是按程序的分支路径做链式法则),但这个数值可能:
- 是真实导数的某一个单侧极限(在切换点处随机选一支);
- 是一个数值上有限、但方差爆炸到无法用于优化的量;
- 完全错误(例如穿透检测的非可微操作引入了系统性偏移)。
本质洞察:自动微分计算的是"程序所实现的那个函数"的导数,而不是"程序想要近似的那个物理量"的导数。当物理量本身不可微(接触),二者就分道扬镳——AD 给出的是离散化后某条分支的导数,物理真值则是一个 Clarke 广义梯度集合或分布意义下的对象。"
.backward()能跑通"和"得到的梯度有物理意义"是两件完全不同的事,混淆二者是可微接触领域最常见、最致命的认知错误。
反面:如果假装接触可微会怎样¶
设想我们对此一无所知,直接把一个标准刚体仿真器(如 Stewart-Trinkle LCP 时步法)放进 PyTorch,对一个"把箱子推到目标位置"的任务做 100 步 rollout,然后 loss.backward() 优化推力序列。会发生什么?
- 症状一:梯度时而是 0,时而是巨大的数。当箱子未接触地面时梯度为 0(自由飞行段对推力不敏感),一旦碰撞,单步雅可比里出现接近奇异的项,链式法则把它放大到整条轨迹。
- 症状二:优化器在"刚好接触"和"刚好不接触"两个配置间反复横跳,loss 不下降。这是因为激活集(active set)切换点处梯度从一支跳到另一支,优化方向自相矛盾。
- 症状三:训练 1000 步后看似收敛,但学到的策略在真机上完全失效。这是因为光滑化仿真(如果用了软接触)的梯度对应的是"软世界"的最优解,与"硬世界"的真实最优解有系统性 bias(Parmar-Halm-Posa 2021 IROS, arXiv 2103.15406 系统性地证明了这一点:接触刚度越高,训练/泛化/数据效率越差)。
这三个症状分别对应三层不连续(下面 §4.1 详述),它们不是 bug,而是接触物理的数学本质在数值优化中的必然显现。理解这一点,是从"调参玄学"走向"算法设计"的分水岭。
一个 30 秒看懂"AD 静默撒谎"的微例¶
为了让".backward() 跑通 ≠ 梯度对"不停留在抽象,看一个最小例子。考虑判断接触是否发生的代码片段(几乎每个仿真器都有):
在 phi = 0(恰好接触)这一点,自动微分会怎么做?AD 不理解"这是一个不连续点"——它只是**按当前执行的分支**做链式法则。如果 phi 此刻是 \(+10^{-12}\)(数值上的"正"),AD 走第一支,返回 ∂force/∂phi = 0;如果 phi 是 \(-10^{-12}\),走第二支,返回 -k。两个相差 \(k\) 的梯度,仅由浮点最后一位决定——AD 给出的是一个"语法上正确、语义上随机"的数。
更隐蔽的是:AD 不会报错、不会警告,它平静地返回 0 或 \(-k\),让你以为一切正常。你的优化器拿着这个"撒谎的梯度"更新参数,训练看似在跑,实则方向随机。这就是 §4.0 本质洞察的代码级证据——AD 算的是"程序当前分支实现的函数"的导数,不是"接触物理量"的导数。物理真值(Clarke 广义梯度 \([-k,0]\) 的凸包,§4.1)AD 永远给不出,它只会给你区间的一个随机端点。
本质洞察:可微接触最危险之处,不是 AD 会报错(报错你会去查),而是 AD 静默地给出语法正确、物理错误的梯度。
if phi > 0这一行无害的分支,就是三层不连续之一(第三层激活集切换)的代码化身。一个能跑通、不报错、看起来在收敛的训练,可能从第一步起梯度方向就是错的——这是为什么本专题要花大力气区分"可微"(能 backward)和"梯度有用"(物理正确)。看不破这一点,你会在"为什么训练不收敛"上耗费无数时间却找错方向。
历史:这个领域是怎么形成的¶
可微接触作为一个独立研究方向,大致经历了三个阶段:
- 第一阶段(2018 前,"能反传就行"):Degrave et al. 2019(arXiv 1611.01652,最早的 arXiv 版本可追溯到 2016)用软弹簧接触搭了第一个 DL 时代的可微物理引擎,证明"原则上可以对物理反传",但接触模型粗糙,更多是概念验证。
- 第二阶段(2020-2022,"精确解析梯度"):研究者意识到软弹簧不够,转向对**严格的接触求解器**求解析梯度。Nimble(Werling et al. RSS 2021,arXiv 2103.16021)给出 boxed LCP 的解析梯度;Dojo(Howell et al. 2022,arXiv 2203.00806)用内点法(interior-point method)求 NCP 并用 IFT 反传;DiffTaichi(Hu et al. ICLR 2020,arXiv 1910.00935)走源码变换路线。这一阶段的信念是"梯度越精确越好"。
- 第三阶段(2022 至今,"精确不等于有用"):Suh-Simchowitz-Zhang-Tedrake(ICML 2022,arXiv 2202.00817,Outstanding Paper)和 Parmas et al.(PIPPS, ICML 2018,arXiv 1902.01240)从根本上质疑第二阶段的信念,用 bias-variance 框架和 chaos 理论证明:对接触这种不连续动力学,精确的一阶梯度可能比零阶采样梯度更差。 这一发现把领域重心从"如何更精确地反传"转向"如何获得有用的梯度信号"——随机光滑、短 horizon、barrier smoothing 等技术由此兴起。
这段历史脉络是本专题的暗线:§4.3(凸松弛 IFT)代表第二阶段的成熟形态,§4.5(随机光滑)代表第三阶段的核心洞察,§4.6(统一)和 §4.7(病态诊断)则是站在今天回望、把两个阶段的认识缝合起来。
三个阶段的认知跃迁,可以用一句话各自概括:
- 第一阶段(2018 前)的信念:"能反传就行"——能
.backward()就是胜利,接触模型粗糙无妨。 - 第二阶段(2020-2022)的信念:"梯度越精确越好"——追求对硬接触的精确解析梯度,把光滑参数推到极小。
- 第三阶段(2022 至今)的信念:"精确不等于有用"——精确的一阶梯度在不连续上可能输给零阶采样梯度,重心从"更精确"转向"更有用"。
本质洞察(历史维度):这三句话的演进,本质是**对"梯度"这个对象理解的不断深化**——从"梯度是能反传的数"(第一阶段,把梯度当 API),到"梯度是越精确越好的物理真值"(第二阶段,把梯度当数学真理),再到"梯度是 bias-variance 权衡下的估计量"(第三阶段,把梯度当统计对象)。本专题的写作顺序刻意复现了这个认知跃迁:先讲精确梯度(§4.2-§4.4,第二阶段视角),再用随机光滑和 bias-variance(§4.5-§4.6,第三阶段视角)颠覆它。读者若能亲历这个"先信精确、再悟有用"的转折,就真正理解了这个领域——而不只是学会了几个公式。
阶段小结:到这里我们建立了三个认识——(1) 可微接触是 backward pass 问题,比 forward pass 难一个维度;(2) 自动微分能跑通不代表梯度有意义;(3) 领域已从"精确梯度"演进到"有用梯度"。接下来 §4.1 要把"接触不可微"这句话拆成三个精确的数学命题。
§4.1 接触为何天然不可微:三层不连续 ⭐⭐¶
本节解决的问题:把"接触不可微"这句模糊的话,翻译成三个有精确数学对象的命题,让你以后看到接触问题时能立刻判断"这里的不可微属于哪一层、对应什么数学工具"。
动机:从一个弹球说起¶
考虑一维世界里最简单的接触:一个质量为 \(m\) 的小球从高度 \(q_0>0\) 自由下落,地面在 \(q=0\) 处。我们关心一个看似无害的问题:落地后小球的反弹高度 \(q^+\),对初始高度 \(q_0\) 的导数 \(\partial q^+/\partial q_0\) 是多少?
直觉上这个导数应该存在——初始放高一点,反弹也高一点。但魔鬼藏在"碰撞瞬间"这个无穷短的时间窗口里。在这一瞬间,地面对小球施加一个巨大的法向力,把向下的速度 \(v^-<0\) 在瞬间反转为向上的 \(v^+>0\)。这个"瞬间巨大力"在数学上是什么?它对初值的导数又是什么?这就是第一层不连续。
而如果小球不是垂直下落,而是带着水平速度斜着砸下来,地面还会通过摩擦改变它的水平速度。摩擦力的方向取决于小球是在"滑动"还是"黏住",这个切换带来第二层不连续。
最后,如果场景里有多个接触点(比如一个箱子四个角同时接近地面),哪些角真正接触、哪些还悬空,这个"接触集合"会随配置变化而跳变,带来第三层不连续。
下面逐层剖析。关键目标是:每一层都要说清它对应哪个数学对象,以及为什么经典导数在这里失效。
反面:如果用经典导数会卡在哪里¶
在展开三层之前,先明确"经典导数失效"具体指什么。经典(Fréchet)导数要求:函数在该点的局部线性逼近存在且唯一。接触的三层不连续分别破坏这个要求的不同部分——
- 第一层破坏**有界性**:力变成无界的 Dirac 测度,普通函数空间装不下它,导数只能在分布意义下定义。
- 第二层破坏**唯一性**:方向导数沿不同方向取不同值,"导数"退化成一个集合(Clarke 广义梯度)。
- 第三层破坏**连续性**:解作为参数的函数本身在切换面上跳变,导数在切换面两侧不相等。
理解这三种"破坏方式"的差异,是本节的核心。下面逐一展开。
理论 · 第一层:法向冲量的 Dirac 测度结构¶
物理图像:硬碰撞中,法向力 \(F_n(t)\) 在碰撞时刻 \(t_c\) 附近是一个极高极窄的脉冲。在"硬接触极限"(接触刚度 \(k\to\infty\))下,这个脉冲的宽度趋于 0、高度趋于 \(\infty\),但其积分——冲量(impulse)——保持有限:
如果用 compliant(柔性)接触模型保留微小弹性,比如 Hertz 接触律 \(F_n=k\,\delta_+^{3/2}\)(\(\delta\) 是穿透深度,\(\delta_+=\max(\delta,0)\)),那么随着 \(k\to\infty\),力函数的极限在分布意义下是一个 Dirac delta:
这里 \(\phi\) 是 gap 函数(接触间隙,signed distance),\(\lambda_n\) 是法向冲量大小,最后一组关系 \(\lambda_n\ge0,\ \phi\ge0,\ \lambda_n\phi=0\) 是**法向互补条件(normal complementarity)**——要么有间隙(\(\phi>0\))则无力(\(\lambda_n=0\)),要么有力(\(\lambda_n>0\))则无间隙(\(\phi=0\)),二者不可能同时为正。
为什么这导致不可微:速度对时间的导数(加速度)在 \(t_c\) 处是一个 Dirac delta,速度本身在 \(t_c\) 处有一个**跳跃间断**(jump discontinuity)。从 \(v^-\) 到 \(v^+\) 的跳跃,其大小由恢复系数(coefficient of restitution, CoR)\(e\) 决定:\(v^+=-e\,v^-\)。现在问"\(v^+\) 对碰撞前状态的导数"——在碰撞这个零测度时刻,速度作为时间的函数不连续,对时间不可导(导数是分布)。
对初值的导数怎么处理:虽然对时间不可导,但我们真正关心的是 \(v^+\)(碰后速度)对 \(v^-\)(碰前速度)或对参数(如 CoR)的导数。在牛顿碰撞律 \(v^+=-e\,v^-\) 下,这个映射本身是光滑的(\(\partial v^+/\partial v^-=-e\))!第一层不连续的微妙之处在于:跳跃发生在时间维度,但状态到状态的映射(碰撞映射)可能仍然光滑。 真正的麻烦是当我们把碰撞嵌入到连续时间积分里、且碰撞时刻 \(t_c\) 本身依赖于初值时——\(t_c=t_c(q_0)\),初值变一点,碰撞时刻就变一点,这个"事件时刻对参数的依赖"会引入对 \(q_0\) 的额外导数项(事件触发的灵敏度,event-triggered sensitivity)。
本质洞察:第一层不连续的数学本质不是"映射不可微",而是"积分变量(时间)上出现了测度集中(measure concentration)"。处理它的正确工具是**测度微分(Radon 测度的导数)或 Schwartz 分布**,而不是逐点的经典导数。这也是为什么专题 3 用测度微分包含(MDI)来表述 forward dynamics——MDI 的语言天生能容纳这种冲量集中。
把事件触发灵敏度算出来。上面说"\(t_c=t_c(q_0)\) 引入额外导数项",这一项常被忽略却至关重要,我们显式推一遍。设自由落体段 \(q(t;q_0)\) 满足 \(q(t_c)=0\)(落地条件)。对落地条件两边关于 \(q_0\) 求全导数(隐函数定理):
这就是碰撞时刻对初值的灵敏度——它正比于"落地时位置对初值的灵敏度"、反比于落地速度 \(v^-\)。当 \(v^-\to0\)(擦边碰撞,几乎不落地)时这一项发散——擦边接触的灵敏度爆炸,这是 grazing(掠射)接触数值困难的根源。把这一项代入端到端导数(链式法则连接自由段、碰撞映射、碰后自由段),才得到完整的 \(\partial q^+/\partial q_0\)(这正是练习 4.1.1 要手推的)。漏掉 \(\partial t_c/\partial q_0\) 会系统性低估灵敏度——这是把"碰撞映射光滑"误当"接触可微"的陷阱(§4.1 第二个思维陷阱)的定量根源。
本质洞察(补充):事件触发灵敏度 \(\partial t_c/\partial q_0=-(\partial q/\partial q_0)/v^-\) 揭示——第一层不连续在"对初值求导"层面其实是可处理的(这一项有显式公式),但它会在两种情形下失控:擦边碰撞(\(v^-\to0\),分母爆)和多次密集碰撞(chattering/Zeno,灵敏度项连乘累积)。这把"第一层难点"从模糊的"有 delta"精确到"有一个可能发散的事件灵敏度项"。理解这一点,就知道为什么 §4.8 的 DiffMJX 要用自适应积分器精确定位 \(t_c\)(TOI, time-of-impact)——不是为了仿真精度,而是为了让 \(\partial t_c/\partial q_0\) 这一项算准,否则梯度系统性偏移。
类比(标注边界):第一层不连续像信号处理里的**冲激响应**——一个理想的脉冲信号 \(\delta(t)\) 在时域不可导,但它在频域、在积分意义下完全良定义。相似之处仅在于"瞬时集中的能量/动量用 Dirac delta 描述";**不像**的地方是:信号处理里 \(\delta(t)\) 的位置是给定的,而碰撞里 \(t_c\) 是状态的函数,这个依赖关系才是接触灵敏度的真正难点。不要把"碰撞就是个 delta,处理方式和信号一样"这个类比延伸过头。
理论 · 第二层:stick-slip 切换的 Clarke 广义梯度¶
物理图像:当接触点有切向相对速度时,库仑摩擦力大小为 \(\mu\lambda_n\)(动摩擦),方向与相对滑动速度 \(v_t\) 相反。但当 \(v_t=0\)(黏着,stick)时,摩擦力可以取摩擦锥内的**任意**方向和大小(只要不超过 \(\mu\lambda_n\))——它是一个由约束被动决定的反作用力,而非由速度唯一决定。
用变分不等式(Variational Inequality, VI)的语言,库仑摩擦的最大耗散原理(maximum dissipation principle)写作:
这个优化问题的解:当 \(v_t\ne0\) 时唯一(\(\lambda_t=-\mu\lambda_n\,v_t/\|v_t\|\),落在锥边界);当 \(v_t=0\) 时是整个锥盘 \(\mu\lambda_n\mathbb{B}^2\)(\(\mathbb B^2\) 是二维单位圆盘)。
为什么这导致不可微:考虑摩擦力作为切向速度的函数 \(\lambda_t(v_t)\)。在 \(v_t=0\) 处,从左边逼近(\(v_t\to0^-\))极限是 \(+\mu\lambda_n\),从右边逼近(\(v_t\to0^+\))极限是 \(-\mu\lambda_n\)——两个单侧极限不相等,函数在 0 处不可导。 但它仍然是 Lipschitz 连续的(有界变化),所以可以定义 Clarke 广义梯度:
即 Clarke 广义梯度是两支单侧导数的凸包——一个**集合**,而非单个数。在高维(二维切向)情形,它是整个摩擦锥盘对应的雅可比集合。
这对自动微分意味着什么:当你对一个在 stick-slip 边界附近的接触调 autograd,框架会返回 Clarke 广义梯度里的**某一支**(具体哪一支由 AD 实现的分支选择决定,通常是右极限或 max/sign 的次梯度约定)。这一支梯度本身没错(它确实是某个方向的方向导数),但它**不是** Clarke 凸包,因此用它做优化时,方向可能在两支之间剧烈跳变,导致不稳定。
本质洞察:第二层不连续的本质是"解映射在临界点处方向相关(direction-dependent)"。处理它的正确工具是 Clarke 广义梯度与半光滑(semismooth)分析。半光滑性恰好保证:虽然梯度是集合,但 Newton 类方法用其中任一支都能保证超线性收敛(Qi-Sun 1993 的半光滑 Newton 收敛定理)——这是为什么 PATH solver、Fischer-Burmeister 重构能在 stick-slip 上稳健工作的数学根基。
对比性思维(不是 X 而是 Y):很多人以为 stick-slip 的不可微和第一层的冲量不可微是"同一种不连续"。不是——第一层是**值域跳变**(速度跳变,对应测度),第二层是**方向相关**(导数是集合,对应 Clarke 次微分)。第一层用分布/测度处理,第二层用 Clarke/半光滑处理,二者数学工具完全不同。混淆它们会导致用错工具:对 stick-slip 用测度微分是杀鸡用牛刀且抓不住要害,对冲量用 Clarke 次微分则会漏掉事件时刻灵敏度。
理论 · 第三层:接触激活集变化¶
物理图像:真实场景往往有多个潜在接触点。设第 \(i\) 个接触点的 gap 函数为 \(\phi_i(q)\)。激活集(active set) 定义为当前真正接触(间隙为零)的点的集合:
随着系统运动,某个 \(\phi_i\) 从正穿过零(新接触建立)或从零变正(接触断开),激活集 \(\mathcal A\) 就发生跳变。这是一种 hybrid-like(混杂系统式)的分岔(bifurcation)——系统的"模式"(哪些约束激活)离散地改变。
为什么这导致不可微:在激活集固定的区域内,接触动力学是光滑的(KKT 系统是一组光滑方程,IFT 适用)。但在激活集切换的临界面(\(\phi_i=0\) 的超曲面)上,解作为参数的函数本身**连续但不可微**——切换前后由不同的方程组决定,左右导数不相等。
更精确地说,按 Robinson 1980(Math. Oper. Res.)的 strongly regular(强正则)理论:当 KKT 系统在解处满足 LICQ(线性独立约束规范)与 SSOSC(严格二阶充分条件),解映射对参数是**局部 Lipschitz** 的,且在激活集不变的开区域上是 \(C^1\) 的;但在激活集切换面上,存在的只是 B-subdifferential(Bouligand 次微分)中的某一支,而非经典雅可比。
1D 弹球例子(把三层串起来):回到开头的弹球,加上 LCP 形式的接触约束 \(h\ddot q=-mg+\lambda\),\(0\le\lambda\perp\phi=q\ge0\)。当 \(\phi=q>0\)(悬空),约束不激活,\(\lambda=0\),动力学是光滑的自由落体;当 \(\phi=q=0\)(接触),约束激活,\(\lambda>0\)。激活集在 \(q=0\) 处切换。问 \(\partial q^+/\partial q_0\) 在碰撞瞬间——它在"恰好接触"与"恰好不接触"两支之间取不同值,经典导数不存在,但两支梯度的凸包就是 Clarke 广义雅可比(这正是练习 4.1.1 要手推的对象)。
阶段小结:到这里我们完成了三层不连续的精确刻画——第一层(Dirac 测度 / 分布导数)、第二层(Clarke 广义梯度 / 半光滑)、第三层(激活集切换 / B-subdifferential)。接下来要做的是:理解这三层在数值求解器里如何表现,以及为什么"凸松弛"能把它们整理成 IFT 可处理的形式。
理论 · 深入第二层:2D 摩擦锥盘的 Clarke 雅可比¶
前面给的第二层是 1D 切向(Clarke 集合是区间 \([-\mu\lambda_n,+\mu\lambda_n]\))。真实接触是 2D 切向平面,这时 Clarke 广义雅可比从"区间"升级为"集合值映射",结构更丰富,值得展开——因为 3D 机器人接触几乎都是 2D 切向。
设切向相对速度 \(v_t\in\mathbb R^2\),最大耗散给出摩擦力 \(\lambda_t(v_t)\)。滑动区(\(v_t\ne0\)):\(\lambda_t=-\mu\lambda_n\,v_t/\|v_t\|\),落在摩擦锥盘边界(半径 \(\mu\lambda_n\) 的圆)。这是 \(v_t\) 的光滑函数吗?计算其雅可比:
这个雅可比有个重要结构——\(\big(I_2 - \hat v_t\hat v_t^\top\big)\) 是**到 \(v_t\) 垂直方向的投影**(\(\hat v_t=v_t/\|v_t\|\))。它说明:在滑动方向上摩擦力不变(投影掉了),只有垂直于滑动方向的速度扰动才改变摩擦力方向。而且这个雅可比的范数 \(\sim\mu\lambda_n/\|v_t\|\)——当 \(v_t\to0\)(趋近黏着),雅可比范数发散!这是第二层不连续在 2D 的定量显现:越接近 stick,摩擦力对速度越敏感。
黏着点(\(v_t=0\)):摩擦力可取整个锥盘 \(\mu\lambda_n\mathbb B^2\) 内任意值(由约束被动决定)。此处 Clarke 广义雅可比是**所有滑动方向极限的凸包**——即"从各个方向 \(\hat v_t\) 趋近 0 时上面雅可比的极限"的凸包,它是一个**矩阵集合**(不是单个矩阵)。几何上,这个集合编码了"黏着点处摩擦力可以朝任何方向响应"的事实。
本质洞察:1D 第二层的 Clarke 集合是区间,2D 是矩阵集合——维度升高让"方向相关"从"两支"变成"连续多支(整个锥盘的方向)"。这解释了为什么 2D/3D 摩擦的 stick-slip 比 1D 更难处理:不是两支梯度的取舍,而是一整个方向连续族的取舍。半光滑 Newton(§4.2/§4.7 提及)之所以在这里仍有效,是因为它只需 Clarke 集合中**任一**矩阵就能保证超线性收敛(Qi-Sun 1993)——它不在乎你取了哪个方向,这是半光滑性的威力。而一阶梯度下降在这里会因每步取不同方向而剧烈震荡(§4.1 第三个陷阱的 2D 版,更严重)。
对接 §4.4:正则化摩擦 \(\lambda_t=-\mu\lambda_n\,v_t/\sqrt{\|v_t\|^2+\epsilon_t^2}\) 把这个发散的雅可比"封顶"——分母的 \(\epsilon_t\) 让 \(v_t\to0\) 时雅可比范数停在 \(\sim\mu\lambda_n/\epsilon_t\)(有限),代价是黏着被近似成 \(\sim\epsilon_t\) 量级的蠕变。这正是 §4.4 解析光滑在第二层的具体作用——把"发散的 Clarke 集合"压成"有界的光滑雅可比"。
三层不连续总览表¶
把三层不连续做穷举式分类(认知工具 E:系统性分类),便于以后快速定位:
| 层 | 物理来源 | 数学对象 | 破坏了经典导数的哪个性质 | 正确工具 | 出现在哪个求解器环节 |
|---|---|---|---|---|---|
| 第一层 | 硬碰撞冲量 | Dirac 测度 / Schwartz 分布 | 有界性(力无界) | 测度微分、MDI、事件灵敏度 | 时步积分的冲量更新 |
| 第二层 | stick-slip 摩擦切换 | Clarke 广义梯度(凸集) | 唯一性(方向相关) | Clarke 次微分、半光滑 Newton | 摩擦锥投影 |
| 第三层 | 接触激活集变化 | B-subdifferential | 连续性(解映射跳变) | Robinson 强正则、激活集分析 | LCP/NCP 互补条件 |
参考文献(本节):Stewart-Trinkle 1996(IJNME,非光滑刚体时步法奠基);Brogliato Nonsmooth Mechanics 2016 第 3 版第 5 章(冲量与碰撞律的测度理论);Rockafellar-Wets Variational Analysis 1998 第 8 章(次导数与次梯度);Clarke Optimization and Nonsmooth Analysis 1983 第 2 章(广义梯度与 Rademacher 定理);Robinson 1980 Math. Oper. Res. 5(1):43(强正则与解映射 Lipschitz 性)。
⚠️ 常见陷阱¶
💡 概念误区:认为"接触不可微"是单一现象,可以用一种方法一并解决
新手想法:"接触就是不连续,加点光滑化或者用次梯度不就行了?" 实际上:接触有**三层结构不同**的不连续(测度集中 / 方向相关 / 激活集切换),它们破坏经典导数的方式不同,对应的数学工具也不同。compliant smoothing 主要处理第一层(把冲量摊开成有限力)和缓解第三层(gap 过零变光滑),但对第二层 stick-slip 的方向相关性帮助有限;randomized smoothing 对三层都有效但引入采样方差;Clarke 次微分针对第二层但不能直接给出可用于一阶优化的单值梯度。 为什么重要:选错工具会南辕北辙。比如想解决 stick-slip 抖动却去调接触刚度(那是第一/三层的参数),自然无效。 延伸思考:能否设计一个对三层都"原生"友好的求解器?这正是 Drake SAP(凸势 + irrotational field)和 Dojo(IPM 中心路径同时光滑互补与锥约束)的设计动机。
🧠 思维陷阱:把"碰撞映射光滑"误当作"接触可微"
新手想法:"牛顿碰撞律 \(v^+=-e\,v^-\) 明明是光滑的,\(\partial v^+/\partial v^-=-e\),哪来的不可微?" 实际上:碰撞映射本身(给定碰前碰后)可能光滑,但**碰撞时刻 \(t_c\) 是状态的函数**。当你计算"末态对初值"的端到端导数时,必须算上 \(\partial t_c/\partial q_0\) 这一项(事件触发灵敏度)。在多次碰撞、碰撞时刻密集的场景(如 chattering、Zeno 行为),这些灵敏度项会累积放大。 正确思维:端到端梯度 = 碰撞映射的偏导 + 碰撞时刻灵敏度 + 自由段的流灵敏度。只看碰撞映射会严重低估真实的灵敏度复杂度。
💡 概念误区:认为 Clarke 广义梯度可以直接拿去做梯度下降
新手想法:"stick-slip 处的梯度是 Clarke 集合,那我随便取里面一个向量做 SGD 不就行了?" 实际上:Clarke 广义梯度是凸集,取其中**任一支**用于半光滑 Newton 能保证收敛(Qi-Sun 1993 的半光滑 Newton 收敛定理,§4.1 已引),但用于**一阶梯度下降**时,相邻迭代可能取到不同支,导致下降方向自相矛盾、震荡不收敛。这正是 §4.5 随机光滑用"对邻域多次采样取平均(gradient bundle)"来抹平方向跳变的动机。 为什么重要:半光滑 Newton(二阶)和梯度下降(一阶)对"取哪一支"的鲁棒性完全不同。前者无所谓,后者很敏感。
练习¶
练习 4.1.1(推导题,草稿纸完成):考虑 1D 弹球 \(h\ddot q=-mg+\lambda\),\(0\le\lambda\perp q\ge0\),恢复系数 \(e\)。设初始高度 \(q_0\)、初速 0。手推 \(\partial q^+/\partial q_0\)(反弹到最高点的高度对初始高度的导数),明确写出碰撞时刻 \(t_c(q_0)\) 的贡献项,并说明在"恰好不碰撞"(\(q_0\) 极小使球还没落地就到了终止时间)与"碰撞"两种情形下,该导数的两支分别是什么。讨论这两支的凸包是否就是 Clarke 广义雅可比。
练习 4.1.2(开放思考题):第二层 stick-slip 不连续中,我们说 \(v_t=0\) 处 Clarke 广义梯度是摩擦锥盘。现在去掉"库仑摩擦"假设,改用一个光滑近似 \(\lambda_t=-\mu\lambda_n\tanh(v_t/\epsilon)\cdot v_t/\|v_t\|\)(\(\epsilon\) 是光滑参数)。这个近似在 \(v_t=0\) 处可微吗?它引入了什么 bias(相对真实库仑摩擦)?当 \(\epsilon\to0\) 时 bias 和梯度的 Lipschitz 常数各自如何变化?这个权衡和 §4.4 的 compliant smoothing 是同一个权衡吗?
练习 4.1.3(证明题):证明:在激活集 \(\mathcal A\) 固定的开区域内,若 KKT 系统满足 LICQ 与严格互补(strict complementarity),则接触解映射 \(q^+(q_0)\) 是 \(C^1\) 的,并写出其雅可比的 IFT 表达式。(提示:固定激活集后,互补条件退化为等式约束,KKT 变成光滑方程组,直接用 §4.2 的 IFT 模板。)这道题为 §4.2 的一般推导热身。
§4.2 隐函数定理:召唤梯度的统一引擎 ⭐⭐⭐¶
本节解决的问题:在 §4.1 我们看到接触解是某个优化/互补问题的解。本节回答——如果这个解满足一组最优性方程 \(F(z^\star,\theta)=0\),怎么不重新求解、只靠这组方程就拿到 \(\partial z^\star/\partial\theta\)?答案是隐函数定理,它是三条路线(凸松弛、解析光滑、随机光滑里的一阶分支)共用的数学引擎。
动机:为什么不能"对求解过程反传"¶
接触求解器的 forward pass 通常是一个迭代算法——内点法、半光滑 Newton、投影梯度,跑很多步直到收敛。一个最朴素的求梯度想法是:把迭代的每一步都记进自动微分的磁带(tape),然后整体反传。 这叫"unrolling"(展开式微分)或 BPTT-through-solver。
这个想法能用,但有两个致命问题:
- 内存爆炸:求解器迭代 50 次,每次又嵌在 100 步 rollout 里,磁带要存 5000 步的中间量。长 horizon 下显存(OOM, out of memory)瞬间耗尽。
- 梯度被迭代过程污染:展开式微分给出的是"这个特定迭代序列"的梯度,包含了求解器收敛路径的瞬态信息,而非解本身对参数的导数。当求解器近似收敛时,这两者有差异。
本质洞察:解 \(z^\star\) 是由"最优性条件 \(F(z^\star,\theta)=0\)"定义的,不是**由"求解它的那段代码"定义的。求梯度应该针对前者(数学对象),而不是后者(数值过程)。隐函数定理正是"绕过求解过程、直接对最优性条件微分"的工具——它让 backward pass 的成本与 forward pass 的迭代次数**完全解耦。这是可微优化(differentiable optimization)整个领域的基石思想。
这一点对接触尤其关键:接触求解器的迭代次数随刚度、配置高度可变,若用展开式微分,梯度成本就不可控;用 IFT,无论求解器跑 5 步还是 500 步,反传只需对**收敛点**的一个线性系统求解一次。
反面:展开式微分在长 horizon 下的具体灾难¶
设 rollout 长度 \(T=100\),每步接触求解器迭代 \(N_{\mathrm{iter}}=30\) 次。
- 展开式微分:计算图深度 \(\approx T\times N_{\mathrm{iter}}=3000\)。反传时这条 3000 层的链不仅占用 \(O(3000)\) 的显存存激活值,还会把每一步求解器内部的雅可比连乘——若其中任何一步接近奇异(接触刚度大时常见),连乘结果的谱半径远大于 1,梯度指数爆炸(这与 §4.7 的 chaos 是同一个机制,但被求解器内迭代进一步放大)。
- 隐函数微分:计算图深度 \(\approx T=100\)(每步只在收敛点做一次 IFT),显存与求解器迭代次数无关。每步反传只需解一个 \(n\times n\) 线性系统(\(n\) 是接触变量维度),数值上稳定得多。
这就是为什么所有严肃的可微仿真器(Dojo、Nimble、OptNet 系)在每个时步**终点**做隐函数微分,而不展开求解器内部。"展开式 BPTT vs 隐函数微分"是可微仿真架构的第一性区分(§4.8 会把它列为四个架构维度之一)。
历史:从 Dini 到 Robinson 到 OptNet¶
隐函数定理的脉络横跨一个半世纪:
- Dini IFT(经典,\(C^1\) 情形):最古典的版本,要求 \(F\) 连续可微、\(\partial F/\partial z\) 可逆。教材见 Rudin《数学分析原理》第 9 章、Abraham-Marsden《Manifolds, Tensor Analysis and Applications》第 2 章。这是光滑优化求灵敏度的标准工具。
- Robinson 1980(推广到变分不等式):接触问题的最优性条件不是等式 \(F=0\),而是**广义方程(generalized equation)** \(0\in f(x)+N_C(x)\)(\(N_C\) 是约束集 \(C\) 的法锥)。Robinson 证明了:若线性化的广义方程在解处**强正则(strongly regular)**,则解映射对参数局部 Lipschitz——这是把 IFT 推广到带约束/互补问题的关键一步,是 OptNet、diffcp、PATH solver 灵敏度分析的共同理论根源。
- OptNet / Amos-Kolter 2017(落地到深度学习):把 KKT 系统的隐函数微分包装成一个可微的网络层(differentiable QP layer),让二次规划的解能像普通张量一样参与反传。这把抽象的 IFT 变成了工程上即插即用的模块。
- Blondel et al. NeurIPS 2022(模块化):JAXopt 库——用户只需定义最优性函数 \(F\),框架自动组合 \(F\) 的自动微分与 IFT,给出解对参数的梯度。这是 IFT 工程化的最新形态。
理论 · 隐函数定理的精确陈述与推导¶
定理(Dini 隐函数定理):设 \(F:\mathbb{R}^n\times\mathbb{R}^p\to\mathbb{R}^n\) 在点 \((z^\star,\theta_0)\) 的邻域内连续可微,满足 \(F(z^\star,\theta_0)=0\)。若雅可比 \(\partial F/\partial z\big|_{(z^\star,\theta_0)}\) 非奇异,则存在 \(\theta_0\) 的邻域 \(U\) 和唯一的 \(C^1\) 映射 \(z:U\to\mathbb{R}^n\),使得 \(z(\theta_0)=z^\star\) 且对所有 \(\theta\in U\) 有 \(F(z(\theta),\theta)=0\),并且
推导(完整,每步说明用了什么):
Step 1:对恒等式求全微分。 由于在邻域内恒有 \(F(z(\theta),\theta)\equiv0\),这是一个关于 \(\theta\) 的恒等式。两边对 \(\theta\) 求全导数(链式法则):
这里第一项是"\(F\) 通过 \(z\) 间接依赖 \(\theta\)"的贡献,第二项是"\(F\) 直接依赖 \(\theta\)"的贡献——这是全微分的标准分解,用的工具就是多元链式法则。
Step 2:解出 \(\partial z/\partial\theta\)。 因为 \(\partial F/\partial z\) 非奇异(定理假设),左乘其逆:
证毕。整个推导只有两步,核心就是"对最优性恒等式求全微分再解线性系统"。 注意我们从未对"如何求得 \(z^\star\)"做任何假设——这正是 IFT 与求解过程解耦的数学体现。
为什么非奇异性是关键:\(\partial F/\partial z\) 非奇异等价于"解局部唯一且对参数光滑响应"。如果它奇异(接触里对应激活集切换面、退化接触),IFT 失效——这恰恰对应 §4.1 第三层不连续。IFT 的适用域 = 激活集不变的开区域;IFT 的失效面 = 不连续的临界面。 二者是同一枚硬币的两面。
理论 · 反向模式:只要梯度不要雅可比¶
在深度学习里,我们通常不需要整个雅可比 \(\partial z/\partial\theta\)(它是 \(n\times p\) 的大矩阵),而只需要一个**向量-雅可比积(vector-Jacobian product, VJP)**:给定来自上游的梯度 \(\bar z=\partial\mathcal L/\partial z\)(损失对解的梯度),求 \(\bar\theta=\partial\mathcal L/\partial\theta\)。
关键优化:先解一个线性系统 \(\left(\dfrac{\partial F}{\partial z}\right)^\top y=\bar z\) 得到伴随变量(adjoint)\(y\),再算 \(\bar\theta=-\left(\dfrac{\partial F}{\partial\theta}\right)^\top y\)。这样**只需一次线性求解**,且 \(\partial F/\partial\theta\) 从不显式构造(只需它的转置作用在向量上,可由 AD 高效完成)。这就是 adjoint method(伴随法)——它和最优控制里的伴随方程(第三批 PMP、专题 6)是同一个数学对象在不同语境的化身。
理论-工程桥接:正因为反向模式只需"一次线性求解 + 一次 VJP",可微优化层(OptNet、cvxpylayers、Theseus)的反传成本才与前向求解器的迭代次数无关。工程上这意味着:你可以用一个跑 500 次迭代才收敛的高精度内点法做 forward,而 backward 依然便宜——精度与可微性的成本被彻底解耦。这不是实现技巧,而是 IFT 的数学结构直接馈赠的红利。
理论 · 正向 vs 反向模式的 FLOP 账(为什么深度学习必须反向)¶
§4.2 练习 4.2.2 让读者比较正反向模式的成本,这里给出完整的 FLOP 分析,因为它决定了接触梯度在策略学习里的可行性。设解 \(z\in\mathbb R^n\)、参数 \(\theta\in\mathbb R^p\)、标量损失 \(\mathcal L\)。
正向模式(forward-mode,算完整雅可比):求 \(\partial z/\partial\theta\in\mathbb R^{n\times p}\) 需对每一列(每个参数方向)解一次线性系统 \(\frac{\partial F}{\partial z}\,\frac{\partial z}{\partial\theta_j}=-\frac{\partial F}{\partial\theta_j}\)。\(p\) 个参数 → \(p\) 次线性求解(或一次分解 + \(p\) 次回代)。成本 \(\sim O(n^3 + p\cdot n^2)\)。然后还要 \(\frac{\partial\mathcal L}{\partial\theta}=\frac{\partial\mathcal L}{\partial z}\frac{\partial z}{\partial\theta}\)(\(O(np)\))。
反向模式(reverse-mode / adjoint,只算 VJP):先解**一次**伴随系统 \(\big(\frac{\partial F}{\partial z}\big)^\top y=\bar z\)(\(O(n^3)\),且复用 forward 的分解则降到 \(O(n^2)\)),再 \(\bar\theta=-\big(\frac{\partial F}{\partial\theta}\big)^\top y\)(\(O(np)\),且 \(\partial F/\partial\theta\) 从不显式构造,由 AD 的 VJP 完成)。成本 \(\sim O(n^2 + np)\)——与 \(p\) 几乎只线性相关,且没有 \(p\) 次线性求解。
对比的决定性后果:
| 模式 | 主导成本 | \(p\gg n\)(神经网络权重多)时 |
|---|---|---|
| 正向 | \(O(p\cdot n^2)\)(\(p\) 次回代) | 灾难——\(p\) 可达百万,回代 \(p\) 次不可行 |
| 反向 | \(O(n^2 + np)\)(一次求解) | 可行——只一次求解,\(np\) 项线性可承受 |
本质洞察:正反向模式的成本差异,根源在"输入维度 \(p\) vs 输出维度(损失是标量,维度 1)"的悬殊。反向模式把成本绑在输出维度(=1),正向绑在输入维度(=\(p\))——当 \(p\gg1\)(神经网络策略有百万参数),反向模式快 \(p\) 倍。这与深度学习"反向传播(BPTT)比前向自动微分省"是同一个道理(练习 4.2.2 的答案)——都是"标量损失对高维参数求梯度,绑输出维度的反向模式必胜"。接触梯度要喂进策略网络(\(p\) 巨大),所以**必须用反向模式(adjoint)**,正向模式在策略学习里根本不可行。这就是为什么所有可微仿真器的接触 backward 都用 adjoint/VJP 而非显式雅可比——不是偏好,是 \(p\gg n\) 下的唯一可行选择。
理论 · 当 IFT 遇上非光滑:Robinson 强正则¶
接触的最优性条件常含互补/不等式,不是纯等式 \(F=0\)。此时用 Robinson 的推广:
广义方程:\(0\in\Phi(z,\theta):=f(z,\theta)+N_C(z)\),其中 \(N_C(z)\) 是凸集 \(C\) 在 \(z\) 处的法锥。KKT 系统、互补问题、变分不等式都能写成这个形式。
强正则(strong regularity):若把 \(\Phi\) 在解 \((z^\star,\theta_0)\) 处线性化得到的广义方程,对每个右端小扰动都有**唯一**且 Lipschitz 依赖的解,则称解在该点强正则。Robinson 1980 证明:强正则 \(\Rightarrow\) 解映射 \(z(\theta)\) 局部存在唯一且 Lipschitz。
线性化广义方程长什么样:把 \(\Phi(z,\theta)=f(z,\theta)+N_C(z)\) 在解 \((z^\star,\theta_0)\) 处对 \(z\) 线性化,得到一个**线性化的广义方程**:
强正则要求:对右端的每个小扰动 \(\delta\),方程 \(\delta\in f(z^\star)+\frac{\partial f}{\partial z}(z-z^\star)+N_C(z)\) 都有**唯一**且对 \(\delta\) Lipschitz 依赖的解 \(z(\delta)\)。直观说——线性化后的"扰动→解"映射是单值 Lipschitz 的。这比经典 IFT 的"\(\partial F/\partial z\) 非奇异"更宽(后者是它在 \(N_C=\{0\}\)、即无约束时的特例),因为它允许法锥 \(N_C\) 带来的非光滑,只要这个非光滑不破坏解的唯一 Lipschitz 依赖。
与经典条件的关系:强正则 \(\Leftrightarrow\) LICQ(约束梯度线性无关)+ SSOSC(严格二阶充分条件)。这是 §4.3 凸松弛能用 IFT 的前提——凸 QP 在严格凸 + LICQ 下自动强正则。反过来,激活集切换面上 SSOSC 或严格互补失效(某接触力与间隙同时为零),强正则就破,IFT 失效——这把"强正则失效"和"§4.1 第三层切换面"精确对应起来:它们是同一条临界面的两种语言(一个用变分分析说、一个用接触物理说)。
本质洞察:Robinson 强正则是"IFT 在带约束世界的护照"。经典 IFT 要 \(\partial F/\partial z\) 非奇异,强正则把这个条件推广为"线性化广义方程的解映射 Lipschitz 单值"。一旦强正则失效(激活集切换、退化),解映射只剩 Lipschitz 但不可微,梯度退化为 B-subdifferential 的某一支——这就把 §4.1 第三层不连续、§4.2 的 IFT、和后面的 Clarke 分析无缝缝合成一个理论。
理论 · 对"光滑化互补系统"求 IFT 的完整推导¶
§4.2 到此给出的是 IFT 的一般形态。但接触求解器的最优性条件不是干净的 \(F=0\),而是带互补的 NCP。这里我们做一个**完整的、每步带依据的推导**,展示 IFT 如何作用在内点法光滑化后的互补系统上——这正是 Dojo 的 backward 在数学上做的事,也为 §4.3 的 KKT 雅可比铺好严格地基。
考虑一个原型互补系统(接触法向条件的抽象):求 \((v,\lambda)\) 使得
其中 \(\theta\) 是外部参数(状态、控制、物理量),\(b,c\) 是依赖 \(\theta\) 的已知项。互补 \(\lambda\perp g\) 在 \(\lambda_i=g_i=0\) 处不光滑,无法直接 IFT。
Step 1:用 Fischer-Burmeister 或内点法把互补改写成光滑残差。 内点法的做法(§4.3 会再用)是引入松弛——把硬互补 \(\lambda_i g_i=0\) 换成中心路径条件 \(\lambda_i g_i=\kappa\)(\(\kappa>0\) 固定为小值)。于是整个系统变成一组**处处光滑**的方程:
这里第二块 \(\mathrm{diag}(\lambda)g-\kappa\mathbf1=0\) 是逐元素的双曲线方程 \(\lambda_i g_i=\kappa\),光滑可微(这正是 §4.3 将详述的 Dojo 技巧的数学形态)。为什么用 \(\kappa>0\):若 \(\kappa=0\),在边界 \(\lambda_i=g_i=0\) 处雅可比奇异(§4.1 第三层);\(\kappa>0\) 把解推到中心路径内部,避开奇异,换来处处可微——代价是 \(O(\kappa)\) 的 bias(§4.6)。
Step 2:计算 \(\partial F/\partial z\)(KKT 雅可比的光滑版)。 对 \(z=(v,\lambda)\) 求偏导。第一块对 \(v\) 是 \(M\)、对 \(\lambda\) 是 \(-J^\top\)。第二块 \(\mathrm{diag}(\lambda)(Jv+c)-\kappa\mathbf1\) 对 \(v\) 是 \(\mathrm{diag}(\lambda)J\)、对 \(\lambda\) 是 \(\mathrm{diag}(Jv+c)=\mathrm{diag}(g)\)。于是:
Step 3:论证非奇异性(IFT 适用的前提)。 在严格内部(\(\lambda_i>0,\ g_i>0\) 对所有 \(i\),由 \(\kappa>0\) 保证),\(\mathrm{diag}(g)\) 可逆。用块消元(Schur 补):把第二行左乘 \(\mathrm{diag}(g)^{-1}\) 再消去 \(\mathrm d\lambda\),得到关于 \(\mathrm dv\) 的有效系统矩阵
由于 \(M\succ0\)(质量矩阵正定)且 \(J^\top D J\succeq0\)(\(D\) 正定、\(J^\top D J\) 半正定),\(S=M+J^\top DJ\succ0\) 严格正定,故非奇异。因此整个 \(\partial F/\partial z\) 非奇异,IFT 适用。这个证明的关键是 \(\kappa>0\) 让 \(D\) 良定义且正定——硬互补(\(\kappa=0\))时激活约束的 \(g_i=0\) 使 \(D\) 的对应元素 \(\lambda_i/g_i\to\infty\),\(S\) 病态甚至奇异,这正是切换面失效的代数显现。
Step 4:计算 \(\partial F/\partial\theta\) 并组装灵敏度。 参数 \(\theta\) 通过 \(b(\theta),c(\theta)\) 进入:
代入 IFT 主公式 \(\partial z/\partial\theta=-(\partial F/\partial z)^{-1}\partial F/\partial\theta\),即得接触解对任意参数的解析灵敏度。整个推导只用了"全微分 + 块消元 + 正定性"三件工具,没有任何对求解过程的假设——再次印证 IFT 与求解器解耦。
本质洞察:这个推导揭示了一个反复出现的结构——接触灵敏度的核心是有效矩阵 \(S=M+J^\top D J\),其中 \(D=\mathrm{diag}(\lambda_i/g_i)\) 是"接触激活强度"的度量。深度接触(\(g_i\) 小、\(\lambda_i\) 大)使 \(D\) 大、\(S\) 偏向接触方向;自由(\(\lambda_i=0\))使 \(D=0\)、\(S=M\) 退回无接触。\(D\) 就是接触在灵敏度层面的"软硬开关",\(\kappa\) 控制这个开关的锐利程度。§4.3 的 Delassus 算子、§4.7 的 chaos 谱半径,最终都能追到这个 \(S\) 矩阵的条件数上——它是贯穿全章的隐藏主角。
IFT 在三条路线中的角色(认知工具 E:系统分类)¶
| 路线 | \(F(z,\theta)=0\) 是什么 | IFT 的角色 | 何时失效 |
|---|---|---|---|
| 凸松弛(§4.3) | 凸 QP/SOCP 的 KKT 残差 | 直接给解析梯度 | 激活集切换、约束退化 |
| 解析光滑(§4.4) | compliant 动力学的隐式积分残差 / barrier 子问题 KKT | 给光滑化后的精确梯度 | 光滑参数 \(\to\) 0 时条件数爆炸 |
| 随机光滑·一阶分支(§4.5) | 每个采样点的求解器最优性条件 | 给每个样本的梯度,再平均 | 单样本梯度方差大时不救场(需 ZoBG) |
参考文献(本节):Robinson 1980 Math. Oper. Res. 5(1):43;Amos-Kolter ICML 2017《OptNet: Differentiable Optimization as a Layer in Neural Networks》(arXiv 1703.00443);Blondel et al. NeurIPS 2022《Efficient and Modular Implicit Differentiation》(JAXopt);Pineda et al. NeurIPS 2022《Theseus》(arXiv 2207.09442,PyTorch 可微非线性最小二乘库,Gauss-Newton/LM/Dogleg + Lie 群 + 隐式微分);Rudin《数学分析原理》第 9 章(Dini IFT)。
⚠️ 常见陷阱¶
🧠 思维陷阱:用展开式微分(unrolling)做长 horizon 可微仿真
新手想法:"把求解器迭代记进磁带一起反传最简单,反正 PyTorch 自动帮我做。" 现象/后果:100+ 步 rollout × 几十次求解器迭代 → 显存 OOM;即使内存够,求解器内雅可比连乘导致梯度爆炸/消失,训练发散。 根本原因:展开式微分对"求解过程"反传,而非对"解的最优性条件"反传,成本与迭代次数耦合,且引入瞬态污染。 正确做法:在每个时步收敛点用 IFT(隐函数微分),反传成本与迭代次数解耦,只需一次线性求解。这是 Dojo/Nimble/OptNet 的标准做法。
💡 概念误区:以为 IFT 给出的梯度处处正确
新手想法:"IFT 公式 \(\partial z/\partial\theta=-(\partial F/\partial z)^{-1}\partial F/\partial\theta\) 是精确的,所以梯度精确。" 实际上:IFT 只在 \(\partial F/\partial z\) 非奇异(强正则)的区域成立。在激活集切换面上它**失效**——此时 AD 实现会取 B-subdifferential 的某一支(由数值上"激活集如何判定"的阈值决定),这一支梯度是单侧的、不是 Clarke 凸包。 为什么重要:在 contact-rich 任务里,轨迹常常**恰好**经过这些切换面(每次建立/断开接触),所以"IFT 精确"只是分片成立的,全局看梯度是分片光滑的。理解这一点才能解释 §4.7 的 gradient bias 从哪来。
💡 概念误区:混淆"对解微分"和"对求解器微分"
新手想法:"Dojo 的梯度和我对它的内点法迭代反传,结果应该一样。" 实际上:当求解器**精确收敛**时二者一致;但求解器只是**近似收敛**(迭代有限)时,展开式微分包含残余的收敛瞬态,IFT 给出的是"假设已精确收敛"的梯度。在内点法这种残差还较大就停的场景,二者可有可观差异。 正确思维:IFT 给的是"解的灵敏度",展开式给的是"这次求解过程的灵敏度"。研究语境(要解的数学性质)几乎总是想要前者。
练习¶
练习 4.2.1(推导题,草稿纸完成):给定无约束光滑优化 \(z^\star(\theta)=\arg\min_z g(z,\theta)\)。其最优性条件是 \(\nabla_z g(z^\star,\theta)=0\)。把它当作 \(F(z,\theta)=\nabla_z g=0\),用 IFT 推出 \(\partial z^\star/\partial\theta=-(\nabla^2_{zz}g)^{-1}\nabla^2_{z\theta}g\)。解释为什么这里出现的是 Hessian \(\nabla^2_{zz}g\),并说明它非奇异对应"\(z^\star\) 是严格局部极小"。这是 §4.3 凸 QP 梯度的最简特例。
练习 4.2.2(开放思考题):反向模式(adjoint)相比正向模式(直接算雅可比)在什么情况下更省?设 \(z\in\mathbb R^n\)、\(\theta\in\mathbb R^p\)、损失 \(\mathcal L\in\mathbb R\)。比较两种模式的浮点运算量(FLOPs),说明当 \(p\gg1\)(很多参数,如神经网络权重)时为什么必须用反向模式。这个结论和深度学习里"反向传播比前向自动微分省"是同一个道理吗?
练习 4.2.3(证明题):设接触 KKT 系统在解处满足 LICQ 与严格互补。证明此时 KKT 雅可比(§4.3 将给出的那个分块矩阵)非奇异,从而 IFT 适用。然后举一个**违反**严格互补的退化例子(某个接触力恰好为零但间隙也恰好为零),说明此时 KKT 雅可比奇异、IFT 失效,并把这个失效与 §4.1 第三层激活集切换联系起来。
§4.3 路线一·凸松弛的解析梯度:从 LCP/NCP 到 OptNet 式表达 ⭐⭐⭐¶
本节解决的问题:§4.2 给出了通用引擎 IFT,但它要求最优性条件 \(F(z,\theta)=0\) 已经写好。本节把这台引擎装到接触求解器上——具体地,先把接触动力学整理成一个**凸**优化问题(这一步叫凸松弛),再对它的 KKT 系统应用 IFT,得到接触解对所有输入(状态、控制、物理参数)的解析雅可比。这条路线是 Dojo、Nimble、SAP 等"精确解析梯度"派的数学根基,对应历史第二阶段的成熟形态。
动机:为什么先要"凸松弛"¶
回顾前置专题 3 的核心结论:刚体接触的时步法落地为一个互补问题。Stewart-Trinkle 1996 的原始形式是一个**线性互补问题(Linear Complementarity Problem, LCP),但它带一个致命的几何缺陷——**摩擦锥的多面体近似让问题非凸。我们先把这个缺陷讲透,因为它正是凸松弛要修复的东西。
考虑单接触点速度级的时步法。设 \(h\) 为时步,\(M\) 为广义质量矩阵,\(v_k,v_{k+1}\) 为前后广义速度,\(J_n,J_t\) 分别为法向、切向接触雅可比(把广义速度映射到接触点法向/切向相对速度),\(\lambda_n,\lambda_t\) 为法向、切向冲量。动量更新与三组约束如下:
其中 \(B u_k\) 是外部广义力、\(C\) 是科氏与重力项。三组接触约束:
- 法向互补(非穿透 + 单边力):\(0\le\lambda_n\ \perp\ \phi_{k+1}/h + J_n v_{k+1}\ge0\),即下一步法向间隙速度非负、法向力非负、二者乘积为零。
- 摩擦锥(库仑约束):\(\|\lambda_t\|\le\mu\lambda_n\)。
- 最大耗散:\(\lambda_t=\arg\min_{\|\lambda_t\|\le\mu\lambda_n}v_t^\top\lambda_t\)(§4.1 第二层已给出)。
问题出在哪里:摩擦锥 \(\|\lambda_t\|\le\mu\lambda_n\) 是一个**二阶锥(second-order cone, SOC),它本身是凸的;但 Stewart-Trinkle 为了把问题塞进 LCP 框架,用一个 \(d\) 边多面体去逼近这个圆锥(把切向方向离散成 \(d\) 个,每个方向一个非负冲量分量)。多面体近似引入两个麻烦:(i) 解依赖于多面体的朝向(各向异性,artificial anisotropy);(ii) 更关键的是,**法向力与切向力通过 \(\mu\lambda_n\) 耦合,使整个互补问题的矩阵 \(M_{\mathrm{LCP}}\) 非对称、非半正定——这正是 LCP 非凸的根源。非凸意味着可能有多解、解不连续、IFT 的强正则条件难以满足。
本质洞察:凸松弛的全部动机,是把"摩擦使接触问题非凸"这个物理事实,用一个**可控的近似**换成凸问题,从而同时换来三样东西——解的唯一性(凸问题局部唯一)、求解器的全局收敛性(凸优化有成熟算法)、以及**IFT 的适用性**(凸 QP 在严格凸 + LICQ 下自动满足 Robinson 强正则,§4.2)。换言之,凸松弛不是为了"更逼真",而是为了"可微且可解"。这是理解整条路线一的钥匙——凸性是为梯度服务的,不是为物理服务的(物理保真度反而因松弛略有损失,这个代价 §4.6 会量化)。
反面:直接对非凸 LCP 求梯度会怎样¶
设想跳过凸松弛,直接对 Stewart-Trinkle 的非凸 LCP 求解然后用 IFT。会遇到三重困难:
- 多解导致梯度不唯一:非凸 LCP 可能有多个解(例如 Painlevé 悖论场景),求解器收敛到哪个解依赖初值。对不同解做 IFT 得到不同梯度,梯度本身失去良定义性。
- 互补条件的 IFT 退化频繁:LCP 解的激活集(哪些 \(\lambda_n=0\)、哪些 \(\phi=0\))频繁切换,每次切换都是 §4.1 第三层不连续,IFT 在切换面失效,梯度只能取 B-subdifferential 某一支。
- 求解器本身可能失败:非凸 LCP 的求解(Lemke 算法等)在退化配置下可能不收敛或返回 ray solution,连 forward pass 都不稳定,遑论 backward。
凸松弛把这三个问题一并缓解:唯一解、求解器必收敛、强正则区域更大。这就是为什么严肃的可微仿真器几乎都建立在凸松弛之上——非凸 LCP 在工程上太脆弱。
历史:Anitescu 凸松弛与它的后代¶
凸松弛接触的脉络清晰:
- Anitescu 2006(Math. Program.,凸松弛奠基):Anitescu 在《Optimization-based simulation of nonsmooth rigid multibody dynamics》中提出,把接触时步问题松弛为一个**严格凸二次规划(strictly convex QP),并证明:固定时步推进、每步解一个严格凸 QP,其解序列在时步 \(h\to0\) 时**收敛到测度微分包含(MDI)的解。这是关键——凸松弛不是随意近似,而是有收敛保证的近似。代价是引入了一个微小的"边界层滑移"(boundary-layer slip,物体接触时有极小的非物理切向漂移),随 \(h\to0\) 消失。
- Todorov 2014(MuJoCo 的凸接触):MuJoCo 的接触模型是 Anitescu 思想的变体——用凸优化求解带正则化的接触,换来可靠的 forward simulation。这是 MuJoCo 能稳定跑 contact-rich 仿真的根本原因。
- Castro et al. 2022(Drake SAP):《An Unconstrained Convex Formulation of Compliant Contact》把 Anitescu 2006 与 Todorov 2014 推广到**柔性接触(compliant contact)+ 正则化摩擦**,给出 SAP(Semi-Analytic Primal)求解器,在原始坐标(primal coordinates)下求解,有理论与实践双重收敛保证("求解器总会成功")。SAP 是 Drake 的首选离散求解器。
- Howell et al. 2022(Dojo)/ Werling et al. 2021(Nimble):把凸松弛 + IFT 推到**可微**——Dojo 用原始-对偶内点法求解带二阶锥的 NCP,再对内点法的最优性系统应用 IFT 得到光滑梯度;Nimble 给 boxed LCP 的解析梯度。这是凸松弛与可微性的合流。
这条历史线的暗逻辑是:Anitescu 把接触变凸(为了可解)→ 后人发现凸性恰好也让接触可微(为了求梯度)。可解性与可微性在凸松弛里是同一件事的两面——这是路线一最优美的地方。
理论 · 凸松弛的标准形:从互补到凸 QP¶
我们给出 Anitescu 凸松弛的核心形式。把切向冲量 \(\lambda_t\) 用对偶变量消去后,单步接触可写成一个关于下一步速度 \(v_{k+1}\) 的**凸 QP**(这里给出无摩擦版以突出结构,含摩擦版只是把约束集换成二阶锥):
其中 \(v_k^{\mathrm{free}}=v_k + M^{-1}h(Bu_k-C)\) 是"无接触时的自由速度"。这个 QP 的**物理含义**极其漂亮:接触后的速度,是离自由速度(动量守恒预测)最近、且满足非穿透约束的那个速度——投影到非穿透可行集上的最小动量改变。这正是 Gauss 最小拘束原理(principle of least constraint)的离散化身。
理论-工程桥接:这个"投影"解释直接告诉工程师该怎么调求解器——非穿透约束 \(J_n v+\phi/h\ge0\) 中的 \(\phi/h\) 是一个"稳定化项"(Baumgarte-like stabilization),\(h\) 越小,约束越硬(越接近真正的非穿透),但 QP 的条件数越差、越难解。这就是为什么 contact-rich 仿真里时步选取是精度与数值稳定的直接权衡——不是经验玄学,而是这个 QP 条件数的直接体现。
写出 KKT 系统。 引入拉格朗日乘子 \(\lambda\ge0\)(即法向冲量 \(\lambda_n\))对应不等式约束。该 QP 的 KKT 最优性条件为:
这组条件就是 §4.2 里待微分的 \(F(z,\theta)=0\) 的接触实例。这里解变量 \(z=(v,\lambda)\),参数 \(\theta=(v_k,u_k,\phi_{k+1},M,\dots)\)(一切外部输入)。
理论 · 对 KKT 系统求 IFT:OptNet 式雅可比¶
现在把 §4.2 的 IFT 机械地套到这组 KKT 上。这正是 Amos-Kolter 2017(OptNet)做的事,我们重走一遍推导,每步说明依据。
Step 1:把互补条件改写为可微残差。 互补 \(\lambda_i g_i=0\)(记 \(g=J_n v+\phi/h\ge0\) 为约束余量)本身在 \(\lambda_i=g_i=0\) 处不光滑。但在**严格互补**(每个约束要么严格激活 \(g_i=0,\lambda_i>0\),要么严格不激活 \(g_i>0,\lambda_i=0\))的解处,激活集固定,互补条件分裂为:激活约束 \(g_i=0\)(等式),非激活约束 \(\lambda_i=0\)(等式)。于是 KKT 在解的邻域内变成一组**光滑等式**——这正是 §4.2 练习 4.2.3 的结论,也是 IFT 适用的前提。
Step 2:对 KKT 等式系统全微分。 设激活集为 \(\mathcal A\),只保留激活约束 \(J_n^{\mathcal A}\)。KKT 等式为:
对所有变量全微分(用 \(\mathrm d\) 表示微分),把外部参数的扰动 \(\mathrm d\theta\) 收到右端:
Step 3:解出灵敏度。 这个 KKT 矩阵 \(K\) 是**对称鞍点矩阵(symmetric saddle-point / KKT matrix)。当 \(M\succ0\)(质量矩阵总正定)且 \(J_n^{\mathcal A}\) 行满秩(LICQ,约束梯度线性无关)时,\(K\) **非奇异(这是练习 4.2.3 要证的)。于是:
这就是接触解对任意输入参数的**解析雅可比**。它有几个值得反复咀嚼的性质:
- 结构稀疏:\(K\) 是分块鞍点矩阵,可用 Schur 补高效求解(消去 \(\mathrm d v\) 得到只关于 \(\mathrm d\lambda\) 的小系统),与求解 forward QP 共用同一个分解(LDL\(^\top\)),所以 backward 几乎免费。
- 激活集依赖:\(K\) 只含激活约束 \(J_n^{\mathcal A}\)。激活集一变(接触建立/断开),\(K\) 的维度就变,雅可比跳变——这就是 §4.1 第三层不连续在梯度上的精确显现。这告诉我们:解析梯度是**分片光滑(piecewise smooth)**的,在每个激活集不变的区域内光滑,跨区域跳变。
- 与 Schur 补的物理含义:消去 \(\mathrm d v\) 后,关于 \(\mathrm d\lambda\) 的 Schur 补是 \(J_n^{\mathcal A}M^{-1}(J_n^{\mathcal A})^\top\)——这正是接触空间的**Delassus 算子(Delassus operator)**!它衡量"在接触方向上系统有多'软'"。Delassus 算子病态(某些接触方向耦合强、质量比悬殊)时,KKT 矩阵条件数差,梯度数值不稳——这是 §4.7 梯度病态的一个具体来源。
本质洞察:OptNet 式梯度的全部信息都浓缩在 KKT 矩阵 \(K\) 里。\(K\) 的**非奇异性**决定梯度**是否存在**(IFT 适用性),\(K\) 的**条件数**决定梯度**是否数值可靠**(病态与否),\(K\) 的**激活集结构**决定梯度**在哪里跳变**(分片光滑的边界)。理解接触梯度,本质上就是理解这个鞍点矩阵的三重性质。把 \(K\) 看懂,整条路线一就通了。
理论 · 一个手算到底的例子:单接触灵敏度¶
抽象推导讲完,我们用一个能手算到底的最小例子把 \(K^{-1}\) 算出来,让"分片光滑"和"Delassus 算子"从符号变成数字。
设置:1-DOF 竖直运动的点质量 \(m\),地面在 \(q=0\)。广义质量 \(M=m\)(标量),法向雅可比 \(J_n=1\)(竖直方向,向上为正)。时步 \(h\),自由速度 \(v^{\mathrm{free}}=v_k - hg\)(重力作用后的速度),gap \(\phi=q_k\)。接触凸 QP(§4.3 标准形)退化为标量问题:
情形 A(接触激活,\(q_k=0\) 或自由速度会穿透):约束取等 \(v+\phi/h=0\),即 \(v_{k+1}=-\phi/h\)。KKT 矩阵与其逆:
(验证:\(\det K = 0\cdot 0-(-1)(1)=1\ne0\),非奇异,符合 \(m>0\)、\(J_n=1\) 行满秩。)法向冲量 \(\lambda = m(v^{\mathrm{free}}-v_{k+1}) = m(v^{\mathrm{free}}+\phi/h)\)。求 \(\lambda\) 对 \(\phi\) 的灵敏度:\(\partial\lambda/\partial\phi = m/h\)。物理含义:间隙约束收紧(\(\phi\) 减小 \(\Delta\)),为阻止穿透需要的冲量增大 \(\frac{m}{h}\Delta\)——质量越大、时步越小,所需冲量越大。注意这里的 Delassus 算子是标量 \(J_nM^{-1}J_n^\top = 1/m\),其逆 \(m\) 恰好出现在 \(K^{-1}\) 的 \((2,2)\) 元和 \(\partial\lambda\) 表达式里,印证了"Schur 补 = Delassus 算子"。
情形 B(接触不激活,\(\phi>0\) 且自由速度不穿透):约束松弛,\(\lambda=0\),\(v_{k+1}=v^{\mathrm{free}}\)。此时 \(\partial v_{k+1}/\partial\phi=0\)(间隙变化不影响自由飞行),\(\partial\lambda/\partial\phi=0\)。
把两情形对照:\(\partial v_{k+1}/\partial\phi\) 在情形 A 是 \(-1/h\)、在情形 B 是 \(0\)——两支不相等,正是 §4.1 第三层激活集切换的分片光滑! 在 \(\phi=0\) 的切换点,左导数(情形 B 侧)为 0、右导数(情形 A 侧)为 \(-1/h\),二者的凸包 \([-1/h,0]\) 就是 Clarke 广义雅可比。这把 §4.1 抽象的"B-subdifferential 某一支"变成了具体的两个数。
理论-工程桥接:这个手算例子告诉调参的人一件实在事——情形 A 的灵敏度 \(\partial\lambda/\partial\phi=m/h\) 随 \(h\to0\) 发散。这就是为什么硬接触(小 \(h\))的梯度尖锐、§4.7 chaos 严重的**最小可复现根源**:不是什么玄学,就是这个 \(1/h\)。把 \(h\) 调大梯度变温和但仿真变粗,把 \(h\) 调小仿真变准但梯度变尖——§4.4 的 bias-Lipschitz 权衡在这个标量例子里一目了然。建议读者亲手把 §4.4 的 compliant 软化(有限 \(k\))也代进这个例子,对比软化如何把 \(1/h\) 的尖锐换成 \(1/k\) 标度的温和(练习 4.4.3 的定量版)。
质量比如何让 Delassus 算子病态。把例子扩到两接触体(质量 \(m_1,m_2\)),接触空间的 Delassus 算子含有效质量 \(m_{\mathrm{eff}}=\big(\tfrac1{m_1}+\tfrac1{m_2}\big)^{-1}\)(约化质量)。当质量悬殊(如机械臂 \(m_1=100\) kg 推一个 \(m_2=0.01\) kg 的小物,质量比 \(10^4\)):
- 不同接触方向的有效质量差异达质量比量级(\(\sim10^4\))。
- KKT 矩阵 \(K\) 的条件数 \(\sim\) 质量比 \(\sim10^4\)——严重病态。
- 灵敏度 \(K^{-1}\) 把这个病态放大到梯度里:某些方向的梯度被放大 \(10^4\) 倍,淹没其他方向。
这就是 §4.3 说"质量比悬殊导致梯度数值不稳"的具体数字。它解释了一个常见现象——重物推轻物(或抓极轻物体)的可微仿真梯度特别难用:不是接触模型的错,是约化质量的悬殊让 Delassus 算子病态。药方:要么正则化 \(K\)(加小对角项改善条件数,代价是引入 bias),要么避免极端质量比的建模(如把极轻物体当无质量约束处理)。注意——这个病态**与时步 \(h\)、迭代次数都无关**(§4.3 第三个陷阱),它纯由质量几何决定,是接触配置的内禀属性。
理论 · NCP 与内点法:Dojo 如何让"硬"接触给出"软"梯度¶
OptNet 处理的是 QP(多面体约束)。但真实摩擦锥是**二阶锥**,且 Anitescu 松弛会损失一点物理保真。Dojo(Howell 2022)走得更精细:它保留**非线性互补问题(Nonlinear Complementarity Problem, NCP)+ 二阶锥约束**的原始形式(不做多面体近似),用**原始-对偶内点法(primal-dual interior-point method, IPM)**求解,再对内点法的最优性系统做 IFT。这里有一个极其精巧的设计,值得专门讲。
内点法如何天然光滑化互补:内点法不直接解 \(\lambda_i g_i=0\)(硬互补),而是解一个**松弛的中心路径条件** \(\lambda_i g_i=\kappa\),其中 \(\kappa>0\) 是 barrier 参数(中心化参数)。求解过程中 \(\kappa\) 逐步减小到接近 0。关键在于——
本质洞察(Dojo 的核心技巧):如果让 \(\kappa\) 不完全降到 0,而是停在一个小正值 \(\kappa_{\min}\),那么互补条件 \(\lambda_i g_i=\kappa_{\min}\) 就是一组**光滑等式**(双曲线 \(\lambda g=\kappa\) 处处可微),整个 NCP 的最优性系统变成光滑的 \(F(z,\theta;\kappa_{\min})=0\),IFT 直接适用,给出**处处光滑的梯度**——即使在激活集切换面上!这就是 Dojo 论文标题里"smooth gradients through contact"的数学来源:中心路径参数 \(\kappa\) 扮演了一个内生的光滑化旋钮,把第一、三层不连续一并抹平,而梯度精度(bias)由 \(\kappa_{\min}\) 控制。 \(\kappa\to0\) 时梯度趋于真实(但越来越像分片光滑、切换面附近越尖),\(\kappa\) 较大时梯度光滑但有偏。
这是一个深刻的统一:内点法的 barrier 参数同时是 forward 求解的工具(中心化保证收敛)和 backward 光滑化的旋钮(控制梯度 bias-smoothness 权衡)。Dojo 把 forward 的数值稳定性和 backward 的梯度可用性用同一个 \(\kappa\) 统一起来。
类比(标注边界):Dojo 的 \(\kappa\) 平滑互补,**像**统计物理里用温度 \(T\) 平滑阶跃——\(\arg\max\)(硬选择)被 softmax(温度 \(T\) 控制的软选择)替代,\(T\to0\) 恢复硬选择。相似之处在于"用一个连续参数把不可微的硬约束/硬选择软化,参数趋零时恢复原问题"。**不像**之处:softmax 的温度是为了概率解释,而 \(\kappa\) 是内点法本就需要的中心化参数——它**恰好**兼任了光滑化角色,是"免费搭车"而非额外引入。不要把 \(\kappa\) 理解成"为了可微而硬加的光滑项"——它是求解器内生的。
把 \(\kappa\) 光滑化算到 1D 弹球上。回到 §4.3 手算例子的接触情形。硬互补 \(0\le\lambda\perp g\ge0\)(\(g\) 为约束余量)在 \(\lambda=g=0\) 处不可微。内点法换成中心路径 \(\lambda g=\kappa\),解出 \(\lambda\) 作为 \(g\) 的函数:
注意——这恰好是 §4.4 IPC barrier 力 \(\hat\kappa/\phi\) 的形态(\(g\) 类比 \(\phi\))!求灵敏度 \(\partial\lambda/\partial g=-\kappa/g^2\),处处有限(只要 \(g>0\),由 \(\kappa>0\) 保证 \(g\) 不触零)。对比硬互补在切换点 \(g=0\) 的不可微(左右导数分别是 \(0\) 和无穷),\(\kappa>0\) 把这个尖锐拐点**磨圆**成一条光滑双曲线——这就是"\(\kappa\) 把切换面抹平"的具体数字形态。
\(\kappa\to0\) 的极限行为:随 \(\kappa\to0\),双曲线 \(\lambda=\kappa/g\) 越来越贴近"\(g>0\) 时 \(\lambda=0\)、\(g=0\) 时 \(\lambda\) 任意"的硬互补直角——光滑化逐渐退回硬接触。灵敏度 \(-\kappa/g^2\) 在 \(g\) 小处随 \(\kappa\to0\) 怎么变?固定一个小 \(g\),\(\partial\lambda/\partial g\to0\)(更平);但解本身 \(\lambda=\kappa/g\to0\),整体逼近硬解。**这个极限的微妙之处**正是 §4.6 三角的体现:\(\kappa\) 小则 bias 小(贴近硬接触),但切换面附近双曲线弯曲更剧烈(局部 Lipschitz 大),数值更难。
阶段小结:到这里我们把 Dojo 的"\(\kappa\) 光滑化"从抽象洞察落到了 \(\lambda=\kappa/g\) 这条具体双曲线,看清它如何磨圆切换面、如何随 \(\kappa\to0\) 退回硬接触、又如何与 §4.4 的 IPC barrier 同形。接下来处理含摩擦的情形——把这套 \(\kappa\) 光滑化推广到二阶锥。
理论 · 含摩擦的完整梯度:切向锥的处理¶
无摩擦版给出了主干结构。含摩擦时,约束集从"法向半空间"变成"二阶锥 \(\|\lambda_t\|\le\mu\lambda_n\)"。处理方式有两条:
- 多面体近似(LCP 路线,Nimble/boxed LCP):把锥近似成 box 或多面体,约束变成线性不等式,KKT 矩阵仍是上面的鞍点结构,只是激活约束多了摩擦边界。优点是实现简单(复用 QP 求解器),缺点是各向异性 bias + 激活集切换更频繁(摩擦的 stick/slip 切换叠加法向接触切换,§4.1 第二、三层同时作用)。
- 二阶锥 + 内点法(NCP 路线,Dojo):保留锥约束,用 SOC 内点法。锥约束的"激活"是连续的(在锥边界上滑动 vs 锥内黏着),内点法的 \(\kappa\) 把 stick-slip 切换也光滑化。这是 Dojo 对摩擦处理更优的原因——它把 §4.1 第二层 stick-slip 也纳入 \(\kappa\) 光滑化的统一框架。
对比性思维(不是 X 而是 Y):很多人以为"LCP 路线和 NCP 路线只是求解器实现不同,梯度本质一样"。不是——LCP 路线的梯度是**分片光滑**的(多面体激活集切换处硬跳变),NCP+内点法路线的梯度是**全局光滑**的(\(\kappa\) 抹平所有切换)。前者更接近"硬世界"真值但有跳变,后者更平滑但有 \(\kappa\) 引入的系统 bias。选哪条取决于下游用梯度做什么——做轨迹优化(需要平滑梯度收敛)偏好 NCP,做系统辨识(需要无偏估计参数)偏好小 \(\kappa\) 的 LCP。
理论 · Anitescu 凸松弛的代价:boundary-layer slip¶
凸松弛不是免费的——§4.3 多次提到它引入"非物理伪影",这里把最重要的一个——boundary-layer slip(边界层滑移)——讲清楚,因为它是理解"凸松弛保真损失"的关键,也是 §4.6 三角"保真顶点"在路线一上的具体体现。
Anitescu 凸松弛为了把摩擦写成关于 \(v_{k+1}\) 的**凸**约束,做了一个微妙的变换:它把摩擦约束从"力在锥内"(标准库仑)改写成一个**关于下一步速度的凸不等式**。这个改写在数学上让问题变凸(可解、可微),但在物理上引入一个副作用——两个本应"黏住"(相对静止)的接触面,会有一个极小的相对滑移速度,大小正比于法向力与时步:
物理上两物体接触并静止时不该有任何相对滑动,但凸松弛模型里它们会以这个微小速度"漂移"。关键:这个 slip 随时步 \(h\to0\) 线性消失——这正是 Anitescu 2006 收敛定理的内容(凸 QP 解序列在 \(h\to0\) 时收敛到真正的 MDI 解,slip 是 \(O(h)\) 的逼近误差)。
本质洞察:boundary-layer slip 是"为可微/可解付的保真税"。凸松弛把非凸库仑摩擦换成凸约束,换来唯一解 + 求解器收敛 + IFT 可用(§4.3 核心红利),代价就是这个 \(O(h)\) 的非物理滑移。它是 §4.6 三角"保真顶点"被牺牲的精确形态——你想要可微(强正则)+ 可解(凸),就得接受接触面有微小漂移。这也解释了为什么 §4.3 反复强调"凸松弛不为保真、为梯度":保真上它确实输给了硬库仑(有 slip),但赢在可微与可解。SAP(Castro 2022)通过把这个 slip 重新解释为"真实材料的微小柔性变形",让这个税从"非物理伪影"变成"有物理意义的柔度"——这是它的巧思(§4.4 已提及),本质是给 boundary-layer slip 找了个物理解释。
对接 §4.7:boundary-layer slip 的存在意味着,用凸松弛梯度训练的策略,可能学到利用这个微小滑移的行为;部署到真实硬接触(无 slip)时这部分行为失效——这是 §4.7 gradient bias 在路线一上的一个具体来源。减小 \(h\) 能压 slip 但增大 §4.3 手算例子里的 \(1/h\) 梯度尖锐性——又一次 bias-vs-病态的权衡。
理论-工程桥接 · 解析梯度的成本账¶
把这条路线的工程成本算清楚,才知道它在什么场景值得用:
| 环节 | 成本 | 说明 |
|---|---|---|
| forward 求解 | \(O(N_{\mathrm{iter}}\cdot n^3)\)(朴素)/ 利用稀疏更低 | 内点法迭代 \(N_{\mathrm{iter}}\) 次,每次解一个 \(n\times n\) 线性系统 |
| backward(IFT) | \(O(n^3)\) 一次(与 \(N_{\mathrm{iter}}\) 无关) | 只在收敛点解一次 KKT 系统,且复用 forward 的矩阵分解 |
| 内存 | \(O(n^2)\)(只存收敛点的 \(K\)) | 与展开式微分的 \(O(N_{\mathrm{iter}}\cdot n)\) 相比大幅降低 |
关键红利(呼应 §4.2):backward 成本与求解器迭代次数解耦。这意味着你可以用一个高精度(多迭代)内点法做 forward,backward 依然便宜——精度与可微性的成本被 IFT 彻底解耦。这是路线一相对展开式微分的决定性优势。
代一组数字感受差距。设接触变量维度 \(n=50\)、rollout 长度 \(T=100\)、每步求解器迭代 \(N_{\mathrm{iter}}=30\):
- 展开式微分(unrolling):计算图深度 \(T\times N_{\mathrm{iter}}=100\times30=3000\) 层;需存 3000 步激活值,显存 \(\sim O(3000\times n)=O(1.5\times10^5)\) 单位;且 3000 次雅可比连乘,谱半径稍大于 1 即爆炸。
- IFT 隐函数微分:计算图深度 \(=T=100\) 层(每步只在收敛点做一次 IFT);显存 \(\sim O(T\times n^2)=O(2.5\times10^5)\) 但**与 \(N_{\mathrm{iter}}\) 无关**;每步 backward 只解一次 \(50\times50\) 线性系统(复用 forward 分解则近乎免费)。
关键对比不在绝对数字,而在标度:把求解器迭代从 30 加到 300(更高精度 forward),展开式微分的深度涨 10 倍到 30000(显存爆 + 连乘灾难),IFT 的 backward 成本**纹丝不动**(仍是收敛点一次线性求解)。这就是"精度与可微性解耦"的工程含义——你可以为 forward 任意加精度而不付 backward 的代价,这是 contact-rich 长 horizon 任务唯一可行的路径。
⚠️ 常见陷阱¶
💡 概念误区:以为凸松弛是为了让接触"更逼真"
新手想法:"Anitescu 凸松弛肯定是更精确的接触模型,所以大家都用。" 实际上:凸松弛在物理保真上**略有损失**(引入 boundary-layer slip、各向异性等非物理伪影,随 \(h\to0\) 消失)。它的价值不在保真,而在**可解性(凸优化必收敛)与可微性(强正则 → IFT 适用)。用凸松弛是用一点物理精度换数值与梯度的良好性质。 为什么重要:如果你的目标是高保真物理(如精密装配仿真),可能需要更硬的接触模型并接受其不可微/难解;如果目标是策略学习/轨迹优化,凸松弛的可微性远比那点保真损失重要。**先想清楚要保真还是要梯度,再选模型。 延伸思考:SAP 通过 compliant(柔性)建模把"松弛"赋予物理意义(真实材料确实有柔度),从而让凸松弛同时改善保真——这是 Castro 2022 的巧思。
🧠 思维陷阱:把 OptNet 梯度当作处处光滑
新手想法:"KKT 系统的 IFT 给出解析雅可比,那梯度应该处处光滑可用。" 现象/后果:在 contact-rich rollout 里,每次接触建立/断开(激活集切换)梯度都跳变一次,基于该梯度的优化在切换面附近震荡,loss 曲线呈锯齿状。 根本原因:OptNet/LCP 路线的梯度是**分片光滑**——KKT 矩阵 \(K\) 的维度随激活集变化,在切换面两侧由不同的 \(K\) 给出不同雅可比。这是 §4.1 第三层不连续的直接显现。 正确做法:要全局光滑梯度,用内点法保留小 barrier \(\kappa\)(Dojo 路线)把切换面抹平;或用 §4.5 随机光滑在邻域采样平均。分片光滑 ≠ 处处光滑,这个区分决定了梯度能否直接喂给一阶优化器。
💡 概念误区:误以为 Delassus 算子病态可以靠加迭代次数解决
新手想法:"KKT 矩阵条件数差导致梯度不稳,多迭代几次求解器就好了。" 实际上:迭代次数影响的是 forward 解的**精度**,而梯度的数值稳定性由收敛点 \(K\) 的**条件数**决定,条件数差是接触几何(质量比悬殊、接触方向强耦合)的内禀属性,与迭代次数无关。再多迭代也不会改善 \(K^{-1}\) 的放大效应。 为什么重要:诊断梯度问题要分清"forward 没解准"(加迭代/降容差)和"backward 矩阵病态"(需正则化 \(K\) 或改接触参数/质量比),二者药方完全不同。这与 §4.2"对解微分 vs 对求解器微分"是同一类认知错误的不同面孔。
练习¶
练习 4.3.1(推导题,草稿纸完成):对无摩擦单接触凸 QP \(\min_v\tfrac12(v-v^{\mathrm{free}})^\top M(v-v^{\mathrm{free}})\) s.t. \(J_n v+\phi/h\ge0\),假设约束激活(\(J_n v+\phi/h=0\))。写出其 KKT 矩阵 \(K\),用 Schur 补消去 \(\mathrm dv\),推出法向冲量灵敏度 \(\partial\lambda/\partial\phi\) 的表达式,并验证其中出现了 Delassus 算子 \(J_n M^{-1}J_n^\top\) 的逆。解释这个表达式的物理含义:"间隙变小一点,接触力增大多少"。
练习 4.3.2(开放思考题):Dojo 用 barrier 参数 \(\kappa\) 同时做 forward 中心化和 backward 光滑化。如果你把 \(\kappa\) 设得很小(接近硬接触),forward 解更准但 backward 梯度在切换面附近会怎样?如果 \(\kappa\) 设得较大,梯度光滑但 bias 如何?请定性画出"\(\kappa\) vs 梯度 bias"和"\(\kappa\) vs 梯度 Lipschitz 常数(光滑度)"两条曲线,并指出二者是否能同时优化。这个权衡和 §4.4 compliant 接触的刚度 \(k\)、§4.1 练习 4.1.2 的 \(\epsilon\) 是不是同一类权衡?
练习 4.3.3(证明题):证明:Stewart-Trinkle 用多面体近似摩擦锥后,互补问题的系统矩阵 \(M_{\mathrm{LCP}}\) 一般**非对称**(提示:法向力通过 \(\mu\lambda_n\) 进入摩擦约束的上界,而摩擦力不对称地反作用于法向方程)。再说明:Anitescu 凸松弛通过把摩擦约束写成关于 \(v_{k+1}\) 的凸约束,使整个问题变成对称正定 QP,从而恢复唯一解。这道题解释了"为什么 LCP 非凸而凸松弛凸"的代数根源。
§4.4 路线二·解析光滑:compliant 接触与 log-barrier ⭐⭐⭐¶
本节解决的问题:路线一(§4.3)保留硬接触,靠凸松弛 + IFT 求梯度,梯度是分片光滑的。路线二换一个思路——从一开始就把"硬"接触替换成一个处处光滑的物理模型,让动力学方程本身就是 \(C^\infty\) 的,于是普通 AD 直接给出真梯度,根本不需要处理不连续。本节讲两种主流的解析光滑:物理动机的 compliant(柔性)接触,和优化动机的 log-barrier(对数障碍)。它们是 Drake、Brax 软接触、IPC(Incremental Potential Contact)的根基。
动机:能不能让接触从源头就光滑¶
回顾 §4.1 的三层不连续,它们的共同根源是"硬接触"假设——接触刚度无穷大、力是 Dirac 测度、约束是硬不等式。一个釜底抽薪的想法是:如果接触本来就不是无穷硬呢? 真实世界里没有绝对刚体——任何材料受力都会形变,接触力随穿透深度连续增长。如果在模型里保留这一点点物理柔度(compliance),那么:
- 法向力变成穿透深度的**连续函数**(不再是 Dirac 测度)→ 第一层不连续消失;
- gap 函数过零变成**光滑过渡**(力从 0 连续增长)→ 第三层激活集切换被抹平成软过渡;
- 摩擦也用正则化(regularized friction)变成速度的光滑函数 → 第二层 stick-slip 被光滑。
三层不连续被同一个物理假设(有限刚度)一并化解。代价是引入了一个**非物理的小柔度**——但既然真实材料确实有柔度,这个"代价"反而可能提升保真(呼应 §4.3 SAP 的巧思)。
本质洞察:解析光滑路线把"不可微"重新归因为"刚体理想化的产物,而非物理本质"。硬接触是一个**数学便利的极限**(\(k\to\infty\)),真实物理在这个极限之外(有限 \(k\))。在有限 \(k\) 处,动力学本就是光滑的——不可微是我们自己取极限取出来的,把极限退回去,可微性自然恢复。这与 §4.3 凸松弛的哲学不同:凸松弛保留硬接触、在求解层做手脚求梯度;解析光滑直接换一个软的物理模型、让光滑性从物理层涌现。两条路线一个"硬模型软求梯度",一个"软模型自然可微"。
反面:硬接触极限下 AD 给出什么¶
对比一下:如果坚持硬接触(\(k=\infty\))做 AD,会得到 §4.1 描述的病态——梯度时 0 时爆、激活集切换处跳变。而如果用有限 \(k\) 的 compliant 接触,AD 给出的是一个处处有限、连续变化的梯度。但这里有个微妙的陷阱:有限 \(k\) 的梯度是"软世界"的真梯度,它与"硬世界"的真梯度有系统性差异(bias)。这个 bias 随 \(k\to\infty\) 趋于 0,但梯度的 Lipschitz 常数(变化剧烈程度)随 \(k\to\infty\) 趋于无穷——光滑度与保真度此消彼长。这正是解析光滑路线的中心权衡,下面量化。
历史:从 penalty 法到 IPC¶
解析光滑接触的脉络:
- Penalty / spring-damper(最古老):Degrave et al. 2019(arXiv 1611.01652)的第一个 DL 时代可微物理引擎就用弹簧-阻尼软接触——力 \(F_n=k\delta+c\dot\delta\)(\(\delta\) 穿透深度)。简单、处处可微,但刚度大时数值不稳(需极小时步),刚度小时穿透明显。Brax(Google 2021)的 spring/positional 后端延续这一路线,换 GPU 大规模并行。
- Hertz 接触律(物理更准):\(F_n=k\delta_+^{3/2}\)(§4.1 已出现),来自弹性力学的赫兹接触理论,比线性弹簧更符合真实材料。
- Todorov MuJoCo soft constraints(2014)+ Drake compliant(Castro 2022):把 compliance 与凸优化结合,正则化摩擦让 stick-slip 光滑,既软又可解又可微。
- IPC / Incremental Potential Contact(Li et al. SIGGRAPH 2020):图形学路线,用 log-barrier 势能 \(-\hat\kappa\log(\phi)\) 保证**绝对无穿透**(barrier 在 \(\phi\to0\) 时趋于 \(+\infty\),把物体"推开"),同时处处光滑可微。IPC 在可变形体仿真里成为高保真无穿透的标杆。这条线把"光滑化"从物理柔度转向**优化障碍函数**——殊途同归地得到光滑动力学。
理论 · compliant 接触:把 Dirac 摊成有限力¶
核心构造:用一个光滑的力-穿透关系替代硬互补。最常见的正则化形式:
其中 \(\phi\) 是 gap(正为分离、负为穿透),\(k\) 是刚度,\(\epsilon\) 是光滑尺度。当 \(\phi\gg\epsilon\)(远离接触),\(\lambda_n\to0\);当 \(\phi\ll-\epsilon\)(深穿透),\(\lambda_n\to k|\phi|/\epsilon\)(线性弹簧);过渡区宽度 \(\sim\epsilon\)。关键:这个函数处处 \(C^\infty\),AD 给出处处良定义的 \(\partial\lambda_n/\partial\phi\)。
把它代入动量方程,整个单步动力学变成一组光滑(隐式)方程 \(F(v_{k+1},\theta)=0\),IFT 或直接 AD 都能给梯度。注意这里 IFT 仍可用(§4.3 表格的第二行),\(F\) 是 compliant 动力学的隐式积分残差。
正则化摩擦:切向力用速度的光滑函数替代库仑的不连续:
当 \(\|v_t\|\gg\epsilon_t\) 恢复库仑滑动力,\(\|v_t\|\to0\) 时力光滑趋于 0(不再是 §4.1 第二层的方向跳变)。\(\epsilon_t\) 是滑移正则尺度——它把 stick(应该零速静止)近似成"极小速度的蠕变(creep)"。这正是练习 4.1.2 探讨的近似。
理论-工程桥接:compliant 接触的两个旋钮 \(k\)(刚度)和 \(\epsilon\)(光滑尺度)直接对应工程上两个可观测后果——\(k\) 控制**穿透量**(\(k\) 越大穿透越小、越像刚体),\(\epsilon\) 控制**梯度光滑度**(\(\epsilon\) 越大梯度越平滑但越偏)。Drake/MuJoCo 里调接触参数(stiffness、damping、
solref/solimp)本质上就是在调这两个旋钮。明白这一点,调参就从"试错"变成"在 bias-smoothness 平面上有方向地移动"。
线性弹簧 vs Hertz vs softplus:三种力律的可微性对比。compliant 接触有多种力-穿透律,它们的可微性(决定梯度质量)大不相同,值得对比:
- 线性弹簧 \(\lambda_n=k\,\delta_+\)(\(\delta_+=\max(0,-\phi)\) 穿透量):力对穿透的导数 \(\partial\lambda_n/\partial\delta=k\)(恒定)。但在 \(\phi=0\)(接触起始)处只有 \(C^0\)(\(\max\) 的拐点导数从 0 跳到 \(k\))——力连续但力的导数不连续,梯度在接触起始处有一个跳变。
- Hertz 接触 \(\lambda_n=k\,\delta_+^{3/2}\)(弹性力学,§4.1):导数 \(\partial\lambda_n/\partial\delta=\tfrac32 k\delta_+^{1/2}\),在 \(\delta=0\) 处导数为 0(连续!)——比线性弹簧光滑一阶(\(C^1\))。物理上更准(赫兹理论),可微性也更好。但二阶导 \(\sim\delta^{-1/2}\) 在 \(\delta\to0\) 发散,Hessian 仍有问题。
- softplus \(\lambda_n=k\epsilon\log(1+e^{-\phi/\epsilon})\)(练习 4.4.1):处处 \(C^\infty\),是三者中最光滑的——接触起始处力和所有阶导数都连续。代价是它**永远不严格为零**(\(\phi>0\) 时仍有指数小的力,非物理的"超距作用"),且引入 \(\epsilon\) 的 bias。
本质洞察:三种力律体现了"物理保真"与"可微光滑度"的微妙交织——线性弹簧物理糙(恒定刚度不符真实材料)且只 \(C^0\);Hertz 物理准(弹性理论)且 \(C^1\);softplus 最光滑(\(C^\infty\))但有非物理超距力。没有一个在"保真 + 光滑"上全胜——这是 §4.6 三角在"力律选择"这个微观层面的又一次显现。对梯度敏感的任务(要 \(C^1\) 以上)应选 Hertz 或 softplus 而非线性弹簧——一个常见的隐蔽 bug 是用线性弹簧
max(0,-phi)做可微接触,结果梯度在每次接触起始处跳变(§4.1 第三层的 compliant 版),训练不稳却找不到原因。换成 softplus(光滑 \(\max\))往往一举解决——这是从本节理论直接导出的实战处方。
理论 · log-barrier:用障碍函数保证无穿透且光滑¶
IPC 的思路不同——不建模柔度,而是给优化加一个**障碍势能(barrier potential)**强制 \(\phi>0\)(绝对无穿透):
其中 \(\hat d\) 是 barrier 激活距离,\(\hat\kappa\) 是 barrier 刚度。当 \(\phi\to0^+\),\(B\to+\infty\),梯度 \(\nabla B\to-\infty\),产生无穷大的排斥力,数学上保证 \(\phi\) 永不越过 0(无穿透是硬保证,不是软惩罚)。在 \(0<\phi<\hat d\) 区间内 \(B\) 处处光滑,所以接触力 \(\nabla B\) 处处可微。
与内点法 barrier 的统一:眼尖的读者会发现——IPC 的 log-barrier 和 §4.3 Dojo 内点法的中心路径 \(\lambda g=\kappa\) 是**同一个数学对象**!内点法解约束优化的标准手段就是 log-barrier \(-\kappa\log(g)\),其 KKT 条件正是 \(\lambda g=\kappa\)。
本质洞察:log-barrier 在两条路线里以不同面貌出现,但内核相同。在 §4.3(路线一)它是**求解器内生的中心化参数**,主业是保证内点法收敛、兼职光滑化梯度;在 §4.4(路线二)它是**显式加进动力学的势能项**,主业就是保证无穿透 + 光滑。同一个 \(-\kappa\log\phi\),在求解层叫"内点法 barrier",在模型层叫"IPC 势能"——这揭示了凸松弛 + IPM 路线与解析光滑 + barrier 路线在数学上的深层同构。 它们的差异只在"barrier 是临时的求解工具还是永久的物理模型"这个解释层面。这是本专题最值得品味的统一之一。
理论 · barrier 力与刚度的显式推导¶
把 log-barrier 的"力"和"等效刚度"算出来,才能看清它的可微性与数值行为。取简化 barrier \(B(\phi)=-\hat\kappa\log(\phi)\)(\(0<\phi<\hat d\)),它产生的**接触力**就是势能的负梯度:
这就是 IPC 的接触力——它随 \(\phi\to0^+\) 趋于 \(+\infty\),提供无穷大排斥(保证无穿透);随 \(\phi\) 增大而衰减。处处光滑(\(\phi>0\) 区间内 \(1/\phi\) 是 \(C^\infty\))。等效刚度(力对间隙的导数):
关键观察:等效刚度 \(\sim\hat\kappa/\phi^2\) 随接触变深(\(\phi\to0\))急剧增大——这是 barrier 的"自适应硬化":离接触越近越硬。对比 §4.4 线性弹簧 \(\lambda_n=k|\phi|\) 的**恒定**刚度 \(k\),barrier 的刚度是**位置依赖**的。这带来两个后果:(a) 数值上 barrier 系统在接触面附近 Hessian 病态(刚度 \(\sim1/\phi^2\) 爆),需要专门的 line search 保证 \(\phi\) 不越界;(b) 梯度 \(\partial\lambda_n/\partial\phi\) 在接触面附近极尖锐——这正是 §4.4 bias-Lipschitz 权衡在 barrier 上的显现,\(\hat d\)(激活距离)扮演 \(\epsilon\) 的角色。
本质洞察:barrier 的"自适应硬化"(刚度 \(\sim\hat\kappa/\phi^2\))是它和恒定刚度弹簧的本质区别。弹簧允许任意深穿透(力线性增长,总能被足够大的动量压穿),barrier 在接触面前**力发散**(永不穿透)。这个 \(1/\phi^2\) 的刚度爆炸,既是 barrier 无穿透保证的来源(好),也是它数值病态与梯度尖锐的来源(坏)——又一次印证"无穿透保证"不是免费的,它在 Hessian 病态上付了账。这解释了 IPC 为什么需要 CCD(连续碰撞检测)+ filtered line search 这套精密的数值机制:不是过度工程,而是驯服 \(1/\phi^2\) 刚度的必需品。
理论 · 量化中心权衡:bias vs Lipschitz 常数¶
把解析光滑的核心权衡写成定量命题(这是 §4.6 三角权衡的一个顶点的精确刻画)。设光滑参数为 \(\epsilon\)(compliant 的过渡宽度,或 barrier 的 \(\hat d\)):
- bias:光滑动力学 \(f_\epsilon\) 与硬动力学 \(f_0\) 之差。典型地 \(\|f_\epsilon - f_0\|=O(\epsilon)\)(一阶逼近),即光滑解相对硬解有 \(O(\epsilon)\) 的系统偏移。
- 梯度 Lipschitz 常数:\(\|\nabla f_\epsilon\|\) 的最大变化率 \(\sim O(1/\epsilon)\)。过渡区越窄,力在其中变化越剧烈,梯度的 Lipschitz 常数越大。
- 乘积守恒:bias \(\times\) Lipschitz \(\sim O(\epsilon)\cdot O(1/\epsilon)=O(1)\)——这个乘积不随 \(\epsilon\) 改善。你只能在"低 bias 高 Lipschitz(接近硬、梯度尖锐)"和"高 bias 低 Lipschitz(很软、梯度平滑)"之间移动,无法同时压低两者。
本质洞察:解析光滑的根本限制是一个**测不准式的权衡**——bias 与梯度尖锐度的乘积有下界。这不是工程实现不够好,而是光滑化的数学宿命:你想让梯度更平滑(小 Lipschitz),就必须把过渡区拉宽(大 \(\epsilon\)),从而引入更大 bias。"可微"很容易(任何 \(\epsilon>0\) 都可微),但"低 bias 且平滑的可微"在解析光滑框架内不可兼得——这正是 §4.5 随机光滑试图突破的瓶颈:随机光滑用方差换 bias,提供了一个不同的权衡维度。
为什么乘积守恒是 \(O(1)\) 而非可调。这一点值得再追一层,因为它决定了"调 \(\epsilon\) 到底能不能两全"。考虑光滑化 \(f_\epsilon\) 在过渡区的总变化——它必须从"无接触(力 0)"过渡到"接触(力 \(\lambda_0\))",这个**总跳变 \(\lambda_0\) 是物理给定的、与 \(\epsilon\) 无关**(它是硬接触的力,由质量、速度决定)。现在:
- 过渡区宽度 \(\sim\epsilon\)(\(\epsilon\) 的定义)。
- 力在过渡区内变化总量 \(=\lambda_0\)(物理固定)。
- 故过渡区内平均斜率(Lipschitz)\(\sim\lambda_0/\epsilon\)。
- bias \(\sim\)(过渡区宽度)\(\times\)(典型力)\(\sim\epsilon\cdot\lambda_0\)(光滑解与硬解在过渡区的面积差)。
两者相乘:bias \(\times\) Lipschitz \(\sim(\epsilon\lambda_0)\cdot(\lambda_0/\epsilon)=\lambda_0^2\)——\(\epsilon\) 被消掉了,乘积只剩物理量 \(\lambda_0^2\)。这就是守恒律的代数根源:\(\epsilon\) 在 bias 和 Lipschitz 里以相反幂次出现(\(\epsilon^{+1}\) vs \(\epsilon^{-1}\)),调它只是沿守恒双曲线滑动,动不了乘积。 要改变乘积,唯一办法是改变物理跳变 \(\lambda_0\)(如降低碰撞速度),而这超出了光滑化的范畴。这就是为什么说它是"光滑化的数学宿命"而非调参问题——守恒量 \(\lambda_0^2\) 由物理而非数值决定。
对比性思维:compliant vs barrier 的本质差异¶
两种解析光滑常被混为一谈,其实有本质区别:
| 维度 | compliant(柔性) | log-barrier(IPC) |
|---|---|---|
| 物理解释 | 真实材料柔度,有物理意义 | 纯优化构造,无物理对应 |
| 穿透 | 允许小穿透(\(\sim\lambda_n/k\)) | 绝对无穿透(硬保证) |
| 力的来源 | 本构关系(穿透 → 力) | 势能梯度(间隙 → 排斥) |
| 适用 | 机器人接触、操作 | 可变形体、高保真图形 |
| \(\epsilon\to0\) 行为 | 趋于硬接触,可能穿透 | 趋于硬接触,永不穿透 |
不是 X 而是 Y:IPC 的 log-barrier 不是"很硬的弹簧",而是"无穿透约束的光滑实现"。弹簧允许穿透(穿得越深力越大但有限),barrier 在接触面前力趋于无穷(永不穿透)。把 barrier 当成硬弹簧会误判它的数值行为——barrier 需要专门的步长控制(确保迭代中 \(\phi\) 不越界),弹簧不需要。
⚠️ 常见陷阱¶
💡 概念误区:以为 compliant 接触的梯度就是硬接触的梯度(只要 \(k\) 够大)
新手想法:"我把刚度 \(k\) 调得很大,软接触就无限逼近硬接触,梯度自然也逼近真梯度。" 实际上:\(k\) 越大,compliant 梯度的 bias 越小但 Lipschitz 常数越大(梯度越尖锐、对输入越敏感),在 BPTT 里更容易引发 §4.7 的爆炸。存在一个最优 \(k\) 平衡 bias 与数值稳定,而非"越大越好"。Parmar-Halm-Posa 2021(IROS, arXiv 2103.15406)系统性证明:接触刚度越高,训练/泛化/数据效率越差。 为什么重要:这是从"调参玄学"到"理解权衡"的关键认知。盲目调高刚度求"逼真梯度"会让训练发散。 延伸思考:能否让 \(k\) 在训练中从小到大退火(curriculum)?这正是一些工作(如 warm-start from soft to hard)的思路。
🧠 思维陷阱:把".backward() 给出有限梯度"等同于"梯度对硬接触任务有用"
新手想法:"软接触处处可微,梯度永远有限,那训练肯定没问题。" 现象/后果:训练在软仿真里收敛得很好,部署到真机(硬接触)却失效——策略学到的是"软世界"的最优解。 根本原因:compliant 梯度是软世界的真梯度,与硬世界真梯度有 \(O(\epsilon)\) bias。这个 bias 在 contact-rich 任务里可能改变最优策略的定性结构(如"轻推 vs 重推")。 正确做法:要么用小 \(\epsilon\) 接受梯度尖锐性(配短 horizon,§4.7);要么用 §4.5 随机光滑获得对硬世界的无偏估计;要么 sim-to-real 时显式补偿这个 bias。
💡 概念误区:log-barrier 和惩罚法(penalty)是一回事
新手想法:"barrier 和 penalty 都是往目标里加一项强制约束,没区别。" 实际上:penalty(如 \(\rho\max(0,-\phi)^2\))允许约束被违反(穿透),违反量随 \(\rho\) 减小;barrier(\(-\kappa\log\phi\))绝不允许越界(\(\phi\to0\) 时趋于 \(+\infty\))。penalty 是"软惩罚违反",barrier 是"硬阻止违反"。二者数值行为、可微性边界完全不同——penalty 在 \(\phi=0\) 处可能不光滑(\(\max\) 的拐点),barrier 在 \(\phi>0\) 处处光滑但在 \(\phi\le0\) 处**未定义**(需保证迭代不越界)。 为什么重要:用错会导致穿透(误用 penalty 求无穿透)或求解失败(barrier 越界变 NaN)。
练习¶
练习 4.4.1(推导题,草稿纸完成):取 compliant 法向力 \(\lambda_n(\phi)=k\,\mathrm{softplus}(-\phi/\epsilon)=k\epsilon\log(1+e^{-\phi/\epsilon})\)。计算 \(\partial\lambda_n/\partial\phi\),画出 \(\phi\) 从正到负时力与其导数的曲线。求过渡区(导数显著非零的区间)宽度关于 \(\epsilon\) 的标度,验证"过渡区宽 \(\sim\epsilon\)、最大斜率 \(\sim k/\epsilon\)"。由此论证 bias \(\times\) Lipschitz \(\sim O(1)\) 的守恒律。
练习 4.4.2(开放思考题):§4.3 Dojo 的内点法 barrier \(\kappa\) 与 §4.4 IPC 的 log-barrier 在数学上同构(都是 \(-\kappa\log\))。但 Dojo 把它当求解工具(解完就让 \(\kappa\) 减小),IPC 把它当物理模型(\(\hat d,\hat\kappa\) 固定)。请讨论:如果把 Dojo 的 \(\kappa\) 固定不减小,它在效果上是否就变成了 IPC 式的软接触模型?这两种用法对"梯度 bias"的影响有何异同?这个问题触及路线一与路线二的边界——在什么意义下它们其实是同一条路线的两个端点?
练习 4.4.3(证明题):考虑一维 compliant 接触 \(m\ddot q=-mg+\lambda_n(q)\),\(\lambda_n(q)=k\max(0,-q)\)(线性弹簧,\(q<0\) 为穿透)。证明:(a) 当 \(k\) 有限时,\(q^+(q_0)\)(反弹高度对初始高度)处处可微,写出其导数;(b) 当 \(k\to\infty\) 时,该导数的极限是否等于 §4.1 练习 4.1.1 中硬接触的 Clarke 广义雅可比的某一支?讨论"软接触梯度的硬极限"与"硬接触的次梯度"之间的关系——它们一致吗?在什么意义下一致?(提示:注意线性弹簧 \(\max\) 在 \(q=0\) 处只有 \(C^0\),不是 \(C^\infty\),与 softplus 不同。)
§4.5 路线三·随机光滑:用期望抹平不连续 ⭐⭐⭐⭐¶
本节解决的问题:路线一、二都在"动力学这个确定性函数"上做文章(凸松弛求解、或换光滑物理模型)。路线三跳出确定性框架——不修改动力学本身,而是对输入加随机扰动、对输出取期望。期望运算是一个天然的光滑算子:哪怕被平均的函数处处不连续,它的期望也可以是光滑的。本节讲随机光滑(randomized smoothing)如何召唤梯度,它与第六批采样型 MPC(MPPI/CEM)的 score-function 估计在数学上完全同源——这是本专题与采样优化最深的连接点。
动机:不连续函数的期望可以光滑¶
先看一个一维直觉。Heaviside 阶跃函数 \(H(x)=\mathbb 1[x>0]\) 在 \(x=0\) 处不连续、不可导(导数是 Dirac delta)。现在对它做**高斯卷积**——定义平滑版 \(H_\sigma(x)=\mathbb E_{w\sim\mathcal N(0,\sigma^2)}[H(x+w)]\)。这个期望等于"\(x+w>0\) 的概率",即 \(\Phi(x/\sigma)\)(标准正态 CDF)——一个处处 \(C^\infty\) 的光滑 S 形曲线!
不连续的 \(H\) 被期望运算抹成了光滑的 \(\Phi\)。\(\sigma\to0\) 时 \(H_\sigma\to H\)(恢复阶跃),\(\sigma\) 大时曲线越平缓。关键:\(H_\sigma\) 不仅光滑,它的导数 \(\Phi'(x/\sigma)/\sigma\) 处处有限可用。 这就是随机光滑的核心机制——用期望(卷积)把任何 Lipschitz 甚至有界不连续函数变光滑。
接触动力学正是这样的"有界不连续函数"(§4.1 三层都是有界跳变或方向相关,不是无界发散)。对它的输入(状态、控制)加噪声、取期望,就得到一个光滑化的动力学 \(f_\sigma(x)=\mathbb E_w[f(x+w)]\),其梯度处处良定义。
本质洞察:随机光滑与解析光滑(§4.4)殊途同归——都得到一个光滑化的动力学 \(f_\sigma\) 或 \(f_\epsilon\)。但**光滑化的来源根本不同**:解析光滑修改**函数本身**(换柔性模型、加 barrier),是确定性的、需要知道接触的内部结构;随机光滑保持**函数不变**,只在**测度层**(对输入分布取期望)做平滑,是黑箱的、不需要知道接触怎么实现。这个差异带来一个深远后果——随机光滑可以光滑化任何东西,哪怕它内部是一段你无法求导的代码(如非可微的碰撞检测、外部黑箱仿真器)。这是随机光滑相对解析光滑的杀手锏:它不要求被光滑对象可微,只要求它可被采样、可被积分。
反面:解析光滑做不到的,随机光滑能做到¶
设想接触求解器内部有一段**根本无法求导**的操作——比如基于离散网格的碰撞检测、调用一个闭源的物理引擎、或一个返回 if/else 分支的硬逻辑。解析光滑(§4.4)此时无能为力:你没法对你不能求导的东西做 IFT,也没法把闭源引擎换成柔性模型。
随机光滑不在乎这些。它只需要能**多次运行这个黑箱**(forward only,无需 backward)、对每次运行的输出做加权平均。这正是它在工程上的吸引力——可微仿真的随机光滑变体,可以套在任何不可微仿真器外面,把它"变成"可微的(在期望意义下)。Brax、MuJoCo MJX 的某些梯度方案、以及 Suh 2022 的 bundled gradient 都利用了这一点。
历史:从 ES 到 bundled gradient 到 α-order¶
随机光滑求梯度的脉络与第六批随机优化共享根源:
- 进化策略 ES / Salimans et al. 2017(OpenAI ES):用高斯扰动 + score-function 估计策略梯度,完全零阶(不需要任何 backward)。证明了纯采样梯度能扩展到大规模 RL。
- PIPPS / Parmas et al. 2018(ICML,arXiv 1902.01240):在 model-based policy search 里发现 reparameterization 梯度在长 horizon 下因 chaos 而方差爆炸("curse of chaos"),提出结合 reparameterization 与 score-function 的 total propagation 来稳定。这是把随机光滑思想用于稳定可微 rollout 的早期关键工作。
- Suh et al. 2022(RA-L / ICRA,"Bundled Gradients through Contact via Randomized Smoothing",arXiv 2109.05143):把随机光滑系统地用于接触,定义 bundled gradient(捆绑梯度)——对接触动力学的输入采样、对每个样本的梯度(或函数值)取平均,从而抹平 §4.1 三层不连续。证明 bundled gradient 相比精确梯度有三大优势:克服不可微、缓解非凸、支持零阶变体。并把它用到 iterative MPC(iMPC)上改善 planning-through-contact 收敛。
- Suh-Simchowitz-Zhang-Tedrake 2022(ICML Outstanding Paper,"Do Differentiable Simulators Give Better Policy Gradients?",arXiv 2202.00817):用 bias-variance 框架证明一阶梯度(reparameterization)在刚性/不连续系统上可能比零阶(score-function)更差,提出 α-order estimator(\(\alpha\in[0,1]\) 在一阶与零阶间插值)。这是把随机光滑与可微梯度统一成一个谱系的里程碑(§4.6 详述)。
理论 · 两种梯度估计器:reparameterization vs score-function¶
随机光滑的目标是估计 \(\nabla_\theta f_\sigma(\theta)=\nabla_\theta\,\mathbb E_{w\sim\mathcal N(0,\sigma^2 I)}[f(\theta+w)]\)。有两条根本不同的路(呼应前置自测第 4 题、前置桥接):
(1) Score-function / REINFORCE / 零阶梯度估计器(ZoBG, Zero-order Batch Gradient)
把随机性留在采样权重里。利用 log-derivative 技巧(这里给出它的两行推导,因为它是整个零阶梯度的根):
推导依据:第二个等号把梯度移进积分(需 \(p_\theta\) 对 \(\theta\) 可微、可交换积分微分);第三个等号用了恒等式 \(\nabla_\theta p_\theta=p_\theta\,\nabla_\theta\log p_\theta\)(对数求导,即 \(\nabla\log p=\nabla p/p\))。全部魔法在这一步——它把"对密度的梯度"换成"对 log 密度的梯度乘以密度",于是右边重新变回一个期望,可用采样估计。 关键:\(f\) 在整个推导里始终以**函数值**出现(从未被求导),这就是零阶估计器不需要 \(f\) 可微的数学根源。
代入高斯 \(p_\theta=\mathcal N(\theta,\sigma^2 I)\)(其 score \(\nabla_\theta\log p_\theta(x)=(x-\theta)/\sigma^2\)),并以 \(w_i=x_i-\theta\) 采样,得到可计算的估计器:
关键性质:完全不需要 \(f\) 可微——只用函数值 \(f(\theta+w_i)\)!这就是它能套在任何黑箱(含不可微接触)外面的原因。代价是**方差较大**(尤其 \(\theta\) 维度高时方差 \(\sim O(d/\sigma^2)\))。
(2) Reparameterization / Pathwise / 一阶梯度估计器(FoBG, First-order Batch Gradient)
把随机性推进函数里。\(x=\theta+w\),则:
估计器为:
关键性质:需要 \(f\) 可微(用到 \(\nabla f\))。优点是**方差通常远小于零阶**(在光滑区域);致命缺点是——当 \(f\) 在采样点附近不连续或刚性时,\(\nabla f\) 本身爆炸,平均后方差反而比零阶更大。这正是 Suh 2022 ICML 的核心发现。
本质洞察:两个估计器**估计的是同一个量** \(\nabla_\theta f_\sigma\)(同一个光滑化函数的真梯度),都是**无偏**的,差别只在**方差**。零阶用函数值差分隐式探测梯度(方差受 \(\sigma\) 和维度影响,不受 \(f\) 是否光滑影响);一阶用解析 \(\nabla f\) 直接平均(\(f\) 光滑时方差小,\(f\) 刚性/不连续时 \(\nabla f\) 爆炸使方差巨大)。接触的不连续恰恰是一阶估计器的死穴、零阶估计器的免疫区——这是为什么"可微仿真的精确梯度"在接触上可能输给"零阶采样梯度"。这个反直觉结论是历史第三阶段(§4.0)的核心。
理论 · 为什么两个估计器估计同一个量:Stein 引理¶
上面断言"两个估计器估计同一个量 \(\nabla f_\sigma\)"。这不是巧合,背后是 Stein 引理(Stein's lemma)——它把零阶和一阶在数学上焊死成同一个梯度的两种写法。这个等价性是随机光滑理论的拱顶石,值得专门推一遍。
Stein 引理(高斯情形):设 \(w\sim\mathcal N(0,\sigma^2 I)\),\(g\) 足够正则,则
推导(一维,多维逐分量同理):从右边出发,用高斯密度 \(p(w)=\frac{1}{\sqrt{2\pi}\sigma}e^{-w^2/2\sigma^2}\) 的关键性质 \(p'(w)=-\frac{w}{\sigma^2}p(w)\),即 \(\frac{w}{\sigma^2}p(w)=-p'(w)\):
(分部积分时边界项 \([g(w)p(w)]_{-\infty}^{\infty}=0\),因高斯密度在无穷远处指数衰减。)证毕。
这对我们意味着什么:令 \(g(w)=f(\theta+w)\),则 \(\nabla g(w)=\nabla f(\theta+w)\)。Stein 引理左边是 \(\mathbb E_w[\nabla f(\theta+w)]\)(一阶估计器的期望),右边是 \(\mathbb E_w[f(\theta+w)\,w/\sigma^2]\)(零阶估计器的期望)。两者**恒等**——这就严格证明了"一阶和零阶估计同一个量 \(\nabla f_\sigma\)"。
本质洞察:Stein 引理是随机光滑"一阶=零阶(在期望意义下)"的数学焊点。同一个梯度 \(\nabla f_\sigma\) 有两种积分表示——一种把导数放在 \(f\) 上(一阶 \(\mathbb E[\nabla f]\)),一种把导数放在高斯核上(零阶 \(\mathbb E[fw/\sigma^2]\),导数被分部积分"转移"给了密度)。这个"导数转移"正是零阶不需要 \(f\) 可微的根源——导数被搬到了我们完全知道、处处光滑的高斯密度上,\(f\) 只需以函数值出现。当 \(f\) 不可微(接触),一阶表示 \(\mathbb E[\nabla f]\) 因 \(\nabla f\) 含 Dirac 而方差发散(§4.5 定量分析),零阶表示 \(\mathbb E[fw/\sigma^2]\) 因只用 \(f\) 而方差有限——同一个量、同一个期望、却有天壤之别的方差,这就是 Stein 引理给可微接触的最深启示:选哪种积分表示(一阶/零阶),决定了你能否在不连续上存活。
理论 · bundled gradient 与 gradient bundle¶
Suh 2022 的 bundled gradient 就是上面的一阶估计器在接触上的具体化,但加了一个关键洞察。考虑 §4.1 第二层 stick-slip 处的 Clarke 广义梯度(一个集合)。单次 AD 只返回集合中某一支,用于一阶优化会震荡(§4.1 陷阱)。bundled gradient 在邻域采样 \(N\) 个点,每个点的 AD 梯度可能落在 Clarke 集合的不同支上,平均后得到一个"代表性方向"——它近似 Clarke 集合的某种加权中心,比任何单支都稳定。
形式上,对一阶 bundled gradient:
几何图像:单支梯度像盲人摸象(只摸到 Clarke 集合一支),bundled gradient 像多个盲人摸不同部位再综合——得到对"局部平均斜率"更鲁棒的估计。这就是"bundle(捆绑)"的含义:把邻域多个梯度捆在一起平均。
理论-工程桥接:bundled gradient 的工程实现极其简单——对当前点加 \(N\) 个高斯扰动,并行跑 \(N\) 个仿真,取梯度平均。这正好契合 GPU 并行仿真(Brax/MJX/Isaac 一次跑几千个环境)——随机光滑的 \(N\) 个样本就是 \(N\) 个并行环境,几乎零额外成本。这解释了为什么随机光滑在 GPU 仿真时代特别受青睐:硬件天然支持它需要的大批量采样。可微性与并行性在这里合流。
理论 · 定量证明:为什么一阶估计器在不连续处方差爆炸¶
§4.5 反复说"接触不连续处一阶方差爆炸、零阶免疫"。这是 Suh 2022 的核心结论,但口头断言不够——我们用一维阶跃把它**算出来**,让这个反直觉结论有定量支撑。这是本节最该手推一遍的推导。
考虑被光滑对象是带跳跃的函数 \(f(x)=a\,\mathbb 1[x>0] + (\text{光滑部分})\),跳跃幅度 \(a\)(接触切换处的速度跳变就是这样)。在 \(\theta=0\)(恰在切换点)估计 \(\nabla_\theta f_\sigma\)。
零阶估计器的方差。单样本估计 \(\hat\nabla^{\mathrm{ZO}}_1=f(w)\,w/\sigma^2\),\(w\sim\mathcal N(0,\sigma^2)\)。其方差主项(只看跳跃贡献,光滑部分方差有限且与 \(\sigma\) 弱相关):
(用了 \(\mathbb E[\mathbb 1[w>0]w^2]=\tfrac12\mathbb E[w^2]=\sigma^2/2\)。)所以零阶方差 \(\sim a^2/\sigma^2\)——有限(只要 \(\sigma>0\)),随 \(\sigma\to0\) 以 \(1/\sigma^2\) 增长,但对任何固定 \(\sigma\) 都可控。
一阶估计器的方差。一阶用 \(\nabla f\)。但 \(f\) 在 \(0\) 处的导数含 Dirac:\(\nabla f(x)=a\,\delta(x)+(\text{光滑部分})\)。单样本估计 \(\hat\nabla^{\mathrm{FO}}_1=\nabla f(w)=a\,\delta(w)+\dots\)。问题来了——\(\delta(w)\) 在采样里几乎处处为 0、但在 \(w=0\) 附近是一个无穷尖峰。其二阶矩:
(\(\delta^2\) 不是可积分布,积分发散)。一阶估计器的方差是无穷大——只要采样点偶然落在跳跃附近,\(\nabla f\) 就给出一个巨大(理论上无界)的值,平均也压不住。
本质洞察(这就是 Suh 2022 的数学心脏):零阶估计器用**函数值** \(f(w)\),跳跃使 \(f\) 有界变化(\(f\) 最多差 \(a\)),所以方差 \(\sim a^2/\sigma^2\) 有限;一阶估计器用**导数** \(\nabla f\),跳跃使 \(\nabla f\) 含 Dirac(无界),所以方差**发散**。同一个不连续,对函数值只是"有限跳变",对导数却是"无穷尖峰"——这就是为什么接触上零阶赢一阶。注意这不是"一阶估计器实现得不好",而是"对含 Dirac 导数的对象用一阶估计,方差数学上就是无穷"。这个 \(a^2/\sigma^2\)(零阶,有限)vs \(\infty\)(一阶,发散)的对比,是整个第三阶段(§4.0)认知翻转的定量基石。
对接 chaos:上面是单步单跳的分析。在 \(T\) 步 rollout 里,一阶梯度还要乘上 §4.7 的雅可比连乘 \(\rho^T\),于是一阶方差是"Dirac 发散 \(\times\) 指数放大"的双重灾难;零阶只承受采样方差、不经历连乘(它对整条轨迹的代价做一次差分,不展开链式法则)。这解释了为什么长 horizon contact-rich 任务里一阶几乎必败、零阶/MPPI 反而稳健。
阶段小结:到这里我们把"接触上零阶胜一阶"从口号变成了定量命题——零阶方差 \(\sim a^2/\sigma^2\)(有限),一阶方差因 Dirac 导数而发散。接下来 §4.5 最后一块把这个零阶估计器和第六批的 MPPI 对应起来,揭示采样 MPC 为何天然鲁棒。
理论 · 与采样型 MPC 的统一(桥接第六批)¶
这是本专题最重要的跨专题连接之一。采样型 MPC(MPPI、CEM)和随机光滑的零阶梯度,用的是同一个数学对象。
回顾第六批专题 4 的 MPPI:它对控制序列加高斯噪声 \(u+w_i\)、跑 \(N\) 条 rollout、按代价加权 \(\exp(-S_i/\lambda)\) 平均得到更新方向。把这个更新展开,本质上是在估计一个**期望代价的梯度**(或其指数加权变体)——正是 score-function 估计器的形式!
| 视角 | 随机光滑 ZoBG(本专题) | MPPI(第六批) |
|---|---|---|
| 加噪对象 | 动力学输入 \(\theta\) | 控制序列 \(u\) |
| 采样 | \(\theta+w_i\) | \(u+w_i\) |
| 权重 | \(w_i/\sigma^2\)(score) | \(\exp(-S_i/\lambda)\)(softmax 代价) |
| 估计量 | \(\nabla_\theta\mathbb E[f]\)(光滑梯度) | 最优控制更新方向 |
| 是否需要可微 | 否 | 否 |
本质洞察:MPPI 不是"另一种规划算法",而是**接触不可微问题的零阶随机光滑在控制空间的应用**。它之所以在 contact-rich 任务(如灵巧操作)上鲁棒,正是因为零阶估计器对接触的不连续免疫(§4.5 的核心)——MPPI 从不对接触求导,它只评估代价。这解释了一个工程观察:为什么 contact-rich 操作里,采样型 MPC(MPPI)常比基于可微仿真梯度的方法更鲁棒——因为前者是零阶(免疫不连续),后者是一阶(被不连续所伤)。理解了随机光滑的 bias-variance,就理解了 MPPI 为何在接触上稳健,也理解了 §4.6 为何说"可微≠更优"。这把本专题(可微仿真)和第六批(采样 MPC)从对立的两个阵营,统一成同一个 bias-variance 谱系的两端。
把 MPPI 的更新写成 score-function 形式。为了让"MPPI = 零阶随机光滑"不停留在类比,我们把 MPPI 更新展开看。MPPI 优化的是软化代价 \(J_\lambda(u)=-\lambda\log\mathbb E_{w}[\exp(-S(u+w)/\lambda)]\)(自由能形式,\(S\) 是 rollout 代价,\(\lambda\) 是温度)。对它求梯度,用 log-derivative(§4.5 的同一技巧):
最右边的形式**完全不含 \(\nabla_u S\)——它把对代价的梯度通过 score-function 转移给了采样权重 \(w/\sigma^2\)。**MPPI 的更新方向正是这个 softmax 加权的 \(w\):\(\Delta u\propto\sum_i \tilde\omega_i\,w_i\),其中 \(\tilde\omega_i=\exp(-S_i/\lambda)/\sum_j\exp(-S_j/\lambda)\) 是按代价 softmax 归一的权重。这就是 MPPI 的更新规则,它在数学上就是一个用 softmax 权重替代线性 score 权重的零阶梯度估计器。
本质洞察:MPPI 的指数加权 \(\exp(-S/\lambda)\) 和 §4.5 零阶估计器的线性权重 \(w/\sigma^2\) 是**同一个 score-function 框架的两种权重选择**——前者用 softmax(强调低代价样本、降方差但引入加权 bias),后者用线性(无偏但高方差)。MPPI = 零阶随机光滑 + softmax 重要性加权。这个等式把第六批的采样 MPC 和本专题的随机光滑彻底焊死:它们不是"两种方法碰巧都用采样",而是同一个零阶梯度框架在控制空间的两个实例。理解了这个,§4.6 的 α-order 谱系就自然延伸到了 MPC——你甚至可以构造"α-order MPPI"(混合 MPPI 的零阶更新与可微仿真的一阶梯度),这正是 GI-PPO 类工作的思路(§4.9)。本专题与第六批的统一,到此从"类比"升级为"恒等式"。
对比性思维(不是 X 而是 Y):常见误解是"可微仿真(一阶)一定比采样 MPC(零阶)先进/高效"。不是——它们是 bias-variance 谱系的两端,各有适用区。光滑任务(自由空间、软接触)一阶占优(方差小、收敛快);刚性/不连续任务(硬接触、stick-slip)零阶占优(免疫不连续)。"先进"取决于任务的不连续程度,不是绝对的。
理论 · \(\sigma\) 怎么选:与接触特征尺度匹配¶
随机光滑成败系于 \(\sigma\) 的选取(§4.5 陷阱),但"与接触切换特征尺度匹配"这句话需要落到可操作的判据。给出一个定性准则:
设接触切换的特征尺度为 \(\ell_c\)——它衡量"状态变化多大会引起一次接触模式切换"(如物体到地面的典型间隙变化、stick→slip 的临界速度)。\(\sigma\) 应满足:
两端失效的机理:
- \(\sigma\ll\ell_c\)(太小):高斯扰动几乎探不到接触切换——大部分样本落在同一个接触模式内,\(f(\theta+w_i)\) 几乎不变,零阶估计 \(\sum f w_i/\sigma^2\) 的分子近乎为零(无信号),梯度退化回"接触前的 0 梯度"。等于没做随机光滑。
- \(\sigma\gg\ell_c\)(太大):扰动跨越**多个**接触模式——样本里混入了不该一起平均的不同接触状态(比如同时采到"碰撞前飞行""碰撞中""碰撞后弹起"),平均出的梯度是多个模式的混杂,物理上无意义(§4.5 陷阱)。
- \(\sigma\sim\ell_c\)(恰好):扰动刚好覆盖单次接触切换的过渡区——样本里既有"接触"也有"未接触",零阶估计捕捉到这次切换的平均效应,给出有意义的光滑梯度。
本质洞察:\(\sigma\) 不是一个纯数值超参,而是一个**与接触几何耦合的物理-数学参数**——它必须匹配"接触切换的特征长度 \(\ell_c\)"。这把"调 \(\sigma\)"从盲目试错变成有依据的估计:先估 \(\ell_c\)(看你的任务里接触切换发生在多大的状态尺度上),再令 \(\sigma\sim\ell_c\)。这也解释了为什么没有"通用最优 \(\sigma\)"——不同任务的 \(\ell_c\) 不同(推重物 vs 捏轻物),\(\sigma\) 必须随任务重调。与 §4.4 的 \(\epsilon\)、§4.3 的 \(\kappa\) 一样,\(\sigma\) 是 §4.6 三角里"光滑参数"轴的又一个化身,它们都该按物理尺度而非数值习惯来定。
⚠️ 常见陷阱¶
💡 概念误区:以为随机光滑的梯度有 bias(因为"加了噪声")
新手想法:"对输入加随机噪声,得到的梯度肯定是带噪声/带偏的近似。" 实际上:随机光滑的两个估计器(ZoBG/FoBG)都是**对光滑化函数 \(f_\sigma\) 的无偏估计**。它们有**方差**(采样导致),但**无 bias**(期望恰好是 \(\nabla f_\sigma\))。真正的 bias 来自"\(f_\sigma\) 与原始 \(f\) 的差异"(即 \(\sigma>0\) 引入的光滑化偏移),这与解析光滑的 \(\epsilon\) bias 同源——是光滑化本身的代价,不是采样的代价。 为什么重要:区分"采样方差"和"光滑化 bias"是理解 §4.6 三角的前提。采样方差靠加大 \(N\) 消除(无偏),光滑化 bias 靠减小 \(\sigma\) 消除(但增大方差)——两个旋钮,两个权衡。
🧠 思维陷阱:在不连续/刚性接触上盲目用一阶梯度估计器
新手想法:"一阶(reparameterization)方差比零阶小,那永远用一阶。" 现象/后果:在硬接触任务上,一阶 bundled gradient 的方差**反而比零阶大几个数量级**,训练发散(Suh 2022 ICML 的实验主结论)。 根本原因:一阶估计器用 \(\nabla f\),而 \(f\) 在接触不连续处 \(\nabla f\) 爆炸(§4.1);零阶只用函数值 \(f\),对 \(\nabla f\) 爆炸免疫。接触越硬,一阶越吃亏。 正确做法:用 α-order estimator(§4.6)在一阶/零阶间自适应插值——光滑区用一阶(低方差),不连续区切到零阶(鲁棒)。或用 §4.7 的短 horizon + critic 限制 chaos 累积。
💡 概念误区:把随机光滑的 \(\sigma\) 当成纯数值参数随便调
新手想法:"\(\sigma\) 就是个采样方差,调大调小无所谓,多采几个样本就行。" 实际上:\(\sigma\) 是**物理-数学耦合参数**——它决定光滑化的 bias(\(\sigma\) 越大,\(f_\sigma\) 离 \(f\) 越远,bias 越大)和探索的尺度(\(\sigma\) 太小探不到接触切换、太大跨越多个接触模式导致梯度无意义)。在接触问题里,\(\sigma\) 应与"接触切换的特征尺度"匹配——太小看不到接触(梯度仍是 0),太大平均了不该平均的多个接触模式。 为什么重要:\(\sigma\) 选取是随机光滑成败的关键,需结合接触几何的特征长度,而非纯调参。
练习¶
练习 4.5.1(推导题,草稿纸完成):证明 Heaviside 阶跃 \(H(x)=\mathbb 1[x>0]\) 的高斯光滑 \(H_\sigma(x)=\mathbb E_{w\sim\mathcal N(0,\sigma^2)}[H(x+w)]=\Phi(x/\sigma)\)(\(\Phi\) 为标准正态 CDF)。计算 \(H_\sigma'(x)\),验证 \(\sigma\to0\) 时 \(H_\sigma'\to\delta(x)\)(Dirac)。再用此例说明:零阶估计器 \(\frac1N\sum H(x+w_i)w_i/\sigma^2\) 的期望等于 \(H_\sigma'(x)\)(无偏),但 \(H\) 本身在 0 处不可导——零阶估计器为何不需要 \(H\) 可导?
练习 4.5.2(开放思考题):本节论证了 MPPI(采样 MPC)与零阶随机光滑同源。请进一步思考:CEM(cross-entropy method)与 MPPI 在"如何利用采样代价"上的差异(CEM 用 elite 截断,MPPI 用 softmax 加权),分别对应什么样的隐式梯度估计?它们都是零阶的吗?如果给 MPPI 加入可微仿真的一阶梯度信息(如 GI-PPO 那样混合),它就变成了 §4.6 的 α-order 估计器吗?这道题连接第六批采样 MPC 与本专题的随机光滑。
练习 4.5.3(证明题):设 \(f\) 是 \(L\)-Lipschitz(可不连续,但有界变化)。证明其高斯光滑 \(f_\sigma=\mathbb E_w[f(\cdot+w)]\) 是 \(C^\infty\) 的,且 \(f_\sigma\) 的梯度 Lipschitz 常数 \(\le L/\sigma\)(提示:用 Stein 引理 \(\nabla f_\sigma(\theta)=\mathbb E_w[f(\theta+w)w/\sigma^2]\) 并估计其 Lipschitz 性)。这个 \(L/\sigma\) 标度与 §4.4 解析光滑的 \(O(1/\epsilon)\) 是同一类标度吗?由此论证"随机光滑也逃不出 bias-Lipschitz 权衡,只是把它换到了 \(\sigma\) 上"。
§4.6 解析光滑 vs 随机光滑的统一:bias-variance-保真三角 ⭐⭐⭐⭐¶
本节解决的问题:§4.4 与 §4.5 给出了两条独立的光滑化路线。本节做理论综合——它们到底是不同的方法,还是同一件事的两种实现?答案是:它们都在求解同一个光滑化函数的梯度,但占据"bias-variance-物理保真"三角的不同顶点。 本节给出这个三角的精确刻画,并用 Suh 2022 的 α-order estimator 把两条路线缝合成一个连续谱系。这是档位 4 读者理解整个领域的制高点。
动机:为什么两条路线都"对"却给出不同梯度¶
读完 §4.4、§4.5,一个困惑自然浮现:解析光滑(compliant,参数 \(\epsilon\))和随机光滑(Gaussian,参数 \(\sigma\))都声称给出"接触的可用梯度",但它们的梯度数值**不一样**。到底哪个对?
答案是——都对,但对的是不同的对象。解析光滑求的是"软化后的确定性动力学 \(f_\epsilon\)"的精确梯度;随机光滑求的是"原始动力学 \(f\) 的高斯卷积 \(f_\sigma\)"的(采样)梯度。\(f_\epsilon\) 和 \(f_\sigma\) 是两个不同的光滑化函数,它们的梯度当然不同。要调和这个困惑,必须建立一个统一的坐标系——这就是 bias-variance-保真三角。
反面:只盯着一个维度会怎样¶
历史第二阶段(§4.0)的教训正是"只盯一个维度"——研究者只追求 bias 低(梯度越接近硬接触真值越好),于是把光滑参数推到极小(\(\epsilon\to0\) 或 \(\sigma\to0\))。结果忽略了另外两个维度:
- 忽略 variance:\(\sigma\to0\) 时零阶估计器方差 \(\to\infty\);\(\epsilon\to0\) 时一阶梯度 Lipschitz \(\to\infty\),BPTT 方差爆炸。
- 忽略 物理保真:为了可微强行用软接触,可能让仿真物理失真(穿透、能量不守恒)。
Suh 2022 ICML 的贡献正是指出:"单维度优化 bias 是错的,三个维度必须一起看"。这是从第二阶段到第三阶段的认知跃迁。
理论 · 三个顶点的精确定义¶
把三个维度精确化(这是 §4.0 目标 3 承诺的三角):
| 顶点 | 定义 | 数学度量 | 谁想要它低/高 |
|---|---|---|---|
| bias(偏差) | 光滑化梯度的期望与"真梯度"之差 | \(\|\mathbb E[\hat\nabla]-\nabla f_{\mathrm{true}}\|\) | 系统辨识、需要物理真值时要低 |
| variance(方差) | 梯度估计的随机波动 | \(\mathrm{Var}[\hat\nabla]\) | 优化收敛、训练稳定要低 |
| 物理保真(fidelity) | 光滑化动力学与真实物理的偏离 | 穿透量、能量漂移、接触模式错误 | 仿真可信、sim-to-real 要高 |
三角不可兼得定理(定性):在接触光滑化框架内,三个顶点无法同时最优——
- 降 bias(小 \(\epsilon\)/\(\sigma\))→ 升 variance(梯度尖锐/采样方差大)。
- 升保真(硬接触)→ 升 bias 与 variance(不连续重现)。
- 降 variance(大 \(\epsilon\)/\(\sigma\) 或多采样)→ 要么升 bias(大 \(\epsilon\)/\(\sigma\)),要么升成本(多采样)。
本质洞察:可微接触的所有方法,本质上是在这个三角内**选一个折中点**。Dojo(小 \(\kappa\))靠近"低 bias 高保真"顶点,但梯度在切换面尖锐;Brax spring(大 \(\epsilon\))靠近"低 variance"顶点,但保真低、bias 大;随机光滑(调 \(\sigma\) + 多采样)可以沿一条边自由滑动,但要付采样成本。没有方法能同时占据三个顶点——这不是工程未完善,而是光滑化的信息论极限。 理解一个可微仿真器,就是定位它在这个三角里的坐标。这是本专题最重要的本质洞察,是 §4.0 目标 3"为什么可微≠梯度有用"的最终答案:可微(任何 \(\epsilon,\sigma>0\))只保证你在三角内某处,不保证你在对当前任务有用的那个顶点。
理论 · 两条路线在三角中的轨迹¶
把 §4.4、§4.5 放进这个坐标系:
- 解析光滑(compliant/barrier,§4.4):沿"bias-保真"轴移动。它**没有 variance**(确定性,单次 forward 给确定梯度),但 bias 与保真被 \(\epsilon\) 锁死在一条曲线上(§4.4 的 bias×Lipschitz \(\sim O(1)\))。它的梯度是**低方差、可调 bias**的——适合需要确定性、可重复梯度的场景。
- 随机光滑(Gaussian,§4.5):引入第三个旋钮——采样数 \(N\)。它可以**无偏地**估计 \(\nabla f_\sigma\)(bias 只来自 \(\sigma\) 的光滑化,与解析光滑同源),但有 \(O(1/N)\) 的方差。它的梯度是**有方差、可通过 \(N\) 压低方差**的——适合需要黑箱光滑化、或 GPU 大批量采样的场景。
关键统一:两者的 bias 部分相同(都是光滑化偏移 \(O(\epsilon)\) 或 \(O(\sigma)\)),差异只在 variance 的来源——解析光滑无采样方差但有梯度尖锐性(在 BPTT 里转化为方差),随机光滑有采样方差但可被 \(N\) 压低。
理论 · α-order estimator:缝合两条路线¶
Suh 2022 ICML 的 α-order estimator 把一阶(FoBG,§4.5)和零阶(ZoBG,§4.5)线性组合:
由于 FoBG 和 ZoBG 都无偏(§4.5 本质洞察),任意凸组合也无偏。但**方差**随 \(\alpha\) 变化——\(\alpha=1\)(纯一阶)在光滑区方差小、在不连续区方差爆炸;\(\alpha=0\)(纯零阶)方差对不连续免疫但整体偏大。最优 \(\alpha^\star\) 是使总方差最小的那个值,它依赖局部不连续程度:
这个公式从哪来(两行推导):记 \(V_F=\mathrm{Var}[\widehat\nabla^{\mathrm{FO}}]\)、\(V_Z=\mathrm{Var}[\widehat\nabla^{\mathrm{ZO}}]\)、\(c=\mathrm{Cov}[\widehat\nabla^{\mathrm{FO}},\widehat\nabla^{\mathrm{ZO}}]\)。混合估计器方差按二次型展开:
对 \(\alpha\) 求导并令为零:\(2\alpha V_F-2(1-\alpha)V_Z+2(1-2\alpha)c=0\),解出 \(\alpha^\star=(V_Z-c)/(V_F+V_Z-2c)\),即上式。这是一个标准的**最小方差组合**问题——与金融里"两资产最小方差组合"、传感器融合里"两测量最优加权"是同一个数学(都是凸二次极小)。这个同构告诉我们:α-order 本质是把"两个无偏梯度估计"当作"两个有噪测量"做最优融合——又一个跨领域的认知工具(多视角理解)。
本质洞察:α-order estimator 揭示一阶与零阶**不是对立的两个阵营,而是一个连续谱系的两端**。在光滑区域(自由空间)\(\alpha^\star\to1\)(用一阶,方差小);在不连续区域(接触切换)\(\alpha^\star\to0\)(用零阶,免疫不连续)。最优策略不是"选一阶还是零阶",而是"在每个局部自适应地选 \(\alpha\)"。 这把 §4.4(解析光滑≈一阶端)、§4.5(随机光滑零阶端)、第六批 MPPI(零阶端)统一成同一个谱系上的不同坐标——整个"可微仿真 vs 采样优化"之争,在 α-order 框架下化解为"如何为当前任务的不连续程度选最优 \(\alpha\)"。这是本专题理论部分的最高综合。
理论-工程桥接:α-order 的工程实现——同一批采样既算函数值(喂 ZoBG)又算梯度(喂 FoBG),按估计的局部方差动态混合 \(\alpha\)。GI-PPO(Gradient Informed PPO,Son-Zheng-Sullivan-Qiao-Lin, NeurIPS 2023, arXiv 2312.08710)正是这一思想的策略学习落地:它引入一个 α-policy(局部更优策略),通过自适应调节 \(\alpha\) 控制解析一阶梯度在学习中的权重,用可微仿真的一阶梯度增强 PPO 的零阶策略梯度,在接触任务上既快又稳。注意 GI-PPO 的 \(\alpha\) 与 Suh 2022 α-order 的 \(\alpha\) 是**同一思想的两个化身**——前者在策略空间混合(α-policy),后者在梯度估计器层面混合(α-estimator),都用一个标量在"信任一阶梯度"与"信任零阶/采样"之间插值。
理论 · α-order 在两类区域的具体行为:把谱系算出来¶
为了让"\(\alpha^\star\) 随不连续程度变化"不停留在口号,我们把它在两类典型区域分别算出来,用的就是 §4.5 定量分析的结果。
区域一:光滑自由空间(无接触)。此处 \(f\) 可微、\(\nabla f\) 有界。一阶方差小:\(\sigma^2_{\mathrm{FO}}\sim\|\nabla f\|^2/N\)(有限且小)。零阶方差大:\(\sigma^2_{\mathrm{ZO}}\sim d\cdot\mathrm{Var}[f]/(N\sigma^2)\)(带维度 \(d\) 因子)。代入 §4.6 的 \(\alpha^\star\) 公式(设协方差 \(c\approx0\)):
结论:自由空间 \(\alpha^\star\approx1\),几乎纯用一阶——符合直觉(光滑处一阶又快又准)。
区域二:接触切换面(跳跃 \(a\))。由 §4.5 定量分析,一阶方差**发散** \(\sigma^2_{\mathrm{FO}}\to\infty\)(Dirac 导数),零阶方差有限 \(\sigma^2_{\mathrm{ZO}}\sim a^2/(N\sigma^2)\)。代入:
结论:接触切换面 \(\alpha^\star\approx0\),几乎纯用零阶——符合 §4.5 的核心(接触处零阶胜一阶)。
本质洞察:把 \(\alpha^\star\) 公式在两类区域分别算出来,得到 \(\alpha^\star\approx1\)(自由)和 \(\alpha^\star\approx0\)(接触)两个极端——这就是 α-order 自适应行为的数学证据。它不是启发式的"接触处切零阶",而是"最小化方差"这一原则在两类区域的必然推论。一个 contact-rich rollout 在时间上交替经过自由段和接触段,\(\alpha^\star\) 也随之在 1 和 0 之间切换——最优混合系数本身就是一条随轨迹起伏的曲线,编码了"何时信任梯度、何时信任采样"。这把 §4.5、§4.6 的所有定性论述统一成一个可计算的量。Suh 2022 的工程贡献,正是把这个理论最优 \(\alpha^\star\) 用经验方差估计在线近似出来。
系统性分类(认知工具 E):三条路线全景对比¶
把三条路线 + α-order 放进一张总表,这是本专题的"森林图":
| 路线 | 光滑化来源 | 是否需 \(f\) 可微 | bias 来源 | variance | 物理保真 | 代表工具 |
|---|---|---|---|---|---|---|
| 凸松弛 + IFT(§4.3) | 凸化 + 小 \(\kappa\) | 否(解 KKT) | 凸松弛 + \(\kappa\) | 低(确定性) | 中(松弛伪影) | Dojo, Nimble, SAP |
| 解析光滑(§4.4) | 柔性模型/barrier | 是(AD/IFT) | \(\epsilon\) 软化 | 低(确定性) | 中-高(柔度有物理意义) | Drake, Brax-spring, IPC |
| 随机光滑(§4.5) | 期望/卷积 | 否(零阶) | \(\sigma\) 卷积 | 高(\(O(1/N)\),可压低) | 取决于底层模型 | bundled gradient, ES |
| α-order(§4.6) | 一阶+零阶混合 | 部分 | \(\sigma\) + 混合 | 自适应最优 | 取决于底层 | Suh α-order, GI-PPO |
这张表的核心信息:三条路线在"是否需可微""bias/variance/保真"上各有取舍,α-order 是它们的统一框架。没有一行在所有列都占优——这是 §4.0 目标 5"三个维度独立、不存在三者同时占优"的精确兑现。
理论 · 用 MSE 分解把 bias 与 variance 严格分开¶
§4.6 反复说"bias 和 variance 是独立顶点",这里用估计理论的标准工具——均方误差(mean squared error, MSE)分解——把这个独立性证清楚,让"三角"有严格的数学骨架。
设我们想估计的真梯度是 \(\nabla f_{\mathrm{true}}\)(硬世界真值),用某个估计器 \(\hat\nabla\)(来自任一路线)。衡量估计好坏的标准量是 MSE:
插入 \(\pm\mathbb E[\hat\nabla]\) 并展开(交叉项因 \(\mathbb E[\hat\nabla-\mathbb E[\hat\nabla]]=0\) 消失):
这个分解是整个三角的数学骨架。它把"估计的总误差"干净地拆成两个**正交**的部分——bias²(系统偏移)和 variance(随机波动)。两者**加和构成总误差,但可以独立变化**:
- 随机光滑(§4.5):\(\mathbb E[\hat\nabla]=\nabla f_\sigma\)(无偏于光滑化函数),所以 bias \(=\|\nabla f_\sigma-\nabla f_{\mathrm{true}}\|\)(只来自 \(\sigma\) 的光滑化),variance \(=O(1/N)\)(来自采样)。两个旋钮 \(\sigma\) 和 \(N\) 分别控制两项——\(\sigma\) 动 bias、\(N\) 动 variance,互不干扰,这就是它们独立的证据。
- 解析光滑(§4.4):variance \(=0\)(确定性),全部误差是 bias\(=\|\nabla f_\epsilon-\nabla f_{\mathrm{true}}\|=O(\epsilon)\)。
- α-order(§4.6):bias 由 \(\sigma\) 定(与 FoBG/ZoBG 同),variance 由 \(\alpha\) 优化到最小。
本质洞察:MSE = bias² + variance 这个初等分解,是 §4.6 三角第三条边(bias-variance)的**严格数学形式**。它告诉我们一个深刻的事——追求"梯度精确"(小 bias)和"梯度稳定"(小 variance)是两个独立目标,最小化总误差 MSE 需要同时考虑两者,而非只压一个。历史第二阶段(§4.0)的错误,用这个分解一眼看穿:他们只最小化 bias(推 \(\epsilon,\sigma\to0\)),却让 variance 爆炸(chaos / 采样方差),结果 MSE 反而更大。正确的目标是最小化 MSE 这个和,不是最小化 bias 这个分量——这就是 Suh 2022 α-order 的全部精神,也是从第二阶段到第三阶段认知跃迁的一行公式总结。物理保真则是 MSE 之外的第三个独立轴(它衡量 \(f_\epsilon\) vs 真实物理,不是梯度误差),所以三者构成三维而非一维——这就是为什么是"三角"而不是"线段"。
⚠️ 常见陷阱¶
🧠 思维陷阱:把"bias"和"物理保真"混为一谈
新手想法:"梯度 bias 低就等于物理更准。" 实际上:bias 是"梯度估计 vs 真梯度"的差异(梯度层面),保真是"光滑动力学 vs 真实物理"的差异(状态轨迹层面)。一个软接触模型可能 bias 低(梯度估计准)但保真也低(轨迹穿透)——二者是三角的**两个独立顶点**。 正确思维:诊断问题要分清"梯度不准"(bias/variance 问题)和"仿真不真"(保真问题)。前者影响优化收敛,后者影响 sim-to-real。
💡 概念误区:以为 α-order 的 \(\alpha\) 应该全局固定
新手想法:"调一个最优 \(\alpha\) 用于整个训练。" 实际上:最优 \(\alpha^\star\) 依赖**局部不连续程度**——自由空间段 \(\alpha^\star\approx1\),接触切换段 \(\alpha^\star\approx0\)。全局固定 \(\alpha\) 在两类区域都次优。Suh 2022 的方法是按局部估计方差动态选 \(\alpha\)。 为什么重要:理解 \(\alpha\) 的空间/时间变化性,才能正确使用混合估计器。
💡 概念误区:认为加大采样数 \(N\) 能消除随机光滑的所有误差
新手想法:"随机光滑方差大?多采样就行,\(N\to\infty\) 误差归零。" 实际上:\(N\to\infty\) 只消除**采样方差**,消不掉**光滑化 bias**(\(\sigma>0\) 引入的 \(f_\sigma\ne f\))。要同时消 bias 需 \(\sigma\to0\),但那又使方差 \(\sim O(d/\sigma^2)\) 爆炸,需要 \(N\sim O(d/\sigma^2)\) 才能压住——成本随精度需求平方增长。 为什么重要:这是三角约束的直接后果——\(N\) 只动 variance 这一个顶点,动不了 bias。想兼顾必须在三角内权衡,没有免费午餐。
练习¶
练习 4.6.1(推导题,草稿纸完成):从 \(\widehat\nabla^\alpha=\alpha\widehat\nabla^{\mathrm{FO}}+(1-\alpha)\widehat\nabla^{\mathrm{ZO}}\) 出发,假设两估计器无偏、方差分别为 \(\sigma_{\mathrm{FO}}^2,\sigma_{\mathrm{ZO}}^2\)、协方差为 \(c\)。推导使 \(\mathrm{Var}[\widehat\nabla^\alpha]\) 最小的 \(\alpha^\star\),验证本节给出的公式。讨论:当 \(\sigma_{\mathrm{FO}}^2\to\infty\)(接触不连续使一阶方差爆炸)时 \(\alpha^\star\to\) 多少?这与"接触处该用零阶"是否一致?
练习 4.6.2(开放思考题):本节论证解析光滑与随机光滑的 bias 同源(都是光滑化偏移),差异在 variance 来源。请设计一个思想实验:对同一个 1D 弹球接触问题,分别用 compliant(\(\epsilon\))和 Gaussian(\(\sigma\))光滑化,调 \(\epsilon=\sigma\),二者的梯度会相等吗?如果不等,差在哪里(提示:compliant 是确定性卷积核 = 软化函数,Gaussian 是高斯核;不同核的卷积结果不同)?这道题揭示"同源 bias"不等于"相同梯度"——光滑化核的形状也重要。
练习 4.6.3(跨章综合题,需综合 §4.3-§4.6 + 第六批采样 MPC):设计一个"自适应接触梯度"算法,要求:(a) 在自由空间段用 §4.3 的 IFT 解析梯度(快、低方差);(b) 检测到接触切换时切换到 §4.5 的零阶 bundled gradient(鲁棒);(c) 用 §4.6 的 α-order 思想平滑过渡。写出算法伪逻辑(非代码,文字描述决策流程),说明如何检测"接触切换"(提示:监测 KKT 矩阵条件数或激活集变化),并论证这个算法相比纯一阶(Dojo)或纯零阶(MPPI)在 contact-rich 任务上的优势与额外成本。这道题把本专题三条路线 + 第六批 MPPI 综合成一个工程方案。
§4.7 梯度病态与 gradient bias:为什么可微≠有用 ⭐⭐⭐¶
本节解决的问题:前面四节给出了三条求梯度路线。本节回答最实战的问题——即便你成功算出了梯度,它为什么常常没用? 把"可微≠有用"这句口号拆成两个精确的失效机制:长 horizon 上的梯度爆炸/消失(chaos),和光滑化带来的系统 bias。然后给出四条工程解决方案及各自代价。这是 §4.0 目标 4 承诺的诊断框架,也是把整个专题从理论拉回实战的落点。
动机:算出梯度后训练还是发散¶
设想你用 Dojo(精确解析梯度)对一个抓取任务做 100 步 rollout 的 BPTT,梯度计算成功(没 NaN),但训练就是不收敛——loss 剧烈震荡,或卡在某个高值。你检查了实现、调了学习率、加了梯度裁剪,都没用。问题出在哪里?
答案是:这不是实现 bug,而是接触动力学的 chaotic sensitivity 在 BPTT 里的必然显现。 这正是 §4.0 场景一描述的困境。要诊断它,必须理解 BPTT 梯度的连乘结构与 Lyapunov 指数。
反面:如果忽视 chaos 直接调学习率会怎样¶
新手遇到训练发散的本能反应是调小学习率、加梯度裁剪。但 chaos 引起的梯度病态**治不好**——
- 调小学习率:梯度**方向**已经因 chaos 变成近乎随机(Parmas 2018 的关键发现:"不仅梯度幅度爆炸,方向也变随机"),方向错的小步还是错。
- 梯度裁剪:裁掉的是幅度,留下的方向仍随机。裁剪让训练不发散,但也不收敛(在错误方向上小步游走)。
正确的诊断是承认这是算法层的根本病态,需要从结构上改造(短 horizon、critic、随机光滑),而非超参微调。 这个认知是从"调参玄学"到"算法设计"的分水岭(呼应 §4.0)。
历史:curse of chaos 的发现¶
- Parmas et al. 2018(PIPPS, ICML,arXiv 1902.01240):"curse of chaos"的命名者。证明 model-based policy search 里 reparameterization 梯度因长链非线性计算的 chaos 本质而方差爆炸,且梯度方向变随机。提出 total propagation 缓解。
- Metz et al. 2021("Gradients are not all you need"):系统论证可微仿真/优化器/RL 里梯度因 chaos 失效,呼吁慎用一阶梯度。
- Suh et al. 2022(ICML,arXiv 2202.00817):把 chaos 与接触不连续统一进 bias-variance 框架(§4.6)。
- SHAC / Xu et al. 2022(ICLR,arXiv 见 cdfg.mit.edu SHAC):提出 short-horizon actor-critic——用短 rollout 限制 chaos 累积、用 critic 估计 horizon 之外的回报,是缓解 chaos 的标志性方案。
理论 · chaos 的数学:BPTT 梯度的 Lyapunov 放大¶
考虑 \(T\) 步 rollout,状态递推 \(x_{t+1}=f(x_t,\theta)\)。损失对参数的梯度(BPTT)按链式法则:
核心是那个**雅可比连乘** \(\prod_{s}\frac{\partial f}{\partial x}\)。设单步雅可比的谱半径(最大奇异值)为 \(\rho\):
- 若 \(\rho>1\)(接触刚度大时,单步雅可比有接近奇异的项,谱半径远超 1)→ 连乘 \(\sim\rho^{T-t}\) 指数爆炸。
- 若 \(\rho<1\)(强阻尼)→ 连乘 \(\sim\rho^{T-t}\) 指数消失。
这个指数率的对数就是**Lyapunov 指数(Lyapunov exponent)** \(\Lambda=\lim_{T\to\infty}\frac1T\log\|\prod_s\partial f/\partial x\|\)。\(\Lambda>0\) 即混沌——梯度幅度 \(\sim e^{\Lambda T}\) 指数爆炸。
本质洞察:BPTT 梯度爆炸/消失与 RNN 训练里的同名问题是**同一个数学对象**——雅可比连乘的谱半径。但接触让它更恶劣:接触刚度大时单步雅可比的谱半径可以远超 1(一次硬碰撞把微小扰动放大几个数量级),所以接触 rollout 的 Lyapunov 指数特别大,比光滑 RNN 更易爆炸。接触不是"额外加了不连续",而是"把 BPTT 的固有 chaos 问题放大了"——这是为什么可微接触比一般可微仿真更难训。理解这一点,就把"接触梯度难用"归因到了正确的数学根源(连乘谱半径),而非模糊的"接触很复杂"。
为什么方向也变随机(定量):连乘矩阵 \(\prod_s J_s\) 在 chaos 下趋于由最大 Lyapunov 方向主导,但接触切换(§4.1 第三层)每步可能改变这个主导方向,使连乘结果的方向在迭代间剧烈变化。把这一点量化——设两条相邻 rollout(参数差 \(\delta\theta\))在第 \(\tau\) 步遇到不同的接触切换(一条建立接触、一条还没有),则它们之后的雅可比 \(J_s\) 序列**完全不同**,连乘结果指向几乎正交的方向。于是梯度估计的**信噪比**(signal-to-noise ratio)随 \(T\) 衰减:
含义:真梯度(分子,期望)是有界的,但方差(分母)随 \(e^{\Lambda T}\) 爆炸,所以信噪比指数衰减到 0——梯度的"信号"被"噪声"淹没。这就是 Parmas 2018 说的"方向变随机"的精确含义:不是梯度没有期望方向,而是单次估计的方差远大于期望模长,使任何有限批量的平均都测不准方向。
本质洞察:chaos 病态的两个层面——幅度爆炸(\(\|\hat\nabla\|\sim e^{\Lambda T}\))和方向随机(\(\mathrm{SNR}\to0\))——后者远比前者致命。幅度爆炸靠梯度裁剪能压(裁到固定范数),但裁剪不改变方向,方向随机(低 SNR)裁剪无能为力——你裁出的仍是一个随机方向的单位向量。要恢复 SNR 只有两条路:减小 \(T\)(缩短 horizon,SHAC)让 \(e^{\Lambda T}\) 不爆,或换零阶估计器(不经历连乘,§4.5)。这从信噪比角度严格解释了为什么"调学习率/加裁剪治不好 chaos"(§4.7 反面)——它们都不动 SNR 这个根本量。诊断训练发散时,与其盯梯度范数,不如估计梯度的 SNR(多批量梯度的方向一致性)——SNR 低就是 chaos,该上 SHAC 或零阶,而非微调超参。
理论 · gradient bias:光滑化的系统偏移¶
第二个失效机制是 bias(§4.6 已铺垫,这里聚焦其后果)。光滑化(任何路线)给出的是 \(f_\epsilon\) 或 \(f_\sigma\) 的梯度,与硬世界 \(f\) 的梯度有系统差异。在 contact-rich 任务里,这个 bias 可能**改变最优解的定性结构**——
- 症状:在软仿真里训练出的策略,部署到硬世界(真机)失效(§4.0 场景一症状三)。
- 机制:软接触允许穿透/蠕变,策略可能学到利用这些非物理行为的"作弊"解(如靠穿透借力),硬世界没有这些行为,策略失效。
- 量化:Parmar-Halm-Posa 2021(IROS, arXiv 2103.15406)系统证明——接触刚度越高(越接近真实硬接触),可微仿真的训练效果、泛化、数据效率**越差**。这是 bias 与可训练性矛盾的实证。
对比性思维(不是 X 而是 Y):很多人以为"可微仿真训练失败 = 梯度算错了"。不是——梯度可能算得完全正确(对光滑化函数 \(f_\epsilon\) 而言),失败是因为 \(f_\epsilon\) 的最优解与真实 \(f\) 的最优解有 bias。"梯度正确"和"梯度有用"是两件事——正确指"忠实于 \(f_\epsilon\)",有用指"指向真实任务的最优"。光滑化让前者成立、后者打折。这是 §4.0 标题"可微≠有用"的最终精确含义。
一个"软世界作弊"的具体场景。为了让 gradient bias 的危害可感,设想一个抓取任务在 compliant 软接触仿真里训练:
- 软接触允许手指与物体**微小穿透**(穿透量 \(\sim\lambda_n/k\),§4.4)。
- 优化器发现一个"聪明"策略——让手指**故意轻微穿入**物体,利用穿透产生的接触力"勾住"物体,比正常包络抓取省力。
- 在软仿真里,这个策略 loss 极低(确实抓得稳),梯度也一路引导优化器走向它。
- 部署到真机(硬接触,零穿透)——手指无法穿入,"勾住"的力不存在,物体滑落,策略完全失效。
这就是 gradient bias 的危害:软世界的最优解(利用穿透)在硬世界根本不存在。梯度没有算错——它忠实地把优化器引向了软世界 \(f_\epsilon\) 的最优;但这个最优是"作弊解",依赖软化引入的非物理行为。\(k\) 越小(越软),可作弊的空间越大,bias 越严重。
本质洞察(补充):gradient bias 最隐蔽的危害不是"梯度不准",而是"梯度精确地把你引向一个**只在软世界存在的作弊解**"。优化器越强(越能找到全局最优),越容易钻这个空子——强优化器 + 有 bias 的仿真 = 高效地学会作弊。这解释了一个反直觉现象:有时用更弱的优化器/更短的训练反而 sim-to-real 更好(没来得及钻空子)。根治之道是减小软化(小 \(k/\epsilon\),但增 chaos)、或在硬接触上验证、或用 ContactNets 学真实接触——都是在 §4.6 三角里挪位置。
理论 · 两个失效机制的关系¶
chaos(方差)和 bias 是两个**独立**的失效维度,对应 §4.6 三角的两个顶点:
| 失效机制 | 三角顶点 | 数学根源 | 表现 | 解药方向 |
|---|---|---|---|---|
| chaos / 爆炸消失 | variance | 雅可比连乘谱半径 \(\rho^T\) | 梯度幅度爆炸 + 方向随机 | 缩短 horizon、降谱半径、随机光滑 |
| gradient bias | bias | 光滑化 \(f_\epsilon\ne f\) | 软世界最优 ≠ 硬世界最优 | 减小 \(\epsilon\)(但增 chaos)、bias 校正 |
它们常同时出现且互相纠缠:减小光滑参数 \(\epsilon\) 降 bias,但 \(\epsilon\) 小则单步雅可比尖锐、谱半径大、chaos 更严重。这正是三角约束的体现——降 bias 升 variance(chaos),你在三角内移动,按下葫芦浮起瓢。
理论 · 短 horizon 为何救 chaos:截断梯度的定量分析¶
四条解药里 SHAC(短 horizon + critic)最常用,也最值得把它的数学讲透——它如何用 horizon 长度换 chaos,又因此付出什么 bias。
设全 horizon \(T\) 的策略梯度方差由 §4.7 的连乘主导:\(\mathrm{Var}[\hat\nabla_T]\sim e^{2\Lambda T}\)(Lyapunov 指数 \(\Lambda>0\),方差随 \(T\) 指数增长)。SHAC 把 rollout 截断到短长度 \(h\ll T\),用一个学到的价值函数(critic)\(\hat V\) 估计 \(h\) 之外的回报:
variance 部分:截断后梯度只经历 \(h\) 步连乘,方差降到 \(\sim e^{2\Lambda h}\ll e^{2\Lambda T}\)。horizon 每砍一半,方差指数级下降——这是 SHAC 治 chaos 的机制。
bias 部分(代价):critic \(\hat V\) 不是真值函数 \(V\),有逼近误差 \(\|\hat V - V\|=\epsilon_V\)。这个误差通过 \(\gamma^h\nabla\hat V\) 进入梯度,引入 bias \(\sim\gamma^h\cdot\epsilon_V\cdot(\text{\)h$ 步内的灵敏度})$。
权衡的定量形态:总误差 \(\approx\underbrace{e^{\Lambda h}}_{\text{chaos,随 }h\uparrow}+\underbrace{C\gamma^h\epsilon_V}_{\text{critic bias,随 }h\downarrow}\)。对 \(h\) 求极值,最优 horizon \(h^\star\) 平衡两项——\(h\) 太大 chaos 主导(第一项爆),\(h\) 太小 critic bias 主导(第二项大,因为更依赖不准的 critic)。
本质洞察:SHAC 不是"消除"了 chaos,而是把 chaos(variance)换成了 critic bias——又一次 bias-variance 权衡(§4.6)!短 horizon 砍掉了长链连乘的方差爆炸,但代价是引入价值函数估计的 bias。所以 SHAC 本质上是在 §4.6 三角里挑了一个新折中点:用 critic bias 买 chaos 的减少。 这解释了练习 4.7.2 的答案——\(h^\star\) 的选取就是这个权衡的最优解。也解释了为什么 SHAC 需要一个好 critic:critic 越准(\(\epsilon_V\) 越小),就能用越短的 \(h\)(越少 chaos)而不付太多 bias。没有免费的午餐,只有把病态从一个顶点搬到另一个顶点。
与零阶路线的对比:随机光滑/MPPI(§4.5)治 chaos 的方式不同——它根本不做链式连乘(零阶对整条轨迹代价做一次差分),所以不经历 \(e^{\Lambda T}\) 放大,代价是采样方差 \(\sim 1/\sigma^2\)。SHAC(短 horizon 一阶)和 MPPI(零阶)是治 chaos 的两条不同路:前者缩短连乘链、付 critic bias;后者绕开连乘、付采样方差。二者又一次落在 §4.6 谱系的不同位置。
理论-工程桥接 · 四条解决方案及代价¶
针对两个机制,给出四条工程方案(§4.0 目标 4 承诺的四条,每条标代价):
| 方案 | 治哪个机制 | 原理 | 代价 |
|---|---|---|---|
| 短 horizon + critic(SHAC) | chaos | 短 rollout 限制连乘长度(\(\rho^T\) 中 \(T\) 变小),critic 补 horizon 外回报 | 引入 critic 的估计 bias + 训练复杂度 |
| α-order / hybrid(§4.6) | chaos(方差) | 不连续区切零阶,避开 \(\nabla f\) 爆炸 | 需估计局部方差选 \(\alpha\),零阶部分方差大 |
| adaptive barrier / smoothing | bias(兼顾 chaos) | 训练中 \(\epsilon\) 从大到小退火(先平滑后精确) | 退火 schedule 需调,过快退火重新引入 chaos |
| ContactNets(学习光滑表示) | bias + 可微性 | 学习光滑的 signed distance + 接触 Jacobian 表示,绕过对刚性动力学求导 | 需数据训练,泛化到未见接触受限 |
ContactNets 详解(Pfrommer-Halm-Posa 2020, CoRL, arXiv 2009.11193):与其对不可微的接触力求导,不如**学习一个光滑的隐式表示**——把接触结构编码成可微的 inter-body signed distance function 和 contact-frame Jacobian,用受 complementarity 与 maximum dissipation 启发的损失(每步是一个 QP)训练。这样神经网络学的是光滑量(SDF),天然匹配网络的归纳偏置,绕过了"对刚性/非光滑动力学直接求导"这个难题。它在 60 秒真实数据上就能预测真实的碰撞、非穿透、stiction。本质是把"求梯度的难题"转化为"学一个本就光滑的代理模型"。
本质洞察:四条方案分别攻击三角的不同顶点——SHAC 砍 horizon 降 chaos(动 variance),adaptive barrier 退火调 bias,ContactNets 换一个光滑代理(同时改善 bias 与可微性),α-order 自适应混合(动 variance)。没有一条能同时解决 chaos 和 bias 而无代价——每条都在三角内换一个折中点。选哪条取决于你的任务在三角里最缺哪个顶点:训练发散(chaos 主导)→ SHAC;sim-to-real gap 大(bias 主导)→ adaptive barrier 或 ContactNets。诊断的第一步永远是定位"我的问题是 chaos 还是 bias",再对症下药。
⚠️ 常见陷阱¶
🧠 思维陷阱:用梯度裁剪"治好"chaos
新手想法:"梯度爆炸?加 gradient clipping 就行了。" 现象/后果:裁剪后训练不再 NaN,但仍不收敛——在错误方向上小步游走。 根本原因:chaos 不仅放大梯度幅度,更使梯度**方向**变随机(Parmas 2018)。裁剪只压幅度,方向随机无解。 正确做法:从结构上限制 chaos——短 horizon(SHAC)减少连乘长度,或零阶/随机光滑避开 \(\nabla f\) 爆炸。裁剪只是创可贴,不是药。
💡 概念误区:以为减小光滑参数总能改善结果
新手想法:"\(\epsilon\)/\(\sigma\) 越小,越接近真实硬接触,结果越好。" 实际上:减小光滑参数降 bias 的同时**升 chaos**(单步雅可比尖锐、谱半径大)。存在一个最优光滑参数平衡 bias 与 chaos,而非越小越好。Parmar-Halm-Posa 2021 证明刚度越高训练越差正是此理。 为什么重要:这是三角约束的直接后果。盲目追求"逼真梯度"(小 \(\epsilon\))会因 chaos 而训练失败。
💡 概念误区:把可微仿真的训练失败归咎于"框架不够好"
新手想法:"换个更先进的可微仿真器(Dojo→某新工具)就能解决梯度问题。" 实际上:chaos 和 bias 是接触物理 + 长 horizon 的**数学本质**,不是任何框架能消除的。再先进的可微仿真器也逃不出三角约束。换框架可能改善数值实现(更稳的求解器),但治不了 chaos/bias 的根本病态。 为什么重要:避免在"找完美工具"上浪费时间。正确路径是理解三角、选对算法策略(SHAC/α-order/ContactNets),而非迷信工具。
练习¶
练习 4.7.1(推导题,草稿纸完成):考虑标量线性 rollout \(x_{t+1}=a\,x_t\),\(T\) 步。写出 \(\partial x_T/\partial x_0\),说明 \(|a|>1\) 时它随 \(T\) 指数增长、\(|a|<1\) 时指数衰减。定义 Lyapunov 指数 \(\Lambda=\log|a|\),验证梯度幅度 \(\sim e^{\Lambda T}\)。然后把 \(a\) 换成"接触段 \(a_c\gg1\)、自由段 \(a_f\approx1\)"的交替序列,论证:含 \(n\) 次接触的 rollout 梯度 \(\sim a_c^n\)——接触次数越多,爆炸越剧烈。这解释了为什么 contact-rich 任务的 BPTT 特别难。
练习 4.7.2(开放思考题):SHAC 用短 horizon + critic 限制 chaos。但 critic 本身有估计误差(bias)。请讨论:短 horizon 减少 chaos(variance)的同时,引入了 critic 的 bias——这是不是又回到了 bias-variance 权衡?短 horizon 长度 \(h\) 如何选取才能平衡"chaos(\(h\) 大则连乘长、chaos 重)"与"critic bias(\(h\) 小则更依赖 critic,bias 重)"?这道题揭示 SHAC 本质也是在三角里挑折中点。
练习 4.7.3(证明题):设单步接触雅可比 \(J=\partial x_{t+1}/\partial x_t\) 在硬接触极限下某个奇异值 \(\to\infty\)(恢复系数为 1 的弹性碰撞,扰动被完全保留甚至放大)。证明:\(T\) 步含一次此类碰撞的 rollout,其端到端雅可比的谱范数下界随该奇异值线性增长。再说明 compliant 软化(有限刚度 \(k\))如何把这个奇异值压到 \(O(\sqrt k)\) 量级——由此论证"软化降 chaos"的定量机制,并连接 §4.4 的 bias-Lipschitz 权衡(软化降 chaos 但升 bias)。
§4.8 可微仿真器架构对比与选型:Dojo / Brax / MJX / Drake ⭐⭐⭐¶
本节解决的问题:前面建立的所有理论(IFT、凸松弛、三条光滑路线、三角权衡、chaos)最终要落到"用哪个仿真器"上。本节给出四款主流可微仿真器的架构对比,并提炼出选型的三个**独立维度**——可微、GPU 并行、物理保真。核心结论是 §4.0 目标 5 承诺的:这三个维度相互独立,不存在三者同时占优的方案。 这是把理论转化为工程决策的最后一公里。
动机:为什么不能简单地"选最好的"¶
工程师选仿真器时最想要一句"哪个最好"。但这个问题本身是错的——不存在绝对最好的可微仿真器,只有"对你的任务最合适的"。因为可微仿真器在几个相互**正交**的维度上各有取舍,一个维度的优势常以另一个维度为代价。要做对选型,必须先把这些维度拆开。
反面:用错维度选型的后果¶
- 只看"可微":选了 Dojo(精确解析梯度),但你的任务是大规模 RL 需要几千并行环境——Dojo 不是为 GPU 大批量设计的,吞吐量跟不上。
- 只看"GPU 并行/快":选了 Brax spring 后端(GPU 上极快),但你的任务对接触保真敏感(精密装配)——spring 软接触穿透明显、保真不足。
- 只看"物理保真":选了 Drake(高保真接触),但你需要端到端可微做策略梯度——Drake 的可微性不如专为可微设计的 Dojo/MJX 顺手。
每个错误都源于"只盯一个维度"。正确的选型是先确定任务在三个维度上的需求权重,再匹配工具。
历史 · 四款仿真器的设计哲学¶
- Dojo(Howell et al. 2022, arXiv 2203.00806):MIT/Stanford 系,为"精确接触 + 平滑解析梯度"而生。核心是变分积分(variational integration)保稳定 + NCP/SOC 接触模型保准确 + 原始-对偶内点法保可解 + IFT 保可微(§4.3 详述)。设计哲学:梯度质量优先。代价是 CPU 为主、大批量并行不是强项。
- Brax(Google 2021):为"GPU 大规模并行 RL"而生。多后端——spring(软接触,最快)、positional(PBD 式)、generalized(更准)。用 JAX 实现,天然 GPU 并行 + 可微(AD through spring 动力学,§4.4 路线)。设计哲学:吞吐量优先。代价是 spring 接触保真有限。
- MuJoCo MJX(DeepMind 2023+):MuJoCo 的 JAX/XLA 重写,为"MuJoCo 保真 + GPU 并行 + 可微"而生。MuJoCo 的凸接触模型(Todorov 2014,§4.3)+ XLA 并行 + 显式注册的 forward/reverse 微分规则。DiffMJX(用 Diffrax 积分器 + 光滑化碰撞检测)进一步改善梯度——但有"time-of-impact 引起梯度振荡"的已知问题,需自适应积分器 + 碰撞检测光滑化代理来缓解(与 §4.1 第一/三层不连续直接对应)。设计哲学:保真与并行并重,可微为辅。
- Drake(MIT/TRI):为"高保真接触 + 严谨工程"而生。SAP 凸接触求解器(Castro 2022,§4.3/§4.4)有收敛保证,接触建模最严谨。设计哲学:物理保真与可靠性优先,主打 manipulation/操作。可微性通过 AutoDiffXd 支持,但不是为大规模可微 RL 优化的。
理论 · 三个独立维度的精确刻画¶
把选型空间拆成三个正交轴(这是本节的核心认知工具 E:系统分类):
| 维度 | 含义 | 高分代表 | 与本专题理论的联系 |
|---|---|---|---|
| 可微性(differentiability) | 梯度的质量(光滑、低 bias、稳定) | Dojo(IFT 精确平滑梯度) | §4.2-§4.6:IFT、光滑路线、三角 |
| GPU 并行(parallelism) | 大批量环境的吞吐量 | Brax、MJX(JAX/XLA) | §4.5:随机光滑的 \(N\) 个样本 = \(N\) 个并行环境 |
| 物理保真(fidelity) | 接触物理的准确度(无穿透、能量守恒、接触模式正确) | Drake(SAP)、MuJoCo(凸接触) | §4.6 三角的保真顶点 |
本质洞察:这三个维度**相互独立**——可微不蕴含并行(Dojo 可微但 CPU 为主),并行不蕴含保真(Brax spring 并行但软接触),保真不蕴含可微(Drake 保真但可微非强项)。不存在三者同时占满的方案,因为它们各有内在张力:高保真接触(硬、NCP)难以 GPU 大批量并行(求解器迭代不规整);GPU 友好的软接触(spring)牺牲保真;精确可微梯度(小 \(\kappa\)/\(\epsilon\))又与 §4.7 的 chaos 冲突。选型 = 在这个三维空间里,按任务需求选一个折中点。 这与 §4.6 的 bias-variance-保真三角是同构的——只不过那是"梯度性质"的三角,这是"仿真器能力"的三角,二者通过"光滑参数"耦合。理解这个三维独立性,是选型不犯错的根本。
理论 · 为什么并行与高保真接触有内在张力¶
上面断言"高保真接触难以 GPU 大批量并行",这一点值得讲透,因为它是三维不可兼得的**物理根源**,不是工程懒惰。
GPU 的并行模型是 SIMD(单指令多数据)——几千个线程**同步**执行**相同**的指令流,遇到分支(if/else)就走 warp divergence(线程束分化)严重降效。而硬接触求解器(NCP 内点法、LCP Lemke)的特点恰恰是**迭代次数不规整**:
- 不同环境的接触配置不同(有的 0 个接触、有的 10 个接触),求解器迭代次数差异巨大(从几次到几百次)。
- 内点法的步长、激活集判定都含数据依赖的分支。
- 几千个环境里只要有一个"难解"(接触退化、病态),整批就被它拖慢(同步障碍)。
这与 SIMD 要求的"规整、同步、无分支"根本冲突。 反观软接触(spring)——它是一个**固定的显式公式** \(F=k\delta+c\dot\delta\),无迭代、无分支、所有环境执行完全相同的指令流,天然 SIMD 友好。这就是为什么 Brax spring 能在 GPU 上跑几千环境而 Dojo(硬 NCP)不行——不是 Dojo 实现差,而是硬接触求解的**算法结构与 SIMD 硬件结构不匹配**。
本质洞察:可微/并行/保真的三角约束,其"并行 vs 保真"这条边的根源在**算法结构与硬件结构的匹配度**——高保真接触(硬、迭代、分支)匹配 CPU(擅长不规整控制流),GPU 友好的接触(软、显式、无分支)牺牲保真。这不是哪个工具没写好,而是"迭代求解的不规整性"与"SIMD 的规整性"之间的硬件级矛盾。 MuJoCo MJX 的折中之道是用**凸接触 + 固定迭代次数**(牺牲一点收敛精度换规整性),让它勉强 SIMD 化——这正是它在"并行与保真"之间挑了个中间点的算法原因。理解这层硬件-算法耦合,才算真正理解了 §4.8 三角约束的物理性而非偶然性。
理论 · 三款可微仿真器的梯度流机制对比¶
把"可微"这个维度再拆细——三款仿真器**如何让梯度流过接触**,机制其实不同:
| 仿真器 | 梯度流机制 | 在切换面的行为 | 数学依据 |
|---|---|---|---|
| Dojo | 对内点法收敛点的 NCP 系统做 IFT,保留小 \(\kappa\) | 全局光滑(\(\kappa\) 抹平切换) | §4.2/§4.3 IFT + barrier 光滑 |
| Brax spring | 对显式 spring 动力学直接 AD | 处处光滑(动力学本就 \(C^\infty\)) | §4.4 解析光滑(compliant) |
| MuJoCo MJX | 对每个 primitive 注册 fwd/rev 规则,链式组合;DiffMJX 用 Diffrax + 光滑碰撞检测 | 有 TOI 振荡,需自适应积分器 + 碰撞光滑代理 | §4.4 + §4.1 第一/三层数值显现 |
这张表的深意:三款仿真器"可微"的方式分别对应本专题三条路线的不同——Dojo 走 §4.3(凸松弛/NCP + IFT),Brax 走 §4.4(解析光滑/compliant),MJX 走混合(AD + 光滑化代理)。所以"选哪个仿真器"在数学上等价于"选哪条求梯度路线"——§4.8 的工具选型和 §4.3-§4.5 的路线选择是同一个决策的两种表述。这把全章的理论(路线)和工程(工具)彻底打通。
对比性思维(不是 X 而是 Y):常见误解是"三款仿真器都用 AD 求梯度,只是实现不同"。不是——Dojo 不用 AD 反传求解器内部(它用 IFT 绕过求解过程,§4.2),Brax 才是**真正对动力学 AD,MJX 是注册规则 + AD 混合。它们的梯度**数学来源不同(IFT vs AD vs 混合),因此在切换面的行为、bias 来源、数值稳定性都不同。把它们都归为"AD 求梯度"会错判它们的梯度性质——比如以为 Dojo 也会有 Brax 那样的软接触 bias(其实 Dojo 的 bias 来自 \(\kappa\) 不是软化),或以为它们在切换面行为一样(其实 Dojo 全局光滑、Brax 处处光滑、MJX 有 TOI 振荡)。
理论-工程桥接 · 选型决策流程¶
把选型做成一个决策流程(认知工具:选型决策图):
你的任务主要诉求是什么?
│
├─ 端到端可微 + 梯度质量优先(轨迹优化、系统辨识、对梯度敏感的策略学习)
│ └─ 接触保真也要高? → Dojo(NCP + IFT,平滑精确梯度)
│ └─ 可接受软接触? → MJX/DiffMJX(保真+并行+可微折中)
│
├─ 大规模并行 RL 吞吐量优先(PPO/SAC 训几千并行环境)
│ └─ 接触简单/可软化? → Brax spring(最快)
│ └─ 要 MuJoCo 级保真? → MuJoCo MJX(XLA 并行 + 凸接触)
│
├─ 物理保真 + 可靠性优先(精密操作、装配、需要可信接触)
│ └─ → Drake(SAP,收敛保证,接触建模最严谨)
│
└─ 接触不可微是核心障碍、梯度怎么都不好用
└─ → 不要硬求梯度,改用第六批采样 MPC(MPPI/CEM,零阶,§4.5)
或 ContactNets 学光滑代理(§4.7)
最后一个分支极重要:当三角约束让任何可微方案都不满意时,正确的工程决策是放弃一阶梯度,回到零阶(采样 MPC)——这呼应 §4.5 的核心洞察(接触上零阶常胜一阶)。选型的最高境界是知道"什么时候不该用可微仿真"。
系统性分类 · 四款仿真器完整对比表¶
本专题的"工具森林图":
| 仿真器 | 接触模型 | 求梯度方式 | 可微性 | GPU 并行 | 物理保真 | 最适场景 |
|---|---|---|---|---|---|---|
| Dojo | NCP + SOC(硬,§4.3) | IFT on IPM(小 \(\kappa\) 平滑) | 高(平滑精确) | 中(CPU 为主) | 高 | 轨迹优化、系统辨识 |
| Brax | spring/positional/generalized | AD(§4.4 路线) | 中(spring 软梯度) | 极高(JAX) | 低-中(依后端) | 大规模并行 RL |
| MuJoCo MJX | 凸接触(Todorov,§4.3) | 注册的 fwd/rev 规则 + DiffMJX 光滑化 | 中-高(有 TOI 振荡问题) | 高(XLA) | 中-高 | 保真+并行+可微折中 |
| Drake | SAP 凸(Castro,§4.3/4.4) | AutoDiffXd | 中(非大规模优化) | 低(CPU) | 高(收敛保证) | 高保真操作、装配 |
这张表的核心信息:没有一行在"可微/并行/保真"三列全部最高——每款都在某个维度领先、另一维度妥协。这是 §4.0 目标 5 的精确兑现,也是本节的最终结论。
理论-工程桥接 · 三个真实选型场景走一遍¶
把抽象的三维权衡落到三个具体场景,演示如何用三维需求权重做决策(这也是练习 4.8.1 的范例解法)。
场景 A:四足机器人步态轨迹优化(offline,少量轨迹,要精确梯度)。 - 需求权重:可微(高,要精确梯度做 iLQR)、并行(低,offline 少量轨迹)、保真(中-高,步态接触要准)。 - 选择:Dojo。理由——它在"可微 + 保真"两维占优,正是此任务所需;并行弱不要紧(offline 不需大批量)。梯度全局光滑(小 \(\kappa\)),适合 iLQR 的 backward pass(§4.9)。放弃的维度(并行)对本任务无关紧要。
场景 B:4096 并行环境训抓取策略(online RL,吞吐量决定训练速度)。 - 需求权重:并行(极高,吞吐量是瓶颈)、可微(中,PPO 可零阶可一阶)、保真(中)。 - 选择:MuJoCo MJX(若要保真)或 Brax(若接触可软化)。理由——并行维度必须占满(否则训练慢到不可行),MJX 用凸接触 + XLA 在并行与保真间折中。注意:若用一阶梯度遇到 §4.7 chaos,fallback 到 PPO 的零阶策略梯度(§4.5)——这正是 GI-PPO 的混合思路。放弃的维度(梯度精确性)可由零阶 PPO 补偿。
场景 C:精密插孔装配的接触验证(保真第一,不训练)。 - 需求权重:保真(极高,装配公差敏感)、可微(低,只验证不优化)、并行(低)。 - 选择:Drake(SAP)。理由——保真维度必须占满(SAP 有收敛保证、接触建模最严谨),可微/并行无关紧要(不训练、单场景)。这里**根本不需要可微**——硬选最高保真的工具即可。
本质洞察:三个场景的选型逻辑完全一致——先确定哪个维度是"硬约束"(必须占满,否则任务不可行),再在剩余维度里挑最优。场景 A 硬约束是可微、B 是并行、C 是保真。没有"通用最优工具",只有"对当前硬约束维度占优的工具"。 这就是 §4.8 三维独立性的实践含义:选型不是找全能选手,而是认清你的任务卡在哪个维度,选那个维度的专精工具。新手最常犯的错,是用一个维度(如"听说 Dojo 梯度好")选所有任务——而正确做法是每个任务重新识别其硬约束维度。
⚠️ 常见陷阱¶
🧠 思维陷阱:以为"可微仿真器"是一个统一的类别,选哪个差别不大
新手想法:"Dojo、Brax、MJX 都是可微仿真器,随便选一个都能 backward。" 现象/后果:选了 Brax spring 做对梯度质量敏感的系统辨识,梯度 bias 大导致辨识参数错误;或选 Dojo 做大规模 RL,吞吐量跟不上训练慢得无法接受。 根本原因:可微仿真器在可微/并行/保真三维上差异巨大,"都能 backward"只说明都在三角内某处,不代表都适合你的任务。 正确做法:先明确任务在三维上的需求权重,再用决策流程匹配。"能 backward"是门槛,不是选型依据。
💡 概念误区:把"GPU 并行"和"可微"当成同一件事
新手想法:"Brax/MJX 在 GPU 上跑得快,所以它们的梯度也最好。" 实际上:GPU 并行(吞吐量)和可微(梯度质量)是**独立维度**。Brax spring 并行极快但梯度 bias 大(软接触);Dojo 梯度精确但并行弱。快不等于梯度好。 为什么重要:混淆这两个维度会让你用吞吐量指标选梯度敏感的任务,南辕北辙。
💡 概念误区:认为 DiffMJX 的梯度振荡是 MJX 的 bug
新手想法:"MJX 的梯度在某些情况下振荡,肯定是实现有问题。" 实际上:DiffMJX 的梯度振荡来自 time-of-impact(碰撞时刻)在固定步长积分下的不连续——这是 §4.1 第一/三层不连续的数值显现,是接触物理的本质,不是 MJX 独有的 bug。解药是自适应积分器(消除 TOI 振荡)+ 碰撞检测光滑化代理(消除非可微操作的 offset)。 为什么重要:理解振荡的物理根源,才能用对解药(改积分器/光滑碰撞检测),而非徒劳地"修 bug"。
练习¶
练习 4.8.1(开放思考题):给定三个任务——(a) 用可微仿真做四足机器人步态的轨迹优化;(b) 用 PPO 在 4096 个并行环境训抓取策略;(c) 精密插孔装配的接触仿真验证。分别为每个任务选一款仿真器,并用"可微/并行/保真"三维需求权重论证你的选择。说明每个选择放弃了哪个维度、为什么这个放弃可以接受。
练习 4.8.2(开放思考题):本节论证可微/并行/保真三维独立、不可兼得。但技术在进步——MJX 试图同时做到保真+并行+可微。请讨论:是否存在某种技术突破能打破这个三角(如新的接触求解器既保真又 GPU 友好又可微)?还是说这个三角是接触物理的根本约束(如同 §4.6 的 bias-variance)、任何工具都逃不出?给出你的论证。(提示:思考"硬接触求解器的迭代不规整性"与"GPU SIMD 并行要求规整"之间的根本张力。)
练习 4.8.3(跨章综合题,需综合 §4.1-§4.8):你要为一个"动态抓取 + 投掷"任务(contact-rich,含多次接触建立/断开 + stick-slip)搭建一个完整的可微优化管线。请综合全章知识回答:(1) 接触的哪几层不连续会出现(§4.1)?(2) 用哪条求梯度路线(§4.3-§4.5)?为什么?(3) 预期会遇到 chaos 还是 bias 病态(§4.7)?(4) 选哪款仿真器(§4.8)?(5) 如果纯一阶梯度训练发散,你的 fallback 方案是什么(§4.5/§4.6/§4.7)?写出完整的技术决策链,每一步引用对应小节的理论依据。这道题串起整个专题。
§4.9 跨专题桥接:梯度信号流向何处 ⭐⭐¶
本节解决的问题:本专题的产出是"接触解对输入的梯度"。这个梯度不是终点,而是下游许多方法的输入。本节明确这些接口——梯度如何成为接触隐式轨迹优化(专题 6)的引擎、如何与采样型 MPC(第六批专题 4)在 score-function 上统一、如何对接具身智能模块 05(可微分仿真 S04/S05),以及本专题与本目录其他接触力学专题(30 时步法、60 接触隐式、70 非光滑)的关系。这是 R14 跨章桥接的集中兑现。
桥接一 · 流向专题 6:接触隐式轨迹优化与可微 MPC¶
回顾 §4.0 那张三专题分工表:专题 3 求 forward,本专题求 backward(梯度),专题 6 用这个梯度闭环优化控制序列。具体接口如下。
接触隐式轨迹优化(Contact-Implicit Trajectory Optimization, CITO)要解:
其中 \(\mathrm{ContactStep}\) 就是专题 3 的接触求解器。用梯度法(iLQR/DDP/直接法)求解时,每一步都需要 \(\partial x_{t+1}/\partial(x_t,u_t)\)——这正是本专题 §4.3 给出的接触雅可比! 没有本专题的梯度,CITO 的 backward pass 无从谈起。
| 本专题产出 | 专题 6 如何使用 |
|---|---|
| \(\partial x_{t+1}/\partial x_t\)(状态雅可比,§4.3) | iLQR backward pass 的 \(A_t\) 矩阵 |
| \(\partial x_{t+1}/\partial u_t\)(控制雅可比,§4.3) | iLQR backward pass 的 \(B_t\) 矩阵 |
| 光滑化 \(\kappa/\epsilon\)(§4.3/4.4) | CITO 的 smoothing schedule(先平滑后精确,§4.7 adaptive) |
| chaos 诊断(§4.7) | 决定 CITO 用短 horizon(SHAC 式)还是全 horizon |
理论-工程桥接:CALIPSO、Contact-Implicit MPC 等专题 6 方法(§4.0 表格已列)的核心,正是把本专题的接触梯度嵌进一个 LQR backward pass(回顾控制理论专题 3.5 的 Riccati)。本专题 §4.3 的 \(A_t,B_t\) 矩阵,喂进 LQR 的 Riccati 递推,就得到 CITO 的反馈增益——这是接触力学与最优控制的精确接缝。理解这一点,就明白为什么本专题是"承上启下的枢纽"(§4.0):上承专题 3 的 forward,下启专题 6 的优化。
桥接二 · 与第六批采样 MPC 的统一(再访)¶
§4.5 已论证:随机光滑的零阶梯度估计器(ZoBG)与 MPPI/CEM 是同一个数学对象。这里把这个桥接补完整——
第六批专题 4 的采样型 MPC(MPPI/CEM)面对 contact-rich 任务时**根本不求接触梯度**(零阶),所以对 §4.1 三层不连续天然免疫。本专题的视角让我们理解:采样 MPC 不是"避开了可微仿真的难题",而是站在 bias-variance 谱系(§4.6)的零阶端——它用方差换取对不连续的鲁棒性。
| 本专题概念 | 第六批采样 MPC 对应 |
|---|---|
| ZoBG 零阶估计器(§4.5) | MPPI 的 score-function 更新 |
| 高斯光滑参数 \(\sigma\)(§4.5) | MPPI 的采样噪声协方差 |
| α-order 混合(§4.6) | GI-PPO 式一阶+零阶混合 |
| 接触上零阶胜一阶(§4.5/4.7) | 为什么 MPPI 在灵巧操作上鲁棒 |
本质洞察(跨专题):可微仿真(本专题,一阶)和采样 MPC(第六批,零阶)长期被视为竞争范式。但 §4.6 的 α-order 框架揭示它们是**同一谱系的两端**。本专题的最大跨学科价值,是用 bias-variance 把这两个阵营**统一**起来——让你在面对一个 contact-rich 任务时,不是问"该用可微仿真还是采样 MPC",而是问"这个任务的不连续程度让最优 \(\alpha\) 落在谱系哪里"。这个视角转换,是本专题给整个机器人优化领域的认知贡献。
桥接三 · 对接具身智能模块 05(可微分仿真 S04/S05)¶
具身智能模块 05 的 S04/S05 讲可微分仿真的工程实践与应用。本专题为它提供**数学地基**:
- S04/S05 讲"怎么用",本专题讲"为什么能用、何时失效":模块 05 会教你用 Brax/MJX 写可微 rollout 训策略;本专题告诉你这些梯度的 bias/variance 来源(§4.6)、何时会 chaos 发散(§4.7)、该选哪个仿真器(§4.8)。
- 接口:模块 05 遇到"训练发散""sim-to-real gap"等问题时,回到本专题 §4.7 的诊断框架(是 chaos 还是 bias)和 §4.8 的选型;模块 05 的工程技巧(如 SHAC 实现)的理论依据在本专题 §4.7。
桥接四 · 与本目录接触力学其他专题的关系¶
本专题在接触力学板块(80)中的位置,与前后专题构成完整链条:
| 专题 | 关注 | 与本专题(专题 4)的关系 |
|---|---|---|
| 30 时步法与非光滑动力学 | forward simulation(MDI、LCP、Moreau-Jean、Stewart-Trinkle、SAP) | 前置:本专题在它的 forward solver 上求梯度。它解"\(x_{k+1}\) 是什么",本专题解"\(x_{k+1}\) 对输入的导数" |
| 60 接触隐式(轨迹优化) | 用接触梯度闭环优化控制 | 下游:直接消费本专题 §4.3 的雅可比作为 iLQR 的 \(A_t,B_t\) |
| 70 非光滑分析(数学工具) | Clarke 次微分、半光滑、变分不等式 | 数学工具供应:本专题 §4.1 的 Clarke 广义梯度、§4.2 的 Robinson 强正则、半光滑 Newton 都源自它 |
本质洞察(板块结构):接触力学板块的逻辑是"数学工具(70)→ 前向求解(30)→ 求梯度(本专题 4)→ 闭环优化(60)"。本专题处在从"会求解"到"会优化"的关键过渡——它把 70 提供的非光滑分析工具,应用到 30 的前向求解器上,产出 60 所需的梯度。缺了本专题,30 和 60 之间就断了一座桥:你能 forward simulate(30)、有 Clarke 次微分的工具(70)、知道怎么做轨迹优化(60),但不知道如何把接触求解器的梯度算出来喂给优化器——这正是本专题填补的空白。
桥接五 · 一条端到端数据流(把所有专题串起来)¶
为了让"枢纽"的角色彻底具体化,我们追踪一个 contact-implicit MPC 在线滚动一步的完整数据流,标注每个环节用到的专题与结论(这是练习 4.9.3 的范例骨架):
- 传感器 → 状态估计:得到当前状态 \((q_k,v_k)\)。(前置:状态估计章节)
- 状态 → 前向接触求解:求解器解出 \((q_{k+1},v_{k+1})\)。用专题 30 的 Stewart-Trinkle / Anitescu 凸 QP / SAP。这一步只产出"下一步状态是什么"。
- 前向解收敛点 → 接触雅可比:在收敛点用 IFT(本专题 §4.2-§4.3)组装 KKT 矩阵 \(K\),Schur 补求解,得到 \(A_k=\partial x_{k+1}/\partial x_k\)、\(B_k=\partial x_{k+1}/\partial u_k\)。这是本专题的核心产出。
- 雅可比 → 二次化代价:把 \(A_k,B_k\) 与代价的二阶展开组合,形成局部 LQR 子问题。用控制理论专题 3.5 的 LQR 结构。
- LQR 子问题 → Riccati backward:倒向解 Riccati 递推(控制理论 3.5),得到反馈增益 \(K_k\) 与值函数二次项。这一步把本专题的 \(A_k,B_k\) 真正"用起来"。
- Riccati 解 → 控制更新:iLQR/DDP 的 forward pass 用反馈律更新控制序列 \(u_{0:T-1}\)。用专题 6 的 CITO。
- 控制序列 → 执行第一步:MPC 只执行 \(u_0\),下一时刻回到第 1 步。
排查顺序(当 MPC 在某些 contact-rich 配置发散时):
- 先查第 2 步(forward):求解器是否收敛?残差是否过大?→ 专题 30 的诊断(容差、迭代上限、退化接触)。
- 再查第 3 步(梯度):\(K\) 是否病态(Delassus 算子条件数差,§4.3)?是否恰在激活集切换面(§4.1 第三层、§4.2 IFT 失效)?梯度是否 chaos(§4.7 SNR 低)?→ 本专题诊断。
- 再查第 5 步(Riccati):Riccati 递推是否因 \(A_k\) 跳变而病态(练习 4.9.1)?→ 控制理论 3.5 + 本专题。
- 最后查第 6 步(CITO):非凸 TO 是否陷入坏局部极小?→ 专题 6 + 考虑 §4.5 零阶 fallback。
本质洞察(系统视角):这条 7 步数据流揭示了一个被反复印证的事实——本专题(第 3 步)是整条链的咽喉。它上游接专题 30 的 forward(第 2 步),下游喂控制理论 3.5 的 Riccati(第 5 步)和专题 6 的 CITO(第 6 步)。任何一个 contact-rich 优化系统,本质上都是这条链;任何此类系统的发散,都能定位到这 7 步中的某一步。掌握了这条链 + 每步对应的诊断专题,你就有了一张"接触优化系统的故障地图"——这正是本专题作为板块枢纽的终极价值:它不只是一个孤立的"求梯度"技巧,而是连接前向仿真、最优控制、轨迹优化的中央接缝。
⚠️ 常见陷阱¶
🧠 思维陷阱:以为本专题的梯度可以直接拿去做任意下游任务而无需适配
新手想法:"算出接触梯度就万事大吉,喂给任何优化器都行。" 实际上:不同下游对梯度的要求不同——CITO(专题 6)需要分片光滑梯度且能容忍切换(用 iLQR 的正则化吸收);策略学习需要 chaos 受控的梯度(短 horizon);系统辨识需要低 bias 梯度(小 \(\kappa/\epsilon\))。同一个梯度,对不同下游的"可用性"不同。 正确做法:根据下游任务的需求(§4.6 三角的哪个顶点),反推该用哪条路线、哪个光滑参数。梯度是手段,下游需求决定怎么求。
💡 概念误区:认为采样 MPC(第六批)和可微仿真(本专题)是非此即彼的选择
新手想法:"要么用可微仿真,要么用采样 MPC,二选一。" 实际上:§4.6 的 α-order 框架证明它们是同一谱系的两端,可以**混合**(GI-PPO)。最优方案常是"自由空间用一阶(可微仿真)、接触切换用零阶(采样)"的混合,而非二选一。 为什么重要:把它们看成对立会错过混合方案的优势。本专题的统一视角让你能自由组合两者。
练习¶
练习 4.9.1(开放思考题):本专题 §4.3 的接触雅可比 \(A_t=\partial x_{t+1}/\partial x_t\) 喂进专题 6 的 iLQR backward pass(对应控制理论专题 3.5 的 Riccati 递推)。请回顾 LQR 的 Riccati 方程,说明:当 \(A_t\) 因接触切换而跳变(§4.1 第三层)时,Riccati 递推会受什么影响?iLQR 通常如何处理这种跳变(提示:line search、regularization、或在切换面做特殊处理)?这道题连接本专题与控制理论的 Riccati。
练习 4.9.2(开放思考题):本目录板块逻辑是"70 工具 → 30 前向 → 4 梯度 → 60 优化"。假设你跳过本专题(专题 4),直接想用专题 30 的 Stewart-Trinkle solver 做专题 60 的轨迹优化。你会在哪一步卡住?你会试图用什么"土办法"求梯度(如有限差分)?这个土办法相比本专题的 IFT 方法有什么劣势(提示:成本、精度、§4.7 的病态)?这道题让你体会本专题填补的空白。
练习 4.9.3(跨章综合题,需综合本专题 + 第六批 + 专题 6 + 控制理论 3.5):给定一个 contact-implicit MPC 系统,它在线滚动优化。请画出完整的数据流:传感器状态 → 接触求解器(专题 30 forward)→ 接触梯度(本专题 §4.3)→ iLQR/LQR backward(控制理论 3.5 Riccati)→ 控制序列(专题 6 CITO)→ 执行。在每个箭头标注"传递的是什么量、用了哪个专题的哪个结论"。然后回答:如果这个系统在某些 contact-rich 配置下 MPC 发散,你会按什么顺序排查(forward 解不准?梯度 chaos?Riccati 病态?),分别对应哪个专题的诊断工具?这道题把四个专题串成一个完整系统。
§4.10 实战选型:何时用一阶梯度、何时用零阶/MPPI、何时学代理 ⭐⭐⭐¶
本节解决的问题:§4.8 解决"选哪个仿真器(工具)",§4.9 解决"梯度流向哪个下游(接口)"。本节解决夹在二者之间、却最贴近日常研究的那个决策——面对一个具体的 contact-rich 学习/控制任务,到底该用哪种梯度信号? 是一阶解析梯度(Dojo/可微仿真)、零阶采样梯度(MPPI/ES)、α 混合(GI-PPO),还是先学一个光滑代理(ContactNets)再优化?这一问比"是什么、为什么、何时失效"更进一步——它要求把三条路线压成一张**可执行的决策流程**,并辅以三条经验法则。这是把全章理论转化为方法选择的落点,也是系统性分类(认知工具 E)在方法论层面的体现。
动机:理论都懂了,面对任务还是不知道选哪个¶
设想一个任务:"用学习方法让机械手把一个魔方拧到目标姿态"——典型的 contact-rich、多接触建立/断开、含 stick-slip。三层不连续、IFT、三角权衡、chaos 这些理论都清楚了,但落到第一行代码时,最朴素的问题浮现——该调用哪种梯度? 用 Dojo 的解析梯度做 SHAC?用 MPPI 纯采样?用 GI-PPO 混合?还是先用 ContactNets 学个代理再优化?
理解"每条路线是什么、为什么、何时失效",并不自动给出面对新任务时的**决策顺序**——这正是本节要补足的一环。它与 §4.8 是两个正交的决策:§4.8 选的是"仿真器"(Dojo 还是 Brax,工具层面),本节选的是"梯度信号的种类"(一阶、零阶还是代理,方法层面)。同一个仿真器可以产出不同种类的梯度信号——例如 Brax 既能给一阶 AD 梯度,也能在其外套零阶随机光滑——所以"选了哪个仿真器"和"用它的哪种梯度"必须分开决定。
反面:用"默认一阶"或"默认零阶"一把梭会怎样¶
新手面对选择时,最常见的两种"省事"做法,各自的翻车现场:
- 默认一阶("可微仿真最先进,当然用解析梯度"):直接对 100 步魔方 rollout 做
loss.backward()。结果——§4.7 的 chaos 让梯度方向随机(SNR→0),加上 §4.5 接触切换处一阶方差发散,训练从第一步就在错误方向游走。你以为"用了最先进的可微仿真",其实踩进了一阶估计器在不连续 + 长 horizon 上的双重死穴。 - 默认零阶("接触太难,无脑 MPPI 最稳"):全程纯采样。结果——在魔方的**自由调整段**(手指还没接触、纯运动学摆位),零阶估计器白白承受 \(O(d/\sigma^2)\) 的高维方差,收敛慢得离谱;而这些段本是一阶梯度又快又准的主场(§4.6 区域一 \(\alpha^\star\approx1\))。你为了躲接触的不连续,在不该躲的地方也躲了,整体效率低下。
本质洞察:两种"一把梭"都错在**用全局固定策略应对局部异质的任务**。一个 contact-rich rollout 在时间上是**异质的**——自由段(光滑,宜一阶)与接触段(不连续,宜零阶)交替出现(§4.6 已证 \(\alpha^\star\) 随之在 1 和 0 间切换)。正确的选型不是"选一种用到底",而是"按任务的局部结构匹配梯度信号"。把 §4.6 那条"随轨迹起伏的 \(\alpha^\star\) 曲线"离散化成工程师能执行的判断,就得到下面的决策流程——它是那条曲线在方法选择上的直接推论,而非另起炉灶的经验清单。
历史:从"二选一"到"两条路本就等价"¶
方法选型的认识,和 §4.0 的领域史同步演进,但有它自己的关键节点:
- 早期"二选一"对立(2018 前后):可微仿真派(一阶,"梯度精确高效")与采样派(零阶,ES/MPPI,"无需求导更鲁棒")被视为竞争阵营,社区争论"哪个更好"。
- Pang et al. 2023(T-RO,arXiv 2206.10787,关键转折):这篇拿下 King-Sun Fu 最佳论文荣誉提名的工作,证明了解析光滑(compliant/barrier)与随机光滑(randomized smoothing)在简单系统上理论等价、在复杂系统上经验等价——两条看似不同的路,光滑出来的是同一个东西。这一步把"二选一"的对立**消解**了:它们不是对手,是同一个光滑化的两种实现(§4.6 的 bias 同源由此得到原始论证)。同时它系统刻画了 contact-rich 规划的三大难——接触模式爆炸(contact-mode explosion)、刚性非光滑梯度、非凸——并用局部光滑做全局规划。
- Suh et al. 2022(ICML,α-order)+ Son et al. 2023(NeurIPS,GI-PPO):把"等价"进一步做成"可调混合"——既然两端同源,就用一个 \(\alpha\) 在它们之间自适应插值(§4.6)。选型从"选一端"变成"选混合系数"。
- Suh-Pang-Zhao-Tedrake 2025(IJRR,arXiv 2505.02291,Contact Trust Region):最新一步指出,连"信赖域"的形状都该随接触改——标准椭球信赖域假设各向同性的局部光滑,与接触的单边性(unilateral,只能推不能拉)根本不符;CTR 用一个尊重单边约束的信赖域做 MPC,再拼接成全局规划。这代表选型认识的成熟形态:不只选梯度种类,连优化的几何都按接触的物理结构定制。
阶段小结:方法选型史的主线是"从对立到统一再到定制"——先认为一阶/零阶二选一,后(Pang 2023)证明两条光滑路等价、对立消解,再(α-order/GI-PPO)做成可调混合,最后(CTR)连优化几何都按接触单边性定制。本节的决策流程站在这条线的终点:不问"用一阶还是零阶",而问"任务的局部结构要求什么混合、什么几何"。
理论 · 选型的三个决定性问题¶
把"选哪种梯度信号"拆成三个依次回答的问题(认知工具 E:把开放选择做成穷举式决策维度,而非拍脑袋)。这三个问题的答案唯一确定你该用哪条路线——
问题一:你的任务在时间上"光滑段 vs 接触段"的比例如何?(决定一阶/零阶/混合)
- 几乎全程光滑(自由空间为主,接触是偶发轻碰)→ 一阶为主(§4.6 区域一 \(\alpha^\star\approx1\))。可微仿真的解析梯度在这里又快又准。
- 几乎全程密集接触(如灵巧操作、装配,接触切换频繁)→ 零阶为主(§4.5/§4.6 区域二 \(\alpha^\star\approx0\))。MPPI/ES 对密集不连续免疫。
- 光滑段与接触段显著交替(多数真实 manipulation)→ α 混合(GI-PPO 式),按局部方差动态选 \(\alpha\)。
问题二:你的 horizon 有多长?(决定是否必须治 chaos)
- 短 horizon(\(\lesssim\) 一二十步,或单步 MPC)→ chaos 尚可控(\(e^{\Lambda T}\) 未爆),一阶可用。
- 长 horizon(数十至上百步 BPTT)→ chaos 几乎必爆(§4.7),即使用一阶也必须配 SHAC(短 rollout + critic)或退回零阶。horizon 长度是"能否直接用一阶"的硬闸门。
问题三:接触本身可不可微 / 是不是黑箱?(决定是否需要代理或纯零阶)
- 接触求解器可微(Dojo/Brax/MJX,能给 \(\nabla f\))→ 一阶/α 混合可选。
- 接触是黑箱或含不可求导操作(闭源引擎、网格碰撞检测)→ 只能零阶(§4.5 的杀手锏)或学 ContactNets 代理(§4.7)。
- 有真实接触数据、想长期复用 → 学 ContactNets 光滑代理:把"求梯度的难题"一次性转化为"学一个本就光滑的模型",之后对代理求导既快又稳(§4.7)。
本质洞察:这三个问题对应三角(§4.6)与 chaos(§4.7)的三个不同侧面——问题一问的是"局部 bias-variance 该偏哪端"(空间/时间异质性),问题二问的是"variance 会不会被 horizon 放大到失控"(chaos),问题三问的是"可微性这个前提是否成立"(黑箱与否)。三个问题独立,但答案合起来唯一确定方法。选型不是玄学,是这三个问题的查表——这就是把 §4.1–§4.9 的理论压缩成可执行决策的方式。
理论-工程桥接 · 选型决策流程图¶
把三个问题串成一张可执行的决策树(对照 §4.8 的"选仿真器"决策图——那张选工具,这张选梯度信号的种类与训练策略):
任务到手,先问三个问题(接触可微?horizon 多长?光滑/接触比例?)
│
├─【问题三】接触是黑箱 / 不可求导?
│ ├─ 是,且无数据 → 纯零阶:MPPI/CEM(§4.5)或 ES。不要试图求梯度。
│ └─ 是,但有真实接触数据 → 学 ContactNets 光滑代理(§4.7),再对代理一阶优化。
│
├─【问题二】horizon 很长(数十~上百步 BPTT)?
│ ├─ 是 → chaos 必爆(§4.7)。一阶必须配 SHAC(短 rollout+critic);
│ │ 或直接零阶/MPPI(不经历连乘)。纯长 horizon 一阶 = 自杀。
│ └─ 否(短 horizon / 单步 MPC)→ 进入问题一。
│
└─【问题一】光滑段 vs 接触段比例?
├─ 几乎全光滑 → 一阶为主(Dojo/可微仿真解析梯度,α≈1)
├─ 几乎全接触 → 零阶为主(MPPI,α≈0),可微仿真在此无优势
└─ 显著交替 → α 混合(GI-PPO/α-order,§4.6):自由段信一阶、接触段信零阶
这张图的用法:从上往下走,先排除黑箱(问题三)、再排除长 horizon 失控(问题二)、最后才在可微 + 可控的前提下按局部结构选混合(问题一)。顺序不能颠倒——若 horizon 长却先纠结一阶零阶比例,会在错误前提下优化;若接触是黑箱却先想 SHAC,根本没有 \(\nabla f\) 可用。
理论-工程桥接:这张决策图不是经验清单,每个分支都有前面小节的精确理论支撑——黑箱分支来自 §4.5(零阶不需 \(f\) 可微)、长 horizon 分支来自 §4.7(chaos 的 \(e^{\Lambda T}\))、比例分支来自 §4.6(\(\alpha^\star\) 随局部不连续变化)。所以"会查这张表"等价于"理解了全章理论"——表只是理论的索引。反过来,如果某个分支你不理解为什么,回到对应小节补:这正是本节作为"落地一公里"的设计——它把散落九节的结论收口成一个决策动作。
理论 · 三条经验法则(把决策图浓缩成可记忆的口诀)¶
决策图之外,再给三条能刻进肌肉记忆的经验法则,它们是无数 contact-rich 项目踩坑后的结晶:
法则一:先零阶探路,再一阶提速。 面对全新的 contact-rich 任务,先用 MPPI/零阶跑通(它鲁棒、不会因不连续崩,能快速验证任务可解、reward 设计对不对);跑通后,若发现大量自由段拖慢收敛,再引入一阶梯度(α 混合)加速那些光滑段。反过来(先上一阶)常常连"任务到底能不能解"都没验证就陷进 chaos 调参。这条法则对应 §4.5/§4.6——零阶是安全的起点,一阶是有条件的优化。
法则二:horizon 能短则短。 无论用哪种梯度,优先缩短 horizon(配 critic 补长程回报,SHAC 式)。短 horizon 同时缓解 chaos(§4.7,连乘链短)和降低单次 rollout 成本。只有当 critic 实在学不好、必须长 rollout 时才放长——而那时几乎注定要退回零阶。这条对应 §4.7——horizon 是 chaos 的总开关。
法则三:怀疑梯度前,先怀疑保真。 训练失败时,先确认仿真物理本身是否可信(穿透?能量爆炸?接触模式错乱?),再去诊断梯度(chaos?bias?)。很多"梯度问题"其实是保真问题——一个会穿透的软仿真,梯度再"正确"也指向一个作弊解(§4.6 保真顶点、§4.7 gradient bias)。这条对应 §4.6——保真是独立于梯度的第三个轴,且常是被忽略的真凶。
本质洞察:三条法则各自锚定三角(§4.6)的一个顶点的实践推论——法则一管 variance(零阶稳)、法则二管 chaos(短 horizon 降 variance 放大)、法则三管保真(别让 fidelity 问题伪装成梯度问题)。它们合起来就是"在三角里安全移动"的工程纪律:从低风险角(零阶、短 horizon、先验保真)起步,再有条件地向高效率角(一阶、长程、高保真)移动。记住这三条,比记任何一个公式都更能让你在真实项目里不翻车——这是本专题从"数学"到"手艺"的转化。
对比性思维(不是 X 而是 Y):选型的两个顽固误解¶
误解一:"可微仿真出现后,采样 MPC 就过时了。" 不是——Pang 2023 证明两条光滑路等价、Suh 2022 证明接触上零阶常胜一阶、CTR(2025)这种最新工作核心仍是采样式 MPC。采样 MPC 不是被可微仿真取代的旧范式,而是 bias-variance 谱系永久的零阶端,在密集接触上至今难以替代。可微仿真扩充了工具箱(多了一阶端),没有淘汰任何东西。
误解二:"选型一旦定了就不变。" 不是——最优选择**随训练阶段变化**(法则一:先零阶后一阶)、随 rollout 时间变化(§4.6:自由段一阶、接触段零阶)、随任务课程变化(adaptive barrier 从软到硬退火,§4.7)。选型是一个动态过程,不是一次性决定。把它当一次性决定,会错过"先探路后提速""局部自适应""课程退火"这些关键加速手段。
⚠️ 常见陷阱¶
🧠 思维陷阱:把"方法选型"等同于"仿真器选型"(混淆 §4.10 与 §4.8)
新手想法:"我选了 Dojo,那梯度方法就定了(用 Dojo 的解析一阶梯度)。" 现象/后果:在长 horizon 密集接触任务上用 Dojo 的一阶梯度,撞上 chaos + 不连续方差,训练发散;却以为"Dojo 不行"而换工具,换了还是发散。 根本原因:混淆了两个正交决策——仿真器(工具,§4.8)和梯度信号种类(方法,§4.10)。同一个可微仿真器既能产出一阶梯度,也能在其外套零阶随机光滑/MPPI。选了可微仿真器**不等于**必须用它的一阶梯度。 正确做法:先按 §4.8 选满足"可微/并行/保真"硬约束的仿真器,再**独立地**按 §4.10 决策图选梯度信号种类(可能是在 Dojo 外套 MPPI 的零阶)。两个决策分开做。
💡 概念误区:以为"先零阶探路"是浪费时间,应直接上最优方法
新手想法:"既然知道最终要用 α 混合,何必先跑零阶?直接上混合不是更快?" 实际上:全新任务在跑通前,你**不知道** reward 设计对不对、任务可不可解、\(\sigma\) 该多大。零阶探路是用最鲁棒的方法(不会因不连续崩)先把这些不确定性消掉;在一个未验证的任务上直接调 α 混合,遇到不收敛你分不清是"任务本身错了"还是"混合系数没调好",调试空间爆炸。 为什么重要:先零阶探路本质是"先降低问题的不确定性维度,再优化"——这是工程方法论,不是浪费。跳过它常导致在错误前提下耗费数倍调参时间。
💡 概念误区:认为有了决策图就不用理解背后理论
新手想法:"照着 §4.10 决策图查表就行,§4.1–§4.9 的推导可以跳过。" 实际上:决策图的每个分支都是某节理论的结论(黑箱→§4.5、长 horizon→§4.7、比例→§4.6)。当你的任务**落在分支边界**(如 horizon"中等"、接触"半黑箱")时,查表给不出答案,必须回到理论判断"我的任务离哪个极端更近、为什么"。 为什么重要:决策图是理论的索引而非替代。只会查表的人遇到边界情形会卡死或乱选;理解理论的人能在边界上做有依据的插值判断。这正是本节反复强调"表只是理论收口"的原因。
练习¶
练习 4.10.1(开放思考题):对以下三个任务,分别走一遍 §4.10 的三问决策流程,给出梯度信号选型并说明每一问的答案如何缩小选择:(a) 单步 MPC 让四足机器人在平地小跑(接触规律、horizon 短);(b) 50 步 BPTT 训练灵巧手转笔(密集接触、长 horizon、可微 MJX);(c) 用一个闭源商业仿真器优化抓取(黑箱、有少量真机数据)。对每个任务指出:用一阶/零阶/混合/代理中的哪个,配不配 SHAC,为什么。
练习 4.10.2(开放思考题):法则一说"先零阶探路、再一阶提速"。请设计一个具体的两阶段训练 schedule:第一阶段纯 MPPI/零阶,第二阶段切到 GI-PPO 式 α 混合。讨论:(1) 用什么信号判断"该从第一阶段切到第二阶段"(提示:reward 是否稳定收敛、自由段占比估计)?(2) 切换时 \(\alpha\) 应从 0 缓升还是直接跳到中间值?(3) 这个 schedule 和 §4.7 的 adaptive barrier 退火(从软到硬)能否叠加使用?三者(零阶→一阶、软→硬、短 horizon→长)是三个独立的课程维度吗?
练习 4.10.3(跨章综合题,需综合 §4.5/§4.6/§4.8/§4.10 + 第六批 MPPI):Pang et al. 2023(T-RO)证明解析光滑与随机光滑等价。请论证:这个"等价"如何同时影响 §4.8 的仿真器选型和 §4.10 的方法选型?具体地——(1) 若两条光滑路等价,那么"选可微仿真器(解析光滑)"和"在普通仿真器外套随机光滑"在 bias 上应无本质差异,差异只在哪里(提示:variance 来源、是否需 \(f\) 可微、GPU 并行性)?(2) 据此,什么情况下你宁可用"普通仿真器 + 随机光滑"而非"专用可微仿真器 + 解析梯度"(提示:黑箱、GPU 大批量、§4.5 桥接)?(3) Contact Trust Region(CTR, 2025)相比标准 MPPI 的改进点(尊重接触单边性),在你的选型决策里会让你在什么任务上优先考虑它?这道题把"两路等价"这个理论结论落到工具与方法的双重选型上。
本章常见误解汇总¶
把全章散落的认知陷阱集中成一张表,便于回看时快速自检。左列是常见错误想法,右列是正确理解。
| 误解 | 正确理解 | 出处 |
|---|---|---|
| "接触不可微"是单一现象,一种方法就能解决 | 三层结构不同的不连续(测度集中/方向相关/激活集切换),破坏经典导数的方式与对应工具都不同 | §4.1 |
.backward() 能跑通 = 梯度有物理意义 |
AD 算的是"程序实现的函数"的导数,物理不可微时它与"物理量的导数"分道扬镳 | §4.0, §4.1 |
| 牛顿碰撞律 \(v^+=-ev^-\) 光滑,所以接触可微 | 碰撞映射可能光滑,但碰撞时刻 \(t_c(q_0)\) 依赖初值,端到端梯度须含事件灵敏度 | §4.1 |
| 应该对求解器迭代展开式微分(unrolling) | 应在收敛点用 IFT,反传成本与迭代次数解耦、避免瞬态污染与 OOM | §4.2 |
| IFT 给出的梯度处处正确 | IFT 只在强正则(\(\partial F/\partial z\) 非奇异)区域成立,激活集切换面上失效 | §4.2 |
| 凸松弛是为了让接触更逼真 | 凸松弛是为了可解性(凸优化必收敛)与可微性(强正则→IFT),物理保真反而略损 | §4.3 |
| OptNet/LCP 梯度处处光滑 | 分片光滑——KKT 矩阵维度随激活集跳变,切换面两侧不同雅可比 | §4.3 |
| compliant 接触刚度越大梯度越好(越逼真) | 刚度大降 bias 但升梯度 Lipschitz(chaos 更重),存在最优刚度 | §4.4, §4.7 |
| log-barrier 和 penalty 是一回事 | barrier 绝不允许越界(\(\phi\to0\) 趋于 \(+\infty\)),penalty 允许违反,可微性边界不同 | §4.4 |
| 随机光滑的梯度有 bias(因为加了噪声) | 两估计器对 \(f_\sigma\) 都无偏,有的是方差;bias 只来自 \(\sigma\) 的光滑化偏移 | §4.5 |
| 一阶梯度方差总比零阶小,永远用一阶 | 接触不连续处一阶(用 \(\nabla f\))方差爆炸,零阶(只用 \(f\))免疫;接触越硬一阶越吃亏 | §4.5, §4.6 |
| 可微仿真(一阶)一定比采样 MPC(零阶)先进 | 二者是 bias-variance 谱系两端,光滑任务一阶优、刚性任务零阶优,无绝对先进 | §4.5, §4.9 |
| 加大采样数 \(N\) 能消除随机光滑所有误差 | \(N\) 只消采样方差,消不掉 \(\sigma\) 的光滑化 bias;二者两个旋钮 | §4.5, §4.6 |
| 梯度 bias 低 = 物理更准 | bias 是梯度层差异、保真是轨迹层差异,三角两个独立顶点 | §4.6 |
| 训练发散是梯度算错了 | 梯度可能对 \(f_\epsilon\) 完全正确,发散源于 chaos(方差)或 bias(软世界≠硬世界最优) | §4.7 |
| 梯度裁剪能治好 chaos | 裁剪只压幅度,chaos 使方向也随机,方向错的小步仍错 | §4.7 |
| 换个更先进的可微仿真器就能解决梯度问题 | chaos/bias 是接触物理+长 horizon 的数学本质,任何工具逃不出三角约束 | §4.7, §4.8 |
| "可微仿真器"是统一类别,选哪个差别不大 | 可微/并行/保真三维差异巨大,"都能 backward"只是门槛非选型依据 | §4.8 |
| GPU 并行快 = 梯度好 | 并行(吞吐量)与可微(梯度质量)是独立维度,快不等于梯度好 | §4.8 |
| 可微仿真与采样 MPC 非此即彼 | α-order 框架下二者是谱系两端,可混合(GI-PPO),非二选一 | §4.6, §4.9 |
本章小结¶
本专题围绕一个核心问题展开:当机器人与世界接触时,输出对输入的导数到底存不存在、怎么算、有没有用。 我们的答案分四层:
- 接触为何不可微(§4.1)——三层结构不同的不连续:Dirac 测度(第一层)、Clarke 广义梯度(第二层)、B-subdifferential(第三层),分别破坏经典导数的有界性、唯一性、连续性。
- 怎么算梯度(§4.2-§4.5)——共同引擎是隐函数定理(IFT,§4.2),它把 backward 成本与 forward 迭代次数解耦。三条路线:凸松弛+IFT(§4.3,硬模型软求梯度)、解析光滑(§4.4,软模型自然可微)、随机光滑(§4.5,黑箱期望平滑,与采样 MPC 同源)。
- 梯度何时失效(§4.6-§4.7)——bias-variance-保真三角(§4.6)刻画三条路线的折中;chaos(雅可比连乘谱半径)与 gradient bias(光滑化偏移)是两个独立失效机制(§4.7),四条解药(SHAC/α-order/adaptive barrier/ContactNets)各攻击三角不同顶点。
- 工具、选型与桥接(§4.8-§4.10)——可微/并行/保真三维独立、不可兼得(§4.8,Dojo/Brax/MJX/Drake 各占一隅);梯度流向专题 6 的 CITO、与第六批采样 MPC 在 score-function 上统一、对接模块 05(§4.9);面对具体任务时,用"光滑/接触比例·horizon·黑箱"三问决策流程选一阶/零阶/混合/学代理(§4.10)。
全章最高本质洞察:可微接触领域的所有方法,本质上都在"bias-variance-物理保真"三角内选一个折中点,没有方法能同时占据三个顶点——这不是工程未完善,而是光滑化的信息论极限。"可微"(任何 \(\epsilon,\sigma>0\))只保证你落在三角内某处,不保证落在对当前任务有用的顶点。这就是"可微≠有用"的最终精确含义,也是本专题区别于"给仿真器加
.backward()"这种朴素理解的根本。
核心推导链速览¶
把全章的关键推导按因果顺序串成一条链,便于回看时快速重建逻辑。每一环都标注"由什么得到、用了什么工具":
- 接触 = 互补问题(专题 30 前置):刚体接触 forward 落地为 \(0\le\lambda\perp g\ge0\)。
- 互补在 \(\lambda=g=0\) 不可微(§4.1):三层不连续——Dirac 测度(第一层)、Clarke 集合(第二层)、激活集切换(第三层)。
- 求解 ≠ 求导(§4.2):解由最优性条件 \(F(z,\theta)=0\) 定义,不由求解代码定义;对前者求导用 IFT,绕过迭代过程。
- IFT 主公式(§4.2):\(\partial z/\partial\theta=-(\partial F/\partial z)^{-1}\partial F/\partial\theta\),要求 \(\partial F/\partial z\) 非奇异(Robinson 强正则)。
- 凸松弛让 \(\partial F/\partial z\) 非奇异(§4.3):把非凸库仑摩擦换成凸约束,KKT 矩阵 \(K=\begin{bmatrix}M&-J^\top\\J&0\end{bmatrix}\) 在 \(M\succ0\)+LICQ 下非奇异。
- 有效矩阵 \(S=M+J^\top DJ\)(§4.2/§4.3):Schur 补 = Delassus 算子,\(D=\mathrm{diag}(\lambda_i/g_i)\) 是接触激活强度;\(S\) 的条件数贯穿全章(决定梯度数值稳定性)。
- 内点法 \(\kappa\) 光滑化(§4.3):\(\lambda g=\kappa>0\) 把切换面磨成光滑双曲线 \(\lambda=\kappa/g\),bias \(\sim O(\kappa)\)。
- 或换软模型(§4.4):compliant(有限 \(k\))/ barrier(\(-\hat\kappa\log\phi\),力 \(=\hat\kappa/\phi\))让动力学源头光滑;bias×Lipschitz \(\sim O(1)\)。
- 或对期望求导(§4.5):随机光滑 \(f_\sigma=\mathbb E_w[f(\cdot+w)]\);Stein 引理证明一阶 \(\mathbb E[\nabla f]\)=零阶 \(\mathbb E[fw/\sigma^2]\)(同量、异方差)。
- 接触上零阶胜一阶(§4.5):不连续使 \(\nabla f\) 含 Dirac,一阶方差发散;零阶只用 \(f\),方差 \(\sim a^2/\sigma^2\) 有限。
- 三者统一于 MSE = bias² + variance(§4.6):bias(光滑化偏移)与 variance(采样/尖锐)正交可独立调;α-order 在谱系上自适应选最优混合。
- 梯度还会病态(§4.7):BPTT 连乘谱半径使梯度 \(\sim e^{\Lambda T}\) 爆炸、SNR\(\to0\)(方向随机);裁剪治不好,需短 horizon(SHAC,付 critic bias)或零阶。
- 工具 = 路线的化身(§4.8):Dojo(§4.3 凸松弛+IFT)、Brax(§4.4 解析光滑)、MJX(混合);可微/并行/保真三维独立不可兼得。
- 梯度流向下游(§4.9):\(A_t,B_t\) → 控制理论 3.5 Riccati → 专题 6 CITO;零阶分支 ≡ 第六批 MPPI。
这条链的主旋律:从"接触不可微"(第 2 环)出发,IFT(第 4 环)是引擎,三条路线(第 7-10 环)是把不可微变可微的三种手段,MSE 分解(第 11 环)是衡量它们的统一标尺,chaos(第 12 环)是即便可微也可能失效的警告,工具与桥接(第 13-14 环)是落地。读懂这 14 环的因果,就读懂了整个专题。
符号表¶
本章新引入的核心数学符号及含义:
| 符号 | 含义 | 首次出现 |
|---|---|---|
| \(\phi,\ \phi_i(q)\) | gap 函数(接触间隙,signed distance),正为分离负为穿透 | §4.1 |
| \(\lambda_n,\ \lambda_t\) | 法向、切向接触冲量(或力) | §4.1 |
| \(\Lambda\) | 法向冲量大小(§4.1)/ Lyapunov 指数(§4.7),按上下文区分 | §4.1, §4.7 |
| \(e\) | 恢复系数(coefficient of restitution, CoR) | §4.1 |
| \(\partial_{\mathrm{Cl}}f\) | Clarke 广义梯度(凸紧集) | §4.1 |
| \(\mathcal A(q)\) | 激活集(active set),\(\{i:\phi_i(q)=0\}\) | §4.1 |
| \(\mu\) | 库仑摩擦系数 | §4.1 |
| \(F(z,\theta)\) | 求解器最优性条件残差(KKT/NCP 残差) | §4.2 |
| \(\partial z/\partial\theta\) | 解对参数的灵敏度(IFT 目标) | §4.2 |
| \(N_C(z)\) | 凸集 \(C\) 在 \(z\) 处的法锥(Robinson 广义方程) | §4.2 |
| \(\bar z,\ \bar\theta,\ y\) | VJP 中的上游梯度、参数梯度、伴随变量 | §4.2 |
| \(M\) | 广义质量矩阵 | §4.3 |
| \(J_n,\ J_t\) | 法向、切向接触雅可比 | §4.3 |
| \(K\) | KKT(鞍点)矩阵 | §4.3 |
| \(v_k^{\mathrm{free}}\) | 无接触时的自由速度 | §4.3 |
| \(\kappa\) | 内点法 barrier(中心路径)参数 / IPC barrier 刚度 | §4.3, §4.4 |
| \(J_n M^{-1}J_n^\top\) | Delassus 算子(接触空间柔度) | §4.3 |
| \(k,\ \epsilon\) | compliant 接触刚度、光滑尺度 | §4.4 |
| \(\hat d,\ \hat\kappa\) | IPC barrier 激活距离、刚度 | §4.4 |
| \(f_\epsilon,\ f_\sigma\) | 解析光滑、随机光滑后的动力学 | §4.4, §4.5 |
| \(\sigma\) | 随机光滑高斯噪声标准差 | §4.5 |
| \(\widehat\nabla^{\mathrm{FO}},\ \widehat\nabla^{\mathrm{ZO}}\) | 一阶(FoBG/reparameterization)、零阶(ZoBG/score-function)梯度估计器 | §4.5 |
| \(\bar\nabla f\) | bundled gradient(捆绑梯度) | §4.5 |
| \(\alpha,\ \alpha^\star\) | α-order 混合系数、其最优值 | §4.6 |
| \(\rho\) | 单步雅可比谱半径 | §4.7 |
| \(A_t,\ B_t\) | rollout 单步状态/控制雅可比(喂 iLQR) | §4.9 |
定理速查表¶
本章核心定理/公式及一句话说明:
| 定理/公式 | 一句话说明 | 对应节 |
|---|---|---|
| 三层不连续分类 | 接触不可微 = Dirac 测度 + Clarke 广义梯度 + B-subdifferential 三层 | §4.1 |
| 法向互补条件 | \(\lambda_n\ge0,\ \phi\ge0,\ \lambda_n\phi=0\):有间隙则无力、有力则无间隙 | §4.1 |
| 最大耗散原理 | \(\lambda_t=\arg\min_{\|\lambda_t\|\le\mu\lambda_n}v_t^\top\lambda_t\):摩擦力使耗散最大 | §4.1 |
| Dini 隐函数定理 | \(\partial z/\partial\theta=-(\partial F/\partial z)^{-1}\partial F/\partial\theta\),要求 \(\partial F/\partial z\) 非奇异 | §4.2 |
| adjoint(VJP)公式 | 先解 \((\partial F/\partial z)^\top y=\bar z\),再 \(\bar\theta=-(\partial F/\partial\theta)^\top y\),一次线性求解 | §4.2 |
| Robinson 强正则 | 线性化广义方程解映射 Lipschitz 单值 ⟺ LICQ+SSOSC,是 IFT 在约束世界的护照 | §4.2 |
| Anitescu 凸松弛收敛 | 每步解严格凸 QP,解序列在 \(h\to0\) 时收敛到 MDI 解 | §4.3 |
| 接触凸 QP | \(v_{k+1}=\arg\min\tfrac12(v-v^{\mathrm{free}})^\top M(v-v^{\mathrm{free}})\) s.t. 非穿透:投影到可行集 | §4.3 |
| KKT 矩阵非奇异性 | \(M\succ0\) + \(J_n^{\mathcal A}\) 行满秩(LICQ)⟹ \(K\) 非奇异,IFT 适用 | §4.3 |
| 内点法 barrier 光滑互补 | \(\lambda_i g_i=\kappa>0\) 处处光滑,\(\kappa\) 兼任求解中心化与梯度光滑化 | §4.3 |
| bias-Lipschitz 守恒 | 解析光滑:bias \(\times\) 梯度 Lipschitz \(\sim O(1)\),不可兼得 | §4.4 |
| log-barrier 无穿透 | \(-\hat\kappa\log\phi\) 在 \(\phi\to0\) 趋于 \(+\infty\),硬保证非穿透且处处光滑 | §4.4 |
| Heaviside 高斯光滑 | \(\mathbb E_w[H(x+w)]=\Phi(x/\sigma)\),期望把阶跃抹成光滑 CDF | §4.5 |
| score-function 估计器 | \(\widehat\nabla^{\mathrm{ZO}}=\frac1N\sum f(\theta+w_i)w_i/\sigma^2\),无偏、不需 \(f\) 可微 | §4.5 |
| reparameterization 估计器 | \(\widehat\nabla^{\mathrm{FO}}=\frac1N\sum\nabla f(\theta+w_i)\),无偏、低方差但需 \(f\) 可微 | §4.5 |
| α-order estimator | \(\widehat\nabla^\alpha=\alpha\widehat\nabla^{\mathrm{FO}}+(1-\alpha)\widehat\nabla^{\mathrm{ZO}}\),无偏、\(\alpha^\star\) 最小化方差 | §4.6 |
| bias-variance-保真三角 | 三顶点不可兼得,所有方法在三角内选折中点 | §4.6 |
| Lyapunov 梯度爆炸 | BPTT 梯度 \(\sim e^{\Lambda T}\),\(\Lambda>0\)(接触谱半径大)时指数爆炸且方向随机 | §4.7 |
| 三维独立选型 | 可微/GPU 并行/物理保真相互独立,无三者同时占优方案 | §4.8 |
公式速查卡¶
把全章最常被引用的公式集中成一张卡,按用途分组,便于查阅时一目了然。
梯度引擎(§4.2): - IFT 主公式:\(\dfrac{\partial z}{\partial\theta}=-\Big(\dfrac{\partial F}{\partial z}\Big)^{-1}\dfrac{\partial F}{\partial\theta}\) - 反向模式(adjoint):先解 \(\big(\partial F/\partial z\big)^\top y=\bar z\),再 \(\bar\theta=-\big(\partial F/\partial\theta\big)^\top y\) - 光滑互补 KKT 雅可比:\(\dfrac{\partial F}{\partial z}=\begin{bmatrix}M&-J^\top\\\mathrm{diag}(\lambda)J&\mathrm{diag}(g)\end{bmatrix}\) - 有效矩阵(Schur 补 = Delassus):\(S=M+J^\top D J,\ D=\mathrm{diag}(\lambda_i/g_i)\)
凸松弛(§4.3): - 接触凸 QP:\(v_{k+1}=\arg\min_v\tfrac12(v-v^{\mathrm{free}})^\top M(v-v^{\mathrm{free}})\) s.t. \(J_nv+\phi/h\ge0\) - KKT 鞍点矩阵:\(K=\begin{bmatrix}M&-J_n^\top\\J_n&0\end{bmatrix}\) - 内点法中心路径:\(\lambda_i g_i=\kappa\),解出 \(\lambda=\kappa/g\)
解析光滑(§4.4): - 线性弹簧:\(\lambda_n=k\,\delta_+\)(\(C^0\));Hertz:\(\lambda_n=k\,\delta_+^{3/2}\)(\(C^1\));softplus:\(\lambda_n=k\epsilon\log(1+e^{-\phi/\epsilon})\)(\(C^\infty\)) - IPC barrier 力:\(\lambda_n=\hat\kappa/\phi\),等效刚度 \(\partial\lambda_n/\partial\phi=-\hat\kappa/\phi^2\) - bias-Lipschitz 守恒:bias \(\times\) Lipschitz \(\sim O(1)\)
随机光滑(§4.5): - 光滑化函数:\(f_\sigma(\theta)=\mathbb E_{w\sim\mathcal N(0,\sigma^2I)}[f(\theta+w)]\) - 零阶(ZoBG):\(\widehat\nabla^{\mathrm{ZO}}=\tfrac1N\sum_i f(\theta+w_i)\,w_i/\sigma^2\) - 一阶(FoBG):\(\widehat\nabla^{\mathrm{FO}}=\tfrac1N\sum_i\nabla f(\theta+w_i)\) - Stein 引理:\(\mathbb E_w[\nabla f(\theta+w)]=\mathbb E_w[f(\theta+w)\,w/\sigma^2]\) - 不连续处方差:零阶 \(\sim a^2/\sigma^2\)(有限),一阶 \(\to\infty\)(Dirac 导数)
统一与诊断(§4.6-§4.7): - α-order:\(\widehat\nabla^\alpha=\alpha\widehat\nabla^{\mathrm{FO}}+(1-\alpha)\widehat\nabla^{\mathrm{ZO}}\) - MSE 分解:\(\mathrm{MSE}=\text{bias}^2+\text{variance}\) - 最优混合:\(\alpha^\star=\dfrac{\sigma^2_{\mathrm{ZO}}-c}{\sigma^2_{\mathrm{FO}}+\sigma^2_{\mathrm{ZO}}-2c}\) - chaos 梯度:\(\|\hat\nabla\|\sim e^{\Lambda T}\),\(\mathrm{SNR}\sim e^{-\Lambda T}\to0\) - 事件触发灵敏度:\(\partial t_c/\partial q_0=-(\partial q/\partial q_0)/v^-\)
知识点总表¶
| 编号 | 知识点 | 核心要点 | 对应节 | 难度 |
|---|---|---|---|---|
| 1 | 接触三层不连续 | Dirac/Clarke/B-subdiff 三层,工具各异 | §4.1 | ⭐⭐ |
| 2 | 隐函数定理求梯度 | 对最优性条件全微分,backward 与迭代解耦 | §4.2 | ⭐⭐⭐ |
| 3 | Robinson 强正则 | IFT 在约束/互补世界的推广 | §4.2 | ⭐⭐⭐ |
| 4 | 凸松弛梯度(LCP/NCP) | 凸化为可微服务,KKT+IFT 给解析雅可比 | §4.3 | ⭐⭐⭐ |
| 5 | 内点法 barrier 光滑化 | \(\kappa\) 兼任求解与梯度光滑(Dojo 核心) | §4.3 | ⭐⭐⭐ |
| 6 | compliant 解析光滑 | 有限刚度让动力学源头光滑 | §4.4 | ⭐⭐⭐ |
| 7 | log-barrier(IPC) | 障碍函数保无穿透且光滑,与内点法同构 | §4.4 | ⭐⭐⭐ |
| 8 | 随机光滑 | 期望/卷积抹平不连续,不需 \(f\) 可微 | §4.5 | ⭐⭐⭐⭐ |
| 9 | 一阶 vs 零阶估计器 | 同估同量、差在方差;接触上零阶常胜 | §4.5 | ⭐⭐⭐⭐ |
| 10 | bias-variance-保真三角 | 三顶点不可兼得的统一框架 | §4.6 | ⭐⭐⭐⭐ |
| 11 | α-order 谱系统一 | 一阶/零阶是谱系两端,可自适应混合 | §4.6 | ⭐⭐⭐⭐ |
| 12 | chaos 梯度病态 | 雅可比连乘谱半径 \(\rho^T\) 爆炸/消失 | §4.7 | ⭐⭐⭐ |
| 13 | gradient bias | 软世界最优≠硬世界最优 | §4.7 | ⭐⭐⭐ |
| 14 | 四条工程解药 | SHAC/α-order/adaptive barrier/ContactNets | §4.7 | ⭐⭐⭐ |
| 15 | 三维独立选型 | 可微/并行/保真正交,四工具各占一隅 | §4.8 | ⭐⭐⭐ |
| 16 | 跨专题桥接 | 流向 CITO、统一采样 MPC、对接模块 05 | §4.9 | ⭐⭐ |
| 17 | 实战选型决策流程 | 三问(光滑/接触比例·horizon·黑箱)定一阶/零阶/混合/代理 | §4.10 | ⭐⭐⭐ |
累积项目:本章新增模块¶
本项目贯穿"仿真与数值"板块——从专题 3 的前向接触求解器,到本专题的可微化,到专题 6 的接触隐式优化,逐章累积成一个完整的"可微接触优化栈"。
前情回顾:在专题 3(时步法)的累积模块中,你已实现一个 1D/2D 弹球或推箱子的前向接触求解器(Stewart-Trinkle LCP 或 Anitescu 凸 QP),能 forward simulate 一条接触轨迹。
本章新增模块——给前向求解器装上 backward pass:
-
三层不连续的可视化诊断器(§4.1):对你的前向求解器,扫描一段含接触的轨迹,标记出三类不连续发生的时刻——碰撞冲量时刻(第一层)、stick-slip 切换时刻(第二层)、激活集变化时刻(第三层)。输出一张"不连续时刻图",让你直观看到梯度会在哪里出问题。
-
IFT backward pass(§4.2-§4.3):在前向求解器的收敛点,实现 KKT 矩阵 \(K\) 的组装与 Schur 补求解,得到 \(\partial(q_{k+1},v_{k+1})/\partial(q_k,v_k,u_k)\)。验证:与有限差分(central difference)对比,在远离切换面处应高度吻合,在切换面附近应观察到分片光滑的跳变。
-
三种光滑化的对比实验(§4.4-§4.5):对同一个 1D 弹球,分别用 (a) compliant 软化(调 \(k\))、(b) 内点法小 \(\kappa\)、(c) 随机光滑(调 \(\sigma\)、\(N\)),画出三者给出的 \(\partial q^+/\partial q_0\) 曲线,叠加在硬接触的 Clarke 广义雅可比上。直观体会三条路线的 bias 与光滑度差异(§4.6 三角的实证)。
-
chaos 诊断(§4.7):把弹球 rollout 加长到含多次碰撞,计算端到端雅可比的谱范数随 horizon 的增长曲线,估计 Lyapunov 指数。验证"接触次数越多梯度越爆炸"(练习 4.7.1)。
-
(档位 4)α-order 自适应梯度(§4.6):实现一个简单的 α-order estimator,在自由段用一阶、碰撞段用零阶,对比纯一阶/纯零阶在推箱子任务上的收敛曲线。
本模块的产出——一个能给出可诊断、可对比梯度的 1D/2D 可微接触求解器,将作为专题 6(接触隐式轨迹优化)累积模块的直接输入:那里你会把本模块的 \(A_t,B_t\) 雅可比喂进 iLQR backward pass,闭环优化控制序列。
延伸阅读¶
按主题分类,标注难度(⭐ 入门 / ⭐⭐ 核心 / ⭐⭐⭐ 进阶 / ⭐⭐⭐⭐ 研究级)。
可微仿真器与解析梯度(路线一、二): - ⭐⭐⭐ Howell et al., Dojo: A Differentiable Physics Engine for Robotics, 2022(arXiv 2203.00806)——NCP+内点法+IFT 的平滑解析梯度,本专题 §4.3 的核心来源。 - ⭐⭐⭐ Werling et al., Fast and Feature-Complete Differentiable Physics for Articulated Rigid Bodies with Contact(Nimble),RSS 2021(arXiv 2103.16021)——boxed LCP 解析梯度。 - ⭐⭐⭐ Amos & Kolter, OptNet: Differentiable Optimization as a Layer in Neural Networks, ICML 2017(arXiv 1703.00443)——KKT 隐函数微分的深度学习落地,§4.2/§4.3 的 OptNet 式雅可比。 - ⭐⭐⭐⭐ Robinson, Strongly Regular Generalized Equations, Math. Oper. Res. 5(1):43, 1980——IFT 在变分不等式上的推广,§4.2 强正则理论根源。 - ⭐⭐ Anitescu, Optimization-based simulation of nonsmooth rigid multibody dynamics, Math. Program., 2006——凸松弛奠基,§4.3 的理论根。 - ⭐⭐⭐ Castro et al., An Unconstrained Convex Formulation of Compliant Contact(Drake SAP),2022——凸+柔性接触,§4.3/§4.4。 - ⭐⭐⭐ Hu et al., DiffTaichi: Differentiable Programming for Physical Simulation, ICLR 2020(arXiv 1910.00935)——源码变换路线的可微物理。
随机光滑与 bias-variance(路线三、统一): - ⭐⭐⭐⭐ Suh, Simchowitz, Zhang, Tedrake, Do Differentiable Simulators Give Better Policy Gradients?, ICML 2022 Outstanding Paper(arXiv 2202.00817)——bias-variance 框架与 α-order,§4.6 核心。 - ⭐⭐⭐ Suh, Pang, Tedrake, Bundled Gradients through Contact via Randomized Smoothing, RA-L 2022(arXiv 2109.05143)——bundled gradient,§4.5 核心。 - ⭐⭐⭐⭐ Parmas et al., PIPPS: Flexible Model-Based Policy Search Robust to the Curse of Chaos, ICML 2018(arXiv 1902.01240)——curse of chaos 命名,§4.7。 - ⭐⭐⭐ Metz et al., Gradients are not all you need, 2021——可微系统梯度失效的系统论证。 - ⭐⭐ Berahas et al., A Theoretical and Empirical Comparison of Gradient Approximations in Derivative-Free Optimization——零阶梯度估计器的理论基础。
梯度病态的工程解药(§4.7): - ⭐⭐⭐ Xu et al., Accelerated Policy Learning with Parallel Differentiable Simulation(SHAC),ICLR 2022——短 horizon + critic,§4.7 解药。 - ⭐⭐⭐ Parmar, Halm, Posa, Fundamental Challenges in Deep Learning for Stiff Contact Dynamics, IROS 2021(arXiv 2103.15406)——刚度越高训练越差的实证,§4.4/§4.7。 - ⭐⭐⭐ Pfrommer, Halm, Posa, ContactNets: Learning Discontinuous Contact Dynamics with Smooth, Implicit Representations, CoRL 2020(arXiv 2009.11193)——学光滑代理绕过求导难题,§4.7。 - ⭐⭐⭐ Son, Zheng, Sullivan, Qiao, Lin, Gradient Informed Proximal Policy Optimization(GI-PPO),NeurIPS 2023(arXiv 2312.08710)——用 α-policy 自适应混合解析一阶梯度与 PPO 零阶梯度,§4.6/§4.9/§4.10。
接触光滑化与规划(路线统一、实战选型 §4.10): - ⭐⭐⭐⭐ Pang, Suh, Yang, Tedrake, Global Planning for Contact-Rich Manipulation via Local Smoothing of Quasi-dynamic Contact Models, T-RO 2023(arXiv 2206.10787,King-Sun Fu Best Paper Honorable Mention)——证明解析光滑与随机光滑在简单系统上理论等价、在复杂系统上经验等价,是 §4.5/§4.6"两条光滑路线同源"的原始出处,也是接触模式爆炸(contact-mode explosion)的系统论述。 - ⭐⭐⭐ Suh, Pang, Zhao, Tedrake, Dexterous Contact-Rich Manipulation via the Contact Trust Region, IJRR 2025(arXiv 2505.02291,IJRR Best Paper of the Season)——指出标准椭球信赖域与接触的**单边性(unilateral)根本不符,提出 contact trust region(CTR),§4.10 选型的最新实战范式。 - ⭐⭐⭐ Le Lidec, Jallet, Montaut, Laptev, Schmid, Carpentier, Contact Models in Robotics: a Comparative Analysis, T-RO 2024(arXiv 2304.06372)+ 配套基准 **ContactBench(github.com/Simple-Robotics/ContactBench,基于 Pinocchio/hppfcl/ProxSuite)——系统比较各仿真器接触模型与求解器及其导数,§4.8/§4.10 选型的客观依据。 - ⭐⭐⭐ Castro, Han, Masterjohn, Irrotational Contact Fields, T-RO 2025(arXiv 2312.03908)——Drake 中 Hunt&Crossley + 库仑摩擦的**凸近似 + 全可微**实现,复用接触求解的因子分解高效求梯度,§4.3/§4.4 凸柔性接触的最新进展(SAP 的后继)。
GPU 并行可微仿真器(§4.8): - ⭐⭐ Freeman et al., Brax: A Differentiable Physics Engine for Large Scale Rigid Body Simulation, 2021——JAX GPU 并行可微物理。 - ⭐⭐ MuJoCo MJX 文档与 DiffMJX(arXiv 2506.14186,Hard Contacts with Soft Gradients)——MuJoCo 的可微 GPU 版与梯度精化。 - ⭐⭐⭐ End-to-End and Highly-Efficient Differentiable Simulation for Robotics(arXiv 2409.07107)——高效可微仿真的最新工程进展。
数学基础(前置巩固): - ⭐⭐⭐ Clarke, Optimization and Nonsmooth Analysis, 1983,第 2 章——广义梯度与 Rademacher 定理。 - ⭐⭐⭐ Rockafellar & Wets, Variational Analysis, 1998,第 8 章——次导数与次梯度。 - ⭐⭐⭐ Brogliato, Nonsmooth Mechanics, 3rd ed., 2016,第 5 章——冲量与碰撞律的测度理论。 - ⭐⭐ Stewart & Trinkle, An Implicit Time-Stepping Scheme for Rigid Body Dynamics with Coulomb Friction, IJNME 1996——非光滑刚体时步法奠基。
本章与后续章节的关系¶
| 后续章节 | 与本章的关系 | 本章哪个知识点为其铺垫 |
|---|---|---|
| 专题 6(接触隐式轨迹优化 / 可微 MPC) | 直接消费本章梯度做闭环优化 | §4.3 接触雅可比 \(A_t,B_t\) 喂 iLQR backward;§4.7 chaos 诊断决定 horizon 长度;§4.4 光滑化 schedule |
| 第六批专题 4(采样型 MPC:MPPI/CEM) | 与本章随机光滑零阶估计同源 | §4.5 score-function 估计器 = MPPI 更新;§4.6 α-order 统一一阶/零阶 |
| 具身智能模块 05(可微分仿真 S04/S05) | 本章是其数学地基 | §4.6 bias-variance(解释训练发散);§4.7 chaos/bias 诊断;§4.8 选型 |
| 控制理论专题 3.5(LQR/Riccati) | 本章梯度喂进 Riccati backward | §4.3 \(A_t,B_t\) → LQR 的 \(A,B\) → Riccati 递推得 CITO 反馈增益 |
| 本目录专题 60(接触隐式) | 下游优化层 | §4.3 全部梯度结论;§4.2 IFT |
| 本目录专题 70(非光滑分析) | 本章从它借数学工具(反向依赖) | §4.1 Clarke 广义梯度、§4.2 Robinson 强正则、半光滑 Newton |
🔧 故障排查手册¶
按"症状 → 可能原因 → 排查步骤 → 相关章节"组织。这是把全章理论转化为实战诊断的速查表。
故障 1:loss.backward() 返回 NaN 或 Inf
| 项 | 内容 |
|---|---|
| 症状 | 可微 rollout 反传时梯度出现 NaN/Inf,训练立刻崩溃 |
| 可能原因 | (a) chaos 导致梯度指数爆炸(§4.7);(b) 接触求解器在某步未收敛,残差大导致雅可比病态;(c) log-barrier 越界(\(\phi\le0\) 使 \(\log\) 未定义,§4.4);(d) 除以接近零的 \(\sigma\)/质量比 |
| 排查步骤 | 1) 缩短 horizon 到 1-2 步,看 NaN 是否消失——是则为 chaos(§4.7),用 SHAC 短 horizon;2) 检查每步求解器收敛容差与迭代上限;3) 检查 barrier 步长控制是否保证 \(\phi>0\);4) 打印单步雅可比谱范数,定位爆炸步 |
| 相关章节 | §4.7(chaos)、§4.3(求解器收敛)、§4.4(barrier 越界) |
故障 2:梯度时而为 0、时而巨大,优化在两个配置间横跳
| 项 | 内容 |
|---|---|
| 症状 | loss 不下降,优化器在"刚好接触"和"刚好不接触"间反复,梯度幅度剧烈波动 |
| 可能原因 | 激活集切换(§4.1 第三层)——IFT 在切换面失效,梯度从一支跳到另一支(§4.2/§4.3 分片光滑) |
| 排查步骤 | 1) 监测激活集 \(\mathcal A\) 是否在迭代间频繁变化;2) 若是,引入光滑化(内点法保留小 \(\kappa\),§4.3;或 compliant 软化,§4.4)抹平切换面;3) 或改用零阶/bundled gradient(§4.5)对邻域采样平均;4) 检查是否处于退化接触(违反严格互补,§4.2 练习 4.2.3) |
| 相关章节 | §4.1(第三层)、§4.3(分片光滑)、§4.5(bundled gradient) |
故障 3:仿真训练收敛良好,真机部署完全失效
| 项 | 内容 |
|---|---|
| 症状 | 软仿真里 loss 漂亮下降、策略看似学会,部署真机(硬接触)行为崩坏 |
| 可能原因 | gradient bias(§4.7)——软接触梯度对应"软世界"最优,与硬世界有系统 bias;策略可能学到利用软接触非物理行为(穿透借力)的作弊解 |
| 排查步骤 | 1) 检查仿真中是否有明显穿透/能量不守恒(保真问题,§4.6);2) 逐步减小光滑参数 \(\epsilon/k\) 重训(adaptive barrier 退火,§4.7),观察策略是否变化;3) 在硬接触仿真里验证策略(不只软仿真);4) 考虑 sim-to-real 时显式补偿 bias 或用 ContactNets 学真实接触(§4.7) |
| 相关章节 | §4.7(gradient bias)、§4.6(保真顶点)、§4.4(软化 bias) |
故障 4:IFT 解析梯度与有限差分对不上
| 项 | 内容 |
|---|---|
| 症状 | 用 IFT 算的梯度与数值有限差分(central difference)在某些点差异大 |
| 可能原因 | (a) 评估点恰在激活集切换面(§4.1 第三层),IFT 取单侧、有限差分跨越切换面取了两侧平均;(b) 求解器未精确收敛,IFT 用的是"假设收敛"的梯度而前向解有残差(§4.2 对解微分 vs 对求解器微分);(c) 有限差分步长选取不当(太大跨切换、太小数值噪声) |
| 排查步骤 | 1) 在远离切换面的光滑点对比——应吻合;2) 收紧求解器容差再比;3) 用复步差分(complex-step)替代有限差分排除截断误差;4) 若切换面附近本就不一致,这是分片光滑的正常表现(§4.3),非 bug |
| 相关章节 | §4.2(对解 vs 对求解器微分)、§4.3(分片光滑)、§4.1(切换面) |
故障 5:长 horizon 显存爆炸(OOM)
| 项 | 内容 |
|---|---|
| 症状 | rollout 加长后显存耗尽,无法反传 |
| 可能原因 | 用了展开式微分(unrolling)——把求解器每次迭代都记进磁带(§4.2 反面),计算图深度 \(\sim T\times N_{\mathrm{iter}}\) |
| 排查步骤 | 1) 确认是否在用 unrolling(检查是否对求解器内部循环 requires_grad);2) 改用 IFT 隐函数微分——只在收敛点做一次 backward,显存与迭代次数解耦(§4.2/§4.3);3) 若框架不支持 IFT,用 checkpoint(梯度检查点)权衡显存与重算;4) 配合短 horizon(§4.7)进一步降深度 |
| 相关章节 | §4.2(unrolling vs IFT)、§4.3(成本账)、§4.7(短 horizon) |
故障 6:随机光滑/bundled gradient 方差太大,更新方向乱
| 项 | 内容 |
|---|---|
| 症状 | 用零阶/随机光滑梯度,更新方向噪声大、收敛极慢 |
| 可能原因 | (a) \(\sigma\) 选取不当(太小探不到接触切换梯度仍近 0、太大平均了多个接触模式,§4.5);(b) 采样数 \(N\) 太少;(c) 高维 \(\theta\) 使零阶方差 \(\sim O(d/\sigma^2)\) 天然大 |
| 排查步骤 | 1) 把 \(\sigma\) 调到与接触切换特征尺度匹配(§4.5 陷阱);2) 加大 \(N\)(GPU 并行几乎免费,§4.5 桥接);3) 若在光滑区,切到一阶或 α-order 混合(§4.6)降方差;4) 用方差缩减技巧(control variate、antithetic sampling) |
| 相关章节 | §4.5(\(\sigma\) 选取、方差)、§4.6(α-order 降方差) |
故障 7:擦边/掠射接触(grazing)处梯度突然异常大
| 项 | 内容 |
|---|---|
| 症状 | 物体以极小法向速度接近表面(擦边)时,梯度出现异常大的尖峰,优化被这一步带偏 |
| 可能原因 | 事件触发灵敏度 \(\partial t_c/\partial q_0=-(\partial q/\partial q_0)/v^-\) 在 \(v^-\to0\)(擦边)时分母趋零而发散(§4.1 第一层补充推导) |
| 排查步骤 | 1) 检查碰撞前法向速度 \(v^-\) 是否接近 0;2) 若是,这是 grazing 的固有灵敏度爆炸,非 bug;3) 用 compliant 软化(有限 \(k\))把硬碰撞时刻"抹开",消除尖锐的 \(t_c\) 依赖;4) 或用随机光滑在邻域平均,抹平擦边的奇异灵敏度 |
| 相关章节 | §4.1(事件触发灵敏度)、§4.4(软化抹开碰撞时刻)、§4.8(TOI/自适应积分器) |
故障 8:系统辨识(sysID)估出的接触参数明显偏离真值
| 项 | 内容 |
|---|---|
| 症状 | 用可微仿真做接触参数(摩擦系数、刚度、CoR)辨识,收敛了但估值系统性偏离真实物理参数 |
| 可能原因 | (a) 用了大 \(\kappa/\epsilon\) 的光滑化,梯度对应光滑化模型而非真实硬接触(§4.6 bias);(b) 凸松弛的 boundary-layer slip(§4.3)让摩擦辨识偏移;(c) 优化陷入坏局部极小(接触非凸残留) |
| 排查步骤 | 1) 减小光滑参数 \(\kappa/\epsilon\)(sysID 需低 bias,§4.3 对比性思维);2) 检查是否用了凸松弛(其 slip 影响摩擦辨识)——必要时换更高保真模型;3) 多初值重启避开坏局部极小;4) 用零阶/bundled gradient 做无偏估计交叉验证 |
| 相关章节 | §4.6(bias 影响 sysID)、§4.3(slip 与凸松弛 bias)、§4.5(零阶无偏交叉验证) |
研究实践建议¶
给新手(档位 3)的建议:
- 先建立"三层不连续"的条件反射:以后看到任何接触问题,先问"这里的不可微属于哪一层"(§4.1)。这是诊断一切接触梯度问题的起点,比记任何公式都重要。
- 从 1D 弹球练起:不要一上来就跑高维机器人。把 §4.1 的弹球例子用三条路线(compliant/内点法/随机光滑)各算一遍梯度,亲手画出 bias 与光滑度差异——这个小实验能让三角权衡(§4.6)从抽象变具体。
- 先用成熟工具,别造轮子:直接用 Dojo/Brax/MJX,把精力放在理解它们的梯度行为(§4.8)而非重新实现 IFT。遇到训练发散,先按故障排查手册定位是 chaos 还是 bias,再决定对策。
- 牢记"可微≠有用":这是本专题最该刻进脑子的一句话。
.backward()能跑通只是起点,梯度对你的任务有没有用是另一回事(§4.0/§4.7)。
给有经验者(档位 4)的建议:
- 把 α-order 框架(§4.6)当成统一视角:不要再纠结"用可微仿真还是采样 MPC",而是分析任务的不连续程度、定位最优 \(\alpha\)。这个视角能让你在一阶/零阶/混合之间自如切换。
- 关注 chaos 的方向随机性而非只关注幅度:很多人只盯梯度爆炸的幅度(加裁剪),忽略了 Parmas 指出的"方向变随机"(§4.7)——后者才是 chaos 最致命的部分,需要结构性方案(短 horizon、零阶)而非裁剪。
- 物理保真与梯度质量要分开评估:建立两套独立的诊断指标——保真(穿透量、能量漂移)和梯度质量(bias、variance、chaos)。它们是三角的不同顶点(§4.6),混在一起评估会误判病因。
- 建立"先零阶探路、再一阶精修"的工作流:在一个新 contact-rich 任务上,先用零阶/MPPI(§4.5,鲁棒但慢)确认任务可解、得到粗解,再在粗解附近用一阶可微梯度(§4.3)精修加速。这利用了谱系两端各自的优势,避开一阶在远离解处的 chaos。
前沿与开放问题¶
可微接触仍是活跃研究领域。把值得关注的开放问题按本章的三个层次列出,供有志于此方向的读者参考:
-
求解器层——能否突破三角? §4.8 练习 4.8.2 的核心问题:是否存在同时占据"可微 + GPU 并行 + 高保真"多顶点的接触求解器?关键障碍是"硬接触求解的迭代不规整性"与"SIMD 规整性"的硬件级矛盾(§4.8)。可能的突破口——固定迭代次数的凸求解器、或可学习的求解器预条件。
-
梯度层——更聪明的光滑化? 当前光滑化(\(\kappa/\epsilon/\sigma\))都受 bias-variance 守恒(§4.4/§4.6)约束。能否设计**自适应**光滑——在远离切换面用小光滑(低 bias)、近切换面用大光滑(低方差)?这本质是把 §4.6 的局部 \(\alpha^\star\) 思想推广到光滑参数本身。
-
学习层——光滑代理的泛化? ContactNets(§4.7)学光滑 SDF 代理绕过求导难题,但泛化到未见接触几何受限。能否学一个对接触几何泛化的可微接触模型?这连接到 §4.7 与表示学习。
-
统一层——α-order 的理论化? Suh 2022 的局部 \(\alpha^\star\) 目前靠经验方差估计(§4.6)。能否给出 \(\alpha^\star\) 的闭式或有理论保证的在线估计?这需要把接触不连续的统计结构刻画得更精细。
-
系统层——与 RL 的深度融合? GI-PPO(§4.6/§4.9)只是一阶+零阶混合的初步。可微接触梯度如何与 actor-critic、model-based RL、world model 更深融合,是具身智能模块 05 的前沿。
本质洞察(研究方法论):这五个开放问题有一个共同结构——它们都不是"如何把现有方法实现得更好",而是"如何在某个根本权衡(三角、bias-variance、泛化)上找到新的折中点或突破维度"。可微接触领域的进步,本质是对'三角约束'的不断逼近与偶尔突破。一个研究者若想在此方向做出贡献,应当先把本章的三角权衡理解到骨子里——因为任何声称"解决了可微接触"的工作,都必须说清它在三角里占了哪个位置、付了什么代价。看不破三角,就会重复历史第二阶段"只追 bias"的错误。
版本信息速查¶
本章涉及的工具/库/框架及关键论文版本(截至 2026 年):
| 工具/论文 | 版本/年份 | arXiv / 出处 | 本章用途 |
|---|---|---|---|
| Dojo | 2022 | arXiv 2203.00806 | §4.3 NCP+IFT 平滑梯度 |
| Nimble | RSS 2021 | arXiv 2103.16021 | §4.3 boxed LCP 解析梯度 |
| OptNet | ICML 2017 | arXiv 1703.00443 | §4.2/§4.3 KKT 隐函数微分层 |
| JAXopt | NeurIPS 2022 | Blondel et al. | §4.2 模块化隐式微分 |
| Theseus | NeurIPS 2022 | arXiv 2207.09442 | §4.2 PyTorch 可微非线性最小二乘 |
| Brax | 2021 | Freeman et al. | §4.4/§4.8 GPU 并行软接触可微 |
| MuJoCo MJX | 2023+ | DeepMind | §4.8 XLA 并行凸接触可微 |
| DiffMJX | 2025 | arXiv 2506.14186 | §4.8 MJX 梯度精化(软梯度) |
| Drake SAP | 2022 | Castro et al. | §4.3/§4.4/§4.8 凸柔性接触 |
| DiffTaichi | ICLR 2020 | arXiv 1910.00935 | 延伸阅读:源码变换可微物理 |
| Bundled Gradients | RA-L 2022 | arXiv 2109.05143 | §4.5 随机光滑捆绑梯度 |
| Do Diff. Sim. ... (α-order) | ICML 2022 | arXiv 2202.00817 | §4.6 bias-variance + α-order |
| PIPPS | ICML 2018 | arXiv 1902.01240 | §4.7 curse of chaos |
| SHAC | ICLR 2022 | Xu et al. | §4.7 短 horizon + critic |
| ContactNets | CoRL 2020 | arXiv 2009.11193 | §4.7 学光滑接触代理 |
| GI-PPO | 2023 | arXiv 2312.08710 | §4.6/§4.9 一阶+零阶混合 |
| Stiff Contact Challenges | IROS 2021 | arXiv 2103.15406 | §4.4/§4.7 刚度越高训练越差 |
注:可微仿真是快速演进的领域,上述工具的 API 与具体实现可能随版本更新。本章的**理论结论**(三层不连续、IFT、三角权衡、chaos)是数学本质,不随工具版本变化;而具体的工具能力对比(§4.8)应以使用时的最新版本为准。