> [!info]- 核心认知:特效解算与数学的跨界映射
>
> 在 AI 图像生成([[Diffusion模型]])领域,解常微分方程(ODE)本质上就是**在极高维度的空间里做粒子轨迹解算**。为了跨越工程与学术的鸿沟,本笔记致力于将特效数值积分的直觉(VEX/DOP)与严密的数学符号体系进行严格对齐。
## §1 必备词典:从工程代码到数学符号
在阅读任何基于连续时间 (Continuous-time) 或 Score-based SDE 的生成模型论文时,请在脑海中随时调用以下符号映射表:
| **概念含义** | **工程代码 (如 VEX/DOP)** | **学术数学符号** | **符号解析** |
| ------------ | -------------------- | ------------------------------------------- | ------------------------------------------------------------------------ |
| **当前位置/状态** | `@P` | $x(t)$ 或 $y(t)$ | 随时间 $t$ 变化的函数。在 Diffusion 中,这就是那张带有特定噪声的巨型图片矩阵。 |
| **时间步长** | `TimeInc` | $\Delta t$ 或 $h$ 或 $\mathrm{d}t$ | $\Delta t$ 或 $h$ 表示离散的、有具体大小的步长(常用于数值计算);$\mathrm{d}t$ 表示理论上无穷小的微分步长。 |
| **当前速度/风向** | `@v` | $\frac{\mathrm{d}x}{\mathrm{d}t}$ 或 $x'(t)$ | 位置随时间的变化率(即一阶导数)。 |
| **速度场/函数** | `get_velocity()` | $f(t, x)$ 或 $v_\theta(x)$ | 一个计算速度的黑盒。输入当前时间 $t$ 和位置 $x$,输出当前的速度向量。在 AI 里,这就是那个庞大的神经网络(如 [[U-Net]])。 |
| **位置更新(单步)** | `@P += @v * TimeInc` | $x_{n+1} = x_n + h \cdot f(t_n, x_n)$ | 经典的离散数值更新公式。 |
## §2 欧拉法 (Euler Method):最基础的数值求解
**1. 数学定义与起点**
常微分方程的标准形式定义为:
$\frac{\mathrm{d}x}{\mathrm{d}t} = f(t, x)$
根据微积分中导数的严格极限定义:
$\frac{\mathrm{d}x}{\mathrm{d}t} = \lim_{\Delta t \to 0} \frac{x(t + \Delta t) - x(t)}{\Delta t}$
**2. 欧拉法的代数推导**
因为计算机无法处理真正的“无穷小极限($\lim_{\Delta t \to 0}$)”,我们只能去掉极限符号,用一个足够小的常数步长 $\Delta t$(论文中也常写为 $h$)来**近似**这个导数:
$\frac{x(t + \Delta t) - x(t)}{\Delta t} \approx f(t, x(t))$
将上式两边同乘 $\Delta t$,并把 $x(t)$ 移项,就得到了[[欧拉法]]的一阶更新公式:
> [!abstract] 欧拉法公式 (Euler Step / First-order Method)
>
> $x(t + \Delta t) \approx x(t) + \Delta t \cdot f(t, x(t))$
>
> **下标简写版(学术界最常见写法):**
>
> 令 $x_n$ 表示第 $n$ 步的位置,$x_{n+1}$ 表示下一步的位置,步长记为 $h$:
>
> $x_{n+1} = x_n + h \cdot f(t_n, x_n)$
**致命弱点(截断误差):**
欧拉法假设在整个步长 $h$ 期间,速度场 $f(t, x)$ 是一成不变的。一旦真实的流线(轨迹)带有弧度,步长 $h$ 稍大,算出的位置就会沿着初始切线直接飞出去(Overshooting)。因此,它必须使用极小的步长(即解算上千步)才能保证不崩溃。
## §3 进阶:二阶龙格-库塔法 (RK2 / Heun's Method)
为了解决欧拉法大步长容易“飞刀”的问题,数学家发明了高阶的数值积分方法。
> [!info]- 术语扫盲:什么是“龙格-库塔”?
>
> **龙格-库塔法 (Runge-Kutta methods,国际通用简称:RK 法)** 是一整套解微分方程的神仙算法家族。
>
> - **人名合体:** 它不是一个词,而是两位德国大佬的姓氏合体——数学家 **卡尔·龙格 (Carl Runge)** 和物理学家 **马丁·库塔 (Martin Kutta)**。
>
> - **阶数 (Order):** 代表算法在单步内进行了几次“内部探测”来提高精度。一阶是欧拉法;二阶简称为 **RK2**;最高级、工程界最常用的是四阶,简称为 **RK4**。
>
> - **别名变体:** 本节讲的这种“测当前+测未来求平均”的特殊 RK2 算法,也被单独命名为 **休恩法 (Heun's Method)**。在 Stable Diffusion 的 WebUI 中,它被称为 **Euler Heun** 或 **DPM2** 采样器。
>
**核心逻辑:探路与平均**
它不盲目地按当前速度走完一整步,而是先用欧拉法“虚探”一步预测未来速度,然后用现在和未来的**平均速度**来走真实的一步。
**严格的 RK2 数学推导与符号表示:**
**第一步:计算当前斜率(速度)**
令 $k_1$ 为当前起点的速度向量(相当于探照灯照亮脚下的路):
$k_1 = f(t_n, x_n)$
**第二步:欧拉法虚探,计算未来斜率**
令 $k_2$ 为未来某个虚拟点的速度向量(假设按 $k_1$ 走到了步长终点,在那个虚拟终点再测一次速度):
$k_2 = f(t_n + h, x_n + h \cdot k_1)$
**第三步:使用平均斜率进行最终更新**
> [!abstract] 二阶龙格-库塔法 (RK2 / Heun) 更新公式
>
> $x_{n+1} = x_n + h \left( \frac{k_1 + k_2}{2} \right)$
**在 AI 领域的巨大价值:**
虽然每往前推进一步,需要调用两次神经网络(分别算 $k_1$ 和 $k_2$,导致单步计算成本翻倍),但因为它计算出的是一条带弧度的平滑抛物线,我们可以极其嚣张地**把总体步数从 1000 步压缩到 15-20 步**。总体算下来,生成速度依然获得了十几倍的巨大提升。
## §4 理论大一统:连回 DDIM 与 Diffusion
当我们掌握了 ODE 的专业语言,回头再看 [[DDIM]] 论文的核心结论($\S 9$ 公式 14),就能立刻读懂学术黑话背后的本质。
**DDIM 的连续 ODE 表达:**
> [!abstract] DDIM 隐式模型的连续态 (公式 14)
>
> $\mathrm{d}\bar x(t) = \epsilon_\theta^{(t)} \mathrm{d}\sigma(t)$
用我们建立的词典来精准翻译这短短一行公式:
1. **$\mathrm{d}\bar x(t)$**:位置的极其微小的微分增量(相当于理论上无穷小的 `dP`)。
2. **$\mathrm{d}\sigma(t)$**:时间/状态的微小步长(相当于 `dt`)。在 DDIM 中,作者用噪声量 $\sigma$ 代替了传统时间 $t$ 作为自变量。
3. **$\epsilon_\theta^{(t)}$**:训练好的 U-Net 网络。在这个微分方程里,**神经网络就是那个指引方向的速度场 $f(t, x)$!**
**终极结论:**
生成一张高质量的 AI 图片,在纯数学的视角下,就是在求解一个由 U-Net 提供全图速度场、维度高达近百万维(像素点数量)的巨型常微分方程。
此后几年里,AI 学界研发的各种眼花缭乱的高级采样器(DPM-Solver, PNDM, UniPC 等),本质上都是在比拼:**谁能发明出比 RK2 甚至 RK4 更聪明的“探路公式”,在尽量不偏离真实图片流形(Manifold)的前提下,用最少的时间步数把这个巨型 ODE 给解出来。**