SD3的采样上篇——Flow Matching

​​​在这里插入图片描述

🌺系列文章推荐🌺
扩散模型系列文章正在持续的更新,更新节奏如下,先更新SD模型讲解,再更新相关的微调方法文章,敬请期待!!!(本文及其之前的文章均已更新)
扩散模型​相关知识点参考:小白也能读懂的AIGC扩散(Diffusion)模型系列讲解

SD 3相关文章:
DiT(Diffusion Transformer)详解——AIGC时代的新宠儿
Stable Diffusion 3详解
FLUX.1概要——原SD核心团队推出的最强文生图
SD3的采样下篇——Rectified Flow

写在开头

SD3是基于 RF(Rectified Flow)做的改进的采样方法,而RF(Rectified Flow)是在Flow Matching(FM)的基础上改进的,我们是按照逆序进行讲解,即先讲FM,再讲RF和SD3在其基础上做的优化。

原计划一篇文章讲完SD3的采样,但是目前讲完Flow Matching(FM),已经1.6w字,所以,RF和SD3在其基础上做的优化放在SD3的采样下篇——Rectified Flow。下面正式开始!!!

论文

SD3论文:Scaling Rectified Flow Transformers for High-Resolution Image Synthesis
FLUX.1论文:未公开
Flow Matching论文:FLOW MATCHING FOR GENERATIVE MODELING
Rectified Flow论文:Flow Straight and Fast: Learning to Generate and Transfer Data with Rectified FlowRectified Flow: A Marginal Preserving Approach to Optimal Transport


推荐阅读

深入浅出完整解析Stable Diffusion 3(SD 3)和FLUX.1系列核心基础知识
文生图中从扩散模型到流匹配的演变:从SDXL到Stable Diffusion3(含Flow Matching和Rectified Flow的详解)
貌似RF原作者:ICLR2023扩散生成模型新方法:极度简化,一步生成
stable diffusion加噪去噪的直观解释&Rectified Flow
FLUX.1 原理与源码解析
Stable Diffusion 3 来了,深入浅出完整解析SD3的核心算法
Stable Diffusion 3震撼发布,采用Sora同源技术,文字终于不乱码了

前系列扩散回顾(DDPM)

关于之前SD系列扩散模型的扩散核心采样使用DDPM、DDIM等。扩散过程本质上是多次对原始图像前向扩散(加噪),之后在训练过程中学习如何准确的预测加入的真实噪声。进而在推理过程中,对初始的随机噪声进行预测噪声,进而反向扩散(去噪),得到想要图像的过程。可以看作是一种迂回方式。扩散过程如下:
在这里插入图片描述
借用某乎上大佬的图(来源)来描述整个扩散过程如下:
前向扩散:这里的每一个点(注意,是点,不是整个框),其实就对应于图像空间的一张图(上图中的小猫),蓝色箭头就是在不断加噪的过程,每次随机加入一定强度的噪声。一个前向传播如下:
在这里插入图片描述

反向扩散:依据训练过程中学到的预测噪声能力,把预测出来的噪声去除,逐步恢复图像。蓝色箭头就是在不断预测并去除噪声的过程。2个反向传播过程如下:

不是严格的从某个点映射到某个点了。而是从高斯噪声空间随机采样一个点,然后依次往回映射。假设模型已经训练好了,这时候其实靠的就是模型的泛化能力了。假如在高斯噪声空间,你采样了个红点附近的噪声,那么模型只能保证你映射回图像的时候也在红点附近。

在这里插入图片描述
详细的扩散过程可以参考:
Diffusion Model原理
Stable Diffusion的加噪和去噪详解

本文结尾会给出FM的前向传播和反向传播过程,可以理解为DDPM 是一步一步的逐步生成过程(逐步去噪),但是FM 是一步到位的(直接通过 ODE 求解生成路径)。

Flow Matching

Flow Matching (FM)Rectified Flow (RF) 是基于 概率流动 的生成建模技术。它们的核心思想是通过对初始分布(通常是高斯分布)和目标分布(如真实图像分布)之间的流动过程 建模,生成符合目标分布的数据样本。通过学习流场或流动路径,数据可以从易采样的初始分布逐步演化为复杂的目标分布。

  • FM 从初始分布(如高斯分布)到目标分布(如真实图像分布)的流动路径中,学习一个连续的向量场 v(x,t),精确描述概率流动的变化。描述如何从初始分布逐步流动到目标分布。
  • RF 对 Flow Matching 的简化和优化,假设路径为直线路径分段线性路径,并通过梯度修正增强灵活性和效率。

这两种方法都属于基于流动路径的生成建模技术,是现代扩散模型等生成框架的重要理论基础。

Flow Matching (FM) 是一种生成建模技术,通过学习从初始分布(如高斯分布)到目标分布(如真实图像分布)的连续流动路径,描述数据的演化过程。FM 的核心是通过一个时间依赖的向量场 v ( x , t ) v(x, t) v(x,t) 建模这种流动,使得数据分布从起始状态平滑地转变为目标状态。其训练目标是通过优化损失函数,使学习到的流场 v ( x , t ) v(x, t) v(x,t) 精确匹配真实流动的梯度信息,从而确保生成样本的质量。然而,FM 的主要挑战在于复杂流场的学习和数值计算的高成本,特别是在高维数据上易导致不稳定性。

Rectified Flow (RF) 是对 Flow Matching 的简化和优化,通过假设起始分布到目标分布的流动路径为 直线路径分段线性路径(当直线路径无法很好地描述复杂分布之间的流动时,RF 支持将路径划分为多个时间段),并引入梯度修正项 r ( x , t ) r(x, t) r(x,t),显著降低了计算复杂度并提升数值稳定性。在 RF 中,数据沿着直线路径流动,同时修正项对路径的偏差进行调整,使得生成结果更接近目标分布。RF 的这一改进减少了采样步数需求,并且在混合精度训练中表现更稳定。与 FM 相比,RF 更适用于高分辨率生成任务和复杂模态的联合建模,如 SD 3 和 FLUX 系列模型,均采用 RF 来优化其扩散过程。

下面将详细介绍Flow Matching (FM)Rectified Flow (RF)

Flow Matching概要

首先我们先来了解一下FM的背景、核心目标、损失函数和训练生成的过程,之后再详细的解释其中的公式等。

Flow Matching(FM)是一种生成建模技术,通过学习从初始分布到目标分布的连续流动过程(流场)来生成数据。FM 的核心思想是建模分布之间的流动路径,使得输入分布“一步”演化为目标分布,同时简化了生成过程的理论框架和实现难度

1. 背景与目标

(1) 生成模型的基本目标

