Flow Matching 和 Rectified Flow的区别

Flow Matching是通过匹配目标向量场来训练CNF,比如通过最小化目标向量场和模型预测之间的差异。
Rectified Flow的核心思想是学习一个确定性轨迹,将数据分布转换为噪声分布,比如通过线性插值或者更复杂的路径。

推荐阅读:
SD3的采样上篇——Flow Matching
SD3的采样下篇——Rectified Flow
Rectified Flow 原理简介与示例代码解读

FLUX.1 原理与源码解析

【AIGC图像实践篇 11】Stable Diffusion 3(SD3) 原理及实践 - grooter的文章 - 知乎


Rectified Flow和Flow Matching的区别

Rectified Flow和Flow Matching是生成模型中基于连续归一化流(CNF)的两种方法,它们既有联系又有区别。以下从原理、公式和代码实现三个方面进行解释。


原理对比

Flow Matching

  • 核心思想:通过直接匹配目标向量场(Target Vector Field)来训练CNF模型,最小化目标向量场和模型预测之间的差异,绕过了传统基于最大似然估计的复杂优化问题。
  • 关键点
    • 定义条件概率路径 p t ( x ) p_t(x) pt(x)(如将数据点 x 0 x_0 x0 和噪声 x 1 x_1 x1 插值),并推导对应的目标向量场 u t ( x ) u_t(x) ut(x)
    • 训练模型 v θ ( x , t ) v_\theta(x, t) vθ(x,t) 直接拟合 u t ( x ) u_t(x) ut(x),无需显式计算概率密度。

Rectified Flow

  • 核心思想:通过构造直线路径(如 x t = x 0 + t ( x 1 − x 0 ) x_t = x_0 + t(x_1 - x_0) xt=x0+t(x1x0))将数据分布转换为噪声分布,强调轨迹的“直线性”以简化采样。
  • 关键点
    • 强制轨迹为直线,减少曲率,从而允许更少的时间步采样。
    • 通过迭代优化(如Reflow技术)进一步拉直轨迹,提升生成质量。

公式对比

Flow Matching

  • 目标向量场
    假设条件路径 p t ( x ∣ x 1 ) p_t(x | x_1) pt(xx1) 由插值定义(如 x t = ( 1 − t ) x 0 + t x 1 x_t = (1-t)x_0 + t x_1 xt=(1t)x0+tx1),目标向量场为:
    u t ( x ) = E x 0 , x 1 ∼ p ( x 0 , x 1 ) [ d x t d t ∣ x t = x ] u_t(x) = \mathbb{E}_{x_0, x_1 \sim p(x_0, x_1)} \left[ \frac{dx_t}{dt} \mid x_t = x \right] ut(x)=Ex0,x1p(x0,x1)[dtdxtxt=x]
  • 损失函数
    最小化模型预测 v θ ( x , t ) v_\theta(x, t) vθ(x,t) 与目标场的差异:
    L FM = E t , x t [ ∥ v θ ( x t , t ) − u t ( x t ) ∥ 2 ] \mathcal{L}_{\text{FM}} = \mathbb{E}_{t, x_t} \left[ \| v_\theta(x_t, t) - u_t(x_t) \|^2 \right] LFM=Et,xt[vθ(xt,t)ut(xt)2]

Rectified Flow

  • 目标向量场
    直接定义直线路径 x t = x 0 + t ( x 1 − x 0 ) x_t = x_0 + t(x_1 - x_0) xt=x0+t(x1x0),目标速度为常数:
    u t ( x ) = x 1 − x 0 u_t(x) = x_1 - x_0 ut(x)=x1x0
  • 损失函数
    强制模型预测的速度与目标速度一致:
    L RF = E t , x 0 , x 1 [ ∥ v θ ( x t , t ) − ( x 1 − x 0 ) ∥ 2 ] \mathcal{L}_{\text{RF}} = \mathbb{E}_{t, x_0, x_1} \left[ \| v_\theta(x_t, t) - (x_1 - x_0) \|^2 \right] LRF=Et,x0,x1[vθ(xt,t)(x1x0)2]
  • Reflow技术
    迭代训练多个Rectified Flow模型,逐步拉直轨迹。

代码实现对比

Flow Matching示例(简化版)

def flow_matching_loss(model, x0, x1, t):
    # 线性插值生成样本
    xt = (1 - t) * x0 + t * x1
    # 目标向量场为 x1 - x0
    ut = x1 - x0
    # 模型预测当前速度
    vt = model(xt, t)
    # 计算均方误差
    loss = torch.mean((vt - ut) ** 2)
    return loss

Rectified Flow示例(简化版)

def rectified_flow_loss(model, x0, x1, t):
    # 直线路径生成样本
    xt = x0 + t * (x1 - x0)
    # 目标速度恒为 x1 - x0
    target_velocity = x1 - x0
    # 模型预测速度
    pred_velocity = model(xt, t)
    # 计算均方误差
    loss = torch.mean((pred_velocity - target_velocity) ** 2)
    return loss

关键区别

路径生成:
Flow Matching允许自由选择概率路径(如最优传输路径),而Rectified Flow强调直线路径和迭代优化(Reflow),牺牲部分灵活性以换取高效采样。
损失计算:
Rectified Flow的目标速度直接为 x 1 − x 0 x_1−x_0 x1x0,而Flow Matching可能根据不同的插值方式调整目标向量场。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值