Files
2026-05-16 17:16:51 +08:00

460 lines
17 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: Rectified Flow路径直线化与少步生成
draft: false
tags:
- Rectified-Flow
- 扩散模型
- 生成模型
- 深度学习
---
# Rectified Flow路径直线化与少步生成的数学理论
---
## 一、从 Flow Matching 到 Rectified Flow问题的引入
### 1.1 Flow Matching 的核心成就与遗留问题
在上一份笔记Flow Matching我们已经看到 Flow Matching 如何将连续流模型的训练从"解 ODE"转变为"向量场回归"。其核心思想是:
1. 预先定义一条从噪声分布 $p_0$ 到数据分布 $p_1$ 的**概率路径** $p_t$
2. 通过条件向量场 $u_t(x_t | x_1)$ 的回归来训练向量场 $v_\theta$
**遗留问题**:即使训练目标简化,推理时我们仍然需要通过 ODE Solver 来生成样本。对于非线性路径ODE 求解可能需要数十甚至数百步才能保证精度。
### 1.2 核心观察:为什么路径"弯曲"会导致采样效率低下?
考虑一个简单的一维例子。假设:
- 起点 $x_0 \sim \mathcal{N}(-5, 1)$
- 终点 $x_1 \sim \mathcal{N}(5, 1)$
- 路径非线性:$x_t = \tanh((1-t) \cdot \text{arctanh}(x_0) + t \cdot \text{arctanh}(x_1))$
当用 Euler 方法求解时:
$$x_{t+\Delta t} = x_t + \Delta t \cdot v_\theta(x_t, t)$$
如果路径弯曲,相邻的两个点 $x_t$ 和 $x_{t+\Delta t}$ 之间的割线与真实路径切线存在较大偏差。这个偏差在每一步都会累积。
**数学上**Euler 方法的局部截断误差为 $O(\Delta t^2)$,全局误差为 $O(\Delta t)$。当 $\Delta t$ 增大时(减少步数),误差急剧增加。
### 1.3 Rectified Flow 的核心思想
**Rectified Flow** 的核心观察是:
> 如果我们能够让粒子从 $x_0$ 到 $x_1$ 的轨迹**沿着直线路径**运动,那么 ODE 求解就可以退化为单步仿射变换,完全不需要迭代。
一个沿直线运动的粒子满足:
$$x_t = (1-t)x_0 + t x_1$$
对应的**单轨迹内**速度场是**常数**
$$\frac{d x_t}{d t} = x_1 - x_0 = \text{const}$$
此时Euler 方法的单步更新就是**精确解**(针对该固定起点终点对):
$$x_1 = x_0 + (x_1 - x_0)$$
其中 $v_\theta(x_0) = x_1 - x_0$。
**关键澄清**:以上结论仅对**固定的一组起点终点对**$(x_0, x_1)$成立。全局层面,不同样本对对应不同的位移向量,因此学习到的全局向量场$v_\theta(x, t)$依旧是关于状态$x$的非线性函数,**全局 Lipschitz 常数 $L \neq 0$**。直线路径无法做到理论无条件零误差单步生成,仅能大幅降低积分误差、放宽步长限制。
---
## 二、Rectified Flow 的数学框架
### 2.1 问题形式化
**目标**:学习一个向量场 $v_\theta: \mathbb{R}^D \times [0,1] \to \mathbb{R}^D$,使得从 $x_0 \sim p_0$ 出发, ODE $\frac{d x(t)}{d t} = v_\theta(x(t), t)$ 的解 $x(1)$ 分布在 $p_1$ 上。
**传统方法的局限**:即使 $v_\theta$ 足够强大,可以精确拟合目标分布,推理时的 ODE 求解仍然可能不精确。
**Rectified Flow 的洞见**:与其训练一个"弯曲"的向量场然后祈祷 ODE Solver 能拟合它,不如**直接让向量场沿着直线路径运动**。
### 2.2 线性插值路径
最简单的直线路径定义:
$$x_t = (1-t) x_0 + t x_1, \quad t \in [0,1]$$
**验证**:对两边求导:
$$\frac{d x_t}{d t} = -x_0 + x_1 = x_1 - x_0$$
这确实是一个常数向量场!无论 $x_t$ 当前在什么位置,速度永远指向 $x_1$ 的方向,大小等于 $|x_1 - x_0|$。
### 2.3 边际分布与曲率
**问题**:如果我们强制所有粒子走直线,那还需要学习吗?
**答案**:是的!因为我们不知道 $\left(x_0, x_1\right)$ 的配对关系。训练数据通常是 $\left\{ x_0^i, x_1^j \right\}$ 独立采样的,我们需要学习一个**从噪声到数据的映射**。
**定义轨迹曲率**(标量形式):
对于一条参数化路径 $x(t)$,标量曲率定义为:
$$\kappa(t) = \frac{\|x''(t)\|}{\|x'(t)\|^3}$$
对于直线路径 $x(t) = (1-t)x_0 + t x_1$,有:
$$x'(t) = x_1 - x_0, \quad x''(t) = 0 \quad \Rightarrow \quad \kappa(t) = 0$$
**结论**:直线轨迹的曲率恒为零。
### 2.4 最优传输视角(可选优化)
**为什么独立采样的路径可能造成分布偏移?**
设 $x_0 \sim p_0$$x_1 \sim p_1$ 独立采样。考虑两个起点 $x_0^a$ 和 $x_0^b$,以及它们对应的直线轨迹:
$$x_t^a = (1-t)x_0^a + t x_1^a$$
$$x_t^b = (1-t)x_0^b + t x_1^b$$
如果 $x_1^a \approx x_1^b$ 且 $x_0^a \neq x_0^b$,这两条轨迹会在某个中间点相交。
**澄清**:不同初始条件的轨迹相交并不违反 ODE 唯一性定理。**Picard-Lindelöf 唯一性**要求的是**同一个初始条件**仅对应唯一一条演化轨迹,而非禁止不同起点轨迹相交。高维生成流中,多条轨迹交汇是正常现象。
**Re-flow 真正要解决的问题**是**流折叠Path Crossing导致边际分布偏移**:当多个起点收敛到同一个终点时,边际分布 $p_t$ 会偏离目标分布。Re-flow 通过**重边缘化Re-marginalization**保持演化全程的边际一致性。
**最优传输Optimal Transport配对**(可选的高阶优化):
最优传输理论提出,将 $\left(x_0, x_1\right)$ 按某种最优方式配对。Monge 问题:
$$\min_{\pi \in \Pi(p_0, p_1)} \int c(x_0, x_1) d\pi(x_0, x_1)$$
其中 $c(x_0, x_1) = \| x_0 - x_1 \|^2$ 是代价函数,$\Pi$ 是边际为 $p_0, p_1$ 的联合分布集合。
**重要说明**:原生 RF 最核心的优势是**无需任何精确 OT 配对**随机独立采样配对是工业界主流用法。OT 配对仅作为高阶优化方案用于精细化训练而非基础必备条件。Flux、SD3 等大模型均未使用 Sinkhorn OT 配对。
---
## 三、Re-flow 流程:迭代路径直线化
### 3.1 固定点方程
**关键问题**:什么样的向量场能够产生直线轨迹?
**定理Rectified Flow 固定点)**
设向量场 $v^*$ 满足:
$$v^*(x_t) = \mathbb{E}_{x_1 \sim p_1 | x_t} \left[ \frac{x_1 - x_t}{1-t} \right]$$
其中条件分布 $p_1 | x_t$ 是在给定当前位置 $x_t$ 时,终点 $x_1$ 的后验分布。
则 ODE 轨迹 $\frac{d x}{d t} = v^*(x(t))$ 产生直线运动。
**证明**
从 $x_0$ 出发的轨迹满足:
$$x(t) = x_0 + t \cdot \mathbb{E}[x_1 - x_0 | x_0] = (1-t)x_0 + t \cdot \mathbb{E}[x_1 | x_0]$$
如果配对是最优传输映射,即 $x_1 = T(x_0)$,则:
$$x(t) = (1-t)x_0 + t \cdot T(x_0)$$
这正是一条直线路径!
### 3.2 Re-flow 算法
**Re-flow 全称 Re-marginalized Flow重边缘化流**,其核心目标是**保证演化全程边际分布始终匹配目标分布**。
**Algorithm: Re-flow**
**输入**:数据分布 $p_{data}$,迭代次数 $K$,神经网络 $v_\theta$
**初始化**
1. 采样配对数据 $\left\{ (x_0^i, x_1^i) \right\}$(初始时独立采样)
2. 定义线性路径:$x_t^i = (1-t)x_0^i + t x_1^i$
**for** $k = 1$ to $K$ **do**:
1. **训练当前向量场**
$$\theta^{(k)} = \arg\min_\theta \mathbb{E}_{t, i} \left[ \left\| v_\theta^{(k-1)}(x_t^i, t) - (x_1^i - x_0^i) \right\|^2 \right]$$
其中 $v_\theta^{(k-1)}$ 是上一轮固定的向量场
2. **生成轨迹样本**(如果 $k < K$
- 使用当前向量场 $v_{\theta^{(k)}}$ 解 ODE
- 从 $x_0$ 积分到 $t=1$,得到轨迹 $\left\{ x(t)^i \right\}$
- 用生成样本的轨迹终点作为新终点:$x_1'^i = x(1)^i$
3. **重新定义路径**
- 令 $x_t^i \leftarrow (1-t)x_0^i + t \cdot x_1'^i$(新的直线插值)
- 此步骤用生成样本重构造无偏插值路径,修正随机独立配对带来的分布偏移
**输出**:训练好的向量场 $v_{\theta^{(K)}}$
### 3.3 收敛性分析
**直线路径与误差的关系**
对于 Euler 方法,当路径曲率 $\kappa$ 较小时,局部误差约为:
$$\text{Error} \approx \frac{1}{2} \kappa \cdot (\Delta t)^2$$
**关键观察**
- 当 $\kappa \to 0$(直线路径)时,误差 $\to 0$
- 即使 $\Delta t$ 很大(如 $\Delta t = 0.1$),误差仍然很小
- 这意味着我们可以**用 10 步而不是 1000 步**完成采样
### 3.4 为什么路径变直后可以用粗步长?
考虑 Euler 一步更新:
$$x_{t+\Delta t} = x_t + \Delta t \cdot v(x_t)$$
局部截断误差为 $O(\Delta t^2)$,全局误差为 $O(\Delta t)$。当路径充分直线化后,误差主要来源于 $v_\theta$ 的表达能力而非数值离散化,因此可以使用更大的步长。
---
## 四、Rectified Flow 的目标函数
### 4.1 基础目标函数
**最直接的目标**(线性路径假设):
$$\mathcal{L}_{RF}(\theta) = \mathbb{E}_{t \sim \mathcal{U}(0,1), x_0 \sim p_0, x_1 \sim p_1} \left[ \| v_\theta(x_t, t) - (x_1 - x_0) \|^2 \right]$$
其中 $x_t = (1-t)x_0 + t x_1$。
**问题**:这个目标要求我们事先知道配对 $\left(x_0, x_1\right)$
### 4.2 无配对版本
**实际训练中的配对策略**
1. **独立采样**(最常用):
$$\mathcal{L} = \mathbb{E}_{t, x_0 \sim p_0, x_1 \sim p_1} \left[ \| v_\theta(x_t, t) - (x_1 - x_0) \|^2 \right]$$
优点:简单直接
缺点:可能学到"平凡解"(如 $v_\theta \approx 0$
2. **最优传输配对**
- 先通过 Sinkhorn 算法计算最优配对 $\pi^*$
- 令 $x_1 = T(x_0)$ 是 $\pi^*$ 下的配对样本
- 然后使用上述目标
3. **动态配对Re-flow**
- 每轮迭代更新配对
- 逐步改善轨迹
### 4.3 损失权重
实践中常用的加权损失:
$$\mathcal{L}_\lambda = \mathbb{E}_{t \sim \text{LogitNormal}(\mu, \sigma^2)} \left[ \lambda(t) \cdot \| v_\theta(x_t, t) - (x_1 - x_0) \|^2 \right]$$
**Logit-Normal 采样**
$$t = \frac{1}{1 + e^{-z}}, \quad z \sim \mathcal{N}(\mu, \sigma^2)$$
**常用配置**
- $\mu = 0, \sigma = 1.0$(使 $t$ 集中在 0.5 附近)
- $\lambda(t) = 1$(均匀权重)
- $\lambda(t) = 1 - \bar{\alpha}_t$(与信噪比相关)
---
## 五、Rectified Flow 与少步采样
### 5.1 采样步数的数学分析
**Euler 方法的全局误差界**(标准 Lipschitz 条件):
对于 Lipschitz 向量场 $v$Euler 方法的全局误差为:
$$\| x(T) - x_N \| \leq \frac{T L}{2N} \left( e^{LT} - 1 \right)$$
其中 $N$ 是步数,$T$ 是终点时间,$L$ 是向量场的全局 Lipschitz 常数。
**澄清**:直线路径仅保证**单轨迹内**速度为常数。**全局层面**,不同样本对应不同起点终点,因此学习到的向量场 $v_\theta(x, t)$ 依旧是关于状态 $x$ 的非线性函数,全局 $L \neq 0$。
**实际意义**:路径直线化后,$v_\theta$ 更容易学习到近似常数值向量场,使得 Lipschitz 常数大幅降低,从而允许使用更大的步长,**而非理论零误差**。
### 5.2 步长选择策略
**固定步长**
| 步数 $N$ | 步长 $\Delta t = 1/N$ | 适用场景 |
|---------|---------------------|---------|
| 1 | 1.0 | 路径完全直线化后 |
| 2-4 | 0.5-0.25 | Re-flow 充分收敛 |
| 10-20 | 0.1-0.05 | 部分直线化 |
| 100+ | <0.01 | 未直线化(原始 FM |
**自适应步长**
可以使用标准自适应 ODE 求解器(如 Dormand-Prince RK45来自动选择步长。在直线化路径上求解器会自动增大步长。
### 5.3 与 DDPM/SDPM 的对比
| 特性 | DDPM | Score SDE | Rectified Flow |
|------|------|-----------|---------------|
| **采样步数** | 50-1000 | 10-1000 | 1-10 |
| **步长限制** | 必须小(稳定性) | 必须小(噪声项) | 可以大(直线化) |
| **理论基础** | 变分推断 | SDE | 最优传输 |
| **训练目标** | 噪声预测 $\epsilon$ | Score function | 速度场 $v$ |
---
## 六、实际训练中的问题与解决方案
### 6.1 平凡解问题
**问题**:当 $v_\theta(x_t, t) \approx 0$ 时,损失函数取得零值,但这对应的是"不移动"的平凡解。
**原因**
- $x_1 - x_0$ 和 $v_\theta$ 的期望都可能接近零
- 网络可能学到恒为零的输出
**解决方案**
1. 使用非对称权重初始化
2. 添加正则项 $\| v_\theta \|^2$ 防止平凡解
3. 使用噪声感知的训练(如 noise schedule
### 6.2 路径交叉问题
**问题**:独立采样的 $\left(x_0, x_1\right)$ 可能导致**流折叠Path Crossing**,即多个起点可能汇聚到同一个人终点。
**核心成因**:随机配对下,插值路径分布与真实流分布存在偏移,这是**分布层面**的问题,而非单纯网络初始化问题。
**数学表现**
- 学习到的映射 $T: x_0 \to x_1$ 不是双射
- 某些 $x_0$ 可能被映射到多个不同的 $x_1$
- 导致边际分布 $p_t$ 偏离目标分布
**解决方案**
1. **Re-flow 迭代**:逐步改善配对
2. **最优传输正则**:在损失中添加 OT 项
3. **Unbalanced Flow Matching**:允许边际分布不完全匹配
### 6.3 训练不稳定性
**问题**:某些配置下,训练可能不稳定,特别是在 $t \approx 0$ 时。
**原因**
- 噪声端 $p_0$ 通常是简单的高斯分布
- 速度场的 Lipschitz 常数可能在噪声端较大
**解决方案**
1. 使用学习率 warmup
2. 对极端 $t$ 值使用更小的学习率权重
3. 梯度裁剪
### 6.4 方差估计问题
**问题**$x_1 - x_0$ 的方差随数据维度增加。
**对于高维数据**
$$\mathbb{E}[|x_1 - x_0|^2] = \mathbb{E}[|x_1|^2] + \mathbb{E}[|x_0|^2] - 2 \mathbb{E}[x_1]^T \mathbb{E}[x_0]$$
当维度 $D$ 很大时,即使每个维度方差很小,总方差也可能很大。
**解决方案**
1. 使用 batch normalization
2. 归一化目标:$\| v_\theta - (x_1 - x_0) \|^2 / D$
3. 使用更大的 batch size
---
## 七、Rectified Flow 的扩展与变体
### 7.1 单次迭代与多次迭代 RF
**单次迭代 RF**
- 只进行一次 Re-flow 迭代
- 路径:从独立采样的直线插值开始,然后训练 $v$
- 通常需要 4-10 步采样
**多次迭代 RF**
- 进行两次或以上 Re-flow 迭代
- 第二次迭代使用第一次生成的轨迹终点作为新的 $x_1$
- 通常可以用 2-4 步采样
### 7.2 条件 Rectified Flow
**无条件生成的局限**:在实际应用中,我们通常需要**条件生成**(给定文本描述等条件 $c$)。
**条件 RF**
$$v_\theta(x_t, t | c) = \mathbb{E}[x_1 - x_0 | x_0, c]$$
**Classifier-Free Guidance 在 RF 中的应用**
$$\tilde{v}_\theta(x_t, t) = (1 + w) \cdot v_\theta(x_t, t | c) - w \cdot v_\theta(x_t, t | \emptyset)$$
其中 $w$ 是 guidance 权重。
---
## 八、与大模型的结合
### 8.1 为什么 RF 适合大模型?
**理论原因**
1. **少步采样 = 少梯度步数**:大模型的梯度计算代价极高,少步采样意味着少梯度步数
2. **常数路径 = 简单优化 landscape**:直线轨迹对应的损失 landscape 更平滑
3. **可扩展性**:路径直线化与模型规模无关
**实证支持**
- Stable Diffusion 312B 参数)使用 RF
- Flux.112B 参数)使用 RF
- 两者都实现了 4-8 步高质量生成
### 8.2 与 DiT 的结合
**DiTDiffusion Transformer**架构与 Rectified Flow 的结合:
1. **噪声到潜空间的映射**VAE 编码器将图像压缩到低维潜空间
2. **Transformer 处理条件**:文本 embedding 和时间步 embedding
3. **RF 训练**:在潜空间中进行向量场回归
4. **少步采样**:解码器从潜空间恢复图像
**优势**
- Transformer 的并行计算能力适合大模型
- RF 的少步特性降低推理成本
- 两者结合实现质量与效率的平衡
---
## 九、数学推导速查
### 9.1 核心公式
**线性插值路径**
$$x_t = (1-t)x_0 + t x_1$$
**速度场(直线轨迹)**
$$u_t(x_t | x_1) = x_1 - x_0$$
**CFM 损失RF 版本)**
$$\mathcal{L}_{RF} = \mathbb{E}_{t, x_0, x_1} \left[ \| v_\theta(x_t, t) - (x_1 - x_0) \|^2 \right]$$
**Re-flow 更新**
$$x_1^{(k+1)} = x(1)^{(k)} \quad (trajectory endpoint)$$
**最优传输目标**
$$\min_\pi \int \| T(x_0) - x_0 \|^2 d\pi(x_0, x_1)$$
### 9.2 误差分析
**Euler 方法全局误差界**(标准 Lipschitz 条件):
$$\| x(T) - x_N \| \leq \frac{T L}{2N} \left( e^{LT} - 1 \right)$$
**路径直线化的实际意义**:直线化后 $v_\theta$ 更容易学习到近似常数值向量场,使得 Lipschitz 常数 $L$ 大幅降低,从而允许使用更大步长,而非理论零误差。
---
## 十、总结
Rectified Flow 提供了一个朴素而有力的洞察:**直线是最短的路径,也是最高效的生成路径**。
**核心贡献**
1. **路径直线化**:通过 Re-flow 迭代,逐步将路径直线化,使 ODE 求解退化为少步仿射变换
2. **少步采样**:直线化后可用 1-10 步完成高质量生成
3. **大模型友好**:少步采样 = 少梯度步数,适合大参数模型
**数学本质**
- 将 ODE 数值求解的精度问题转化为路径设计问题
- 从"如何精确求解弯曲的 ODE"转变为"如何让路径更容易求解"
- 最优传输理论为路径设计提供了理论基础
**与 FM 的关系**
- FM 提供了通用的向量场回归框架
- RF 是 FM 的一种特殊路径设计选择
- RF 的线性路径假设简化了 FM 的损失函数
---
**延伸阅读**
1. Liu et al., "Rectified Flow: A Marginal Preserving Approach to Optimal Transport" (ICML 2023)
2. Albergo & Vanden-Eijnden, "Building Normalizing Flows with Stochastic Interpolants" (ICLR 2023)
3. Lipman et al., "Flow Matching for Generative Modeling" (NeurIPS 2022)
4. Esser et al., "Theketing Diffusion Models: Rectified Flow at Scale" (2024)
5. Flux.1 Technical Report