在生成建模中,我们希望学习一个从初始分布 p 0 ( z ) p_0(z) p0(z) 到目标分布 p t ( z ) p_t(z) pt(z) 的映射,其中:

  • 初始分布 p 0 ( z ) p_0(z) p0(z) 一个已知且易于采样的简单分布,例如标准高斯分布
  • 目标分布 p t ( z ) p_t(z) pt(z) 我们希望生成的复杂数据分布,例如自然图像、文本等。
(2) Flow Matching 的核心思想

Flow Matching 通过学习一个时间依赖的向量场 v Θ ( z , t ) v_\Theta(z, t) vΘ(z,t),使得数据点 z z z 在时间 t ∈ [ 0 , T ] t \in [0, T] t[0,T]从初始分布演化到目标分布。这个演化过程描述了分布之间的“流动”路径

2. Flow Matching 的数学原理

这里简单介绍下核心,后面详细介绍公式。

(1) 时间演化方程

在时间 t t t,数据点 z z z 的演化由以下方程描述:
∂ z ∂ t = v Θ ( z , t ) , \frac{\partial z}{\partial t} = v_\Theta(z, t), tz=vΘ(z,t),
其中 v Θ ( z , t ) v_\Theta(z, t) vΘ(z,t) 是模型学习的流场。

(2) 损失函数的定义

为了使模型学习到的流场 v Θ ( z , t ) v_\Theta(z, t) vΘ(z,t)真实流场 u t ( z ) u_t(z) ut(z) 一致,我们定义以下损失函数:
L FM = E t , p t ( z ) [ ∥ v Θ ( z , t ) − u t ( z ) ∥ 2 ] , \mathcal{L}_{\text{FM}} = \mathbb{E}_{t, p_t(z)} \left[ \| v_\Theta(z, t) - u_t(z) \|^2 \right], LFM=Et,pt(z)[vΘ(z,t)ut(z)2],
其中:

  • u t ( z ) u_t(z) ut(z) 是参考路径的真实流场
  • p t ( z ) p_t(z) pt(z) 是时间 t t t 时的分布。

3. Flow Matching 的训练方法

(1) 参考路径的采样

为了训练流场 v Θ ( z , t ) v_\Theta(z, t) vΘ(z,t),我们需要构建从初始分布 p 0 ( z ) p_0(z) p0(z) 到目标分布 p t ( z ) p_t(z) pt(z) 的参考路径。具体步骤如下:

  1. 采样数据点:

    • 从初始分布 p 0 ( z ) p_0(z) p0(z) 中采样 z 0 z_0 z0
    • 从目标分布 p t ( z ) p_t(z) pt(z) 中采样 z t z_t zt
  2. 采样时间 t t t

    • 从均匀分布 t ∼ Uniform ( 0 , T ) t \sim \text{Uniform}(0, T) tUniform(0,T) 中采样时间点 t t t
  3. 构建参考路径:

    • 定义插值路径(例如线性插值):
      z ( t ) = z 0 + t T ( z t − z 0 ) . z(t) = z_0 + \frac{t}{T}(z_t - z_0). z(t)=z0+Tt(ztz0).
(2) 计算真实流场

参考路径的真实流场 u t ( z ) u_t(z) ut(z) 可以通过对 z ( t ) z(t) z(t) 关于 t t t 的导数计算得到:

u t ( z ) = ∂ z ( t ) ∂ t = z t − z 0 T . u_t(z) = \frac{\partial z(t)}{\partial t} = \frac{z_t - z_0}{T}. ut(z)=tz(t)=Tztz0.

(3) 计算学习到的流场 v Θ ( z , t ) v_\Theta(z, t) vΘ(z,t)

z ( t ) z(t) z(t) t t t 作为输入,传入神经网络模型 v Θ v_\Theta vΘ
v Θ ( z , t ) = NeuralNet ( z ( t ) , t ) , v_\Theta(z, t) = \text{NeuralNet}(z(t), t), vΘ(z,t)=NeuralNet(z(t),t),
输出的是模型预测的流场 v Θ ( z , t ) v_\Theta(z, t) vΘ(z,t)

(4) 损失函数

训练目标是使模型学习到的流场 v Θ ( z , t ) v_\Theta(z, t) vΘ(z,t)真实流场 u t ( z ) u_t(z) ut(z) 一致,我们定义以下损失函数:

L FM = E t , p t ( z ) ∥ v Θ ( z , t ) − u t ( z ) ∥ 2 2 \mathcal{L}_{\text{FM}} = \mathbb{E}_{t, p_t(z)} \| v_\Theta(z, t) - u_t(z) \|_2^2 LFM=Et,pt(z)vΘ(z,t)ut(z)22

  • 关键点:

    • 这里的流场 v Θ ( z , t ) v_\Theta(z, t) vΘ(z,t) u t ( z ) u_t(z) ut(z) 是基于时间 t t t 和数据分布 p t ( z ) p_t(z) pt(z) 而定义的。
    • 不涉及条件变量 ϵ \epsilon ϵ
    • 主要用于无条件生成任务,例如生成自然图像等。
  • 公式解释:

    • t t t: 时间变量,定义在区间 [ 0 , T ] [0, T] [0,T] 内,描述从初始分布 p 0 ( z ) p_0(z) p0(z) 到目标分布 p T ( z ) p_T(z) pT(z) 的演化。
    • z z z: 数据点的位置,属于数据分布 p t ( z ) p_t(z) pt(z)
    • p t ( z ) p_t(z) pt(z): 时间 t t t 时的数据分布,描述无条件下数据的演化过程。
    • v Θ ( z , t ) v_\Theta(z, t) vΘ(z,t): 模型学习到的流场(向量场),描述 z z z 在时间 t t t 时的变化方向和速率。
    • u t ( z ) u_t(z) ut(z): 真实的流场,是参考路径中 z z z 在时间 t t t 上的变化速率(通常通过插值计算)。
    • ∥ ⋅ ∥ 2 2 \| \cdot \|_2^2 22: 欧几里得范数的平方,用于衡量模型流场与真实流场之间的误差。

4. 引入条件变量

在某些情况下,我们希望生成的样本满足特定的条件 ϵ \epsilon ϵ。这时,我们需要引入条件流匹配(Conditional Flow Matching, CFM),并调整上述公式。

(1) 条件分布
  • 条件初始分布 p 0 ( z ∣ ϵ ) p_0(z \mid \epsilon) p0(zϵ) 在条件 ϵ \epsilon ϵ 下的初始分布。
  • 条件目标分布 p t ( z ∣ ϵ ) p_t(z \mid \epsilon) pt(zϵ) 在条件 ϵ \epsilon ϵ 下的目标分布。
(2) 条件流场

