大数跨境
0
0

流匹配vs扩散模型之区别与联系

流匹配vs扩散模型之区别与联系 AI算法之道
2025-10-12
0
导读:扩散模型和流匹配原理对比

点击蓝字
关注我们










01


引言


生成式模型彻底改变了人工智能领域,使机器能够创造出极其逼真的图像、音频和文本。在这些技术中,有两种方法备受关注:扩散模型与流匹配。虽然这两种方法都是将噪声转化为结构化数据(或反向操作),但它们的运作原理却存在根本差异。

本篇技术博文将对这两种强大方法进行全面对比,深入探讨其数学基础、实际应用与直观解释。





02

  直观解释

在深入数学原理之前,我们先来建立对这两种方法的直观理解:

扩散模型通过逐步向数据添加噪声直至数据变成完全的噪声,再学习逆转此过程。可以将其想象为将一张照片缓慢溶解在酸液中,直到它变成一片随机模糊,再学习如何从这片模糊中重建原始照片。  

流匹配在噪声分布与数据分布之间创建一条连续路径(或称“流”)。这类似于定义一个平滑的“运输计划”,将噪声逐步转化为结构化数据,就如同观看一团随机黏土通过延时摄影,逐渐被塑造成一尊细节精美的雕像。






03

扩散模型数学原理

扩散模型包含前向过程和反向过程分别讲述。

  • 前向过程:

扩散模型定义了前向过程,通过T个时间步逐步向数据x0 添加噪声

其中

且  是一个噪声调度参数。  

该过程亦可表述为随机微分方程(SDE):

其中  W  是漂移系数, g ( t )

x T N ( 0 , I ) ,原始数据中的所有结构信息均被破坏。

  • 反向过程:

扩散模型的核心观点在于:若能学会逆转噪声添加过程,即可从随机噪声出发通过迭代去噪生成新数据。

反向过程定义为:

实际应用中,DDPM(去噪扩散概率模型)等模型会预测每步的噪声分量 ϵ θ ( x t t ), μ θ ( x t , t )

  • 训练目标:

扩散模型的训练目标通常是对负对数似然的变分下界:

实践中,该目标常简化为重新加权的均方误差:





04

流匹配数学原理

  • 连续归一化流和速度场

流匹配建立在连续归一化流 (CNF) 的概念之上,CNF 定义了一个将一个概率分布转化为另一个概率分布的微分方程:

其中

  • 理解速度场

速度场是一个函数,它为空间和时间中的每个点分配一个速度向量。你可以将其想象成一张风力图,显示粒子在任何给定位置应该移动的方向和速度。在生成模型的语境下:

  • 数学定义:一个速度场vθ(x,t)为每个点在时间t分配一个向量v  
  • 物理直观:想象在一条河的任何一点放置一艘小船。速度场告诉你水流在该精确位置将如何移动船只的方向和速度。
  • 变换性质: 如果我们从时间 t=0 沿着速度场运动到t=1, 我们将描绘出将样本从一个分布(通常是噪声)转化为另一个分布(我们的目标数据分布)的路径。

速度场具有几个重要的性质,使它们成为生成模型的强大工具:

  • 确定性路径: 沿着速度场从一个起点出发会产生一条确定的轨迹。

  • 可逆性: 我们可以通过反转速度向量来反向运行过程。

  • 概率质量守恒:连续性方程确保在变换过程中概率质量既不会被创造也不会被破坏。

为了可视化速度场,想象一个网格,其中每个点都有一个箭头显示方向和大小:

在流匹配中,我们学习一个神经网络,给定位置和时间来预测这些箭头(速度向量)。该网络被训练以匹配定义分布之间所需流动的参考向量场。

  • 概率流常微分方程(ODE)

在此流动下的概率密度演化遵循连续性方程:

该方程确保变换过程中的质量守恒。  

  • 流匹配原则

流匹配的核心创新在于直接通过预定义路径监督速度场vθ,  它无需从复杂概率流方程推导速 度场,而是直接约束其与参考向量场u(x,t)  匹配。参考向量场定义了样本应如何移动:

其中 x(t)采样自噪声分布p0(x)到数据分布p1(x) 之间的插值路径分布 pt(x) 。  x ( t ) 采样自噪声分布

  • 条件流匹配

条件流匹配(CFM)是其重要扩展,它在单个数据点与噪声样本之间构造路径:

其中:

定义了噪声  z  和数据 

控制路径噪声。





05

不同点

在本节中,我们将介绍扩散模型和流匹配的差异点,总结如下:

  •  路径定义

  • 扩散模型:通过添加高斯噪声定义了一条固定的、随机的路径。前向过程由噪声调度预先确定,模型学习逆转这一特定过程。
  • 流匹配:允许在分布之间灵活地设计路径。路径可以是直线、弯曲轨迹,甚至可以动态学习,提供了更大的灵活性。
  • 训练动态
  • 扩散模型:通常需要估计复杂的概率密度或其替代项,这常常导致训练动态变得困难,并需要仔细的噪声调度。
  • 流匹配: 直接监督速度场,从而得到一个更简单的均方误差目标,在训练过程中通常更稳定。
  • 采样效率

  • 扩散模型:传统上在采样时需要许多步骤(通常是 1000+),尽管 DDIM 采样等技术已经降低了这一要求。

  • 流匹配: 通常可以通过利用高阶 ODE 求解器,以更少的步骤(10-100)获得高质量的样本。

  • 理论保证

  • 扩散模型:与基于分数的生成模型有着紧密的联系,并提供了清晰的似然界限。

  • 流匹配: 在特定条件下对精确密度匹配提供了保证,并为优化概率流 ODE 提供了一条更直接的途径。





