第5章:分数生成模型(Score-Based Generative Models)
随机微分方程(SDE)与概率流(Probability Flow)
1. 核心概念
**随机微分方程(SDE)**为扩散模型提供了连续时间视角的数学框架,其一般形式为:
dx = f(x,t)dt + g(t)dw
其中:
f(x,t)为漂移系数(drift)g(t)为扩散系数(diffusion)dw是维纳过程(Wiener process)的微分
**概率流(Probability Flow)**是SDE的确定性版本,通过消除随机项得到常微分方程(ODE):
dx = [f(x,t) - 1/2 g(t)^2 ∇ₓlog pₜ(x)]dt
2. 数学推导
正向过程(加噪)
正向SDE将数据分布p₀(x)逐渐转化为噪声分布p_T(x)(通常为标准高斯分布):
dx = f(x,t)dt + g(t)dw
典型选择:
- Variance Exploding (VE) SDE:
f(x,t)=0,g(t)=dσ²(t)/dt - Variance Preserving (VP) SDE:
f(x,t)=-1/2 β(t)x,g(t)=√β(t)
逆向过程(生成)
逆向SDE通过分数函数∇ₓlog pₜ(x)实现去噪:
dx = [f(x,t) - g(t)²∇ₓlog pₜ(x)]dt + g(t)dw̄
其中dw̄为反向时间维纳过程。
3. 概率流的优势
- 确定性采样:ODE形式允许固定随机种子复现结果
- 快速采样:可采用高阶ODE求解器(如RK45)
- 隐空间插值:在潜空间实现平滑过渡(如图像morphing)
4. 代码实现(PyTorch伪代码)
class SDE:
def __init__(self, beta_min=0.1, beta_max=20):
self.beta_min = beta_min
self.beta_max = beta_max
def beta(self, t):
return self.beta_min + t*(self.beta_max - self.beta_min)
def drift(self, x, t):
return -0.5 * self.beta(t) * x
def diffusion(self, t):
return torch.sqrt(self.beta(t))
def probability_flow(sde, score_model, x, t, dt):
# 使用预训练的score_model预测分数
score = score_model(x, t)
# 计算确定性漂移项
drift = sde.drift(x,t) - 0.5 * (sde.diffusion(t)**2) * score
return x + drift * dt
5. 应用案例
图像生成加速:
- 原始SDE采样需要1000步(DDPM)
- 概率流ODE仅需50-100步即可达到相似质量(DDIM)
- 结合自适应步长算法可进一步加速
6. 理论联系
| 概念 | 离散扩散模型对应 | 连续SDE对应 |
|---|---|---|
| 噪声调度 | βₜ schedule | g(t)函数选择 |
| 分数匹配目标 | 均方误差 | Girsanov定理 |
| 采样过程 | 迭代去噪 | SDE/ODE数值求解 |
7. 当前挑战
- 复杂SDE形式的理论分析困难
- 高维数据中概率流轨迹的稳定性
- 长时间跨度的累积误差问题
关键图示建议:
- SDE正向/逆向过程示意图(数据分布→噪声分布→生成过程)
- 概率流轨迹与随机轨迹对比(确定性vs随机性)
- 不同SDE类型的噪声方差变化曲线(VE/VP对比)
该内容包含:
1. 严格的理论推导与公式
2. 可直接实现的代码片段
3. 实际应用场景说明
4. 对比表格增强理解
5. 可视化建议
6. 当前研究挑战的指出