真实流场 u t ( z ∣ ϵ ) u_t(z \mid \epsilon) ut(zϵ):定义了在给定条件 ϵ \epsilon ϵ 下,数据点 z z z 应该如何流动,通常通过参考路径的导数计算得到。
注意:这里的学习流场未显式依赖于 ϵ \epsilon ϵ,但通过 p t ( z ∣ ϵ ) p_t(z \mid \epsilon) pt(zϵ) 隐式建模条件信息。显示依赖于 ϵ \epsilon ϵ的学习流场会写成 v Θ ( z , t , ϵ ) v_\Theta(z, t, \epsilon) vΘ(z,t,ϵ)

(3) 损失函数

条件流匹配的损失函数为:

CFM 的损失函数为:

L CFM = E t , p t ( z ∣ ϵ ) , p ( ϵ ) ∥ v Θ ( z , t ) − u t ( z ∣ ϵ ) ∥ 2 2 \mathcal{L}_{\text{CFM}} = \mathbb{E}_{t, p_t(z \mid \epsilon), p(\epsilon)} \| v_\Theta(z, t) - u_t(z \mid \epsilon) \|_2^2 LCFM=Et,pt(zϵ),p(ϵ)vΘ(z,t)ut(zϵ)22

  • 关键点:

    • 这里引入了条件变量 ϵ \epsilon ϵ,使得流场 u t ( z ∣ ϵ ) u_t(z \mid \epsilon) ut(zϵ) 和数据分布 p t ( z ∣ ϵ ) p_t(z \mid \epsilon) pt(zϵ) 都依赖于 ϵ \epsilon ϵ
    • 条件流场 u t ( z ∣ ϵ ) u_t(z \mid \epsilon) ut(zϵ) 描述了在给定条件 ϵ \epsilon ϵ 下的真实流场演化。
    • 模型的学习目标是生成符合条件 ϵ \epsilon ϵ 的样本。
  • 公式解释:

    • t t t: 时间变量,定义在区间 [ 0 , T ] [0, T] [0,T] 内,描述从条件初始分布 p 0 ( z ∣ ϵ ) p_0(z \mid \epsilon) p0(zϵ) 到条件目标分布 p T ( z ∣ ϵ ) p_T(z \mid \epsilon) pT(zϵ) 的演化。
    • z z z: 数据点的位置,属于条件分布 p t ( z ∣ ϵ ) p_t(z \mid \epsilon) pt(zϵ)
    • ϵ \epsilon ϵ: 条件变量,描述外部的控制信号或生成任务的特定条件,例如文本描述或类别标签。
    • p t ( z ∣ ϵ ) p_t(z \mid \epsilon) pt(zϵ): 时间 t t t 时,在条件 ϵ \epsilon ϵ 下的数据分布。
    • p ( ϵ ) p(\epsilon) p(ϵ): 条件变量的分布,描述不同条件的概率分布。
    • v Θ ( z , t ) v_\Theta(z, t) vΘ(z,t): 模型学习到的流场,描述 z z z 在时间 t t t 时的变化方向和速率。注意:这里的流场未显式依赖于 ϵ \epsilon ϵ,但通过 p t ( z ∣ ϵ ) p_t(z \mid \epsilon) pt(zϵ) 隐式建模条件信息。显示的会写成 v Θ ( z , t , ϵ ) v_\Theta(z, t, \epsilon) vΘ(z,t,ϵ)
    • u t ( z ∣ ϵ ) u_t(z \mid \epsilon) ut(zϵ): 条件下的真实流场,是条件参考路径中 z z z 在时间 t t t 上的变化速率(通过条件插值路径计算)。
    • ∥ ⋅ ∥ 2 2 \| \cdot \|_2^2 22: 欧几里得范数的平方,用于衡量模型流场与条件真实流场之间的误差。
  • 是否包含 ϵ \epsilon ϵ 取决于实现设计。

    • 显式依赖: v Θ ( z , t , ϵ ) v_\Theta(z, t, \epsilon) vΘ(z,t,ϵ),条件直接作为输入。
    • 隐式依赖: v Θ ( z , t ) v_\Theta(z, t) vΘ(z,t),条件通过分布 p t ( z ∣ ϵ ) p_t(z \mid \epsilon) pt(zϵ) 传递。

显式依赖 ϵ \epsilon ϵ L CFM = E t , p t ( z ∣ ϵ ) , p ( ϵ ) [ ∥ v Θ ( z , t , ϵ ) − u t ( z ∣ ϵ ) ∥ 2 ] . \mathcal{L}_{\text{CFM}} = \mathbb{E}_{t, p_t(z \mid \epsilon), p(\epsilon)} \left[ \| v_\Theta(z, t, \epsilon) - u_t(z \mid \epsilon) \|^2 \right]. LCFM=Et,pt(zϵ),p(ϵ)[vΘ(z,t,ϵ)ut(zϵ)2].

说明:因为我们主要讨论的是SD3 模型中的FM,所以后面的训练和推理过程讨论主要针对CFM,加入条件变量的FM(文生图中的文本条件)

5. 训练与生成过程

(1) 训练阶段
  1. 采样条件 ϵ \epsilon ϵ

    • p ( ϵ ) p(\epsilon) p(ϵ) 中采样条件 ϵ \epsilon ϵ
  2. 采样数据点:

    • p 0 ( z ∣ ϵ ) p_0(z \mid \epsilon) p0(zϵ) 中采样初始数据点 z 0 z_0 z0
    • p t ( z ∣ ϵ ) p_t(z \mid \epsilon) pt(zϵ) 中采样目标数据点 z t z_t zt
  3. 采样时间 t t t

    • 从均匀分布 t ∼ Uniform ( 0 , T ) t \sim \text{Uniform}(0, T) tUniform(0,T) 中采样时间点 t t t
  4. 计算参考路径和真实流场:

    • 构建参考路径:
      z ( t ) = z 0 + t T ( z t − z 0 ) . z(t) = z_0 + \frac{t}{T}(z_t - z_0). z(t)=z0+Tt(ztz0).
    • 计算真实流场:
      u t ( z ∣ ϵ ) = ∂ z ( t ) ∂ t = z t − z 0 T . u_t(z \mid \epsilon) = \frac{\partial z(t)}{\partial t} = \frac{z_t - z_0}{T}. ut(zϵ)=tz(t)=Tztz0.
  5. 计算学习到的流场 v Θ ( z , t ) v_\Theta(z, t) vΘ(z,t)
    z ( t ) z(t) z(t) t t t 作为输入,传入神经网络模型 v Θ v_\Theta vΘ
    v Θ ( z , t ) = NeuralNet ( z ( t ) , t ) , v_\Theta(z, t) = \text{NeuralNet}(z(t), t), vΘ(z,t)=NeuralNet(z(t),t),
    输出的是模型预测的流场 v Θ ( z , t ) v_\Theta(z, t) vΘ(z,t)

  6. 最小化损失函数:

    • 使用损失函数:
      L CFM = E t , p t ( z ∣ ϵ ) , p ( ϵ ) ∥ v Θ ( z , t ) − u t ( z ∣ ϵ ) ∥ 2 . \mathcal{L}_{\text{CFM}} = \mathbb{E}_{t, p_t(z \mid \epsilon), p(\epsilon)}\|v_\Theta(z, t) - u_t(z \mid \epsilon)\|^2. LCFM=Et,pt(zϵ),p(ϵ)vΘ(z,t)ut(zϵ)2.
    • 通过梯度下降优化模型参数 Θ \Theta Θ
  7. 梯度计算:

    • 对损失函数 L CFM \mathcal{L}_{\text{CFM}} LCFM 关于模型参数 Θ \Theta Θ 的梯度:
      ∇ Θ L CFM = ∂ L CFM ∂ Θ , \nabla_\Theta \mathcal{L}_{\text{CFM}} = \frac{\partial \mathcal{L}_{\text{CFM}}}{\partial \Theta}, ΘLCFM=ΘLCFM,
      需要使用反向传播自动计算。
  8. 参数更新:

    • 使用优化算法(如 SGD 或 Adam),通过梯度下降更新参数:
      Θ ← Θ − η ∇ Θ L CFM , \Theta \gets \Theta - \eta \nabla_\Theta \mathcal{L}_{\text{CFM}}, ΘΘηΘLCFM,
      其中 η \eta η 是学习率。