06

扩散模型分布转换

让我们考虑一个具体示例:将标准正态分布转换为两个高斯分布的混合。

在扩散方法中,我们将执行以下步骤:

  • 从目标分布(高斯混合)开始

  • 根据噪声计划β逐步添加噪声

  • 训练模型预测每一步的噪声

  • 从纯噪声开始采样并进行迭代去噪

针对一个简单的1维示例( T = 10 步,线性噪声计划 βt=0.1  其前向过程将是:

其反向过程将估计:





07

流匹配分布转换

将标准正态分布转换为两个高斯分布的混合的例子中,若采用流匹配,处理步骤如下: 

  • 义分布之间的路径,例如线性插值:

  • 推导或定义一个诱导该路径的速度场 u(x,t)

  • 训练一个模型来预测这个速度场

  • 通过求解 ODE 来采样:

对于我们的简单示例,假设直线路径,速度场可能是:

其中






08

扩散模型在实践中的应用

最具影响力的扩散模型包括:

  • DDPM(去噪扩散概率模型):普及该方法的奠基模型

  • DDIM(去噪扩散隐式模型):通过确定性过程加速采样

  • Stable Diffusion:应用于潜在空间以实现高效图像生成

  • Imagen 和 DALL-E 2:基于扩散原理的文本到图像模型

实现参考:

# Simplified DDPM training loopdef train_step(self, x_0, optimizer):    """Single training step for diffusion model"""    batch_size = x_0.shape[0]
    # Sample random timesteps    t = torch.randint(0, self.n_timesteps, (batch_size,), device=self.device, dtype=torch.long)
    # Add noise to data    x_t, noise = self.q_sample(x_0, t)
    # Predict noise    predicted_noise = self.model(x_t, t / self.n_timesteps)
    # Compute loss    loss = F.mse_loss(noise, predicted_noise)
    # Update parameters    optimizer.zero_grad()    loss.backward()    optimizer.step()
    return loss.item()







09

流匹配在实践中的应用

值得注意的流匹配实现包括:

  • 条件流匹配 (CFM):高效训练用于生成模型的神经 ODE,支持条件控制生成。

  • 一致性模型:将流匹配的方面与扩散原理相结,通过单步映射实现快速采样。

  • SiT(分数时间模型):将扩散模型重构为插值匹配,统一分数函数与速度场的学习框架。

实现参考:

def sample_path_point(self, x_0, z, t):    """Sample point along the path from noise z to data x_0 at time t"""    # Linear interpolation path with small noise    noise = torch.randn_like(x_0) * self.sigma    x_t = (1 - t) * z + t * x_0 + noise * torch.sqrt(t * (1 - t))
    # Target velocity for the path    # For straight-line path (excluding the noise term for simplicity)    target_v = x_0 - z
    return x_t, target_v
# Simplified Flow Matching training loopdef train_step(self, x_0, optimizer):    """Single training step for flow matching"""    batch_size = x_0.shape[0]
    # Sample random timesteps    t = torch.rand(batch_size, device=self.device)
    # Sample noise points    z = torch.randn_like(x_0)
    # Get path points and target velocities    x_t, target_v = self.sample_path_point(x_0, z, t.unsqueeze(-1))
    # Predict velocity vectors    predicted_v = self.model(x_t, t)
    # Compute loss    loss = F.mse_loss(predicted_v, target_v)
    # Update parameters    optimizer.zero_grad()    loss.backward()    optimizer.step()
    return loss.item()





10

总结

扩散模型和流匹配代表了生成模型中的两种强大范式,它们各自拥有独特的数学基础和实际考虑因素。

扩散模型遵循一个固定的随机过程并学习如何逆转它,而流匹配则直接学习一个可以沿着灵活路径转换分布的速度场。这就像流匹配保留了扩散过程的所有优点,但通过移除复杂正向加噪过程不必要的限制而得到简化。

理解这些方法之间根本性的差异和相似性,可以更深入地了解生成模型的更广阔前景,并为这个快速发展的领域指明令人兴奋的未来方向。







点击上方小卡片关注我




添加个人微信,进专属粉丝群!



【声明】内容源于网络
0
0
AI算法之道
一个专注于深度学习、计算机视觉和自动驾驶感知算法的公众号,涵盖视觉CV、神经网络、模式识别等方面,包括相应的硬件和软件配置,以及开源项目等。
内容 573
粉丝 0
AI算法之道 一个专注于深度学习、计算机视觉和自动驾驶感知算法的公众号,涵盖视觉CV、神经网络、模式识别等方面,包括相应的硬件和软件配置,以及开源项目等。
总阅读256
粉丝0
内容573