现在有很多种生成模型,例如GAN,DDPM,这些方法都非常成功,但它们在训练或采样时,往往需要复杂的步骤,计算成本也比较高,而Flow Matching 提供了一种更加直接和优雅的方式。
他的作用是将一个初始分布(比如高斯分布)进行多次变换,最终得到我们想要的分布(比如生成一张图片,生成特定的噪声分布)

这个变换的路径,就是一条连续的流(Flow)。而 Flow Matching 的核心思想,就是学习如何构造这条最优的路径,让数据点能够沿着这条路径,从简单的噪声分布,顺畅地“流”向复杂的数据分布。
和扩散模型相比,Flow Matching直接规划出了一条直接,确定的变换路径,使得它的前向过程采样速度极快。
接下来介绍四个部分:
- 基本定义
- 实际训练的可行性
- 如何设计损失函数
- 如何从数学中抽象出计算机可表示的模型
1. 基本定义
我们的最终目标是 我们令原始分布为 ,也就是初始的高斯分布
依次经过多个变换 等等会得到
这个被称为流,也就是变换函数
ODE视角下的 FLow Matching
将 进行归一化,会得到 ,将t的区间归一化到 [0,1]
得到一个flow matching的常微分方程的形式,于是我们得到了速度
$ v_t({t}(x)) {t}(x)$
从 开始,经过 得到 ,再经过 得到 ,最终得到

概率密度变换公式
若,,那么
概率密度路径
,设定好一个概率的路径,根据 和 就能够求出来 ,
在起点 时, 就是我们的噪声分布(比如,一个标准高斯分布)
在 t=1时, 就是最终的分布,可以理解为上面的 就是 的一次采样
所以带入上面的概率密度变换公式
2. 实际训练的可行性
Flow Matching中采用的方案是让神经网络学习速度向量场
首先我们要能够求loss函数:
这里面包含两个速度向量场,一个是神经网络对速度的预测值 ,另一个是真实的速度向量场
注意 t 是归一化的, 是噪声, 是目标分布
虽然我们不知道 到底是什么,但是我们知道 ,这就是一个带条件的向量场,如果能通过这个带条件的向量场得到无条件的向量场,那么这个问题就迎刃而解了。
为什么我们知道 ?因为Flow Matching设计了一个带条件的概率密度路径,在后面会讲,现在先认为我们已知它
条件向量场可以完成条件概率密度路径的行走
可是凭什么条件向量场可以替代不带条件的向量场?
求 边缘概率密度:
定理1
引入一个连续性方程,这个方程是流体力学的东西,我也没去深究,直接拿来用好了如果满足这个方程,那么就代表着可以完成概率密度路径的行走
把这个连续性方程左边的 用边缘概率密度换一下:
(边缘概率密度)
(带入连续性方程)
(因为积分对 积,div 对 作用,所以可以积分号和div互换)
如果最后一个等号成立,那么就说明带条件的速度向量场满足连续性方程可以推出不带条件的也满足,
也就说明不带条件的也能完成概率密度路径的行走
如果想让最后一个等号成立,那么括号内的内容需要相等,于是得到:
所以只需要将 按照上述式子设置,那么就有 成立,满足连续性方程,
认为这样的 能够使得 走完边缘概率密度路径
3. 如何设计损失函数
刚才我们证明了利用带条件的速度向量场可以代替用不带条件的速度向量场进行训练,但是我们只有带条件的损失函数,如何求不带条件的损失函数呢?
不带条件
带条件
Flow Matching的方法是直接用第二个损失函数,证明两个函数在神经网络训练中作用等价,所以需要证明
将两个模平方展开
$
$
和 都是实际的向量场,和参数 无关,是个常数
现在计算第一项:
将左边的期望展开成中间的形式,然后用条件概率改写一下,发现和带条件的第一项相等
现在计算第二项:
将上一节推导出的 代进去
消掉
这是一个二重积分
发现它和带条件的第二项也相等
因此两个损失函数进行求导时等价,我们可以用带条件的损失函数来进行梯度更新,能够保证它和不带条件的损失函数得到相同的模型参数
4. 计算机可表示的模型
上面的证明都是数学上连续的计算,很难在计算机中进行表示,因此需要推导出一种具体形式
首先作者定义了概率密度路径,这也是我们知道 的原因:
这里的任意时刻的x,也就是
保证在 时服从 , 时路径收缩到目标点
根据微分性质,我们要求的
上面刚刚定义的
还是上面刚刚定义的
用显式公式(如线性插值)计算中间状态,使得所有经过这个点的“训练路径”都能被较好地满足
模型的任务不是记住某一条直线,而是在整个数据空间中的每一个坐标点 ,输出一个最一致的向量,使得所有经过这个点的“训练路径”都能被较好地满足。 这迫使它学习一个平滑的、全局一致的向量场。