(2) 生成阶段
  1. 采样条件 ϵ \epsilon ϵ

    • p ( ϵ ) p(\epsilon) p(ϵ) 中选择或指定条件 ϵ \epsilon ϵ
  2. 采样初始数据点:

    • 从条件初始分布 p 0 ( z ∣ ϵ ) p_0(z \mid \epsilon) p0(zϵ) 中采样 z 0 z_0 z0。通常, p 0 ( z ∣ ϵ ) p_0(z \mid \epsilon) p0(zϵ) 是一个简单的分布(如条件独立的高斯分布)。
  3. 时间演化:
    描述流场的两种情况:

    • 显式流场: v Θ ( z , t , ϵ ) v_\Theta(z, t, \epsilon) vΘ(z,t,ϵ),直接依赖条件 ϵ \epsilon ϵ
    • 隐式流场: v Θ ( z , t ) v_\Theta(z, t) vΘ(z,t),条件 ϵ \epsilon ϵ 被隐式建模(通过目标分布的特性传递)。

    通过微分方程演化:

    • 使用微分方程:
      ∂ z ∂ t = v Θ ( z , t , ϵ ) 或 ∂ z ∂ t = v Θ ( z , t ) , \frac{\partial z}{\partial t} = v_\Theta(z, t, \epsilon) \quad \text{或} \quad \frac{\partial z}{\partial t} = v_\Theta(z, t), tz=vΘ(z,t,ϵ)tz=vΘ(z,t),
      从初始点 z 0 z_0 z0 开始,演化到时间 t = T t = T t=T时候的生成样本 z t z_t zt

由于学习流场通常是通过神经网络建模的,无法解析计算积分。因此,求解上述微分方程需要 数值方法,主要包括 欧拉法Runge-Kutta (RK4)方法

  1. 时间步长 Δ t \Delta t Δt 的选择:

    • 太大会导致不准确,太小则增加计算成本。
    • 经验上, Δ t \Delta t Δt 需通过实验调整以平衡精度和效率。
  2. 方法选择:

    • 欧拉法适合快速实验和初步测试,但精度可能不足。
    • RK4 方法更适合高质量生成,尤其是在生成复杂分布时。

欧拉法
欧拉法是一种简单的时间离散方法。对于每一步 k k k z k + 1 = z k + Δ t ⋅ v Θ ( z k , t k , ϵ ) , z_{k+1} = z_k + \Delta t \cdot v_\Theta(z_k, t_k, \epsilon), zk+1=zk+ΔtvΘ(zk,tk,ϵ), 其中:

  • z k z_k zk:第 k k k 步时的数据点位置。
  • t k = k ⋅ Δ t t_k = k \cdot \Delta t tk=kΔt:当前时间。
  • Δ t \Delta t Δt:时间步长。

欧拉法的优点是简单易实现,但精度较低,适合初步实验。


Runge-Kutta 方法
Runge-Kutta 方法(如 RK4)是更高阶的数值积分方法,具有更高的精度。以下是 RK4 的公式对于每一步 k k k

  1. 计算中间变量: k 1 = Δ t ⋅ v Θ ( z k , t k , ϵ ) , k_1 = \Delta t \cdot v_\Theta(z_k, t_k, \epsilon), k1=ΔtvΘ(zk,tk,ϵ), k 2 = Δ t ⋅ v Θ ( z k + k 1 2 , t k + Δ t 2 , ϵ ) , k_2 = \Delta t \cdot v_\Theta(z_k + \frac{k_1}{2}, t_k + \frac{\Delta t}{2}, \epsilon), k2=ΔtvΘ(zk+2k1,tk+2Δt,ϵ), k 3 = Δ t ⋅ v Θ ( z k + k 2 2 , t k + Δ t 2 , ϵ ) , k_3 = \Delta t \cdot v_\Theta(z_k + \frac{k_2}{2}, t_k + \frac{\Delta t}{2}, \epsilon), k3=ΔtvΘ(zk+2k2,tk+2Δt,ϵ),
    k 4 = Δ t ⋅ v Θ ( z k + k 3 , t k + Δ t , ϵ ) . k_4 = \Delta t \cdot v_\Theta(z_k + k_3, t_k + \Delta t, \epsilon). k4=ΔtvΘ(zk+k3,tk+Δt,ϵ).

  2. 更新位置: z k + 1 = z k + 1 6 ( k 1 + 2 k 2 + 2 k 3 + k 4 ) . z_{k+1} = z_k + \frac{1}{6}(k_1 + 2k_2 + 2k_3 + k_4). zk+1=zk+61(k1+2k2+2k3+k4).

RK4 方法在每一步中需要多次评估流场 v Θ v_\Theta vΘ,计算量更大,但精度更高,适合对生成结果要求较高的场景。

  1. 获取生成样本:
    • 最终的 z t z_t zt 就是符合条件 ϵ \epsilon ϵ 的生成样本。

6. 总结

