10_随机微分方程基础
第九批 · 专题 9.1:随机微分方程基础 (Stochastic Calculus Fundamentals)¶
定位:本章填补路线图中 纯数学基础/100_测度论与Lebesgue积分、纯数学基础/120_常微分方程与 深度学习数学/40_Diffusion_Models数学之间的**关键断层**——随机微积分。深度学习数学/40_Diffusion_Models数学 开篇明确警告"路线图中没有任何专题系统覆盖 Ito 积分、布朗运动、Girsanov 定理",本章正是这一缺口的系统补全。
核心承诺:读完本章,你将能够:(1) 严格定义布朗运动并理解其路径的"野性";(2) 构造 Ito 积分并证明 Ito 等距;(3) 推导并应用 Ito 公式(随机链式法则);(4) 写出和求解 VP-SDE/OU 过程等扩散模型核心方程;(5) 从 Ito 公式推导 Fokker-Planck 方程。
与机器人的关系:◉ 过程噪声建模——EKF/UKF/粒子滤波中的 \(\mathrm{d}X_t = f(X_t)\mathrm{d}t + G\,\mathrm{d}W_t\) 就是 SDE;◉ Diffusion Policy——前向扩散 \(\mathrm{d}X_t = -\frac{1}{2}\beta(t)X_t\,\mathrm{d}t + \sqrt{\beta(t)}\,\mathrm{d}W_t\) 是 VP-SDE;◉ MPPI 控制——采样轨迹就是 SDE 的 Monte Carlo 模拟。
§9.1.0 前置自测检查点¶
[!NOTE] 在开始之前,请确认你能回答以下问题。 如果某项卡住超过 5 分钟,先回对应章节补课。
| # | 自测问题 | 来源 | 通过标准 |
|---|---|---|---|
| 1 | 什么是 \(\sigma\)-代数?概率空间 \((\Omega, \mathcal{F}, \mathbb{P})\) 三个组件各是什么? | 纯数学基础/100_测度论与Lebesgue积分 §B2.2 | 能举出掷骰子的具体例子 |
| 2 | 什么是 Lebesgue 积分?它与 Riemann 积分的本质区别是什么? | 纯数学基础/100_测度论与Lebesgue积分 §B2.1 | 能说出"按值域分层"vs"按定义域切条" |
| 3 | 什么是 \(L^2\) 空间?它为什么是完备的(Riesz-Fischer)? | 纯数学基础/100_测度论与Lebesgue积分 §B2.10 | 能解释 Cauchy 列在 \(L^2\) 中必收敛 |
| 4 | Picard-Lindelof 定理说了什么?Lipschitz 条件的几何含义? | 纯数学基础/120_常微分方程 §B4.2 | 能复述证明中压缩映射的关键步骤 |
| 5 | ODE \(\dot{x} = Ax\) 的解是什么?矩阵指数 \(e^{tA}\) 怎么定义? | 纯数学基础/120_常微分方程 §B4.5 | 能写出 \(x(t) = e^{tA}x_0\) |
| 6 | 什么是条件期望 \(\mathbb{E}[X \mid \mathcal{G}]\)?它是一个数还是一个随机变量? | 纯数学基础/100_测度论与Lebesgue积分 §B2.14 | 知道它是 \(\mathcal{G}\)-可测的随机变量 |
最小前置路径:纯数学基础/100_测度论与Lebesgue积分(测度论,特别是 \(L^2\) 完备性)+ 纯数学基础/120_常微分方程(ODE,特别是 Picard-Lindelof 与 Gronwall)。
预计阅读时间¶
| 阅读方式 | 时间 | 适合谁 |
|---|---|---|
| 精读(含全部推导手算与练习) | 18-25 小时 | 首次系统学习随机微积分、需要自行推导 Ito 公式与 Fokker-Planck 的读者 |
| 速读(跳过存在唯一性证明细节,聚焦 Ito 公式应用与 SDE 求解) | 8-12 小时 | 有测度论基础、主要目标是读懂 Diffusion Policy / MPPI 数学的工程师 |
| 速查(只看定理框、Ito 乘法表、VP-SDE/OU 求解公式与陷阱表) | 40-60 分钟 | 已学过随机微积分、遇到具体公式推导时回来查阅 |
§9.1.1 本章目标与知识地图¶
本章覆盖的核心定理:
| # | 定理/概念 | 难度 | 本章角色 | 下游应用 |
|---|---|---|---|---|
| 1 | 布朗运动的定义与性质 | ⭐⭐ | 全部 SDE 的驱动噪声 | EKF/UKF, MPPI, Diffusion |
| 2 | 二次变差 \([W]_t = t\) | ⭐⭐ | Ito 公式的根源 | 理解 \((\mathrm{d}W)^2 = \mathrm{d}t\) |
| 3 | Ito 积分的构造 | ⭐⭐ | SDE 的严格定义 | 所有 SDE 理论 |
| 4 | Ito 等距定理 | ⭐⭐ | Ito 积分良定性的核心 | 方差计算 |
| 5 | Ito 公式(随机链式法则) | ⭐ | 本章核心中的核心 | 推导一切 |
| 6 | Ito 乘法表 | ⭐ | Ito 公式的计算工具 | 快速推导 |
| 7 | Ito vs Stratonovich | ⭐⭐ | 选择积分约定 | 物理建模 |
| 8 | SDE 存在唯一性 | ⭐⭐⭐ | 理论完整性 | 保证解良定 |
| 9 | Fokker-Planck 方程 | ⭐⭐ | 从轨迹到密度 | Score SDE, Anderson 反向 SDE |
学习路径图:
纯数学基础/100_测度论与Lebesgue积分 ──┐
├──→ 布朗运动 ──→ Ito 积分 ──→ Ito 公式 ──→ SDE 求解
纯数学基础/120_常微分方程 ─────┘ │ │ │
│ ▼ ▼
二次变差 Fokker-Planck 深度学习数学/40_Diffusion_Models数学 Diffusion
(dW)²=dt Score SDE
§9.1.2 布朗运动 / Wiener 过程 ⭐⭐¶
9.1.2.1 动机:机器人动力学中的过程噪声怎么建模?¶
问题场景:你在做 EKF 滤波,状态方程写作
这里 \(w_k\) 是离散时间的高斯白噪声。但真实物理系统是连续时间的——传感器噪声、电机扰动、风力干扰都是**连续**的随机过程。问题来了:
连续时间的"白噪声"怎么严格定义?
直觉上,白噪声 \(\xi(t)\) 应该满足 \(\mathbb{E}[\xi(t)] = 0\),\(\mathbb{E}[\xi(t)\xi(s)] = \delta(t-s)\)(Dirac delta)。但这意味着 \(\mathrm{Var}[\xi(t)] = \delta(0) = \infty\)!——白噪声作为普通函数在数学上不存在。
解决方案:不直接定义 \(\xi(t)\),而是定义它的**积分** \(W_t = \int_0^t \xi(s)\,\mathrm{d}s\)。这个积分——布朗运动/Wiener 过程——是严格定义的。白噪声可以"非正式地"写成 \(\xi(t) = \frac{\mathrm{d}W_t}{\mathrm{d}t}\),但这个导数在经典意义下不存在(我们马上会看到为什么)。
历史插曲:Robert Brown (1827) 在显微镜下观察花粉粒子的随机运动;Einstein (1905) 给出了物理解释(分子碰撞);Wiener (1923) 给出了严格的数学构造。有趣的是,Bachelier (1900) 在博士论文中比 Einstein 更早将布朗运动用于金融建模——但在数学上不够严格。
9.1.2.2 从离散到连续:随机游走的极限¶
离散随机游走:在每个时间步 \(\Delta t\),粒子向左或向右跳 \(\Delta x\),各以概率 \(1/2\):
关键缩放:取 \(\Delta x = \sqrt{\Delta t}\),令 \(\Delta t \to 0\)。由中心极限定理,
这个极限过程就是布朗运动。注意关键的 \(\sqrt{\Delta t}\) 缩放——不是 \(\Delta t\)。这个"根号"会贯穿整个随机微积分,是它与确定性微积分的根本区别。
[!TIP] 类比:如果你熟悉 C++ 中的离散仿真,想象
for (int i=0; i<N; i++) x += sqrt(dt) * randn();。当N趋于无穷、dt趋于零时,轨迹的极限就是布朗运动。
9.1.2.3 严格定义¶
定义(布朗运动 / Wiener 过程):设 \((\Omega, \mathcal{F}, \mathbb{P})\) 是概率空间。随机过程 \(\{W_t\}_{t \geq 0}\) 称为(标准)布朗运动,如果满足以下四个性质:
| # | 性质 | 数学表述 | 直觉 |
|---|---|---|---|
| W1 | 初始值为零 | \(W_0 = 0\) a.s. | 从原点出发 |
| W2 | 独立增量 | \(W_t - W_s\) 与 \(\mathcal{F}_s = \sigma(W_r : r \leq s)\) 独立 | "未来跳跃不记得过去" |
| W3 | 高斯增量 | \(W_t - W_s \sim \mathcal{N}(0, t-s)\),\(\forall\, 0 \leq s < t\) | 增量方差 = 时间间隔 |
| W4 | 连续路径 | \(t \mapsto W_t(\omega)\) 连续,\(\mathbb{P}\)-a.s. | 轨迹不跳跃(但极度扭曲) |
存在性:布朗运动的存在性并非显然。Wiener (1923) 的构造使用了 Fourier 级数;现代证明(Kolmogorov 延拓定理 + Kolmogorov 连续性定理)可在 纯数学基础/100_测度论与Lebesgue积分的测度论框架下完成。我们在此接受其存在性作为公理。
从四个性质可以立刻推导的基本结论:
- 期望:\(\mathbb{E}[W_t] = 0\)(由 W1 和 W3:\(\mathbb{E}[W_t] = \mathbb{E}[W_t - W_0] = 0\))
- 方差:\(\mathrm{Var}[W_t] = t\)(由 W3)
- 协方差:\(\mathrm{Cov}(W_s, W_t) = \min(s,t)\)
协方差的推导(⭐ 必须掌握):设 \(s \leq t\),
由 W2,\(W_s\) 是 \(\mathcal{F}_s\)-可测的,\((W_t - W_s)\) 与 \(\mathcal{F}_s\) 独立,因此
故 \(\mathrm{Cov}(W_s, W_t) = \mathbb{E}[W_s^2] = \mathrm{Var}[W_s] = s = \min(s,t)\)。 \(\square\)
9.1.2.4 二次变差 \([W]_t = t\):随机微积分的根基¶
这是随机微积分与普通微积分的根本分歧点。在普通微积分中,光滑函数 \(f\) 的二次变差为零——这是 Taylor 展开只需一阶项的原因。布朗运动的二次变差非零,迫使我们保留二阶项,从而产生 Ito 公式中的"额外项"。
定义(二次变差):设 \(\Pi_n = \{0 = t_0^n < t_1^n < \cdots < t_{k_n}^n = t\}\) 是 \([0,t]\) 的一列分割,网格 \(|\Pi_n| = \max_i(t_{i+1}^n - t_i^n) \to 0\)。过程 \(X\) 的二次变差定义为
其中极限在概率或 \(L^2\) 意义下取。
定理(布朗运动的二次变差):\([W]_t = t\)。
完整证明(⭐⭐ 必须完全掌握):
取等距分割 \(t_i = it/n\),\(\Delta t_i = t/n\),\(\Delta W_i = W_{t_{i+1}} - W_{t_i}\)。
定义 \(Q_n = \sum_{i=0}^{n-1} (\Delta W_i)^2\)。我们要证 \(Q_n \xrightarrow{L^2} t\),即
步骤 1:计算 \(\mathbb{E}[Q_n]\)
因为 \(\Delta W_i \sim \mathcal{N}(0, t/n)\),所以 \(\mathbb{E}[(\Delta W_i)^2] = \mathrm{Var}[\Delta W_i] = t/n\)。
步骤 2:计算 \(\mathrm{Var}[Q_n]\)
由于各 \(\Delta W_i\) 独立(W2),
对于 \(Z \sim \mathcal{N}(0, \sigma^2)\),\(\mathbb{E}[Z^4] = 3\sigma^4\)(高斯四阶矩),因此
故
步骤 3:结论
因此 \(Q_n \xrightarrow{L^2} t\),即 \([W]_t = t\)。 \(\square\)
这个结果的深刻含义:
| 普通微积分 | 随机微积分 |
|---|---|
| 光滑函数 \(f\) 的二次变差 \(= 0\) | 布朗运动 \(W\) 的二次变差 \(= t\) |
| Taylor 展开:\(\mathrm{d}f = f'\mathrm{d}t\),高阶项可忽略 | Taylor 展开:\((\mathrm{d}W)^2 = \mathrm{d}t\) 不可忽略 |
| 链式法则:\(\frac{d}{dt}g(f(t)) = g'(f(t))f'(t)\) | Ito 公式:多一个 \(\frac{1}{2}g''\) 项 |
| \((\mathrm{d}t)^2 = 0\) | \((\mathrm{d}W)^2 = \mathrm{d}t\)(非零!) |
9.1.2.5 样本路径处处不可微¶
定理:布朗运动的样本路径 \(t \mapsto W_t(\omega)\) 几乎处处**处处不可微**。
直觉解释(不做完整证明,但给出核心论据):
如果 \(W_t\) 在某点 \(t_0\) 可微,那么局部上 \(W_{t_0 + h} - W_{t_0} \approx ch\),因此
在长度为 \(\Delta t\) 的区间上对二次变差的贡献为 \(O((\Delta t)^2)\)。将 \([0,t]\) 分成 \(n\) 段,总贡献为 \(n \cdot O((t/n)^2) = O(t^2/n) \to 0\)。
但我们刚刚证明了 \([W]_t = t \neq 0\)!这意味着**路径不可能在任何点可微**——更准确地说,可微点的集合是零测集。
另一个直觉角度(与 ODE 的对比):在 ODE \(\dot{x} = f(x)\) 中,轨迹 \(x(t)\) 至少是 \(C^1\) 的(Picard-Lindelof 保证)。你可以画出速度 \(\dot{x}(t)\) 的图像。但布朗运动没有"速度"这个概念——它在每个瞬间都在以无穷大的"速度"抖动。这就是为什么我们不能把 SDE 简单当作"带噪 ODE"——噪声的性质从根本上改变了数学结构。
自相似性:布朗运动具有标度不变性——\(\{c^{-1/2}W_{ct}\}_{t \geq 0}\) 也是标准布朗运动(验证四个性质即可)。这意味着放大任何一段路径,统计性质和原来一样。Hausdorff 维数为 \(3/2\)(介于曲线的 1 和平面的 2 之间)。
[!WARNING] 陷阱 1:把 \(\mathrm{d}W\) 当作 \(\mathrm{d}t\) 一样处理
初学者常犯的错误:看到 SDE \(\mathrm{d}X = \mu\,\mathrm{d}t + \sigma\,\mathrm{d}W\) 就把它当作 ODE 的"带噪声版本",用普通微积分法则处理。这是错误的!
- \((\mathrm{d}t)^2 = 0\),但 \((\mathrm{d}W)^2 = \mathrm{d}t\)
- 普通链式法则失效:\(\mathrm{d}(W_t^2) \neq 2W_t\,\mathrm{d}W_t\)(还差一个 \(\mathrm{d}t\))
- 正确结果:\(\mathrm{d}(W_t^2) = 2W_t\,\mathrm{d}W_t + \mathrm{d}t\)(Ito 公式)
记住:每次对含 \(W_t\) 的函数求微分,都要用 Ito 公式,不能用普通链式法则。
9.1.2.6 练习¶
练习 9.1.1(⭐):证明 \(\mathbb{E}[W_t^3] = 0\) 和 \(\mathbb{E}[W_t^4] = 3t^2\)。(提示:\(W_t \sim \mathcal{N}(0,t)\),利用高斯矩。)
练习 9.1.2(⭐⭐):设 \(W_t^{(1)}, W_t^{(2)}\) 是两个独立布朗运动。定义 \(X_t = W_t^{(1)} + W_t^{(2)}\)。求 \(X_t\) 的分布,并说明 \(X_t / \sqrt{2}\) 是否是布朗运动(验证四个性质)。
练习 9.1.3(⭐⭐):证明 \([W]_t = t\) 的证明中,将等距分割替换为任意分割 \(\Pi_n\)(\(|\Pi_n| \to 0\)),结论仍成立。(提示:\(\mathrm{Var}[Q_n] \leq 2|\Pi_n| \cdot t\)。)
§9.1.3 Ito 积分 ⭐⭐¶
9.1.3.1 动机:为什么不能用 Riemann-Stieltjes 积分?¶
回忆 Riemann-Stieltjes 积分 \(\int_0^t f(s)\,\mathrm{d}g(s)\) 要求积分器 \(g\) 是**有界变差**的(bounded variation, BV)。有界变差的意思是
布朗运动不是有界变差的。直觉上,\(\sum |W_{t_{i+1}} - W_{t_i}|\) 远大于 \(\sum (W_{t_{i+1}} - W_{t_i})^2 = [W]_t = t\)(因为 Jensen 不等式:\(|a| \geq a^2\) 当 \(|a| \leq 1\),而细分后增量确实很小,但它们的个数太多以至于绝对值之和趋于无穷)。可以证明
因此,\(\int_0^t f(s)\,\mathrm{d}W_s\) 不能用 Riemann-Stieltjes 积分定义。我们需要一种全新的积分理论。
还有一个更深的问题:即使我们强行用 Riemann 和来定义 \(\int f\,\mathrm{d}W\),结果会**依赖于取样点的选择**(左端点、右端点还是中点给出不同答案)。在普通 Riemann 积分中,取样点不影响极限——但对布朗运动,由于二次变差非零,不同取样点差了一个 \(O(\mathrm{d}t)\) 的项。这就是 Ito vs Stratonovich 分歧的根源。
与 ODE 的对比:
| ODE \(\dot{x} = f(x)\) | SDE \(\mathrm{d}X = f(X)\mathrm{d}t + g(X)\mathrm{d}W\) | |
|---|---|---|
| 积分形式 | \(x(t) = x_0 + \int_0^t f(x(s))\,\mathrm{d}s\) | \(X_t = X_0 + \int_0^t f(X_s)\,\mathrm{d}s + \int_0^t g(X_s)\,\mathrm{d}W_s\) |
| 第一个积分 | 普通 Lebesgue 积分 | 普通 Lebesgue 积分(没问题) |
| 第二个积分 | 不存在 | Ito 积分(需要新定义!) |
9.1.3.2 Ito 积分的四阶段构造¶
Ito 的天才在于:用 \(L^2\) 空间的完备性(纯数学基础/100_测度论与Lebesgue积分的 Riesz-Fischer 定理!)来定义积分。构造分四个阶段,从简单到一般:
阶段 1:简单过程上的定义
定义:称 \(H_t\) 为**简单过程**(simple / elementary process),如果存在分割 \(0 = t_0 < t_1 < \cdots < t_n = T\) 和有界 \(\mathcal{F}_{t_i}\)-可测随机变量 \(\eta_i\),使得
对简单过程,Ito 积分自然定义为
[!WARNING] 陷阱 2:忘记适应性要求(左端点取值)
注意 \(\eta_i\) 是 \(\mathcal{F}_{t_i}\)-可测的,即**被积函数在每个区间上取的是左端点的值**。这不是任意选择——它保证了 Ito 积分是**鞅**(martingale),即"公平赌博"。
如果取右端点或中点,得到的是不同的积分(Stratonovich 积分取中点,见 §9.1.5)。两者给出不同的结果!
物理类比:你根据**已知信息**(\(\mathcal{F}_{t_i}\) = 到时刻 \(t_i\) 的全部历史)决定在 \((t_i, t_{i+1}]\) 上的"赌注" \(\eta_i\)。你不能偷看未来。这正是金融中"无套利"原则的数学化身。
阶段 2:Ito 等距定理(核心!)
定理(Ito 等距):对简单过程 \(H\),
即 Ito 积分的 \(L^2\) 范数等于被积函数的 \(L^2\) 范数。
完整证明:
展开平方:
当 \(i \neq j\) 时交叉项为零。不失一般性设 \(i < j\),则 \(\eta_i \eta_j \Delta W_i\) 是 \(\mathcal{F}_{t_j}\)-可测的(因为 \(\eta_i, \eta_j\) 分别是 \(\mathcal{F}_{t_i}, \mathcal{F}_{t_j}\)-可测,\(\Delta W_i = W_{t_{i+1}} - W_{t_i}\) 也是 \(\mathcal{F}_{t_{i+1}} \subset \mathcal{F}_{t_j}\)-可测的),而 \(\Delta W_j = W_{t_{j+1}} - W_{t_j}\) 独立于 \(\mathcal{F}_{t_j}\)(W2)。因此
当 \(i = j\) 时:\(\eta_i\) 是 \(\mathcal{F}_{t_i}\)-可测的,\(\Delta W_i\) 独立于 \(\mathcal{F}_{t_i}\),因此
综合得
Ito 等距的意义:它说明 \(H \mapsto I(H)\) 是 \(L^2(\Omega \times [0,T])\) 到 \(L^2(\Omega)\) 的**等距嵌入**(isometry)。等距映射保持距离,因此也保持 Cauchy 列——这是下一步扩张的关键。
[!TIP] 给 C++ 工程师的类比:等距嵌入就像一个保持"距离"(范数)不变的映射。想象你有一个函数
transform(H) -> I,它满足norm(transform(H)) == norm(H)。那么如果输入序列 \(H_n\) 收敛,输出序列 \(I(H_n)\) 也自动收敛,而且收敛到的就是transform(极限)的自然定义。
阶段 3:\(L^2\) 扩张
设 \(H \in L^2(\Omega \times [0,T])\) 是一般的**适应过程**(即 \(H_t\) 是 \(\mathcal{F}_t\)-可测的,\(\mathbb{E}[\int_0^T H_t^2\,\mathrm{d}t] < \infty\))。可以证明存在简单过程的序列 \(H^{(n)}\) 使得
由 Ito 等距,\(\{I(H^{(n)})\}\) 在 \(L^2(\Omega)\) 中是 Cauchy 列:
由 \(L^2(\Omega)\) 的**完备性**(Riesz-Fischer 定理,来自纯数学基础/100_测度论与Lebesgue积分!),极限存在:
而且 Ito 等距对极限仍成立(等距映射的唯一连续延拓)。
[!IMPORTANT] 回看 纯数学基础/100_测度论与Lebesgue积分的回报:测度论中 \(L^2\) 的完备性在这里发挥了关键作用。如果我们停留在 Riemann 积分的框架中,\(L^2\) 不完备,Ito 积分的构造就无法完成。这就是为什么纯数学基础/100_测度论与Lebesgue积分是本章的硬依赖。
阶段 4:局部化(localization)
对于不满足 \(\mathbb{E}[\int_0^T H_t^2\,\mathrm{d}t] < \infty\) 但满足 \(\int_0^T H_t^2\,\mathrm{d}t < \infty\) a.s. 的过程,用**停时**(stopping time)截断:
则 \(H^{(n)}_t = H_t \cdot \mathbf{1}_{t \leq \tau_n}\) 满足 \(L^2\) 条件,且 \(\tau_n \uparrow \infty\) a.s.。最终
这完成了 Ito 积分在最大自然类上的定义。
9.1.3.3 Ito 积分的关键性质¶
| 性质 | 数学表述 | 意义 |
|---|---|---|
| 线性 | \(I(\alpha H + \beta K) = \alpha I(H) + \beta I(K)\) | 积分是线性算子 |
| 零均值 | \(\mathbb{E}[\int_0^T H_t\,\mathrm{d}W_t] = 0\) | Ito 积分是鞅 |
| Ito 等距 | \(\mathbb{E}[I(H)^2] = \mathbb{E}[\int_0^T H_t^2\,\mathrm{d}t]\) | \(L^2\) 范数守恒 |
| 鞅性 | \(M_t = \int_0^t H_s\,\mathrm{d}W_s\) 是鞅 | "公平赌博" |
| 连续路径 | \(t \mapsto \int_0^t H_s\,\mathrm{d}W_s\) 连续 a.s. | 积分路径不跳 |
零均值性质的直觉:Ito 积分 \(\int_0^t H_s\,\mathrm{d}W_s\) 的期望为零,因为布朗运动的增量 \(\mathrm{d}W_s\) 有零均值,而被积函数 \(H_s\) 在每个瞬间是"已知的"(适应性),不能"预见"未来的 \(\mathrm{d}W_s\)。这使得 Ito 积分成为鞅——在概率论中,鞅是"公平赌博"的数学模型。你根据当前信息下注,赌局的期望收益为零。
9.1.3.4 练习¶
练习 9.1.4(⭐):直接用 Riemann 和计算 \(\int_0^t W_s\,\mathrm{d}W_s\)。
提示:\(\sum_{i} W_{t_i}(W_{t_{i+1}} - W_{t_i}) = \frac{1}{2}\sum_i [(W_{t_{i+1}})^2 - (W_{t_i})^2] - \frac{1}{2}\sum_i (W_{t_{i+1}} - W_{t_i})^2\)
第一个和是伸缩和 \(= \frac{1}{2}(W_t^2 - W_0^2)\)。第二个和趋于 \([W]_t = t\)。
答案:\(\int_0^t W_s\,\mathrm{d}W_s = \frac{1}{2}W_t^2 - \frac{1}{2}t\)。注意与普通积分 \(\int x\,\mathrm{d}x = \frac{1}{2}x^2\) 的区别——多了 \(-\frac{1}{2}t\)!
练习 9.1.5(⭐⭐):用 Ito 等距计算 \(\mathrm{Var}[\int_0^t s\,\mathrm{d}W_s]\)。
解:\(H_s = s\) 是确定性函数,所以 \(\mathbb{E}[\int_0^t H_s^2\,\mathrm{d}s] = \int_0^t s^2\,\mathrm{d}s = t^3/3\)。
练习 9.1.6(⭐⭐⭐):证明 \(M_t = W_t^2 - t\) 是鞅。(提示:用 Ito 公式得到 \(M_t = 2\int_0^t W_s\,\mathrm{d}W_s\),这是 Ito 积分,因此是鞅。)
§9.1.4 Ito 公式(随机链式法则)⭐¶
9.1.4.1 动机:\(f(W_t)\) 的微分怎么算?¶
问题:给定 \(f \in C^2(\mathbb{R})\) 和布朗运动 \(W_t\),\(f(W_t)\) 的微分是什么?
如果直接用普通链式法则:\(\mathrm{d}f(W_t) = f'(W_t)\,\mathrm{d}W_t\)。
但这是错的! 验证:取 \(f(x) = x^2\),普通链式法则给 \(\mathrm{d}(W_t^2) = 2W_t\,\mathrm{d}W_t\),即
取期望:\(\mathbb{E}[W_t^2] = 2\mathbb{E}[\int_0^t W_s\,\mathrm{d}W_s] = 2 \cdot 0 = 0\)。
但 \(\mathbb{E}[W_t^2] = t \neq 0\)!矛盾——普通链式法则在这里给出了错误答案。
根源:\((\mathrm{d}W)^2 = \mathrm{d}t \neq 0\),Taylor 展开中的二阶项不能忽略。
9.1.4.2 一维 Ito 公式的推导¶
Ito 乘法表:在进行形式计算时,使用以下规则:
| \(\times\) | \(\mathrm{d}t\) | \(\mathrm{d}W\) |
|---|---|---|
| \(\mathrm{d}t\) | \(0\) | \(0\) |
| \(\mathrm{d}W\) | \(0\) | \(\mathrm{d}t\) |
规则来源: - \((\mathrm{d}t)^2 = 0\):确定性量的平方是高阶无穷小 - \(\mathrm{d}t \cdot \mathrm{d}W = 0\):可以证明 \(\sum \Delta t_i \cdot \Delta W_i \to 0\)(因为 \(\mathbb{E}[\cdot] = 0\) 且方差趋于零) - \((\mathrm{d}W)^2 = \mathrm{d}t\):这就是二次变差 \([W]_t = t\)
定理(一维 Ito 公式):设 \(f \in C^2(\mathbb{R})\),则
或积分形式:
推导(通过 Taylor 展开 + Ito 乘法表):
对 \(f(W_t)\) 在 \([0,t]\) 上做分割 \(0 = t_0 < t_1 < \cdots < t_n = t\),
对每一项做 Taylor 展开到二阶:
其中 \(R_i\) 是高阶余项(含 \((\Delta W_i)^3\) 及以上)。
当 \(|\Pi| \to 0\):
- (A) \(\to \int_0^t f'(W_s)\,\mathrm{d}W_s\)(这是 Ito 积分的定义——注意取**左端点**!)
- (B):将 \((\Delta W_i)^2\) 分解为 \([(\Delta W_i)^2 - \Delta t_i] + \Delta t_i\)。第一部分的和趋于零(因为 \((\Delta W_i)^2 - \Delta t_i\) 是零均值的,它们的和的方差趋于零——本质上是二次变差证明的推广)。第二部分 \(\sum_i f''(W_{t_i})\Delta t_i \to \int_0^t f''(W_s)\,\mathrm{d}s\)(普通 Riemann 积分)。合起来 \(\text{(B)} \to \int_0^t f''(W_s)\,\mathrm{d}s\)。
- (C):\(\sum_i R_i \to 0\)(利用 \(f \in C^2\),余项涉及 \((\Delta W_i)^3\) 等,其量级为 \(o(\Delta t_i)\),加起来趋于零)。
合并得 Ito 公式。 \(\square\)
更一般的形式:设 \(X_t\) 是 Ito 过程:
则对 \(f \in C^2(\mathbb{R})\),
其中 \((\mathrm{d}X_t)^2\) 用 Ito 乘法表展开:
因此
对比普通链式法则:
| 普通微积分 | Ito 微积分 |
|---|---|
| \(\mathrm{d}f(x(t)) = f'(x)\dot{x}\,\mathrm{d}t\) | \(\mathrm{d}f(X_t) = f'(X_t)\,\mathrm{d}X_t + \frac{1}{2}f''(X_t)\sigma_t^2\,\mathrm{d}t\) |
| 只有一阶项 | 多出 \(\frac{1}{2}f''\sigma^2\,\mathrm{d}t\) 项 |
| \((\mathrm{d}x)^2 = 0\) 可忽略 | \((\mathrm{d}X)^2 = \sigma^2\,\mathrm{d}t\) 不可忽略 |
含时间的 Ito 公式:若 \(f = f(t, x) \in C^{1,2}\)(对 \(t\) 一阶、对 \(x\) 二阶连续可微),则
这是解 SDE 的主力工具——通过选择合适的 \(f(t,x)\),把复杂 SDE 变换成简单的形式。
9.1.4.3 多维 Ito 公式¶
设 \(X_t \in \mathbb{R}^n\) 是多维 Ito 过程:
其中 \(W_t = (W_t^1, \ldots, W_t^m)\) 是 \(m\) 维布朗运动(各分量独立)。
对 \(f \in C^2(\mathbb{R}^n)\),
其中**互变差**(cross variation)由多维 Ito 乘法表决定:
| \(\times\) | \(\mathrm{d}W^j\) | \(\mathrm{d}W^l\) |
|---|---|---|
| \(\mathrm{d}W^j\) | \(\delta_{jl}\,\mathrm{d}t\) | -- |
因此
写成紧凑形式:
其中 \(\nabla^2 f\) 是 Hessian 矩阵。这个形式在推导 Fokker-Planck 方程(§9.1.7)时直接用到。
9.1.4.4 应用实例¶
应用 1:几何布朗运动 (GBM)
SDE:\(\mathrm{d}S_t = \mu S_t\,\mathrm{d}t + \sigma S_t\,\mathrm{d}W_t\)(股票价格模型 / Black-Scholes)
求解:令 \(f(x) = \ln x\),\(f'(x) = 1/x\),\(f''(x) = -1/x^2\)。由 Ito 公式
代入 \(\mathrm{d}S_t = \mu S_t\,\mathrm{d}t + \sigma S_t\,\mathrm{d}W_t\):
这是一个具有常系数的 SDE,直接积分:
[!WARNING] 陷阱 3:漏掉 Ito 修正项
初学者常以为 \(\mathrm{d}S/S = \mu\,\mathrm{d}t + \sigma\,\mathrm{d}W\) 意味着 \(S_t = S_0 e^{\mu t + \sigma W_t}\)。错误!正确答案中指数里是 \((\mu - \sigma^2/2)t\),多了一个 \(-\sigma^2/2\) 的**Ito 修正**。
如果 \(\sigma = 0\)(无噪声),恢复普通指数增长 \(S_t = S_0 e^{\mu t}\),修正项消失。修正项完全是噪声导致的后果——直觉上,随机波动会"消耗"一部分增长率。
验证:\(\mathbb{E}[S_t] = S_0 e^{(\mu - \sigma^2/2)t} \cdot \mathbb{E}[e^{\sigma W_t}] = S_0 e^{(\mu - \sigma^2/2)t} \cdot e^{\sigma^2 t/2} = S_0 e^{\mu t}\)。期望增长率确实是 \(\mu\),但每条**单独路径**的增长率是 \(\mu - \sigma^2/2 < \mu\)。
应用 2:Ornstein-Uhlenbeck (OU) 过程
SDE:\(\mathrm{d}X_t = -\theta X_t\,\mathrm{d}t + \sigma\,\mathrm{d}W_t\),\(\theta > 0\)
这是机器人学中**极其重要**的过程——它是**均值回复**(mean-reverting)的:当 \(X_t\) 偏离零时,漂移项 \(-\theta X_t\) 把它拉回来。物理上,它模拟了一个受弹簧力和随机扰动的粒子(Langevin 方程)。
求解(积分因子法——完全类比 ODE!):
回忆一阶线性 ODE \(\dot{x} = -\theta x + g(t)\) 的解法:乘以积分因子 \(e^{\theta t}\),得 \(\frac{d}{dt}(e^{\theta t}x) = e^{\theta t}g(t)\)。
对 SDE 做类似的事。令 \(Y_t = e^{\theta t} X_t\),对 \(f(t,x) = e^{\theta t}x\) 用含时间的 Ito 公式:
其中 \(\frac{\partial f}{\partial t} = \theta e^{\theta t}x\),\(\frac{\partial f}{\partial x} = e^{\theta t}\),\(\frac{\partial^2 f}{\partial x^2} = 0\)。
漂移项完美对消!积分:
由 Ito 积分的性质(线性组合的高斯性),\(X_t\) 是高斯随机变量。其均值和方差为:
当 \(t \to \infty\) 时:\(\mathbb{E}[X_t] \to 0\),\(\mathrm{Var}[X_t] \to \sigma^2/(2\theta)\)——系统达到**稳态分布** \(\mathcal{N}(0, \sigma^2/(2\theta))\)。
应用 3:VP-SDE(Diffusion 模型的前向过程,直接连接 深度学习数学/40_Diffusion_Models数学)
这本质就是**时变系数的 OU 过程**!\(\theta(t) = \frac{1}{2}\beta(t)\),\(\sigma(t) = \sqrt{\beta(t)}\)。
用与 OU 过程相同的积分因子法。定义
类比 OU 过程中的 \(e^{-\theta t}\),可得
因此 \(X_t \mid X_0\) 是高斯的:
当 \(t\) 足够大(\(\int_0^t \beta(s)\,\mathrm{d}s \to \infty\))时,\(\alpha(t) \to 0\),故 \(X_t \to \mathcal{N}(0, I)\)。
这就是 Diffusion Policy / Score SDE 中**"数据被噪声逐渐淹没"**的严格数学表述。深度学习数学/40_Diffusion_Models数学 §8.4.1 中的转移核公式,正是从本章的 Ito 公式推导得到的。
9.1.4.5 代码:模拟 OU 过程并验证解析解¶
import numpy as np
import matplotlib.pyplot as plt
def simulate_ou_process(x0, theta, sigma, T, dt, n_paths=1000):
"""
用 Euler-Maruyama 方法模拟 OU 过程
dX_t = -theta * X_t * dt + sigma * dW_t
参数:
x0: 初始值
theta: 均值回复速率 (> 0)
sigma: 扩散系数
T: 终止时间
dt: 时间步长
n_paths: 模拟路径数
"""
n_steps = int(T / dt)
t = np.linspace(0, T, n_steps + 1)
X = np.zeros((n_paths, n_steps + 1))
X[:, 0] = x0
# Euler-Maruyama 迭代: X_{k+1} = X_k + b(X_k)*dt + sigma*sqrt(dt)*Z_k
for i in range(n_steps):
dW = np.sqrt(dt) * np.random.randn(n_paths) # 布朗运动增量
X[:, i+1] = X[:, i] - theta * X[:, i] * dt + sigma * dW
return t, X
# 参数设置
x0 = 2.0 # 初始值(偏离均值)
theta = 1.0 # 均值回复速率
sigma = 0.5 # 扩散系数
T = 5.0 # 模拟时间
dt = 0.01 # 时间步长
n_paths = 5000 # 模拟路径数
t, X = simulate_ou_process(x0, theta, sigma, T, dt, n_paths)
# 解析解的均值和标准差
mean_analytical = x0 * np.exp(-theta * t)
std_analytical = np.sqrt(sigma**2 / (2*theta) * (1 - np.exp(-2*theta*t)))
# 绘图对比
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
# 左图:样本路径
ax = axes[0]
for i in range(min(20, n_paths)):
ax.plot(t, X[i], alpha=0.3, linewidth=0.5)
ax.plot(t, mean_analytical, 'r-', linewidth=2, label=r'$\mathbb{E}[X_t]$ (解析)')
ax.fill_between(t, mean_analytical - 2*std_analytical,
mean_analytical + 2*std_analytical,
alpha=0.2, color='red', label=r'$\pm 2\sigma$ (解析)')
ax.set_xlabel('时间 t')
ax.set_ylabel(r'$X_t$')
ax.set_title('OU 过程样本路径')
ax.legend()
# 右图:均值与方差对比
ax = axes[1]
mean_sim = np.mean(X, axis=0)
var_sim = np.var(X, axis=0)
var_analytical = std_analytical**2
ax.plot(t, mean_sim, 'b-', label='均值 (Monte Carlo)', linewidth=1.5)
ax.plot(t, mean_analytical, 'r--', label='均值 (解析)', linewidth=1.5)
ax.plot(t, var_sim, 'g-', label='方差 (Monte Carlo)', linewidth=1.5)
ax.plot(t, var_analytical, 'm--', label='方差 (解析)', linewidth=1.5)
ax.axhline(y=sigma**2/(2*theta), color='gray', linestyle=':',
label=f'稳态方差 = {sigma**2/(2*theta):.3f}')
ax.set_xlabel('时间 t')
ax.set_title('OU 过程:解析解 vs Monte Carlo')
ax.legend()
plt.tight_layout()
plt.savefig('ou_process_verification.png', dpi=150)
plt.show()
print(f"t=T 时: 模拟均值={mean_sim[-1]:.4f}, 解析均值={mean_analytical[-1]:.4f}")
print(f"t=T 时: 模拟方差={var_sim[-1]:.4f}, 解析方差={var_analytical[-1]:.4f}")
print(f"稳态方差 (理论): sigma^2/(2*theta) = {sigma**2/(2*theta):.4f}")
9.1.4.6 练习¶
练习 9.1.7(⭐):用 Ito 公式验证 \(\mathrm{d}(W_t^2) = 2W_t\,\mathrm{d}W_t + \mathrm{d}t\)。取 \(f(x) = x^2\),写出 \(f'\), \(f''\),代入公式,并取积分形式确认 \(\int_0^t W_s\,\mathrm{d}W_s = \frac{1}{2}(W_t^2 - t)\)。
练习 9.1.8(⭐⭐):用 Ito 公式求 \(\mathrm{d}(e^{W_t})\)。
解:\(f(x) = e^x\),\(f'(x) = f''(x) = e^x\)。代入 Ito 公式:\(\mathrm{d}(e^{W_t}) = e^{W_t}\,\mathrm{d}W_t + \frac{1}{2}e^{W_t}\,\mathrm{d}t\)。
注意 \(e^{W_t}\) 不是鞅(因为有 \(\frac{1}{2}e^{W_t}\,\mathrm{d}t\) 项)。但 \(e^{W_t - t/2}\) 是鞅——这个修正再次体现了 Ito 微积分与普通微积分的区别。
练习 9.1.9(⭐⭐):对 \(f(t,x) = e^{-rt}x\)(其中 \(r\) 为常数),设 \(\mathrm{d}X_t = rX_t\,\mathrm{d}t + \sigma X_t\,\mathrm{d}W_t\),用含时间的 Ito 公式证明 \(Y_t = e^{-rt}X_t\) 是鞅。(提示:验证 \(\mathrm{d}Y_t\) 中 \(\mathrm{d}t\) 系数为零。)
练习 9.1.10(⭐⭐⭐):对 VP-SDE \(\mathrm{d}X_t = -\frac{1}{2}\beta(t)X_t\,\mathrm{d}t + \sqrt{\beta(t)}\,\mathrm{d}W_t\),定义 \(\alpha(t) = \exp(-\frac{1}{2}\int_0^t \beta(s)\,\mathrm{d}s)\)。令 \(Y_t = X_t / \alpha(t)\),用含时间的 Ito 公式推导 \(\mathrm{d}Y_t\),并由此得到 \(X_t \mid X_0\) 的闭式分布。
§9.1.5 Ito vs Stratonovich ⭐⭐¶
9.1.5.1 问题:取样点的选择竟然影响结果?¶
回忆 Ito 积分的定义中,被积函数取**左端点**的值:
如果改取**中点** \((t_i + t_{i+1})/2\):
两者给出**不同的结果**!经典例子:
| 积分 | Ito | Stratonovich |
|---|---|---|
| \(\int_0^t W_s\,\mathrm{d}W_s\) | \(\frac{1}{2}W_t^2 - \frac{1}{2}t\) | \(\frac{1}{2}W_t^2\) |
| 差异 | 多了 \(-\frac{1}{2}t\) | 与普通微积分一致 |
Stratonovich 积分给出了看起来更"自然"的 \(\frac{1}{2}x^2\)——和普通微积分一样!那为什么不直接用 Stratonovich?
9.1.5.2 两种积分的比较¶
| Ito 积分 | Stratonovich 积分 | |
|---|---|---|
| 取样点 | 左端点 \(t_i\) | 中点 \((t_i + t_{i+1})/2\) |
| 链式法则 | 需要修正项 \(\frac{1}{2}f''\sigma^2\,\mathrm{d}t\) | 普通链式法则成立 |
| 鞅性 | \(\int H\,\mathrm{d}W\) 是鞅 | \(\int H \circ \mathrm{d}W\) **不是**鞅 |
| 适应性 | 被积函数必须适应(因果性) | 需要"偷看一点未来" |
| 数学优势 | 鞅理论、Ito 等距、概率计算方便 | 微分几何中坐标变换不变性 |
| 物理约定 | 金融数学(Black-Scholes) | 物理学(Langevin 方程) |
| 数值离散 | Euler-Maruyama(简单、自然) | 需要隐式或预测-校正格式 |
各有优势: - Ito 的鞅性使概率计算(条件期望、滤波、最优停止)极为方便 - Stratonovich 的链式法则不变性使物理建模和微分几何(特别是流形上的 SDE)更自然
9.1.5.3 转换公式¶
定理(Ito-Stratonovich 转换):设 Ito SDE 为
等价的 Stratonovich SDE 为
反方向:Stratonovich \(\to\) Ito 只需将修正项的符号反转(加而非减)。
推导直觉:Stratonovich 取中点 \(H_{(t_i+t_{i+1})/2} \approx H_{t_i} + \frac{1}{2}H'_{t_i}\Delta W_i\)(Taylor 展开到一阶),代入求和
第一项是 Ito 积分,第二项 \(\to \frac{1}{2}\int H'_s\,\mathrm{d}s\)(二次变差!)。当 \(H_s = \sigma(X_s)\) 时,$H' = \sigma'(X_s)\cdot \mathrm{d}X_s/... $——精确分析给出修正项 \(\frac{1}{2}\sigma\sigma'\)。
转换项 \(\frac{1}{2}\sigma\sigma'\) 称为 noise-induced drift(噪声诱导漂移)。它的物理意义:当扩散系数 \(\sigma(x)\) 依赖于状态时,粒子从 \(\sigma\) 大的区域被"推向" \(\sigma\) 小的区域(或反之),产生一个有效的漂移。
9.1.5.4 何时用哪个?实用指南¶
| 场景 | 推荐约定 | 理由 |
|---|---|---|
| 概率计算、滤波、贝叶斯推断 | Ito | 鞅性、条件期望、滤波方程 |
| 物理建模(Langevin 方程、热力学) | Stratonovich | 坐标变换不变、与物理直觉一致 |
| Diffusion Models (Score SDE) | Ito | Anderson 反向 SDE 在 Ito 意义下 |
| 流形上的 SDE(如 SO(3) 上的噪声) | Stratonovich | 坐标无关性,微分几何与李群/30_李群基础与SO3_SE3 |
| EKF/UKF 连续-离散滤波 | Ito | Kushner-Stratonovich/Duncan-Mortensen-Zakai 方程 |
| 不确定时 | 写 Ito | 然后需要时用转换公式得 Stratonovich |
[!TIP] 机器人学中的经验法则:大多数机器人文献使用 Ito 约定。如果你看到 SDE 没有明确标注约定,默认假设是 Ito。物理学文献(如从热力学或统计力学推导的随机模型)通常用 Stratonovich。
9.1.5.5 练习¶
练习 9.1.11(⭐⭐):Ito SDE \(\mathrm{d}X = X\,\mathrm{d}W\)(\(\mu = 0, \sigma(x) = x\))对应什么 Stratonovich SDE?
解:\(\sigma(x) = x\),\(\sigma'(x) = 1\),修正项 \(= \frac{1}{2}x \cdot 1 = \frac{1}{2}x\)。
Stratonovich SDE:\(\mathrm{d}X = (0 - \frac{1}{2}X)\mathrm{d}t + X \circ \mathrm{d}W = -\frac{1}{2}X\,\mathrm{d}t + X \circ \mathrm{d}W\)。
验证:Ito 版解为 \(X_t = X_0 e^{-t/2 + W_t}\)(GBM with \(\mu = 0\))。Stratonovich 版的普通链式法则给 \(\mathrm{d}\ln X = (-\frac{1}{2})\mathrm{d}t + \circ\mathrm{d}W\),积分得 \(\ln X_t = \ln X_0 - t/2 + W_t\),一致!
练习 9.1.12(⭐⭐⭐):当 \(\sigma\) 为常数(不依赖 \(x\))时,证明 Ito 和 Stratonovich SDE 完全相同(修正项为零)。说明这在机器人学中为什么重要。(答案:大多数机器人 SDE 模型中 \(\sigma\) 是常数或不依赖状态的矩阵,此时两种约定等价,不需要担心选择问题。)
§9.1.6 SDE 的存在唯一性 ⭐⭐⭐¶
9.1.6.1 动机与 纯数学基础/120_常微分方程的完美对照¶
在 纯数学基础/120_常微分方程中,我们学过 ODE \(\dot{x} = f(x)\) 的 Picard-Lindelof 定理:Lipschitz 条件保证解的存在唯一性。SDE 的情况完全平行:
| ODE (纯数学基础/120_常微分方程 §B4.2) | SDE (本节) | |
|---|---|---|
| 方程 | \(\dot{x} = f(t,x)\) | \(\mathrm{d}X = b(t,X)\mathrm{d}t + \sigma(t,X)\mathrm{d}W\) |
| 条件 1 | \(f\) 对 \(x\) Lipschitz | \(b, \sigma\) 对 \(x\) Lipschitz |
| 条件 2 | \(f\) 在紧集上有界(自动满足) | 线性增长条件(额外需要!) |
| 证明方法 | Picard 迭代 \(\to\) 压缩映射 | Picard 迭代 \(\to\) \(L^2\) 估计 + Gronwall |
| 解的性质 | \(x \in C^1\),确定性函数 | \(X\) 是连续适应过程(随机的) |
| 不动点空间 | \((C([0,T], \mathbb{R}^n), \|\cdot\|_\infty)\) | \(L^2(\Omega; C([0,T], \mathbb{R}^n))\) |
定理(SDE 存在唯一性,随机 Picard-Lindelof):设 \(b: [0,T] \times \mathbb{R}^n \to \mathbb{R}^n\) 和 \(\sigma: [0,T] \times \mathbb{R}^n \to \mathbb{R}^{n \times m}\) 满足:
(L) 全局 Lipschitz 条件:存在 \(K > 0\) 使得对所有 \(t \in [0,T]\),\(x, y \in \mathbb{R}^n\),
(G) 线性增长条件:存在 \(C > 0\) 使得
则 SDE 有**唯一的强解** \(X_t\),满足 \(\mathbb{E}[\sup_{0 \leq t \leq T} |X_t|^2] < \infty\)。
9.1.6.2 为什么 SDE 需要线性增长条件而 ODE 不需要?¶
在 ODE 的 Picard-Lindelof 中,我们在**紧集** \(\bar{B}(x_0, b) \times [t_0 - \delta, t_0 + \delta]\) 上工作。紧集上的连续函数自动有界。然后解被限制在这个紧集中(至少在短时间内)。
但 SDE 的解是**随机**的——布朗运动可以在任意有限时间内走得任意远(虽然概率很小)。我们不能事先把解限制在一个紧集中。线性增长条件的作用是:控制漂移和扩散的增长速度,使得解不会在有限时间内以正概率爆炸到无穷。
反例:\(\mathrm{d}X_t = X_t^2\,\mathrm{d}t\)(纯漂移,无噪声)。\(\sigma = 0\) 满足 Lipschitz,但 \(b(x) = x^2\) 不满足线性增长。解 \(X_t = X_0/(1-X_0 t)\) 在 \(t^* = 1/X_0\) 爆炸。加上噪声后情况更为复杂——线性增长条件排除了这类"有限时间爆炸"。
ODE vs SDE 条件对比表:
| 条件 | ODE 中是否需要 | SDE 中是否需要 | 原因 |
|---|---|---|---|
| Lipschitz | 是 | 是 | 唯一性(两者一样) |
| 有界性 / 线性增长 | 紧集上自动满足 | 必须显式假设 | SDE 解可随机走出任何紧集 |
| 连续性 | 是(Peano 定理只需连续) | 包含在 Lipschitz 中 | -- |
9.1.6.3 证明骨架(Picard 迭代的 SDE 版本)¶
步骤 1:定义 Picard 迭代(与纯数学基础/120_常微分方程完全平行!)
对比 ODE:\(x^{(n+1)}(t) = x_0 + \int_0^t f(s, x^{(n)}(s))\,\mathrm{d}s\)——唯一的区别是多了一个 Ito 积分项。
步骤 2:\(L^2\) 误差估计
令 \(e_n(t) = \mathbb{E}\left[\sup_{0 \leq s \leq t} |X_s^{(n+1)} - X_s^{(n)}|^2\right]\)。
利用 \((a+b)^2 \leq 2a^2 + 2b^2\)、Cauchy-Schwarz 不等式和 Doob 鞅不等式
(鞅不等式是 Ito 积分理论的产物,类似于 ODE 中的三角不等式)加上 Lipschitz 条件,可得
其中 \(C_T\) 是只依赖于 \(K\)(Lipschitz 常数)和 \(T\) 的常数。
步骤 3:Gronwall 迭代(与 纯数学基础/120_常微分方程中的方法完全一样!)
反复代入:
因为 \(\sum_{n=0}^\infty \frac{(C_T T)^n}{n!} = e^{C_T T} < \infty\),所以 \(\sum_n \sqrt{e_n(T)} < \infty\)。
由 Chebyshev 不等式和 Borel-Cantelli 引理,\(X^{(n)}\) 在 \(C([0,T], \mathbb{R}^n)\) 中一致收敛(a.s.),极限 \(X\) 就是 SDE 的解。
步骤 4:唯一性
设 \(X, \tilde{X}\) 是两个解,令 \(e(t) = \mathbb{E}[\sup_{s \leq t}|X_s - \tilde{X}_s|^2]\)。同样的 Lipschitz 估计给出 \(e(t) \leq C_T \int_0^t e(s)\,\mathrm{d}s\)。由 Gronwall 不等式(纯数学基础/120_常微分方程 §B4.6 的核心工具!),\(e(t) = 0\)。 \(\square\)
[!TIP] 给 C++ 工程师的类比:Picard 迭代就像你写了一个
for循环不断改进近似解。ODE 版本的"收敛"用上确界范数(worst-case pointwise error),SDE 版本用 \(L^2\) 范数(average-case squared error, over all random outcomes)。Gronwall 不等式在两者中扮演完全相同的角色——控制误差的指数增长,保证迭代收敛。
9.1.6.4 常见 SDE 是否满足条件?¶
| SDE | Lipschitz? | 线性增长? | 结论 |
|---|---|---|---|
| \(\mathrm{d}X = -\theta X\,\mathrm{d}t + \sigma\,\mathrm{d}W\)(OU) | 是 (\(K = \theta\)) | 是 | 唯一强解存在 |
| \(\mathrm{d}X = \mu X\,\mathrm{d}t + \sigma X\,\mathrm{d}W\)(GBM) | 是 ($K = | \mu | + |
| \(\mathrm{d}X = -\frac{1}{2}\beta(t)X\,\mathrm{d}t + \sqrt{\beta(t)}\,\mathrm{d}W\)(VP-SDE) | 是 | 是 | 唯一强解存在 |
| \(\mathrm{d}X = X^2\,\mathrm{d}t + \mathrm{d}W\) | 不是(全局) | 不是 | 可能爆炸 |
| $\mathrm{d}X = | X | ^{1/2}\,\mathrm{d}W$(Tanaka) | 不是 |
9.1.6.5 练习¶
练习 9.1.13(⭐⭐):验证 OU 过程 \(\mathrm{d}X = -\theta X\,\mathrm{d}t + \sigma\,\mathrm{d}W\)(\(\theta > 0, \sigma > 0\) 常数)满足 Lipschitz 和线性增长条件。写出 Lipschitz 常数 \(K\) 和线性增长常数 \(C\)。
练习 9.1.14(⭐⭐⭐):为什么 \(b(x) = |x|^{1/2}\) 不满足 Lipschitz?在 \(x = 0\) 附近画出 \(|b(x) - b(0)|/|x|\) 的行为(它趋于无穷)。这类似于 ODE 中的 \(\dot{x} = x^{2/3}\) 反例(纯数学基础/120_常微分方程 §B4.3)。
§9.1.7 Fokker-Planck 方程 ⭐⭐¶
9.1.7.1 动机:从单条轨迹到概率密度的演化¶
到目前为止,我们一直在研究**单条轨迹** \(X_t(\omega)\)。但在很多应用中,我们关心的是**所有轨迹的统计分布**——即 \(X_t\) 的概率密度 \(p(x,t)\) 如何随时间演化。
机器人学场景:
- 粒子滤波:我用 1000 个粒子模拟了 SDE,我想知道粒子云的密度 \(p(x,t)\) 满足什么 PDE——这有助于分析滤波器的收敛性
- Diffusion Models:VP-SDE 的前向过程把数据分布 \(p_{\text{data}}\) 变成 \(\mathcal{N}(0,I)\)。密度变化的方程是什么?反向过程的方程呢?
- MPPI 控制:轨迹分布的密度变化规律可以帮助设计更好的重要性采样分布
核心问题:给定 SDE
如果 \(X_t\) 在时刻 \(t\) 的概率密度为 \(p(x,t)\),那么 \(p\) 满足什么偏微分方程?
[!TIP] 与 ODE 的类比:对确定性 ODE \(\dot{x} = f(x)\),如果初始条件有分布 \(p_0(x)\),密度的演化由 Liouville 方程 \(\partial_t p + \nabla \cdot (fp) = 0\) 描述(纯输运,无扩散)。Fokker-Planck 方程是 Liouville 方程的**随机推广**——多了一个扩散项。
9.1.7.2 从 Ito 公式推导 Fokker-Planck¶
推导(一维情况,\(X_t \in \mathbb{R}\)):
设 \(\varphi \in C_c^\infty(\mathbb{R})\)(光滑紧支集测试函数)。对 \(\varphi(X_t)\) 用 Ito 公式:
展开 \(\mathrm{d}X_t = b\,\mathrm{d}t + \sigma\,\mathrm{d}W_t\):
从 \(0\) 积分到 \(t\) 并取期望(Ito 积分项期望为零——鞅性!):
对 \(t\) 求导:
用密度改写期望:
左边:\(\frac{\mathrm{d}}{\mathrm{d}t}\int \varphi(x) p(x,t)\,\mathrm{d}x = \int \varphi(x) \partial_t p(x,t)\,\mathrm{d}x\)
右边:\(\int \left[b(x,t)\varphi'(x) + \frac{1}{2}\sigma^2(x,t)\varphi''(x)\right] p(x,t)\,\mathrm{d}x\)
对右边做**分部积分**(边界项消失,因为 \(\varphi\) 紧支集或 \(p\) 在无穷远处充分衰减):
(每次分部积分翻转一个导数的方向,两次分部积分翻转两个。)
代入:
由 \(\varphi\) 的任意性(\(C_c^\infty\) 函数的基本引理,纯数学基础/100_测度论与Lebesgue积分的遗产),
这就是 Fokker-Planck 方程(也称 Kolmogorov 前向方程)。
多维推广:设 \(D(x,t) = \frac{1}{2}\sigma(x,t)\sigma(x,t)^\top \in \mathbb{R}^{n \times n}\)(扩散矩阵),
紧凑向量形式:\(\partial_t p = -\nabla \cdot (b\,p) + \nabla \cdot \nabla \cdot (D\,p)\)
物理解读:
| 项 | 表达式 | 物理含义 | ODE 对应 |
|---|---|---|---|
| \(\partial_t p\) | 密度变化率 | 概率守恒(总概率始终为 1) | 同 |
| \(-\nabla \cdot (bp)\) | 漂移项 | 概率被确定性流 \(b\) 输运 | Liouville 方程(仅此项) |
| \(\nabla \cdot (D \nabla p)\) | 扩散项 | 概率因随机噪声而弥散 | ODE 中不存在! |
整个方程保持概率守恒:\(\frac{d}{dt}\int p(x,t)\,\mathrm{d}x = 0\)(因为边界项为零)。
9.1.7.3 经典验证:布朗运动和 OU 过程¶
例 1:标准布朗运动 \(\mathrm{d}X_t = \mathrm{d}W_t\)
\(b = 0\),\(\sigma = 1\)。Fokker-Planck 方程变为**热方程**:
初始条件 \(p(x, 0) = \delta(x)\)(从原点出发)。解:
这就是 \(W_t \sim \mathcal{N}(0,t)\) 的密度。验证:\(\partial_t p = \frac{1}{2}\partial_x^2 p\) 是标准 PDE 练习。
例 2:OU 过程 \(\mathrm{d}X_t = -\theta X_t\,\mathrm{d}t + \sigma\,\mathrm{d}W_t\)
\(b(x) = -\theta x\),$\sigma = $ 常数。Fokker-Planck 方程:
稳态解:令 \(\partial_t p = 0\),得 \(0 = \theta\,\partial_x(xp_\infty) + \frac{\sigma^2}{2}\partial_{x}^2 p_\infty\)。
猜 \(p_\infty(x) = A\exp(-\alpha x^2)\)(高斯形式)。代入可解出 \(\alpha = \theta/\sigma^2\),故
与我们在 §9.1.4.4 中用 Ito 公式得到的 \(\mathrm{Var}[X_\infty] = \sigma^2/(2\theta)\) 完全一致!
9.1.7.4 与扩散模型 (深度学习数学/40_Diffusion_Models数学) 的核心联系¶
VP-SDE 的 Fokker-Planck:
对 \(\mathrm{d}X_t = -\frac{1}{2}\beta(t)X_t\,\mathrm{d}t + \sqrt{\beta(t)}\,\mathrm{d}W_t\),
Fokker-Planck 方程:
当 \(t \to \infty\),\(p(\cdot, t) \to \mathcal{N}(0, I)\)——前向过程把任何数据分布变成标准高斯。
Anderson 反向 SDE (1982)——Diffusion Models 的数学根基:
知道了前向 SDE 和对应的 Fokker-Planck 方程后,Anderson 证明了一个惊人的结果:存在一个**反向时间**的 SDE,使得反向过程具有相同的有限维边际分布:
其中 \(\bar{W}_t\) 是反向时间的布朗运动,\(\nabla_x \log p(x,t)\) 就是 score 函数。
这个结果将 SDE 理论与深度生成模型完美连接:
| 步骤 | 数学 | Diffusion Models 实现 |
|---|---|---|
| 1. 前向 SDE | \(p_{\text{data}} \xrightarrow{t \to T} \mathcal{N}(0,I)\) | 加噪声(已知,无需学习) |
| 2. 反向 SDE | 需要 \(\nabla_x \log p(x,t)\) | Score Matching:训练 \(s_\theta \approx \nabla \log p\) |
| 3. 采样 | Euler-Maruyama 模拟反向 SDE | 从 \(\mathcal{N}(0,I)\) 出发,逐步去噪 |
| 4. Fokker-Planck | 保证密度演化正确 | 理论收敛保证 |
[!IMPORTANT] 全貌连接:
- 本章 §9.1.2:布朗运动 \(\to\) 噪声模型
- 本章 §9.1.3:Ito 积分 \(\to\) SDE 的严格定义
- 本章 §9.1.4:Ito 公式 \(\to\) 求解 VP-SDE,得到闭式转移核
- 本章 §9.1.7:Fokker-Planck \(\to\) 密度演化方程
- 深度学习数学/40_Diffusion_Models数学 §8.4.1:VP-SDE 的转移核(本章推导的)
- 深度学习数学/40_Diffusion_Models数学 §8.4.2:Anderson 反向 SDE(需要 Fokker-Planck + score)
- 深度学习数学/40_Diffusion_Models数学 §8.4.4:Score Matching(学习 \(\nabla \log p\))
本章提供了理解 深度学习数学/40_Diffusion_Models数学 中**全部** SDE 相关内容的前置知识。
9.1.7.5 练习¶
练习 9.1.15(⭐⭐):写出标准布朗运动 \(\mathrm{d}X_t = \mathrm{d}W_t\) 的 Fokker-Planck 方程,并直接验证 \(p(x,t) = \frac{1}{\sqrt{2\pi t}}e^{-x^2/(2t)}\) 是其解(计算 \(\partial_t p\) 和 \(\frac{1}{2}\partial_x^2 p\),确认相等)。
练习 9.1.16(⭐⭐⭐):写出 OU 过程 \(\mathrm{d}X_t = -\theta X_t\,\mathrm{d}t + \sigma\,\mathrm{d}W_t\) 的 Fokker-Planck 方程。令 \(\partial_t p = 0\) 求稳态解 \(p_\infty(x)\)。验证 \(p_\infty = \mathcal{N}(0, \sigma^2/(2\theta))\)。
练习 9.1.17(⭐⭐⭐⭐ 研究级):对 VP-SDE,写出 Anderson 反向 SDE。说明为什么 score function \(s(x,t) = \nabla_x \log p(x,t)\) 是唯一需要"学习"的量——\(b\) 和 \(\sigma\) 都是已知的。然后解释 深度学习数学/40_Diffusion_Models数学 中 Score Matching 损失函数 \(\mathbb{E}[\|s_\theta(X_t, t) - \nabla_{X_t}\log p(X_t \mid X_0)\|^2]\) 为什么可以用闭式计算(因为 \(p(X_t \mid X_0)\) 是高斯的,你在 §9.1.4.4 已经推导了它的闭式)。
§9.1.8 数值方法:Euler-Maruyama 与 Milstein ⭐⭐¶
到目前为止,我们能解的 SDE 都是"运气好"的——OU、GBM、VP-SDE 这些线性或可对数变换的方程恰好有闭式解。但机器人学中绝大多数 SDE 没有解析解:非线性漂移(如倒立摆的 \(\sin\theta\) 项)、状态依赖的扩散系数、高维耦合系统……这时唯一的出路是**数值模拟**。本节回答:怎样把连续时间的 SDE 离散成计算机能跑的迭代?精度有多高?为什么不能照搬 ODE 的数值方法?
9.1.8.1 动机:为什么 ODE 的数值方法不能直接搬过来?¶
回顾 纯数学基础/120_常微分方程 中求解 ODE \(\dot{x} = f(x)\) 的**前向 Euler 法**:
它的局部截断误差是 \(O(\Delta t^2)\),全局误差 \(O(\Delta t)\)(一阶精度)。一个自然的想法是:对 SDE \(\mathrm{d}X = b(X)\mathrm{d}t + \sigma(X)\mathrm{d}W\),直接把 \(\mathrm{d}W\) 换成离散增量 \(\Delta W_k\):
这就是 Euler-Maruyama 方法(Maruyama 1955 把 Euler 法推广到随机情形)。看起来平淡无奇——但**两个关键陷阱**潜伏其中:
陷阱一:\(\Delta W_k\) 怎么取? 不能取 \(\Delta W_k = 0\)(那就退化成无噪声 ODE),也不能取一个固定常数。正确做法源自布朗运动的定义 W3:增量 \(\Delta W_k = W_{t_{k+1}} - W_{t_k} \sim \mathcal{N}(0, \Delta t)\)。因此
注意这个 \(\sqrt{\Delta t}\)——又是它!这是 §9.1.2.2 中"\(\Delta x = \sqrt{\Delta t}\) 缩放"在数值算法里的直接体现。如果错写成 \(\Delta t \cdot Z_k\)(量纲都不对),噪声会随 \(\Delta t \to 0\) 过快消失,模拟出的根本不是同一个过程。
[!WARNING] 陷阱 1(数值):把布朗增量写成 \(\Delta t \cdot Z\) 而非 \(\sqrt{\Delta t}\cdot Z\)
错误现象:你把步长从 \(0.01\) 减半到 \(0.005\),发现模拟轨迹的"抖动幅度"莫名其妙地缩小了一半——但理论上布朗运动的统计性质与离散步长无关。
根本原因:误用了 \(\Delta W_k = \Delta t\, Z_k\)。此时 \(\mathrm{Var}[\Delta W_k] = \Delta t^2\),而正确的应是 \(\mathrm{Var}[\Delta W_k] = \Delta t\)。前者让噪声以 \(O(\Delta t)\) 的速度消失,后者以 \(O(\sqrt{\Delta t})\)。
正确做法:永远写
dW = np.sqrt(dt) * np.random.randn(...)。一个快速自检:模拟 \(\mathrm{d}X = \mathrm{d}W\)(纯布朗运动),检查 \(\mathrm{Var}[X_T] \approx T\) 与步长无关。
陷阱二:左端点 \(X_k\) 不是随意的。 我们在 §9.1.3.2 强调过 Ito 积分取**左端点**——数值格式必须忠实于这一点:\(b(X_k)\) 和 \(\sigma(X_k)\) 都用区间**起点**的值,而不是终点 \(X_{k+1}\)(那会变成隐式格式,且若对扩散项也取终点,离散的就不再是 Ito SDE 而漂移向 Stratonovich)。这正是为什么 Euler-Maruyama 天然对应 Ito 约定(回看 §9.1.5.2 表格最后一行)。
9.1.8.2 收敛阶:强收敛 vs 弱收敛¶
这是 SDE 数值分析**最反直觉**的地方,也是与 ODE 的根本分歧。ODE 数值方法只有一种"精度"概念;SDE 却有**两种本质不同**的收敛概念,因为我们既可能关心"单条轨迹逼近得多准",也可能只关心"统计量(均值、方差、期望收益)逼近得多准"。
定义(强收敛):数值解 \(X_N^{\Delta t}\)(在终点 \(T\),步长 \(\Delta t\))以阶 \(\gamma\) 强收敛,如果
其中 \(X_T\) 是**同一布朗路径下**的精确解。强收敛要求逐路径逼近——数值轨迹和真实轨迹"形影不离"。
定义(弱收敛):以阶 \(\beta\) 弱收敛,如果对所有充分光滑的检验函数 \(g\),
弱收敛只要求**分布层面**逼近——数值解的均值、方差、各阶矩逼近真实分布,但单条轨迹可以差很远。
本质洞察:强收敛和弱收敛的区别,本质是"逐点逼近"与"分布逼近"的区别。这不是数学家的吹毛求疵——它直接决定你该选哪种方法。如果你在做**滤波或最优控制**(关心这一条真实轨迹),需要强收敛;如果你在做 Monte Carlo 估计期望(如 MPPI 算成本期望、Diffusion 采样统计),只需要弱收敛,可以用更省的格式。
Euler-Maruyama 的收敛阶(在标准 Lipschitz + 线性增长条件下,即 §9.1.6 的条件):
为什么强阶只有 \(1/2\) 而非 ODE Euler 的 \(1\)? 根源还是 \((\mathrm{d}W)^2 = \mathrm{d}t\)。在一步的 Taylor/Ito 展开中,被丢弃的最低阶项含有 \(\int_{t_k}^{t_{k+1}}\!\!\int_{t_k}^{s} \mathrm{d}W_r\,\mathrm{d}W_s\) 这样的**二重 Ito 积分**,其量级是 \(O((\Delta W)^2) = O(\Delta t)\)——比 ODE 情形(被丢弃项 \(O(\Delta t^2)\))大了一整个 \(\sqrt{\Delta t}\) 量级。把单步误差 \(O(\Delta t)\) 累积 \(N = T/\Delta t\) 步、并考虑随机误差的 \(L^2\) 累加(独立误差按平方和累加,开根号引入额外 \(\sqrt{\cdot}\)),最终全局强误差落在 \(O(\sqrt{\Delta t})\)。
[!TIP] 阶段小结:到这里我们知道了两件事——(1) Euler-Maruyama 就是"前向 Euler + \(\sqrt{\Delta t}Z\) 噪声";(2) 它逐路径只有 \(1/2\) 阶精度(要精度翻倍得把步长缩到 \(1/4\),代价高)。接下来要问:能不能像 ODE 里用 Runge-Kutta 那样,造一个更高阶的格式?答案是 Milstein 方法。
9.1.8.3 Milstein 方法:用 Ito 公式补回二阶项¶
核心思想:Euler-Maruyama 丢掉了那个 \(O(\Delta t)\) 的二重 Ito 积分项。Milstein(1974)的想法是——把它算出来补回去。对扩散系数 \(\sigma(X)\) 用 Ito 公式展开(注意这里又一次用到 §9.1.4 的 Ito 公式,它真的是"推导一切"的工具),可以证明那个二重积分等于
注意右边那个 \((\Delta W_k)^2 - \Delta t\)——它正是二次变差证明(§9.1.2.4 步骤 2)里反复出现的"零均值修正项"。补上后得到**一维 Milstein 格式**:
收敛阶:Milstein 方法的**强收敛阶提升到 \(\gamma = 1\)**(弱阶仍为 \(1\))。也就是说,逐路径精度从 \(\sqrt{\Delta t}\) 提升到 \(\Delta t\)——这是质的飞跃。
对比表:
| 方法 | 多出的项 | 强收敛阶 \(\gamma\) | 弱收敛阶 \(\beta\) | 需要 \(\sigma'\)? |
|---|---|---|---|---|
| Euler-Maruyama | —— | \(1/2\) | \(1\) | 否 |
| Milstein | \(\frac{1}{2}\sigma\sigma'[(\Delta W)^2 - \Delta t]\) | \(1\) | \(1\) | 是 |
[!IMPORTANT] 加性噪声时二者完全相同。当扩散系数 \(\sigma\) 是常数(不依赖状态),\(\sigma' = 0\),Milstein 修正项消失,Milstein 退化为 Euler-Maruyama。这与 §9.1.5.4 中"\(\sigma\) 为常数时 Ito = Stratonovich"是同一件事的两个侧面——常数扩散是最温顺的情形。机器人学里很多过程噪声模型(EKF 的 \(G\,\mathrm{d}W\),\(G\) 为常矩阵)正属此类,所以**这些场景下 Euler-Maruyama 已经是一阶强收敛的,无需 Milstein**。这解释了为什么 Euler-Maruyama 在工程中如此流行——它在最常见的加性噪声场景下并不"低人一等"。
Milstein 的代价:需要扩散系数的导数 \(\sigma'(x)\)。在高维(\(X \in \mathbb{R}^n\),多布朗源)情形,修正项涉及**所有布朗分量两两的二重积分**,其中"非对角"的二重积分(不同布朗运动 \(W^i, W^j\) 之间,称为 Lévy 面积)无法用 \(\Delta W\) 简单表示,必须额外采样——这使多维 Milstein 实现复杂且昂贵。这是它不如 Euler-Maruyama 普及的现实原因。
反事实:如果扩散系数 \(\sigma'\) 不存在(不可微,如 §9.1.6.4 的 Tanaka 方程 \(\sigma(x) = |x|^{1/2}\)),Milstein 方法直接失效,只能退回 Euler-Maruyama 或用导数自由的变体(用差商近似 \(\sigma'\))。
9.1.8.4 数值稳定性:步长不是越小越好,但太大会爆炸¶
问题:和刚性 ODE 一样,显式 Euler-Maruyama 对**强回复**的 SDE(如大 \(\theta\) 的 OU 过程)有稳定性上限。考虑 \(\mathrm{d}X = -\theta X\,\mathrm{d}t + \sigma\,\mathrm{d}W\),离散为
漂移部分的放大因子是 \(|1 - \theta\Delta t|\)。要数值稳定(均方有界),需要 \(|1 - \theta\Delta t| < 1\),即
如果 \(\theta = 100\)(强阻尼),步长必须小于 \(0.02\),否则解会发散震荡——和确定性刚性 ODE 的稳定性约束完全一致。
解决方案——半隐式(漂移隐式)格式:把漂移项取在终点(隐式),扩散项仍取起点(保持 Ito):
此时放大因子 \(1/(1+\theta\Delta t) < 1\) 对**任意** \(\Delta t > 0\) 都成立——无条件稳定。这与 ODE 中"后向 Euler 治刚性"完全平行。
[!WARNING] 陷阱 2(数值):对扩散项也取隐式
错误现象:你想让格式更稳定,于是把 \(\sigma\,\mathrm{d}W\) 项的 \(\sigma\) 也取在 \(X_{k+1}\) 上。结果模拟出的稳态方差系统性偏离理论值。
根本原因:对扩散项取终点(或中点)相当于把 Ito 积分悄悄变成了 Stratonovich 积分(§9.1.5)。两者差一个 \(\frac{1}{2}\sigma\sigma'\) 的 noise-induced drift——你以为在解 Ito SDE,实际解的是另一个方程。
正确做法:漂移项可以隐式(治刚性无害,因为漂移是 \(\mathrm{d}t\) 项),但**扩散项必须显式取左端点**,才能忠实于 Ito 约定。
9.1.8.5 代码:验证 Euler-Maruyama 与 Milstein 的收敛阶¶
import numpy as np
def convergence_order_test(n_paths=20000):
"""
验证 Euler-Maruyama (强阶 1/2) vs Milstein (强阶 1) 的强收敛阶。
测试方程: 几何布朗运动 dX = mu*X dt + sigma*X dW
选它的原因: 有闭式解 X_t = X_0*exp((mu-sigma^2/2)t + sigma*W_t),
可以在【同一布朗路径】下比较数值解与精确解 —— 这正是"强收敛"的定义。
"""
mu, sigma, X0, T = 1.0, 0.5, 1.0, 1.0
dt_list = [2**-k for k in range(3, 9)] # 步长从 1/8 到 1/256
print(f"{'dt':>10} {'EM 强误差':>14} {'Milstein 强误差':>16}")
print("-" * 44)
em_errs, mil_errs = [], []
for dt in dt_list:
N = int(T / dt)
rng = np.random.default_rng(0) # 固定种子 -> 同一族布朗路径
# 用最细网格生成布朗增量,保证两种方法看到"同一条路径"
dW = np.sqrt(dt) * rng.standard_normal((n_paths, N))
W_T = dW.sum(axis=1) # 终点布朗值
# 精确解(同一路径)
X_exact = X0 * np.exp((mu - 0.5*sigma**2)*T + sigma*W_T)
# Euler-Maruyama: X += mu*X*dt + sigma*X*dW
X_em = np.full(n_paths, X0)
for k in range(N):
X_em = X_em + mu*X_em*dt + sigma*X_em*dW[:, k]
# Milstein: 额外 + 0.5*sigma*X*sigma*[(dW)^2 - dt]
# 因为 g(x)=sigma*x => g'(x)=sigma => g*g' = sigma^2 * x
X_mil = np.full(n_paths, X0)
for k in range(N):
X_mil = (X_mil + mu*X_mil*dt + sigma*X_mil*dW[:, k]
+ 0.5*sigma**2*X_mil*(dW[:, k]**2 - dt))
em_err = np.mean(np.abs(X_em - X_exact))
mil_err = np.mean(np.abs(X_mil - X_exact))
em_errs.append(em_err); mil_errs.append(mil_err)
print(f"{dt:>10.5f} {em_err:>14.6f} {mil_err:>16.6f}")
# 用对数-对数斜率估计收敛阶: error ~ C * dt^gamma => log(err) = gamma*log(dt)+c
em_order = np.polyfit(np.log(dt_list), np.log(em_errs), 1)[0]
mil_order = np.polyfit(np.log(dt_list), np.log(mil_errs), 1)[0]
print(f"\n拟合强收敛阶: Euler-Maruyama ~ {em_order:.3f} (理论 0.5)")
print(f" Milstein ~ {mil_order:.3f} (理论 1.0)")
if __name__ == '__main__':
convergence_order_test()
结果解读:对数-对数图上,Euler-Maruyama 的误差直线斜率约 \(0.5\),Milstein 约 \(1.0\)——直接验证了理论收敛阶。注意两点工程经验:(1) 同一布朗路径下比较才是"强收敛",若用不同随机种子比较只能看到"弱收敛",斜率会失真;(2) Milstein 的误差曲线明显低于 Euler-Maruyama,但每步多了一次乘法和一次平方——是否值得,取决于你要的精度和这是不是加性噪声。
9.1.8.6 练习¶
练习 9.1.18(⭐):对纯布朗运动 \(\mathrm{d}X = \mathrm{d}W\)(\(b=0, \sigma=1\)),写出 Euler-Maruyama 和 Milstein 格式,说明二者为何完全相同。(提示:\(\sigma\) 是常数。)
练习 9.1.19(⭐⭐):对 \(\mathrm{d}X = -\theta X\,\mathrm{d}t + \sigma\,\mathrm{d}W\),推导显式 Euler-Maruyama 的均方稳定条件 \(\Delta t < 2/\theta\)。(提示:写出 \(\mathbb{E}[X_{k+1}^2]\) 关于 \(\mathbb{E}[X_k^2]\) 的递推,要求放大因子 \((1-\theta\Delta t)^2 < 1\)。)
练习 9.1.20(⭐⭐⭐ 跨节综合):用 §9.1.4.4 的 GBM 闭式解 \(S_t = S_0 e^{(\mu-\sigma^2/2)t+\sigma W_t}\) 作为"真值",手工推导 Milstein 修正项 \(\frac{1}{2}\sigma S\cdot\sigma\cdot[(\Delta W)^2-\Delta t]\) 中 \(\sigma\sigma'\) 为何等于 \(\sigma^2 S\)(这里 \(g(S)=\sigma S\))。再解释:为什么对 GBM 这个修正能显著降低强误差,但对加性噪声 OU 过程却毫无作用?
§9.1.9 反向时间 SDE 与概率流 ODE ⭐⭐⭐¶
§9.1.7.4 我们已经瞥见了 Anderson 反向 SDE——它是 Diffusion 模型的数学心脏。但那里只给了公式没给来历。本节补上这条关键链路:给定一个把数据"打碎成噪声"的前向 SDE,如何严格地构造一个把噪声"还原成数据"的反向过程? 这是连接本章全部理论与现代生成模型(深度学习数学/40_Diffusion_Models数学)、乃至 Diffusion Policy 机器人决策的桥梁。
9.1.9.1 动机:时间能不能倒流?¶
问题场景:VP-SDE 前向过程 \(\mathrm{d}X_t = -\frac{1}{2}\beta(t)X_t\,\mathrm{d}t + \sqrt{\beta(t)}\,\mathrm{d}W_t\) 把任意数据分布 \(p_0 = p_{\text{data}}\) 在 \(t\to T\) 时刻碾成 \(\mathcal{N}(0,I)\)。生成模型想做的是反过来:从 \(\mathcal{N}(0,I)\) 采一个噪声,沿时间倒退回到 \(p_{\text{data}}\),得到一张新图 / 一条新机器人轨迹。
反面——朴素地"反向跑"为什么不行? 一个天真的想法:把前向 SDE 的时间反一下、\(\mathrm{d}t\) 变 \(-\mathrm{d}t\)。但这立刻撞上 §9.1.2.5 的铁律——布朗运动处处不可微、无方向性。\(\mathrm{d}W_t\) 没有"反向"的概念(它的增量独立于过去,倒过来看就独立于未来,但绝不是简单变号)。更根本地,前向扩散是**不可逆的信息销毁**:两个不同的数据点经过加噪可能变成几乎一样的噪声,光看噪声无法知道它原来是谁。要"还原",必须额外注入信息——这个信息就是 score 函数 \(\nabla_x\log p_t(x)\),它告诉你"在当前噪声水平下,数据更可能在哪个方向"。
历史:Anderson(1982)在一篇纯随机分析的论文里证明了反向时间扩散的存在性,当时与机器学习毫无关系。三十多年后,Song et al.(ICLR 2021)发现整个 score-based 生成模型恰好就是 Anderson 定理的应用,一举统一了 score matching 与 DDPM——这是"老数学突然成为新 AI 引擎"的经典案例。
9.1.9.2 Anderson 反向时间 SDE¶
定理(Anderson 1982):设前向 Ito SDE 为
其时刻 \(t\) 的边际密度为 \(p_t(x)\)。则存在一个**反向时间** SDE,使得反向过程 \(\bar{X}_t\)(从 \(t=T\) 向 \(t=0\) 演化)与前向过程具有**完全相同的边际分布** \(p_t\):
其中 \(\bar{W}_t\) 是反向时间的布朗运动,\(\mathrm{d}t\) 在这里取负方向(从 \(T\) 到 \(0\))。
逐项拆解(理论-工程桥接):
| 项 | 含义 | 在 Diffusion 中由谁提供 |
|---|---|---|
| \(b(\bar{X}_t,t)\) | 原前向漂移(已知解析式) | 直接照搬,无需学习 |
| \(-\sigma^2\nabla_x\log p_t\) | 额外的"去噪"漂移,指向高密度区 | \(\nabla\log p_t\) 即 score,由神经网络 \(s_\theta\) 学习 |
| \(\sigma\,\mathrm{d}\bar{W}_t\) | 反向扩散(继续注入随机性,保证多样性) | 采样时现场生成 |
本质洞察:反向 SDE 比前向 SDE 多出的唯一新东西是 score 项 \(-\sigma^2\nabla_x\log p_t\)。它扮演"指南针"——前向扩散让粒子盲目随机游走、远离数据流形;score 项在每一步把粒子往"数据更可能在的地方"推一把。整个 Diffusion 模型的训练,本质上**只是在学这一个指南针**(score matching),其余的 \(b\) 和 \(\sigma\) 都是设计时就定死的已知量。这把"生成一张图"这件玄乎的事,还原成了"估计一个梯度场"的回归问题。
9.1.9.3 概率流 ODE:去掉随机性的"孪生"轨迹¶
Anderson 反向 SDE 仍含随机项 \(\mathrm{d}\bar{W}_t\),每次采样轨迹都不同。Song et al.(2021)进一步证明了一个惊人结果:存在一个完全确定性的 ODE,与前向/反向 SDE 共享完全相同的边际密度 \(p_t\):
这称为**概率流常微分方程**(probability-flow ODE)。它与反向 SDE 的唯一差别是 score 项的系数从 \(\sigma^2\) 变成 \(\frac{1}{2}\sigma^2\),并且**没有 \(\mathrm{d}W\) 项**。
为什么系数恰好减半? 这不是凑出来的,而是 Fokker-Planck 方程(§9.1.7)的直接推论。回顾前向 SDE 的 Fokker-Planck:
关键技巧——把扩散项改写成一个"伪输运"形式。利用恒等式 \(\nabla p_t = p_t\,\nabla\log p_t\)(对数导数),
代回 Fokker-Planck:
这是一个**纯输运方程**(Liouville 方程,§9.1.7.1 提到的 ODE 密度演化方程!)——没有扩散项了。而 Liouville 方程 \(\partial_t p = -\nabla\cdot(v\,p)\) 恰好描述确定性 ODE \(\dot{X} = v(X,t)\) 的密度演化,其速度场就是 \(v = b - \frac{1}{2}\sigma^2\nabla\log p_t\)。这就证明了概率流 ODE 与 SDE 共享边际密度,且解释了系数 \(\frac{1}{2}\) 的来历。\(\square\)
本质洞察:同一族边际分布 \(p_t\) 可以由**无穷多条不同的动力学**实现——随机的反向 SDE 是一条,确定性的概率流 ODE 是另一条,二者只是 score 项系数不同。这揭示了一个深刻事实:"分布如何演化"(Fokker-Planck)与"个体如何运动"(SDE/ODE 轨迹)是两个层次,前者不唯一地决定后者。Diffusion 采样既可以"掷骰子"(SDE,多样性好),也可以"走直线"(ODE,快且可复现、可算精确似然)。
三种视角对照(系统性分类):
| 视角 | 方程 | 随机性 | 机器人 / 生成中的用途 |
|---|---|---|---|
| 前向 SDE | \(\mathrm{d}X = b\,\mathrm{d}t + \sigma\,\mathrm{d}W\) | 有 | 训练时加噪(已知,免学习) |
| 反向 SDE (Anderson) | \(\mathrm{d}\bar X = (b-\sigma^2\nabla\log p)\mathrm{d}t + \sigma\,\mathrm{d}\bar W\) | 有 | 采样,多样性高(DDPM 采样器) |
| 概率流 ODE (Song) | \(\dot X = b - \frac{1}{2}\sigma^2\nabla\log p\) | 无 | 快速采样、精确似然、DDIM、可复现 |
[!IMPORTANT] 直达机器人:在 Diffusion Policy(机器人模仿学习的主流范式)中,"数据"不是图片而是**动作序列轨迹**。前向 SDE 把专家演示轨迹打成噪声训练 score 网络;部署时用反向 SDE 或概率流 ODE 从噪声生成一段可执行的机器人动作。实时控制偏爱**概率流 ODE**——确定性、步数少(可用高阶 ODE 求解器,回看 §9.1.8 的数值方法在这里直接复用)、延迟低且每次给出可复现的动作,这对安全攸关的机器人至关重要。
9.1.9.4 练习¶
练习 9.1.21(⭐⭐):对标准布朗运动 \(\mathrm{d}X = \mathrm{d}W\)(\(b=0,\sigma=1\)),其密度 \(p_t = \mathcal{N}(0,t)\)。计算 score \(\nabla_x\log p_t(x)\),写出对应的概率流 ODE,并说明它是一个简单的线性 ODE。
练习 9.1.22(⭐⭐⭐):用 §9.1.7 的对数导数技巧 \(\nabla p = p\nabla\log p\),从 OU 过程的 Fokker-Planck 方程出发,推导其概率流 ODE。验证当 \(p_t\) 取稳态 \(\mathcal{N}(0,\sigma^2/2\theta)\) 时,ODE 速度场为零(稳态不动)。
练习 9.1.23(⭐⭐⭐⭐ 研究级 / 跨章综合):综合 §9.1.4(VP-SDE 闭式转移核)、§9.1.7(Fokker-Planck)、本节(反向 SDE)三处知识,论证:为什么 Diffusion 训练时不需要知道 \(\nabla\log p_t(x)\)(边际 score,难算),只需知道 \(\nabla\log p_t(x\mid x_0)\)(条件 score,因为 \(p_t(\cdot\mid x_0)\) 是你在 §9.1.4.4 求过的高斯,闭式可算)?提示:用 \(\nabla\log p_t(x) = \mathbb{E}_{x_0\sim p(x_0\mid x_t)}[\nabla\log p_t(x\mid x_0)]\) 与去噪 score matching 的等价性。
§9.1.10 与机器人估计与控制的深度关联 ⭐⭐⭐¶
本章开篇承诺过:SDE 不是抽象数学,而是机器人过程噪声、滤波、采样控制的统一语言。前面各节已零散地连接了 EKF、Diffusion、MPPI;本节把这些线索收拢,**系统性地**展示随机微积分如何贯穿机器人的"估计—控制—学习"三大支柱。这也是本章"理论-工程桥接"(R6-D)的总成。
9.1.10.1 连续时间滤波:从 SDE 到 Kalman-Bucy 滤波¶
动机:你在 纯数学基础 / 机器人状态估计 章节学过离散卡尔曼滤波——"预测-更新"两步循环。但传感器(IMU、编码器)和动力学本质是连续时间的,离散滤波是对连续问题的采样近似。连续时间的最优滤波长什么样? 答案是 Kalman-Bucy 滤波(Kalman & Bucy 1961),它把整个滤波器写成一个 SDE + 一个矩阵 ODE。
问题设置:线性系统的状态和观测都由 SDE 驱动:
其中 \(W_t, V_t\) 是独立布朗运动(过程噪声谱密度 \(Q\)、观测噪声谱密度 \(R\))。这里观测写成 \(\mathrm{d}Y_t = HX_t\,\mathrm{d}t + \mathrm{d}V_t\)——它的"导数"\(\dot Y = HX + \dot V\) 就是"信号 + 白噪声",正是 §9.1.2.1 中"白噪声只能在积分意义下定义"的又一次体现。
Kalman-Bucy 滤波方程:最优估计 \(\hat{X}_t = \mathbb{E}[X_t\mid \mathcal{F}_t^Y]\)(给定到 \(t\) 为止的观测历史)满足
其中误差协方差 \(P_t = \mathbb{E}[(X_t-\hat X_t)(X_t-\hat X_t)^\top]\) 满足**矩阵 Riccati 微分方程**:
逐项的物理意义(理论-工程桥接):
| 项 | 含义 | 直觉 |
|---|---|---|
| \(F\hat X_t\,\mathrm{d}t\) | 模型预测漂移 | "按动力学外推" |
| \(\mathrm{d}Y_t - H\hat X_t\,\mathrm{d}t\) | 新息(innovation) | "实测与预测之差"——新信息 |
| \(K_t = P_tH^\top R^{-1}\) | 卡尔曼增益 | 信预测还是信观测的权衡 |
| \(FP+PF^\top\) | 协方差被动力学传播 | 不确定性随时间漂移 |
| \(-PH^\top R^{-1}HP\) | 观测带来的**信息增益** | 测量降低不确定性(二次项!) |
| \(GQG^\top\) | 过程噪声注入 | 不确定性的源头 |
与离散 EKF 的对照(多视角理解):
| 离散 Kalman | 连续 Kalman-Bucy | |
|---|---|---|
| 结构 | 预测 + 更新两步交替 | 单个 SDE,无显式两步 |
| 增益 | \(K_k = P_k^- H^\top(HP_k^-H^\top+R)^{-1}\) | \(K_t = P_tH^\top R^{-1}\)(无 \(H P H^\top\) 项) |
| 协方差 | 离散 Riccati 递推 | 连续 Riccati ODE |
| 数值求解 | 直接递推 | 对 \(P\) 用 ODE 积分(纯数学基础/120_常微分方程!) |
本质洞察:连续与离散 Riccati 方程"几乎等价,差在一个时间反演"——这呼应了滤波与 LQR 最优控制的**对偶性**(Kalman 1960 的另一重大发现)。滤波的 Riccati 向前积分(不确定性随时间累积又被观测压缩),LQR 的 Riccati 向后积分(代价从终端向初始回溯)。同一个矩阵方程,正着读是估计,反着读是控制。
[!TIP] 机器人实践:实际机器人代码里几乎都用**离散** EKF/UKF(因为传感器是采样的、计算机是离散的)。但理解 Kalman-Bucy 的价值在于:(1) 它揭示了增益、Riccati 方程的连续时间本质,让你明白离散公式是怎么来的;(2) 高频传感器(如 1kHz IMU)下,连续-离散滤波(连续预测 + 离散更新)比纯离散更准;(3) 它是更高级的连续滤波(如针对非线性的 Kushner-Stratonovich 方程、Zakai 方程,已在 §9.1.5.4 表格中出现)的基础。
9.1.10.2 采样型控制:MPPI 与路径积分¶
动机:机器人最优控制要解 Hamilton-Jacobi-Bellman(HJB)方程——一个非线性 PDE,高维下"维数灾难"无法网格求解。能不能像 Diffusion 用采样代替求解那样,用 Monte Carlo 采样轨迹来近似最优控制? 这就是路径积分控制 / MPPI(Model Predictive Path Integral,Williams et al. 2017)的核心思想,如今是机器人(自动驾驶、四足、机械臂)实时控制的主力之一。
与本章的连接点:MPPI 把系统动力学建模为受控 SDE
控制 \(u_t\) 进入漂移项,噪声进入扩散项。算法做的事:从当前状态采样**大量**带噪控制轨迹(每条就是一次 Euler-Maruyama 模拟,§9.1.8 的方法在此直接复用),算每条轨迹的累积成本 \(S(\tau)\),然后用成本加权平均得到最优控制更新:
即"成本越低的采样轨迹,权重越大"——一个 softmax 形式的加权。
为什么采样能解 HJB? 这背后是**路径积分理论**与 Feynman-Kac 公式(本章后续规划的"随机分析·Feynman-Kac"章):通过对值函数做对数变换 \(V = -\lambda\log\psi\),非线性 HJB PDE 被**线性化**为一个线性 PDE,而线性 PDE 的解可由 Feynman-Kac 公式表示成"受控 SDE 轨迹上某泛函的期望"——期望可以用 Monte Carlo 采样估计。这正是 §9.1.8.2 中"弱收敛足矣"的典型应用:我们只关心成本的**期望**,不关心单条轨迹精度,所以 Euler-Maruyama 的弱一阶收敛绰绰有余。
本质洞察:MPPI 和 Diffusion 采样在数学上是**同一枚硬币的两面**——都是"用 SDE 的 Monte Carlo 模拟,把一个本来要解 PDE(HJB / Fokker-Planck)的难题,转化为采样求期望的易题"。Diffusion 采样反向 SDE 生成数据,MPPI 采样受控 SDE 生成控制。理解了本章的 Ito 积分 + Euler-Maruyama + Fokker-Planck,你就同时握住了这两个现代机器人算法的钥匙。
MPPI 的边界(语言精确性,标注类比失效处):路径积分控制并非万能——它**只对 HJB 可被对数变换线性化的一类问题严格最优**,要求控制代价与噪声协方差满足特定匹配条件(\(G\) 同时出现在控制和噪声通道)。Williams 等用信息论的 KL 散度/自由能对偶给出了更宽松的启发式推导,使 MPPI 可用于更一般的成本,但此时它是"合理的近似"而非"严格最优"。不要把"MPPI = 最优控制"这个类比无限延伸。
9.1.10.3 三大支柱的统一图景¶
把本章对机器人的贡献收拢成一张表(系统性分类):
| 机器人支柱 | 用到的 SDE 工具 | 本章对应节 | 代表算法 |
|---|---|---|---|
| 建模 | 布朗运动作过程噪声、\((\mathrm{d}W)^2=\mathrm{d}t\) | §9.1.2 | 连续时间动力学 + 噪声 |
| 估计 | Ito 积分、鞅、Kalman-Bucy、Riccati | §9.1.3, §9.1.10.1 | EKF/UKF、连续-离散滤波 |
| 控制 | 受控 SDE、Euler-Maruyama 采样、HJB/Feynman-Kac | §9.1.8, §9.1.10.2 | MPPI、路径积分控制 |
| 学习/决策 | 反向 SDE、概率流 ODE、Fokker-Planck、score | §9.1.7, §9.1.9 | Diffusion Policy、Score SDE |
[!IMPORTANT] 一句话总览:随机微积分是机器人"在不确定性下感知与行动"的统一数学语言。布朗运动**是噪声的原子;**Ito 积分/公式**是操作它的语法;**Fokker-Planck 在分布层面描述演化;而 Kalman-Bucy(估计)、MPPI(控制)、Diffusion(学习) 是这门语言写出的三篇代表作。本章学完,这三者对你不再是孤立的"技巧",而是同一理论的不同投影。
9.1.10.4 练习¶
练习 9.1.24(⭐⭐⭐):写出标量 Kalman-Bucy 滤波(\(F=-a, H=1, G=1\),常数 \(Q,R\))的 Riccati ODE,求其稳态解 \(P_\infty\)(令 \(\dot P=0\) 解二次方程),并解释稳态增益 \(K_\infty = P_\infty/R\) 的物理意义。
练习 9.1.25(⭐⭐⭐⭐ 跨章综合):对比 MPPI 的成本加权 \(\propto e^{-S(\tau)/\lambda}\) 与 Diffusion 反向 SDE 的 score 项 \(\nabla\log p_t\)。论证两者都可写成"对一族 SDE 轨迹的期望/加权",并说明它们各自把哪个 PDE(HJB vs Fokker-Planck)转化成了采样问题。
§9.1.11 本章小结¶
知识点总结表¶
| 概念 | 难度 | 核心公式 | 与 ODE 的对比 | 下游应用 |
|---|---|---|---|---|
| 布朗运动 \(W_t\) | ⭐⭐ | \(W_t \sim \mathcal{N}(0,t)\),独立增量 | -- | 一切随机微积分的基础 |
| 二次变差 | ⭐⭐ | \([W]_t = t\),\((\mathrm{d}W)^2 = \mathrm{d}t\) | ODE: \((\mathrm{d}t)^2 = 0\) | Ito 公式的来源 |
| Ito 积分 | ⭐⭐ | \(I(H) = \int H\,\mathrm{d}W\),\(\mathbb{E}[I^2] = \mathbb{E}[\int H^2\,\mathrm{d}t]\) | Riemann-Stieltjes 积分 | SDE 的定义 |
| Ito 公式 | ⭐ | \(\mathrm{d}f = f'\mathrm{d}X + \frac{1}{2}f''\sigma^2\mathrm{d}t\) | 普通链式法则(无二阶项) | 求解 SDE、推导 FP |
| Ito 乘法表 | ⭐ | \(\mathrm{d}W \cdot \mathrm{d}W = \mathrm{d}t\), 其余 \(= 0\) | \(\mathrm{d}t \cdot \mathrm{d}t = 0\) | 快速计算 |
| Ito vs Stratonovich | ⭐⭐ | 修正项 \(\frac{1}{2}\sigma\sigma'\) | -- | 选择建模约定 |
| SDE 存在唯一性 | ⭐⭐⭐ | Lipschitz + 线性增长 | Picard-Lindelof | 保证模型良定义 |
| Fokker-Planck | ⭐⭐ | \(\partial_t p = -\nabla\cdot(bp) + \frac{1}{2}\nabla^2(\sigma^2 p)\) | Liouville 方程(仅输运项) | Score SDE, Anderson |
核心思想流¶
布朗运动 W_t
|
|--- 路径连续但处处不可微
| \--- 二次变差 [W]_t = t != 0
| \--- (dW)^2 = dt:Taylor 展开需保留二阶项
|
|--- 无界变差 ---> Riemann-Stieltjes 积分不适用
| \--- Ito 积分(左端点 + L^2 扩张)
| \--- Ito 等距:||I(H)||^2 = ||H||^2
|
\--- Ito 公式 = 普通链式法则 + 修正项 (1/2)f''*sigma^2*dt
|--- 求解 SDE(GBM, OU, VP-SDE)
\--- Fokker-Planck 方程(轨迹 --> 密度)
\--- Anderson 反向 SDE ---> Diffusion Models (深度学习数学/40_Diffusion_Models数学)
常见陷阱汇总¶
| # | 陷阱 | 正确做法 |
|---|---|---|
| 1 | 把 \(\mathrm{d}W\) 当 \(\mathrm{d}t\),用普通链式法则 | 必须用 Ito 公式,保留 \(\frac{1}{2}f''\sigma^2\mathrm{d}t\) |
| 2 | 忘记 Ito 积分的适应性要求 | 被积函数必须取**左端点**值(\(\mathcal{F}_{t_i}\)-可测) |
| 3 | GBM 中漏掉 Ito 修正 \(-\sigma^2/2\) | \(S_t = S_0 e^{(\mu - \sigma^2/2)t + \sigma W_t}\),不是 \(e^{\mu t + \sigma W_t}\) |
| 4 | 混淆 Ito 和 Stratonovich | 明确声明使用哪种约定,需要时用转换公式 |
| 5 | 以为布朗运动可微 | 路径处处不可微,\(\mathrm{d}W/\mathrm{d}t\) 不存在 |
| 6 | SDE 存在性只需 Lipschitz | 还需**线性增长条件**(ODE 不需要是因为紧集自动有界) |
| 7 | 数值布朗增量写成 \(\Delta t\,Z\) | 必须 \(\sqrt{\Delta t}\,Z\),否则方差量纲错(\(\Delta t^2\) vs \(\Delta t\)) |
| 8 | 误以为 Milstein 总比 Euler-Maruyama 强 | 加性噪声(\(\sigma\) 常数)时 \(\sigma'=0\),二者完全相同 |
| 9 | 数值格式对扩散项取隐式/中点 | 悄悄变成 Stratonovich,引入 \(\frac12\sigma\sigma'\) 偏差;扩散项须显式左端点 |
| 10 | 把反向时间 SDE 当作"前向 \(\mathrm{d}t\) 变号" | 必须额外加 score 项 \(-\sigma^2\nabla\log p_t\),否则无法还原数据 |
| 11 | 把 Diffusion 训练当作"学整个生成过程" | 只学一个 score 场 \(\nabla\log p_t\);\(b,\sigma\) 都是设计时已知量 |
本章常见误解汇总¶
| # | 常见误解 | 正确理解 |
|---|---|---|
| 1 | "SDE 就是带噪声的 ODE,用 ODE 直觉即可" | 噪声的二次变差非零(\((\mathrm{d}W)^2=\mathrm{d}t\))从根本上改变了微积分规则——链式法则要加二阶项,路径不可微,无"速度"概念 |
| 2 | "Ito 积分和 Riemann 积分一样,取样点无所谓" | 取样点本质重要:左端点给 Ito(鞅),中点给 Stratonovich(普通链式法则),二者差一个 \(O(\mathrm{d}t)\) 项 |
| 3 | "\(\mathbb{E}[\int H\,\mathrm{d}W]=0\) 是因为 \(\mathrm{d}W\) 均值为零,跟 \(H\) 无关" | 关键是 \(H\) 的**适应性**(不能预见未来 \(\mathrm{d}W\))。若 \(H\) 可偷看未来,期望未必为零——这正是鞅性的来源 |
| 4 | "Stratonovich 更自然(链式法则不变),所以更好" | 各有所长:Ito 的鞅性便于概率/滤波计算,Stratonovich 的坐标不变性便于物理建模与流形 SDE。机器人文献默认 Ito |
| 5 | "数值步长越小,模拟一定越准" | 强阻尼 SDE 有稳定性上限 \(\Delta t<2/\theta\),太大发散;显式格式还受刚性约束。精度与稳定性是两回事 |
| 6 | "Fokker-Planck 是另一套理论,与 Ito 公式无关" | Fokker-Planck 正是对测试函数用 Ito 公式取期望、再分部积分推出来的——它是 Ito 公式的直接推论 |
| 7 | "反向 SDE 和概率流 ODE 是两种不同的模型" | 二者共享**完全相同的边际分布** \(p_t\),只是 score 项系数 \(\sigma^2\) vs \(\frac12\sigma^2\)、有无 \(\mathrm{d}W\) 的区别——同一分布演化的两种实现 |
| 8 | "MPPI、Kalman 滤波、Diffusion 是三个无关的算法" | 都是随机微积分的应用:估计(Kalman-Bucy/Ito 积分)、控制(MPPI/受控 SDE 采样)、学习(Diffusion/反向 SDE),共享同一套语言 |
§9.1.12 累积项目:随机动力学模拟器¶
项目定位:本章实现核心组件,后续章节将扩展(添加 Milstein 方法、多维 SDE、Fokker-Planck 数值解等)。
本章实现目标: 1. 布朗运动模拟器(含二次变差数值验证) 2. Euler-Maruyama SDE 求解器 3. OU 过程和 GBM 的模拟与解析解对比
"""
stochastic_dynamics.py — 随机动力学模拟器 (随机分析/10_随机微分方程基础 累积项目)
本模块实现:
1. 布朗运动 (Wiener 过程) 模拟
2. Euler-Maruyama SDE 求解器
3. 二次变差的数值验证
4. OU 过程模拟与解析解对比
后续章节将扩展:Milstein 方法、多维 SDE、Fokker-Planck 数值解。
"""
import numpy as np
from typing import Callable, Optional, Tuple
# ============================================================
# 1. 布朗运动模拟器
# ============================================================
def brownian_motion(T: float, n_steps: int, n_paths: int = 1,
seed: Optional[int] = None) -> Tuple[np.ndarray, np.ndarray]:
"""
模拟标准一维布朗运动。
原理: W_0 = 0, W_{t_{k+1}} = W_{t_k} + sqrt(dt) * Z_k, Z_k ~ N(0,1)
参数:
T: 终止时间
n_steps: 时间步数
n_paths: 模拟路径数
seed: 随机种子 (可选)
返回:
t: 时间网格, shape (n_steps+1,)
W: 布朗运动路径, shape (n_paths, n_steps+1)
"""
if seed is not None:
np.random.seed(seed)
dt = T / n_steps
t = np.linspace(0, T, n_steps + 1)
# dW_i ~ N(0, dt)
dW = np.sqrt(dt) * np.random.randn(n_paths, n_steps)
# W_0 = 0, W_{k+1} = W_k + dW_k (cumulative sum)
W = np.zeros((n_paths, n_steps + 1))
W[:, 1:] = np.cumsum(dW, axis=1)
return t, W
def verify_quadratic_variation(T: float, n_steps: int,
n_paths: int = 10000) -> dict:
"""
数值验证 [W]_T = T。
计算 Q_n = sum_i (W_{t_{i+1}} - W_{t_i})^2 并与 T 比较。
理论: E[Q_n] = T, Var[Q_n] = 2*T^2/n
返回:
字典包含 mean_qv, std_qv, theoretical (= T), relative_error
"""
t, W = brownian_motion(T, n_steps, n_paths)
dW = np.diff(W, axis=1) # (n_paths, n_steps)
# 二次变差 = sum of squared increments
qv = np.sum(dW**2, axis=1) # (n_paths,)
return {
'mean_qv': np.mean(qv),
'std_qv': np.std(qv),
'theoretical': T,
'relative_error': abs(np.mean(qv) - T) / T,
'theory_std': np.sqrt(2 * T**2 / n_steps)
}
# ============================================================
# 2. Euler-Maruyama SDE 求解器
# ============================================================
def euler_maruyama(
drift: Callable[[float, np.ndarray], np.ndarray],
diffusion: Callable[[float, np.ndarray], np.ndarray],
x0: np.ndarray,
T: float,
n_steps: int,
n_paths: int = 1,
seed: Optional[int] = None
) -> Tuple[np.ndarray, np.ndarray]:
"""
Euler-Maruyama 方法求解标量/向量 SDE:
dX_t = drift(t, X_t) dt + diffusion(t, X_t) dW_t
这是 SDE 的最基本数值方法,类比 ODE 的前向 Euler 法:
X_{k+1} = X_k + b(t_k, X_k) * dt + sigma(t_k, X_k) * sqrt(dt) * Z_k
收敛阶: 强 O(sqrt(dt)), 弱 O(dt)
参数:
drift: b(t, x) 漂移函数, 输入 (t: float, x: (n_paths, d)) -> (n_paths, d)
diffusion: sigma(t, x) 扩散函数, 同上
x0: 初始值, shape (d,)
T: 终止时间
n_steps: 时间步数
n_paths: 模拟路径数
seed: 随机种子
返回:
t: 时间网格, shape (n_steps+1,)
X: 解的路径, shape (n_paths, n_steps+1, d)
"""
if seed is not None:
np.random.seed(seed)
d = len(x0)
dt = T / n_steps
sqrt_dt = np.sqrt(dt)
t = np.linspace(0, T, n_steps + 1)
X = np.zeros((n_paths, n_steps + 1, d))
X[:, 0, :] = x0
for i in range(n_steps):
Z = np.random.randn(n_paths, d) # 标准正态
b = drift(t[i], X[:, i, :]) # (n_paths, d)
sigma = diffusion(t[i], X[:, i, :]) # (n_paths, d)
X[:, i+1, :] = X[:, i, :] + b * dt + sigma * sqrt_dt * Z
return t, X
# ============================================================
# 3. 示例: OU 过程
# ============================================================
def ou_process_demo():
"""
OU 过程: dX = -theta * X * dt + sigma * dW
解析解:
X_t = x0 * exp(-theta*t) + sigma * int_0^t exp(-theta*(t-s)) dW_s
E[X_t] = x0 * exp(-theta*t)
Var[X_t] = sigma^2 / (2*theta) * (1 - exp(-2*theta*t))
稳态分布: N(0, sigma^2 / (2*theta))
"""
theta = 1.0
sigma = 0.5
x0 = np.array([2.0])
T = 5.0
n_steps = 5000
n_paths = 10000
drift = lambda t, x: -theta * x
diffusion = lambda t, x: sigma * np.ones_like(x)
t, X = euler_maruyama(drift, diffusion, x0, T, n_steps, n_paths, seed=42)
X = X[:, :, 0] # (n_paths, n_steps+1)
# 解析解
mean_exact = x0[0] * np.exp(-theta * t)
var_exact = sigma**2 / (2 * theta) * (1 - np.exp(-2 * theta * t))
# 数值统计
mean_num = np.mean(X, axis=0)
var_num = np.var(X, axis=0)
print("=== OU 过程验证 ===")
print(f"t={T:.1f}: 均值 解析={mean_exact[-1]:.6f}, 数值={mean_num[-1]:.6f}")
print(f"t={T:.1f}: 方差 解析={var_exact[-1]:.6f}, 数值={var_num[-1]:.6f}")
print(f"稳态方差 (理论): sigma^2/(2*theta) = {sigma**2/(2*theta):.6f}")
# ============================================================
# 4. 示例: 几何布朗运动 (GBM)
# ============================================================
def gbm_demo():
"""
GBM: dS = mu * S * dt + sigma_gbm * S * dW
解析解 (由 Ito 公式推导):
S_t = S_0 * exp((mu - sigma^2/2) * t + sigma * W_t)
注意 Ito 修正项 -sigma^2/2 !
统计量:
E[S_t] = S_0 * exp(mu * t)
Var[S_t] = S_0^2 * exp(2*mu*t) * (exp(sigma^2*t) - 1)
"""
mu = 0.1
sigma_gbm = 0.3
s0 = np.array([1.0])
T = 2.0
n_steps = 2000
n_paths = 10000
drift = lambda t, x: mu * x
diffusion = lambda t, x: sigma_gbm * x
t, S = euler_maruyama(drift, diffusion, s0, T, n_steps, n_paths, seed=123)
S = S[:, :, 0]
# E[S_t] = S_0 * exp(mu * t)
# 注意: 不是 exp((mu - sigma^2/2)*t), 因为 E[exp(sigma*W_t)] = exp(sigma^2*t/2)
mean_exact = s0[0] * np.exp(mu * t)
mean_num = np.mean(S, axis=0)
print("\n=== GBM 验证 ===")
print(f"t={T:.1f}: E[S_T] 解析={mean_exact[-1]:.6f}, 数值={mean_num[-1]:.6f}")
print(f"注意: 每条路径增长率是 mu - sigma^2/2 = {mu - sigma_gbm**2/2:.4f}")
print(f" 但 E[S_t] 增长率是 mu = {mu:.4f}")
print(f" 差异源自 Jensen 不等式: E[exp(X)] >= exp(E[X])")
# ============================================================
# 5. 二次变差验证
# ============================================================
def quadratic_variation_demo():
"""验证 [W]_T = T, 展示 Var[Q_n] = 2T^2/n 的收敛"""
T = 1.0
print("=== 二次变差 [W]_T = T 验证 ===")
print(f"{'n_steps':>10} {'E[QV]':>12} {'Std[QV]':>12} "
f"{'理论Std':>12} {'相对误差':>12}")
print("-" * 62)
for n_steps in [10, 100, 1000, 10000]:
result = verify_quadratic_variation(T, n_steps, n_paths=5000)
print(f"{n_steps:>10} {result['mean_qv']:>12.6f} "
f"{result['std_qv']:>12.6f} {result['theory_std']:>12.6f} "
f"{result['relative_error']:>12.2e}")
print(f"\n理论值: [W]_{T} = {T}")
print("Std[QV] ~ sqrt(2*T^2/n), 体现了 Var[Q_n] = 2T^2/n 的理论结果")
# ============================================================
# 运行全部演示
# ============================================================
if __name__ == '__main__':
quadratic_variation_demo()
ou_process_demo()
gbm_demo()
运行结果解读:
-
二次变差验证:随着
n_steps增大,\(Q_n = \sum (\Delta W_i)^2\) 的均值趋近 \(T\),标准差以 \(O(1/\sqrt{n})\) 衰减——正如我们证明的 \(\mathrm{Var}[Q_n] = 2T^2/n\)。 -
OU 过程:数值解的均值和方差与解析解吻合(相对误差应小于 1%),验证了 Euler-Maruyama 方法和 Ito 公式推导的正确性。均值指数衰减到零,方差趋近稳态值 \(\sigma^2/(2\theta)\)。
-
GBM:注意 \(\mathbb{E}[S_t] = S_0 e^{\mu t}\)(不含 Ito 修正),但**每条路径**的"典型"增长率是 \(\mu - \sigma^2/2 < \mu\)。两者的差异源于 Jensen 不等式 \(\mathbb{E}[e^X] \geq e^{\mathbb{E}[X]}\)——这个反直觉的结果正是 Ito 修正的直接体现。
后续章节将扩展:本章实现了布朗运动、二次变差验证、Euler-Maruyama 求解器与 OU/GBM 验证。基于 §9.1.8 的新内容,下一步可加入 Milstein 求解器(一维已在 §9.1.8.5 给出收敛阶验证代码,可整合进模拟器类)、半隐式稳定格式(§9.1.8.4,治刚性 SDE)、以及 Fokker-Planck 有限差分数值解(§9.1.7,从轨迹密度直接求 PDE)。再往后是多维 SDE、概率流 ODE 采样器(§9.1.9),逐步逼近一个可服务于 Diffusion Policy 与 MPPI 的完整随机动力学工具箱。
§9.1.13 符号表¶
本章新引入的数学符号汇总(按首次出现顺序):
| 符号 | 含义 | 首次出现 |
|---|---|---|
| \(W_t\) | 标准布朗运动 / Wiener 过程 | §9.1.2.3 |
| \(\mathcal{F}_t\) | 到时刻 \(t\) 的自然滤波(信息流 \(\sigma(W_r:r\le t)\)) | §9.1.2.3 |
| \([X]_t\) | 过程 \(X\) 的二次变差 | §9.1.2.4 |
| \([X^i,X^k]_t\) | 互变差(cross variation) | §9.1.4.3 |
| \(\int_0^t H_s\,\mathrm{d}W_s\) | Ito 积分(左端点) | §9.1.3.2 |
| \(\circ\,\mathrm{d}W\) | Stratonovich 微分(中点) | §9.1.5.1 |
| \(I(H)\) | 简单过程 \(H\) 的 Ito 积分算子 | §9.1.3.2 |
| \(\tau_n\) | 停时(stopping time) | §9.1.3.2 |
| \(\mathrm{d}f\) | Ito 微分(含修正项) | §9.1.4.2 |
| \(\nabla^2 f\) | Hessian 矩阵 | §9.1.4.3 |
| \(\theta\) | OU 过程均值回复速率 | §9.1.4.4 |
| \(\alpha(t)\) | VP-SDE 信号衰减因子 \(\exp(-\frac12\int_0^t\beta)\) | §9.1.4.4 |
| \(b,\sigma\) | SDE 漂移与扩散系数 | §9.1.6.1 |
| \(K\)(Lipschitz) | 全局 Lipschitz 常数 | §9.1.6.1 |
| \(p(x,t)\) | 时刻 \(t\) 的概率密度 | §9.1.7.1 |
| \(D=\frac12\sigma\sigma^\top\) | 扩散矩阵 | §9.1.7.2 |
| \(\nabla_x\log p_t\) | score 函数 | §9.1.7.4 |
| \(\gamma,\beta\)(收敛) | 强收敛阶 / 弱收敛阶 | §9.1.8.2 |
| \(\Delta W_k\) | 离散布朗增量 \(\sqrt{\Delta t}Z_k\) | §9.1.8.1 |
| \(\bar W_t,\bar X_t\) | 反向时间布朗运动 / 反向过程 | §9.1.9.2 |
| \(\hat X_t\) | Kalman-Bucy 最优估计 | §9.1.10.1 |
| \(P_t\) | 滤波误差协方差 | §9.1.10.1 |
| \(K_t\)(增益) | 卡尔曼增益 \(P_tH^\top R^{-1}\) | §9.1.10.1 |
| \(S(\tau)\) | MPPI 轨迹累积成本 | §9.1.10.2 |
§9.1.14 定理速查表¶
| 定理 / 公式 | 一句话说明 | 对应节 |
|---|---|---|
| 布朗运动四性质 (W1–W4) | \(W_0=0\)、独立增量、\(\mathcal{N}(0,t-s)\) 增量、连续路径 | §9.1.2.3 |
| 二次变差 \([W]_t=t\) | 随机微积分的根基,导致 \((\mathrm{d}W)^2=\mathrm{d}t\) | §9.1.2.4 |
| Ito 等距 | \(\mathbb{E}[(\int H\mathrm{d}W)^2]=\mathbb{E}[\int H^2\mathrm{d}t]\),是 \(L^2\) 等距嵌入 | §9.1.3.2 |
| Ito 公式 | \(\mathrm{d}f=f'\mathrm{d}X+\frac12 f''\sigma^2\mathrm{d}t\),随机链式法则 | §9.1.4.2 |
| Ito 乘法表 | \(\mathrm{d}W\cdot\mathrm{d}W=\mathrm{d}t\),其余为零 | §9.1.4.2 |
| Ito-Stratonovich 转换 | 修正项 \(\frac12\sigma\sigma'\)(noise-induced drift) | §9.1.5.3 |
| SDE 存在唯一性 | Lipschitz + 线性增长 \(\Rightarrow\) 唯一强解 | §9.1.6.1 |
| Fokker-Planck | \(\partial_t p=-\nabla\!\cdot\!(bp)+\nabla\!\cdot\!(D\nabla p)\),密度演化 | §9.1.7.2 |
| Euler-Maruyama 收敛阶 | 强 \(1/2\)、弱 \(1\);加性噪声下与 Milstein 同 | §9.1.8.2 |
| Milstein 格式 | 补 \(\frac12\sigma\sigma'[(\Delta W)^2-\Delta t]\),强阶升到 \(1\) | §9.1.8.3 |
| Anderson 反向 SDE | \(\mathrm{d}\bar X=(b-\sigma^2\nabla\log p)\mathrm{d}t+\sigma\mathrm{d}\bar W\) | §9.1.9.2 |
| 概率流 ODE | \(\dot X=b-\frac12\sigma^2\nabla\log p\),与 SDE 同边际 | §9.1.9.3 |
| Kalman-Bucy + Riccati | \(\dot P=FP+PF^\top-PH^\top R^{-1}HP+GQG^\top\) | §9.1.10.1 |
§9.1.15 本章与后续章节的关系¶
| 后续章节 | 与本章的关系 | 本章哪个知识点为其铺垫 |
|---|---|---|
| 深度学习数学/40_Diffusion_Models数学 | 直接前置——填补其开篇声明的 Ito 断层 | §9.1.4(VP-SDE 转移核)、§9.1.7(Fokker-Planck)、§9.1.9(反向 SDE / 概率流 ODE) |
| 随机分析·Girsanov 定理(规划中) | Anderson 反向 SDE 严格证明的核心工具 | §9.1.3(Ito 积分、鞅)、§9.1.5(测度与漂移变换的雏形) |
| 随机分析·Feynman-Kac(规划中) | 连接 SDE 与线性 PDE,是 MPPI 线性化 HJB 的依据 | §9.1.4(Ito 公式)、§9.1.7(FP)、§9.1.10.2(路径积分) |
| 随机分析·数值方法进阶(规划中) | 高阶格式、弱逼近、跳过程 | §9.1.8(Euler-Maruyama / Milstein 基础) |
| 机器人状态估计(EKF/UKF) | 连续时间最优滤波的理论根基 | §9.1.10.1(Kalman-Bucy、Riccati) |
| 机器人采样型控制 | 受控 SDE 的 Monte Carlo 采样 | §9.1.8(Euler-Maruyama)、§9.1.10.2(MPPI) |
🔧 故障排查手册¶
下表针对学习与实现随机微积分时最常见的"卡壳/出错"场景,按"症状、可能原因、排查步骤、相关章节"的顺序给出结构化诊断。
| # | 症状 | 可能原因 | 排查步骤 | 相关节 |
|---|---|---|---|---|
| 1 | 对 \(f(W_t)\) 求微分,取期望后与已知矩矛盾(如算出 \(\mathbb{E}[W_t^2]=0\)) | 用了普通链式法则,漏掉 Ito 修正项 \(\frac12 f''\sigma^2\mathrm{d}t\) | (a) 检查是否对含 \(W_t\) 的函数用了 \(\mathrm{d}f=f'\mathrm{d}W\);(b) 补上二阶项重算;(c) 用 \(\mathbb{E}[W_t^2]=t\) 反向校验 | §9.1.4.1–2 |
| 2 | Ito 积分算出的均值不为零 | 被积函数不满足适应性(偷看了未来),或取了右端点/中点 | (a) 确认 \(H_{t_i}\) 是 \(\mathcal{F}_{t_i}\)-可测(只依赖 \(\le t_i\) 的信息);(b) 确认取左端点;(c) 若有意取中点,那是 Stratonovich,期望本就非零 | §9.1.3.2, §9.1.5 |
| 3 | GBM 模拟的样本中位数远低于 \(S_0e^{\mu t}\),怀疑代码错了 | 没错——这是 Ito 修正 \(-\sigma^2/2\) 的真实效应(均值 \(\neq\) 中位数) | (a) 确认 \(\mathbb{E}[S_t]=S_0e^{\mu t}\)(均值对);(b) 确认单路径增长率 \(\mu-\sigma^2/2\)(中位数对);(c) 二者差异由 Jensen 不等式解释 | §9.1.4.4 |
| 4 | 数值模拟的轨迹抖动幅度随步长改变而系统性变化 | 布朗增量错写成 \(\Delta t\,Z\) 而非 \(\sqrt{\Delta t}\,Z\) | (a) 检查 dW = sqrt(dt)*randn;(b) 模拟纯布朗运动验证 \(\mathrm{Var}[W_T]\approx T\) 与步长无关 |
§9.1.8.1 |
| 5 | 强阻尼 SDE(大 \(\theta\))数值解发散震荡 | 显式 Euler-Maruyama 超过稳定步长 \(\Delta t<2/\theta\) | (a) 减小步长至 \(<2/\theta\);(b) 或改用漂移半隐式格式(无条件稳定);(c) 注意扩散项仍须显式 | §9.1.8.4 |
| 6 | Milstein 方法与 Euler-Maruyama 结果完全一样,怀疑没实现对 | 当前 SDE 是加性噪声(\(\sigma\) 常数),\(\sigma'=0\) 修正项本就为零 | (a) 检查 \(\sigma\) 是否依赖状态;(b) 换乘性噪声 SDE(如 GBM)才能看出差异;(c) 此现象本身证明实现正确 | §9.1.8.3 |
| 7 | Diffusion 反向采样还原不出数据,只得到模糊噪声 | 反向 SDE 漏了 score 项,或 score 网络没学好 | (a) 确认反向漂移含 \(-\sigma^2\nabla\log p_t\);(b) 检查 score matching 损失是否收敛;(c) 先用闭式条件 score(高斯)做 sanity check | §9.1.9.2–3 |
| 8 | SDE 模型解在有限时间"爆炸"到无穷 | 漂移/扩散不满足线性增长条件(如 \(b=x^2\)) | (a) 检查 $ | b |
研究实践建议¶
给初学者:
- 先建立"\((\mathrm{d}W)^2=\mathrm{d}t\)"的肌肉记忆——这是全章的根。每次对含 \(W\) 的量求微分,机械地问自己"有没有二阶项"。把练习 9.1.7(\(\mathrm{d}(W_t^2)\))和 9.1.4(\(\int W\mathrm{d}W\))手推到不看答案能复现为止。
- 代码先行验证直觉:随机微积分反直觉之处多,写几十行 Euler-Maruyama 模拟,把"二次变差收敛到 \(T\)""GBM 中位数低于均值""OU 稳态方差"亲手跑出来,比读十遍证明更牢。
- 从 OU 过程吃透一切:OU 几乎涉及本章每个概念(Ito 公式求解、Fokker-Planck 稳态、Kalman-Bucy、VP-SDE 特例)。把 OU 当作"随机微积分的 Hello World"反复咀嚼。
- 不要纠结 Ito vs Stratonovich:机器人语境下默认 Ito;加性噪声时二者相同(最常见情形)。先用 Ito 把事情做对,理解了再回头看转换公式。
给有经验者 / 研究者:
- 抓"SDE 与 PDE"对偶:本章最深的主线是轨迹(SDE)与分布(Fokker-Planck/PDE)的对偶。Diffusion(反向 SDE 对应概率流 ODE)、MPPI(受控 SDE 对应 HJB)、滤波(Kalman-Bucy 对应 Riccati)都是这条对偶的不同投影。带着"我现在站在轨迹侧还是分布侧"的意识读后续文献。
- 数值收敛阶决定算法选型:做滤波/控制(关心单轨迹)盯强收敛,做 Monte Carlo 期望(MPPI/Diffusion 采样)只需弱收敛——这直接决定能否用更省的格式换吞吐。
- score 是唯一要学的量:研究 Diffusion 时,时刻清醒 \(b,\sigma\) 是设计的、只有 \(\nabla\log p_t\) 要学。许多"新方法"本质是换了 score 的参数化或 SDE 的设计(如 VE/VP/sub-VP),底层都是 Anderson 定理。
- 下一步深入路径:Girsanov(测度变换,严格证反向 SDE),再到 Feynman-Kac(SDE 解线性 PDE,MPPI 的理论根),最后到跳扩散 / Lévy 过程(处理碰撞、接触等非连续动力学)。
推荐阅读与后续路径¶
| 资源 | 覆盖内容 | 适合阶段 |
|---|---|---|
| Evans, An Introduction to Stochastic Differential Equations | 直觉驱动,最适合工程背景读者 | 入门首选 |
| Oksendal, SDE: An Introduction with Applications, Ch.3-5 | Ito 积分、Ito 公式、SDE 存在唯一性 | 本章学完后深入 |
| Shreve, Stochastic Calculus for Finance II, Ch.3-4 | 偏应用的 Ito 积分讲解 | 辅助理解 |
| Karatzas & Shreve, Brownian Motion and Stochastic Calculus | 完整严格理论 | ⭐⭐⭐⭐ 研究级参考 |
| Pavliotis, Stochastic Processes and Applications | Fokker-Planck、遍历性、多尺度方法 | 进阶(连接 PDE 与 SDE) |
后续章节预告:
- 随机分析·Girsanov定理(规划中)(规划中):Girsanov 定理与测度变换(理解 Anderson 反向 SDE 证明的核心工具)
- 随机分析·Feynman-Kac公式(规划中)(规划中):鞅表示定理与 Feynman-Kac 公式(连接 PDE 与 SDE)
- 随机分析·数值方法进阶(规划中)(规划中):数值方法进阶(Milstein 方法、高阶格式、弱逼近)
本章完成后,你已经具备了阅读 深度学习数学/40_Diffusion_Models数学(Diffusion Models 数学)中所有 SDE 相关内容的能力。深度学习数学/40_Diffusion_Models数学 开篇第 60-68 行的"Ito 前置断层警告"对你不再适用。