Diffusion(扩散模型)的基础
原理
扩散模型(Diffusion Models)是一类生成模型,通过模拟一个加噪过程(从数据到噪声)和一个去噪过程(从噪声恢复数据),学习数据的分布。其核心思想是将数据逐步添加高斯噪声,直至变成纯噪声(通常是标准正态分布),然后训练一个神经网络逆转这个过程,从噪声中重建数据。
扩散模型通常分为两部分:
- 前向过程(加噪,Forward Process):从数据 ( x 0 x_0 x0 ) 到噪声 ( x T x_T xT ),这是一个固定的 Markov 过程。
- 逆向过程(去噪,Reverse Process):从噪声 ( x T x_T xT ) 回到数据 ( x 0 x_0 x0 ),这是一个学习的参数化过程。
加噪公式(前向过程)
前向过程是一个逐步加噪的马尔可夫链,定义为:
q ( x t ∣ x t − 1 ) = N ( x t ∣ 1 − β t x t − 1 , β t I ) q(x_t | x_{t-1}) = \mathcal{N}(x_t | \sqrt{1-\beta_t} x_{t-1}, \beta_t I) q(xt∣xt−1)=N(xt∣1−βtxt−1,βtI)
- ( x 0 x_0 x0 ):初始数据,来自真实分布 ( q ( x 0 ) q(x_0) q(x0) )。
- ( β t \beta_t βt ):时间步 ( t t t ) 的噪声方差调度(通常 ( 0 < β t < 1 0 < \beta_t < 1 0<βt<1 )),控制每一步加噪的强度。
- ( t = 1 , 2 , … , T t = 1, 2, \dots, T t=1,2,…,T ):离散时间步,( T T T ) 很大时,( x T ≈ N ( 0 , I ) x_T \approx \mathcal{N}(0, I) xT≈N(0,I) )。
关键公式:通过逐步迭代,可以直接从 ( x 0 x_0 x0 ) 跳到任意 ( t t t ) 的分布(基于高斯性质):
q ( x t ∣ x 0 ) = N ( x t ∣ α t x 0 , ( 1 − α t ) I ) q(x_t | x_0) = \mathcal{N}(x_t | \sqrt{\alpha_t} x_0, (1-\alpha_t) I) q(xt∣x0)=N(xt∣αtx0,(1−αt)I)
其中:
- ( α t = ∏ s = 1 t ( 1 − β s ) \alpha_t = \prod_{s=1}^t (1 - \beta_s) αt=∏s=1t(1−βs) ):累计缩放因子,随 ( t t t ) 增大而减小。
- ( 1 − α t 1 - \alpha_t 1−αt ):累计噪声方差。
使用方法:
- 输入:真实数据 ( x 0 x_0 x0 )。
- 随机采样时间 ( t t t ) 和噪声 ( ϵ ∼ N ( 0 , I ) \epsilon \sim \mathcal{N}(0, I) ϵ∼N(0,I) )。
- 计算:( x t = α t x 0 + 1 − α t ϵ x_t = \sqrt{\alpha_t} x_0 + \sqrt{1 - \alpha_t} \epsilon xt=αtx0+1−αtϵ )。
去噪公式(逆向过程)
逆向过程试图从 ( x T x_T xT ) 回到 ( x 0 x_0 x0 ),定义为:
p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ∣ μ θ ( x t , t ) , Σ θ ( x t , t ) ) p_\theta(x_{t-1} | x_t) = \mathcal{N}(x_{t-1} | \mu_\theta(x_t, t), \Sigma_\theta(x_t, t)) pθ(xt−1∣xt)=N(xt−1∣μθ(xt,t),Σθ(xt,t))
- ( μ θ ( x t , t ) \mu_\theta(x_t, t) μθ(xt,t) ):神经网络预测的均值。
- ( Σ θ ( x t , t ) \Sigma_\theta(x_t, t) Σθ(xt,t) ):协方差,通常固定为 ( β t I \beta_t I βtI ) 或其他简单形式。
训练目标是优化变分下界(ELBO),但实际中常用简化形式:预测噪声 ( ϵ \epsilon ϵ ):
L Diffusion = E t , x 0 , ϵ ∥ ϵ − ϵ θ ( x t , t ) ∥ 2 \mathcal{L}_{\text{Diffusion}} = \mathbb{E}_{t, x_0, \epsilon} \left\| \epsilon - \epsilon_\theta(x_t, t) \right\|^2 LDiffusion=Et,x0,ϵ∥ϵ−ϵθ(xt,t)∥2
其中:
- ( x t = α t x 0 + 1 − α t ϵ x_t = \sqrt{\alpha_t} x_0 + \sqrt{1 - \alpha_t} \epsilon xt=αtx0+1−αtϵ )。
- ( ϵ θ ( x t , t ) \epsilon_\theta(x_t, t) ϵθ(xt,t) ):神经网络预测的噪声。
去噪公式:
给定 (
x
t
x_t
xt ) 和预测的 (
ϵ
θ
(
x
t
,
t
)
\epsilon_\theta(x_t, t)
ϵθ(xt,t) ),一步去噪为:
x t − 1 = 1 1 − β t ( x t − β t 1 − α t ϵ θ ( x t , t ) ) + β t z , z ∼ N ( 0 , I ) x_{t-1} = \frac{1}{\sqrt{1-\beta_t}} \left( x_t - \frac{\beta_t}{\sqrt{1-\alpha_t}} \epsilon_\theta(x_t, t) \right) + \sqrt{\beta_t} z, \quad z \sim \mathcal{N}(0, I) xt−1=1−βt1(xt−1−αtβtϵθ(xt,t))+βtz,z∼N(0,I)
使用方法:
- 从 ( x T ∼ N ( 0 , I ) x_T \sim \mathcal{N}(0, I) xT∼N(0,I) ) 开始。
- 迭代 ( t = T t = T t=T ) 到 ( t = 1 t = 1 t=1 ),每次用神经网络预测 ( ϵ θ ( x t , t ) \epsilon_\theta(x_t, t) ϵθ(xt,t) ),计算 ( x t − 1 x_{t-1} xt−1 )。
Flow Matching(流匹配)的回顾
原理
Flow Matching 是一种基于连续归一化流(CNFs)的生成方法,通过学习一个时间依赖的向量场 ( v t ( x ) v_t(x) vt(x) ),将初始分布(通常是 ( N ( 0 , I ) \mathcal{N}(0, I) N(0,I) ))平滑变换到目标分布 ( q ( x ) q(x) q(x) )。其核心是一个 ODE:
d d t ϕ t ( x ) = v t ( ϕ t ( x ) ) , ϕ 0 ( x ) = x \frac{d}{dt} \phi_t(x) = v_t(\phi_t(x)), \quad \phi_0(x) = x dtdϕt(x)=vt(ϕt(x)),ϕ0(x)=x
概率路径由推前公式定义:
p t ( x ) = [ ϕ t ] ∗ p 0 ( x ) p_t(x) = [\phi_t]_* p_0(x) pt(x)=[ϕt]∗p0(x)
这里的定义和详细内容参考flow matching的原始论文,请参考笔者的另外的博客:
深入解析 Flow Matching:从条件概率路径与向量场到条件流匹配
和
深入解析 Flow Matching(二):从条件概率路径与向量场到条件流匹配
公式
Flow Matching 的训练目标是回归目标向量场 ( u t ( x ) u_t(x) ut(x) ):
L FM ( θ ) = E t , p t ( x ) ∥ v t ( x ) − u t ( x ) ∥ 2 \mathcal{L}_{\text{FM}}(\theta) = \mathbb{E}_{t, p_t(x)} \left\| v_t(x) - u_t(x) \right\|^2 LFM(θ)=Et,pt(x)∥vt(x)−ut(x)∥2
由于直接计算 ( u t ( x ) u_t(x) ut(x) ) 和 ( p t ( x ) p_t(x) pt(x) ) 困难,引入条件流匹配(CFM):
L CFM ( θ ) = E t , q ( x 1 ) , p t ( x ∣ x 1 ) ∥ v t ( x ) − u t ( x ∣ x 1 ) ∥ 2 \mathcal{L}_{\text{CFM}}(\theta) = \mathbb{E}_{t, q(x_1), p_t(x | x_1)} \left\| v_t(x) - u_t(x | x_1) \right\|^2 LCFM(θ)=Et,q(x1),pt(x∣x1)∥vt(x)−ut(x∣x1)∥2
- ( p t ( x ∣ x 1 ) p_t(x | x_1) pt(x∣x1) ):条件概率路径,例如 ( N ( x ∣ t x 1 , ( 1 − t ) 2 I ) \mathcal{N}(x | t x_1, (1-t)^2 I) N(x∣tx1,(1−t)2I) )(线性插值)。
- (
u
t
(
x
∣
x
1
)
u_t(x | x_1)
ut(x∣x1) ):条件向量场,例如对于高斯路径:
u t ( x ∣ x 1 ) = x 1 − x 1 − t u_t(x | x_1) = \frac{x_1 - x}{1-t} ut(x∣x1)=1−tx1−x
使用方法:
- 采样 ( t ∼ U [ 0 , 1 ] t \sim \mathcal{U}[0,1] t∼U[0,1] ),( x 1 ∼ q ( x 1 ) x_1 \sim q(x_1) x1∼q(x1) ),( x ∼ p t ( x ∣ x 1 ) x \sim p_t(x | x_1) x∼pt(x∣x1) )。
- 计算 ( u t ( x ∣ x 1 ) u_t(x | x_1) ut(x∣x1) ),优化 ( v t ( x ; θ ) v_t(x; \theta) vt(x;θ) ) 与其接近。
- 生成时,从 ( x 0 ∼ N ( 0 , I ) x_0 \sim \mathcal{N}(0, I) x0∼N(0,I) ) 开始,解 ODE 到 ( t = 1 t=1 t=1 )。
Flow Matching 和 Diffusion 的联系与区别
联系
-
目标相似:
- 两者都旨在从简单分布(通常是 ( N ( 0 , I ) \mathcal{N}(0, I) N(0,I) ))生成复杂数据分布 ( q ( x ) q(x) q(x) )。
- Diffusion 的逆向过程和 Flow Matching 的流变换都是从噪声到数据的映射。
-
概率路径:
- Diffusion 的前向过程 ( q ( x t ∣ x 0 ) q(x_t | x_0) q(xt∣x0) ) 和 Flow Matching 的条件路径 ( p t ( x ∣ x 1 ) p_t(x | x_1) pt(x∣x1) ) 都可以设计为高斯形式。例如,Diffusion 的 ( q ( x t ∣ x 0 ) = N ( α t x 0 , ( 1 − α t ) I ) q(x_t | x_0) = \mathcal{N}(\sqrt{\alpha_t} x_0, (1-\alpha_t) I) q(xt∣x0)=N(αtx0,(1−αt)I) ) 和 Flow Matching 的 ( p t ( x ∣ x 1 ) = N ( t x 1 , ( 1 − t ) 2 I ) p_t(x | x_1) = \mathcal{N}(t x_1, (1-t)^2 I) pt(x∣x1)=N(tx1,(1−t)2I) ) 在形式上类似。
-
向量场关系:
- Diffusion 的去噪向量场(通过 ( ϵ θ \epsilon_\theta ϵθ ) 间接定义)和 Flow Matching 的 ( u t ( x ∣ x 1 ) u_t(x | x_1) ut(x∣x1) ) 都描述了从噪声到数据的动态。
- 论文中提到,Diffusion 可以看作 Flow Matching 的特例,当路径和向量场设计一致时。
区别
方面 | Diffusion(扩散模型) | Flow Matching(流匹配) |
---|---|---|
时间域 | 离散时间步 ( t = 1 , 2 , … , T t = 1, 2, \dots, T t=1,2,…,T ) | 连续时间 ( t ∈ [ 0 , 1 ] t \in [0, 1] t∈[0,1] ) |
过程定义 | 加噪(前向)和去噪(逆向)的马尔可夫链 | 单向连续流(ODE) |
加噪机制 | 固定高斯噪声,逐步破坏数据 | 不显式加噪,定义条件路径 ( p t ( x ∣ x 1 ) p_t(x | x_1) pt(x∣x1) ) |
训练目标 | 预测噪声 ( ϵ \epsilon ϵ ),优化 ELBO | 回归向量场 ( u t ( x ∣ x 1 ) u_t(x | x_1) ut(x∣x1) ),无仿真损失 |
公式 | ( x t = α t x 0 + 1 − α t ϵ x_t = \sqrt{\alpha_t} x_0 + \sqrt{1-\alpha_t} \epsilon xt=αtx0+1−αtϵ ) | ( d d t x t = v t ( x t ) \frac{d}{dt} x_t = v_t(x_t) dtdxt=vt(xt) ) |
生成方式 | 迭代采样 ( x t − 1 x_{t-1} xt−1) 从 ( x T x_T xT ) 到 ( x 0 x_0 x0 ) | 解 ODE 从 ( x 0 x_0 x0 ) 到 ( x 1 x_1 x1 ) |
计算效率 | 需多步采样(T 较大时慢) | 单次 ODE 求解(更快,但依赖求解器精度) |
1. 时间域与过程
- Diffusion:离散时间,使用马尔可夫链,分为前向加噪和逆向去噪两阶段。
- Flow Matching:连续时间,基于 ODE,单向流动,无显式加噪/去噪分离。
2. 加噪与路径
-
Diffusion:前向过程明确加噪,( x t x_t xt ) 是 ( x 0 x_0 x0 ) 和噪声的混合。例如:
x t = α t x 0 + 1 − α t ϵ x_t = \sqrt{\alpha_t} x_0 + \sqrt{1-\alpha_t} \epsilon xt=αtx0+1−αtϵ
去噪时预测 ( ϵ \epsilon ϵ )。 -
Flow Matching:不直接加噪,而是定义一个平滑路径 ( p t ( x ∣ x 1 ) p_t(x | x_1) pt(x∣x1) ),向量场 ( u t ( x ∣ x 1 ) u_t(x | x_1) ut(x∣x1)) 驱动 ( x x x ) 从噪声移动到 ( x 1 x_1 x1 )。例如:
p t ( x ∣ x 1 ) = N ( x ∣ t x 1 , ( 1 − t ) 2 I ) p_t(x | x_1) = \mathcal{N}(x | t x_1, (1-t)^2 I) pt(x∣x1)=N(x∣tx1,(1−t)2I)
u t ( x ∣ x 1 ) = x 1 − x 1 − t u_t(x | x_1) = \frac{x_1 - x}{1-t} ut(x∣x1)=1−tx1−x
3. 训练目标
- Diffusion:学习去噪,优化噪声预测误差 ( ∥ ϵ − ϵ θ ∥ 2 \| \epsilon - \epsilon_\theta \|^2 ∥ϵ−ϵθ∥2 )。
- Flow Matching:直接回归向量场 ( ∥ v t ( x ) − u t ( x ∣ x 1 ) ∥ 2 \| v_t(x) - u_t(x | x_1) \|^2 ∥vt(x)−ut(x∣x1)∥2 ),无需模拟整个路径。
4. 生成效率
- Diffusion:需要 ( T T T ) 步迭代采样,计算成本高。
- Flow Matching:通过 ODE 求解器(例如 Euler 或 Runge-Kutta)一次性生成,效率更高。
如何讲明白?
-
共同点切入:
- “Diffusion 和 Flow Matching 都是从噪声生成数据的模型。Diffusion 通过加噪和去噪两步走,Flow Matching 用连续流直接变换。”
-
加噪与去噪公式:
- “Diffusion 的加噪是 ( x t = α t x 0 + 1 − α t ϵ x_t = \sqrt{\alpha_t} x_0 + \sqrt{1-\alpha_t} \epsilon xt=αtx0+1−αtϵ ),去噪靠神经网络预测 ( ϵ \epsilon ϵ )。比如,给一张图片加噪 1000 步变成纯噪声,再一步步去噪回来。”
- “Flow Matching 不加噪,而是定义路径,比如 ( p t ( x ∣ x 1 ) = N ( t x 1 , ( 1 − t ) 2 I ) p_t(x | x_1) = \mathcal{N}(t x_1, (1-t)^2 I) pt(x∣x1)=N(tx1,(1−t)2I) ),然后学一个向量场 ( v t ( x ) v_t(x) vt(x) ) 直接把噪声推到数据。”
-
对比举例:
- “假设你要画一幅画。Diffusion 是先把画擦成白噪声,再慢慢描回去;Flow Matching 是直接拿支笔从空白纸上画出轮廓,连续完成。”
-
优缺点总结:
- “Diffusion 简单但慢,适合高质量生成;Flow Matching 快且优雅,但需要设计路径和求解 ODE。”
总结
- Diffusion:离散、加噪去噪、预测噪声,公式直观但采样慢。
- Flow Matching:连续、向量场驱动、无仿真,公式更抽象但效率高。
- 联系:两者都可以用高斯路径,Diffusion 的逆向过程可看作 Flow Matching 的离散近似。
后记
2025年4月8日13点58分于上海,在grok 3大模型辅助下完成。