Flow Matching 技术通过学习一个时间依赖的流场 v Θ ( z , t ) v_\Theta(z, t) vΘ(z,t),实现了从初始分布到目标分布的连续映射。在条件流匹配(CFM)中,进一步引入了条件变量 ϵ \epsilon ϵ,使得生成模型可以在给定条件下生成样本。损失函数 L CFM \mathcal{L}_{\text{CFM}} LCFM 用于衡量模型学习到的流场与真实流场之间的差异,通过最小化该损失函数来训练模型。

Flow Matching公式

下面主要讲解Flow Matching在SD3论文:Scaling Rectified Flow Transformers for High-Resolution Image Synthesis中的公式和推导过程。

1. Flow Matching 的基本概念

  1. 目标:希望从噪声分布 p 1 ( x ) p_1(x) p1(x)(如高斯分布)到数据分布 p 0 ( x ) p_0(x) p0(x) 映射样本,通过定义一个常微分方程(ODE)描述流动过程:
    d y t d t = v Θ ( y t , t ) , \frac{dy_t}{dt} = v_\Theta(y_t, t), dtdyt=vΘ(yt,t),
  • y t y_t yt:在时间 t t t 时的样本状态。描述了从 p 1 ( x ) p_1(x) p1(x) p 0 ( x ) p_0(x) p0(x) 的概率路径。【后续文章是 z t z_t zt
  • v Θ ( y t , t ) v_\Theta(y_t, t) vΘ(yt,t):流动向量场,表示在时间 t t t 上样本 y t y_t yt 移动的速度。由神经网络参数化, Θ \Theta Θ 是神经网络的参数。
    • 作用:控制数据在时间上的变化方向,是整个流动模型的核心。
  • Θ \Theta Θ:神经网络的参数,通过训练学习到最优值。
  • t t t:时间变量,取值范围为 t ∈ [ 0 , 1 ] t \in [0, 1] t[0,1]
    • t = 0 t = 0 t=0:对应起始分布 p 0 ( x ) p_0(x) p0(x)(通常是数据分布)。
    • t = 1 t = 1 t=1:对应目标分布 p 1 ( x ) p_1(x) p1(x)(通常是标准正态分布 N ( 0 , I ) \mathcal{N}(0, I) N(0,I))。

在这里插入图片描述

  1. 直接求解微分方程的问题
    直接通过微分求解(如 Chen 等人在 2018 年提出的神经 ODE 方法)计算生成路径,计算成本非常高,尤其在处理高维数据时,需要大量的计算资源。

  2. 引入向量场 u t u_t ut
    Flow Matching 不再直接求解微分方程,而是引入一个向量场 u t u_t ut,通过对概率路径建模,生成从 p 1 p_1 p1 p 0 p_0 p0 的平滑转换。我们就可以用ODE的常用求解器(欧拉方法,K4等)实现从一个高斯噪声到真实数据的生成。

此处(SD3论文)描述的是反向扩散(去除噪声,恢复图像的流程)从 p 1 p_1 p1 p 0 p_0 p0
在这里插入图片描述

原始FM论文中的定义是与之相反,是从 p 0 p_0 p0 p 1 p_1 p1的。
在这里插入图片描述

2. 正向过程中的定义

这个过程类似于扩散模型中的正向扩散(加噪) 过程。它描述了从数据分布 p 0 ( x ) p_0(x) p0(x)(通常是目标分布)到噪声分布 p 1 ( x ) p_1(x) p1(x)(通常是标准正态分布 N ( 0 , I ) \mathcal{N}(0, I) N(0,I) )的过渡。

定义概率路径

为构造概率路径 p t p_t pt,前向过程 z t z_t zt定义:
z t = a t x 0 + b t ϵ , ϵ ∼ N ( 0 , I ) , z_t = a_t x_0 + b_t \epsilon, \quad \epsilon \sim \mathcal{N}(0, I), zt=atx0+btϵ,ϵN(0,I),

  • z t z_t zt:在时间 t t t 上的中间状态样本(从起始样本 x 0 x_0 x0 和噪声 ϵ \epsilon ϵ 线性插值生成)。
  • x 0 x_0 x0:来自起始分布 p 0 ( x ) p_0(x) p0(x) 的样本(通常是数据样本)。
  • ϵ \epsilon ϵ:独立采样的标准高斯噪声, ϵ ∼ N ( 0 , I ) \epsilon \sim \mathcal{N}(0, I) ϵN(0,I)
  • a t , b t a_t, b_t at,bt:控制数据样本和噪声贡献的权重系数。它们是时间 t t t 的函数:
    • a t a_t at:表示数据分布在 t t t 时的贡献权重。
    • b t b_t bt:表示噪声分布在 t t t 时的贡献权重。

样本 z t z_t zt 是从数据分布 p 0 p_0 p0 到噪声分布 p 1 p_1 p1 的路径 p t p_t pt,是一个曲线。此过程受权重 a t a_t at b t b_t bt 控制,其中 a t a_t at b t b_t bt 是时间 t t t 的非线性函数。非线性的 a t a_t at b t b_t bt 会导致路径为曲线,而不是简单的直线。

边界条件
  • t = 0 t = 0 t=0 时:
    a 0 = 1 , b 0 = 0 , z 0 = x 0 ∼ p 0 ( x ) . a_0 = 1, \quad b_0 = 0, \quad z_0 = x_0 \sim p_0(x). a0=1,b0=0,z0=x0p0(x).

    • 样本完全来自数据分布,噪声无贡献。
  • t = 1 t = 1 t=1 时:
    a 1 = 0 , b 1 = 1 , z 1 = ϵ ∼ N ( 0 , I ) 或者 p 1 . a_1 = 0, \quad b_1 = 1, \quad z_1 = \epsilon \sim \mathcal{N}(0, I)或者p_1. a1=0,b1=1,z1=ϵN(0,I)或者p1.

    • 样本完全来自噪声分布。

3. 条件向量场

定义条件向量场

u t ( z ∣ ϵ ) : = ∂ ∂ t ψ t ( ψ t − 1 ( z ∣ ϵ ) ∣ ϵ ) , u_t(z \mid \epsilon) := \frac{\partial}{\partial t} \psi_t(\psi_t^{-1}(z \mid \epsilon) \mid \epsilon), ut(zϵ):=tψt(ψt1(zϵ)ϵ),

  • u t ( z ∣ ϵ ) u_t(z \mid \epsilon) ut(zϵ):在给定噪声条件 ϵ \epsilon ϵ 下的向量场。
    • 作用:描述样本 z t z_t zt 在时间 t t t 上的运动速率。
  • ψ t \psi_t ψt:从 x 0 x_0 x0 z t z_t zt 的映射函数:
    ψ t ( x 0 ∣ ϵ ) = a t x 0 + b t ϵ . \psi_t(x_0 \mid \epsilon) = a_t x_0 + b_t \epsilon. ψt(x0ϵ)=atx0+btϵ.
    • 作用:通过 a t a_t at b t b_t bt 的权重组合,构建从数据到噪声的过渡路径。
向量场具体表达式

u t ( z t ∣ ϵ ) = a t ′ a t z t − ϵ b t ( a t ′ a t − b t ′ b t ) u_t(z_t \mid \epsilon) = \frac{a_t'}{a_t} z_t - \epsilon b_t \left( \frac{a_t'}{a_t} - \frac{b_t'}{b_t} \right) ut(ztϵ)=atatztϵbt(atatbtbt)

  • a t ′ a t , b t ′ b t \frac{a_t'}{a_t}, \frac{b_t'}{b_t} atat,btbt:描述 a t , b t a_t, b_t at,bt 的时间变化速率。
    • a t ′ , b t ′ a_t', b_t' at,bt 是相对于时间 t t t 的导数。
  • 第一项 a t ′ a t z t \frac{a_t'}{a_t} z_t atatzt:描述样本本身的变化速度。
  • 第二项 − ϵ b t ( a t ′ a t − b t ′ b t ) -\epsilon b_t \left(\frac{a_t'}{a_t} - \frac{b_t'}{b_t}\right) ϵbt(atatbtbt):描述噪声在样本中的动态变化。

4. 信噪比(SNR) λ t ′ \lambda_t' λt的重新参数化

为了进一步简化,定义信噪比(Signal-to-Noise Ratio, λ t \lambda_t λt):
λ t : = log ⁡ ( a t 2 b t 2 ) , \lambda_t := \log\left(\frac{a_t^2}{b_t^2}\right), λt:=log(bt2at2),

  • λ t \lambda_t λt:衡量信号(数据)与噪声的比例。
    • t → 0 t \to 0 t0:信号占主导, λ t → ∞ \lambda_t \to \infty λt
    • t → 1 t \to 1 t1:噪声占主导, λ t → − ∞ \lambda_t \to -\infty λt
  • 导数 λ t ′ \lambda_t' λt
    λ t ′ = 2 ( a t ′ a t − b t ′ b t ) . \lambda_t' = 2\left(\frac{a_t'}{a_t} - \frac{b_t'}{b_t}\right). λt=2(atatbtbt).
    引入信噪比后,速度场可以重写为:
    u t ( z t ∣ ϵ ) = a t ′ a t z t − b t 2 λ t ′ ϵ . u_t(z_t \mid \epsilon) = \frac{a_t'}{a_t} z_t - \frac{b_t}{2} \lambda_t' \epsilon. ut(ztϵ)=atatzt2btλtϵ.
  • 第一项 a t ′ a t z t \frac{a_t'}{a_t} z_t atatzt:表示数据部分的贡献。
  • 第二项 − b t 2 λ t ′ ϵ -\frac{b_t}{2} \lambda_t' \epsilon 2btλtϵ:表示噪声部分的贡献。

5. 原始 Flow Matching 损失函数定义

L FM = E t , p t ( z ) ∥ v Θ ( z , t ) − u t ( z ) ∥ 2 2 \mathcal{L}_{\text{FM}} = \mathbb{E}_{t, p_t(z)}\|v_\Theta(z, t) - u_t(z)\|_2^2 LFM=Et,pt(z)vΘ(z,t)ut(z)22

  • L FM \mathcal{L}_{\text{FM}} LFM:衡量学习到的速度场 v Θ ( z , t ) v_\Theta(z, t) vΘ(z,t) 与真实速度场 u t ( z ) u_t(z) ut(z) 的差异。

6. 原始条件化损失函数定义

(1) 条件化损失

为解决边缘化的难点(最后详细介绍),将损失重写为条件化形式:
L CFM = E t , p t ( z ∣ ϵ ) , p ( ϵ ) ∥ v Θ ( z , t ) − u t ( z ∣ ϵ ) ∥ 2 2 \mathcal{L}_{\text{CFM}} = \mathbb{E}_{t, p_t(z \mid \epsilon), p(\epsilon)}\|v_\Theta(z, t) - u_t(z \mid \epsilon)\|_2^2 LCFM=Et,pt(zϵ),p(ϵ)vΘ(z,t)ut(zϵ)22

  • 条件化损失的优点
    • 通过引入噪声条件 ϵ \epsilon ϵ,消除了对边缘分布 p t ( z ) p_t(z) pt(z) 的直接依赖,更易计算。
(2) 噪声预测目标

最终,将损失转换为噪声预测形式:
L CFM = E t , p t ( z ∣ ϵ ) , p ( ϵ ) ( − b t 2 λ t ′ ∥ ϵ Θ ( z , t ) − ϵ ∥ 2 ) , \mathcal{L}_{\text{CFM}} = \mathbb{E}_{t, p_t(z \mid \epsilon), p(\epsilon)}\left(-\frac{b_t}{2} \lambda_t' \|\epsilon_\Theta(z,t) - \epsilon\|^2\right), LCFM=Et,pt(zϵ),p(ϵ)(2btλtϵΘ(z,t)ϵ2),

  • ϵ Θ \epsilon_\Theta ϵΘ:神经网络的噪声预测目标,定义为:

ϵ Θ : = − 2 λ t ′ b t ( v Θ − a t ′ a t z ) . \epsilon_\Theta := \frac{-2}{\lambda_t' b_t} \left(v_\Theta - \frac{a_t'}{a_t} z\right). ϵΘ:=λtbt2(vΘatatz).

变量解析:

  1. ϵ Θ \epsilon_\Theta ϵΘ

    • 这是神经网络预测的噪声目标,用于与真实噪声 ϵ \epsilon ϵ 进行比较。
    • 这个量将 ( v Θ , z ) (v_\Theta, z) (vΘ,z) 的关系转化为扩散模型中的标准噪声预测任务。
  2. − 2 λ t ′ b t -\frac{2}{\lambda_t' b_t} λtbt2

    • 这是一个缩放因子,取决于时间相关的信噪比导数 λ t ′ \lambda_t' λt 和权重系数 b t b_t bt
    • 确保噪声预测任务在优化过程中数值稳定。
  3. ( v Θ − a t ′ a t z ) (v_\Theta - \frac{a_t'}{a_t} z) (vΘatatz)

    • 这里表示神经网络预测的速度场 v Θ v_\Theta vΘ 减去通过 a t ′ a t z \frac{a_t'}{a_t} z atatz 计算的线性项。
    • 这部分是为了将速度场预测转化为噪声预测任务,使模型更容易优化。
  4. z z z

    • 在时间 t t t 上的状态变量(中间样本),描述了从噪声分布 p 1 ( x ) p_1(x) p1(x) 到数据分布 p 0 ( x ) p_0(x) p0(x) 的过渡路径。

7. 权重项与统一目标

为了统一分析,包括经典扩散模型在内的各种目标形式,损失函数可以进一步写成:

进一步引入时间依赖权重 (w_t):
L w ( x 0 ) = − 1 2 E t ∼ U ( t ) , ϵ ∼ N ( 0 , I ) [ w t λ t ′ ∥ ϵ Θ ( z t , t ) − ϵ ∥ 2 ] , \mathcal{L}_w(x_0) = -\frac{1}{2} \mathbb{E}_{t \sim \mathcal{U}(t), \epsilon \sim \mathcal{N}(0, I)} \left[ w_t \lambda_t' \| \epsilon_\Theta(z_t, t) - \epsilon \|^2 \right], Lw(x0)=21EtU(t),ϵN(0,I)[wtλtϵΘ(zt,t)ϵ2],

这是加权损失函数,用于生成模型中的流匹配优化目标,旨在通过引入时间和噪声的动态权重 (w_t) 来改善优化路径。

参数解释

  1. L w ( x 0 ) \mathcal{L}_w(x_0) Lw(x0)

    • 整体损失函数,作用是最小化模型 ϵ Θ ( z t , t ) \epsilon_\Theta(z_t, t) ϵΘ(zt,t) 预测的噪声与实际噪声 ϵ \epsilon ϵ 之间的误差。
    • 优化目标在时间 t t t 和噪声 ϵ \epsilon ϵ 的分布下进行。
  2. t ∼ U ( t ) t \sim \mathcal{U}(t) tU(t)

    • 时间 t t t 的分布,假设均匀分布( U \mathcal{U} U 表示均匀分布)。
    • 时间 t t t 控制 z t z_t zt 在数据分布和噪声分布之间的插值程度。
  3. ϵ ∼ N ( 0 , I ) \epsilon \sim \mathcal{N}(0, I) ϵN(0,I)

    • 噪声 ϵ \epsilon ϵ 的分布,假设服从零均值单位协方差的标准正态分布。
    • 用于前向过程 z t = a t x 0 + b t ϵ z_t = a_t x_0 + b_t \epsilon zt=atx0+btϵ 中的噪声注入。
  4. w t w_t wt

    • 时间依赖的权重函数,控制优化过程中不同时间点的贡献。例如,当 w t = − 1 2 λ t b t 2 w_t = -\frac{1}{2} \lambda_t b_t^2 wt=21λtbt2 时,损失函数等价于 L C F M \mathcal{L}_{CFM} LCFM
    • 不同的权重选择可以影响生成模型的性能和生成路径的平滑性。
  5. λ t ′ \lambda_t' λt

    • 信噪比的时间导数,定义为:
      λ t ′ = 2 ( a t ′ a t − b t ′ b t ) , \lambda_t' = 2 \left( \frac{a_t'}{a_t} - \frac{b_t'}{b_t} \right), λt=2(atatbtbt),
      其中 a t , b t a_t, b_t at,bt 是控制数据和噪声分量的插值系数。
    • 信噪比导数描述了时间 t t t 上数据与噪声的比例变化。
  6. ϵ Θ ( z t , t ) \epsilon_\Theta(z_t, t) ϵΘ(zt,t)

    • 模型 Θ \Theta Θ 的输出,用于预测前向过程中加入的噪声 ϵ \epsilon ϵ
    • 表达式为:
      ϵ Θ ( z t , t ) = − 2 λ t b t ( v Θ ( z t , t ) − a t ′ a t z t ) , \epsilon_\Theta(z_t, t) = \frac{-2}{\lambda_t b_t} \left( v_\Theta(z_t, t) - \frac{a_t'}{a_t} z_t \right), ϵΘ(zt,t)=λtbt2(vΘ(zt,t)atatzt),
      其中 v Θ v_\Theta vΘ 是模型拟合的速度场。
  7. ϵ \epsilon ϵ

    • 前向过程中实际加入的噪声。
    • 优化的目标是让 ϵ Θ ( z t , t ) \epsilon_\Theta(z_t, t) ϵΘ(zt,t) 尽可能接近实际的噪声 ϵ \epsilon ϵ
  8. ∥ ϵ Θ ( z t , t ) − ϵ ∥ 2 \| \epsilon_\Theta(z_t, t) - \epsilon \|^2 ϵΘ(zt,t)ϵ2

    • 预测噪声与真实噪声之间的二次误差。
    • 是损失函数的核心项,衡量预测和真实值之间的差距。
  • w t w_t wt:时间相关的权重项:
    w t = − 1 2 λ t ′ b t 2 . w_t = -\frac{1}{2} \lambda_t' b_t^2. wt=21λtbt2.
  • ϵ ( z t , t ) \epsilon(z_t, t) ϵ(zt,t):模型预测的噪声。

上面的步骤是完全按照论文中的公式进行讲解的,可以照着SD3论文:Scaling Rectified Flow Transformers for High-Resolution Image Synthesis,进行详细的阅读,如果觉得难以将这些步骤串起来,可以先读懂每个公式,之后按照1 2 5 3 4 6 7 的顺序进行梳理,参考此文尝试再次理解。
条件化

Q&A

FM和CFM损失函数

论文中提到将FM损失函数写成CFM是为解决边缘化的难点(Flow Matching objective directly is intractable due to the marginalization)。

1. Flow Matching (FM) 的问题

  • FM 的目标函数是:
    L F M = E t , p t ( z ) ∥ v Θ ( z , t ) − u t ( z ) ∥ 2 2 , \mathcal{L}_{FM} = \mathbb{E}_{t, p_t(z)} \| v_\Theta(z, t) - u_t(z) \|^2_2, LFM=Et,pt(z)vΘ(z,t)ut(z)22,
    其中:

    • v Θ ( z , t ) v_\Theta(z, t) vΘ(z,t) 是神经网络预测的向量场;
    • u t ( z ) u_t(z) ut(z) 是目标向量场,描述了从分布 p 1 p_1 p1 p 0 p_0 p0 的时间演化。
  • 直接优化的困难:

    • p t ( z ) p_t(z) pt(z) 是一个边际分布(边际化计算的难度,直接使用它通常不现实),表示在时间 t t t 时的样本分布。
    • 计算 p t ( z ) p_t(z) pt(z) 需要对噪声变量 ϵ \epsilon ϵ 积分:
      p t ( z ) = E ϵ ∼ N ( 0 , I ) [ p t ( z ∣ ϵ ) ] . p_t(z) = \mathbb{E}_{\epsilon \sim \mathcal{N}(0, I)}[p_t(z \mid \epsilon)]. pt(z)=EϵN(0,I)[pt(zϵ)].
      这个积分在高维数据中是非常难以解析计算的。

2. Conditional Flow Matching (CFM) 的改进

在 FM 中, u t ( z ) u_t(z) ut(z) 是一个边际向量场,其计算依赖于整个数据分布的联合信息,而在高维空间中估计这个向量场非常困难。
CFM 的解决方案:

  • 定义条件向量场 u t ( z ∣ ϵ ) u_t(z \mid \epsilon) ut(zϵ),它明确依赖于噪声变量 ϵ \epsilon ϵ
  • CFM 引入了条件分布 p t ( z ∣ ϵ ) p_t(z \mid \epsilon) pt(zϵ),将原本边际分布中的积分直接展开为条件概率形式,从而简化优化目标。

CFM 的目标函数是:

L C F M = E t , p t ( z ∣ ϵ ) , p ( ϵ ) ∥ v Θ ( z , t ) − u t ( z ∣ ϵ ) ∥ 2 2 , \mathcal{L}_{CFM} = \mathbb{E}_{t, p_t(z \mid \epsilon), p(\epsilon)} \| v_\Theta(z, t) - u_t(z \mid \epsilon) \|^2_2, LCFM=Et,pt(zϵ),p(ϵ)vΘ(z,t)ut(zϵ)22,

  • 改进点:

    • 直接在条件分布 p t ( z ∣ ϵ ) p_t(z \mid \epsilon) pt(zϵ) 下优化,避免了计算边际分布 p t ( z ) p_t(z) pt(z) 的复杂性。
    • 条件分布 p t ( z ∣ ϵ ) p_t(z \mid \epsilon) pt(zϵ) 是通过前向过程 z t = a t x 0 + b t ϵ z_t = a_t x_0 + b_t \epsilon zt=atx0+btϵ 明确定义的,因此易于采样。
  • 数学优势:

    • 边际化问题通过条件分布展开变得可计算。
    • 训练过程直接依赖于噪声 ϵ \epsilon ϵ 的采样,减少了计算复杂度。

FM的扩散

这里改编某乎上大佬的图(来源)来描述整个扩散过程如下:

1. 前向扩散

如下图红色箭头
在这里插入图片描述

样本 z t z_t zt 是从数据分布 p 0 p_0 p0 到噪声分布 p 1 p_1 p1 的路径 p t p_t pt,路径通常是曲线,由时间 t ∈ [ 0 , 1 ] t \in [0, 1] t[0,1] 和插值参数 a t , b t a_t, b_t at,bt 控制的。这个过程是基于公式:
z t = a t x 0 + b t ϵ , ϵ ∼ N ( 0 , I ) , z_t = a_t x_0 + b_t \epsilon, \quad \epsilon \sim \mathcal{N}(0, I), zt=atx0+btϵ,ϵN(0,I),
其中 x 0 ∼ p 0 x_0 \sim p_0 x0p0,即从目标数据分布中采样的样本。

  • 红色箭头表示的曲线路径确实符合 z t z_t zt 的概率流从 p 0 p_0 p0 p 1 p_1 p1 的行为。
  • “一步到位” 在这里是指,整个前向扩散路径是连续的,由 a t , b t a_t, b_t at,bt 的变化定义,不需要离散的逐步加噪(比如 DDPM 中的逐步噪声添加)。

补充说明
前向扩散是一个固定的物理过程,其核心目标是生成一个平滑的理论路径 p t ( z t ) p_t(z_t) pt(zt),这个路径并不直接参与优化,而是为训练模型的向量场 v Θ v_\Theta vΘ 提供参考。

2. 反向扩散

如下图红色箭头
在这里插入图片描述

  • 学到的向量场 v Θ ( z , t ) v_\Theta(z, t) vΘ(z,t) 控制从噪声分布 p 1 p_1 p1 到数据分布 p 0 p_0 p0 的概率路径。
  • 通过 ODE 反向积分,可以沿着学到的路径一步到位恢复图像

补充:

  • 反向过程并非真的“一步完成”,而是利用连续的微分方程描述路径,并通过 ODE 解算器逐步逼近生成结果
  • ODE 解算器(如 Runge-Kutta 方法)会在离散的时间步中计算积分,但相比 DDPM 的数百步去噪,FM 的反向过程所需的离散步数远少得多。

反向扩散公式为:
d z t d t = v Θ ( z t , t ) \frac{dz_t}{dt} = v_\Theta(z_t, t) dtdzt=vΘ(zt,t)
通过解这个 ODE,从噪声分布 p 1 p_1 p1 的样本 z 1 z_1 z1 流动到目标分布 p 0 p_0 p0 的样本 z 0 z_0 z0由于路径是连续的,生成过程非常高效。

在这里插入图片描述

### Flow Matching in Machine Learning Flow matching represents a class of generative models that aim to learn complex probability distributions by transforming simple base distributions through invertible mappings. These transformations are parameterized as neural networks, allowing for flexible modeling of intricate data structures. In flow-based models, the core idea is to construct an invertible function \( f \) such that given samples from a known distribution (like Gaussian), one can generate samples resembling those from the target distribution using this transformation[^1]. The key advantage lies in exact likelihood computation and efficient inference capabilities due to the bijective nature of these functions. #### Algorithmic Foundations The training process involves minimizing the discrepancy between transformed source points and actual dataset instances via maximum likelihood estimation or other divergence measures like Kullback-Leibler divergence. This optimization ensures that after passing through multiple layers of learned transformations, initial noise vectors closely match real-world observations' statistical properties. A notable characteristic of flows includes their ability to compute densities directly without requiring approximations typically found within variational autoencoders or GANs. Moreover, they offer deterministic forward passes which facilitate stable gradients during backpropagation compared to stochastic counterparts seen in VAE architectures[^2]. ```python import torch from nflows import transforms, distributions, flows base_dist = distributions.StandardNormal(shape=[2]) transform = transforms.CompositeTransform([ transforms.AffineCoupling(transform_net_create_fn=lambda in_features: torch.nn.Linear(in_features, in_features)) ]) flow_model = flows.Flow(transform=transform, distribution=base_dist) def train_flow(flow_model, optimizer, dataloader): for batch_idx, (data,) in enumerate(dataloader): loss = -flow_model.log_prob(data).mean() optimizer.zero_grad() loss.backward() optimizer.step() # Example usage with PyTorch DataLoader omitted here. ``` #### Applications Across Domains Applications span across various domains including but not limited to image synthesis, audio processing, anomaly detection, time series forecasting among others where capturing multimodal dependencies plays crucial role. For instance, normalizing flows have been successfully applied towards enhancing speech quality while preserving naturalness; similarly, conditional variants enable generating realistic images conditioned on specific attributes or labels[^3].
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值