Flow Matching for Generative Models-从generalized的角度来理解diffusion模型
生成模型中,一般存在一个源分布(例如高斯分布,但可以是任何分布)source distribution p(x)
目的是找到某种映射Map ,把源分布映射到未知分布q(x),数据分布(一般来说是更复杂的分布)
从概率的角度是,我们从原分布(或者说是噪声分布)提取一个样本x0~p, 然后把这个推到Map上,进而得到一个样本的数据分布U(x) qU(x)~qU(x)q。
实际情况我们无法获得数据分布,但是能得到一些样本数据(训练集)
一个通用的选择是Flows
这是一个Map,输入时间(time)和位置(location),在一个点上能参数速度矢量
从时间0到时间1进行转换,一般是常微分方程,这个转换过程一般是积分过程。
时间1 的形状是我们所需要的。
时间t在[0,1]之间时,就是一个动态的概率图
这个是概率密度可视化(从原分布到数据分布 during the time ),这里存在一个问题是 速度和概率的耦合问题。
耦合我们需要使用 生成流的基本方程(也叫做连续方程,这是个偏微分方程),这是一种量化了概率在一个固定点的变化。 我们确定了空间中的一个点,这个点的概率变化是电流的发散。也就是概率✖速度(量化了进出(incoming and going )概率的通量flux)。
这个方程促进了很多方程,包括flow matching。
我们训练生成模型,一个重要的方法是 速度场的表示。但是需要计算loss,需要是可微分的,以及trackable。
(1)一个方法是:使用标准的散度来比较:输出和数据集的经验分布。
上图的公式中描述路径的对数概率变化,但是需要使用仿真simulation xt,导致了拓展性问题大数据
(2)Flow Matching
因为p1 很难训练,我们采用归一化流的思想,进行转换:比较速度,而不是比较概率。
要做到这个转换,需要增加一些监督(没有免费的午餐),我们想着耦合:概率路径和速度场共同求解连续性方程,进而回归向量场。
可以看做一个新的divergence,在p1和q1 之间的
我们想到了这个监督,可以在训练过程中计算梯度的无偏估计。这就是我们提出的流匹配监督。也就是说我们想出一个概率路径,从源噪声开始,基于数据分布和耦合,达到这一个目标速度场。
我们采用了构造边缘分布 p_t(x),这是常用的。看公式我们需要进行积分。这个是p(x|x1)条件概率路径,q(x1)是数据,使其满足边界条件。
我们常说边缘分布合法,说的是在0~1之间的概率p_t(x)是一个有效的概率密度函数(不能是负数、积分质量=1(100%)、连续可微分(平滑的向量场))。
要满足边界条件是说在t=0和t=1时候,能够精准定义原分布和数据分布。
p(x|x1)条件概率路径是代表我们知道x1的情况下x在空间中的分布。
pt(x)=∫pt(x∣x1)q(x1)dx1 p_t(x) = \int p_t(x|x_1) q(x_1) dx_1pt(x)=∫pt(x∣x1)q(x1)dx1
对 x1 进行积分(Integration),pt(x∣x1)q(x1)p_t(x|x_1) q(x_1)pt(x∣x1)q(x1)是联合概率密度,粒子在x,对应点是x1的联合密度。对x1全空间进行积分,实现边缘化(marginalization)
如果对x进行积分,结果就是1了。
在概率论中,如果你知道联合分布 P(A,B),你想求 A 的边缘分布,你需要把 B “积掉”(积分掉)。
在标准的流匹配设定中,我们希望从一个源分布ppp流转到目标分布qqq。我们定义了一个随时间变化的概率密度函数pt(x)p_t(x)pt(x)。
对于这个条件概率路径,什么是充分条件?可以使得上面的边界概率路径很好的满足边界条件?
什么样的条件概率路径设计,能保证在t=0t=0t=0时收敛到源分布ppp,在t=1t=1t=1时收敛到目标分布qqq?
边界条件是:
- p0(x)=p(x)p_0(x) = p(x)p0(x)=p(x)
- p1(x)=q(x)p_1(x) = q(x)p1(x)=q(x)
图片中是两条路径,分别是边缘路径和条件路径。
在边缘路径中
紫色图是概率密度图,是时刻t,数据点x的概率分布p(x)。
存在无数个x1,每个x1在时刻t都撑起来一个属于自己的条件概率分布p(x|x1)。通过积分得到无条件的全局边缘分布p(x)。
醉着时间变化p(x) 变成了一个复制的分布。
右侧白色网络是全局速度矢量场。每个箭头都是每一个点的方向。积分代表是所有轨迹的加权平均。
ut(x∣x1)u_t(x|x_1)ut(x∣x1)条件速度,是如果x知道自己是x1,那么x应该在走哪个轨迹
pt(x∣x1)q(x1)pt(x)\frac{p_t(x|x_1)q(x_1)}{p_t(x)}pt(x)pt(x∣x1)q(x1)代表的是在x的情况下,是x1的概率。(贝叶斯公式)
虽然x是无数个,实际计算模拟时候,会采样N个x0,最后生成N个具体的x1。
在条件路径中,
紫色图是条件概率密度图(这里的分布不再是混合的,而是围绕着 x1 展开的),右侧白色网络是条件速度矢量场。
当我们锁定目标x1时,
概率密度图就是条件密度p(x|x1),是一个高斯分布,均值x1靠拢,方差收缩。
右侧条件速度场就是u(x|x1),
在数学上,如果我们将xtx_txt定义为从x0x_0x0到x1x_1x1的线性插值:
xt=(1−t)x0+tx1x_t = (1-t)x_0 + t x_1xt=(1−t)x0+tx1
xt=Ψt(x0∣x1)=σtx0+αtx1x_t = \Psi_t(x_0 | x_1) = \sigma_t x_0 + \alpha_t x_1xt=Ψt(x0∣x1)=σtx0+αtx1
x0∼p⇒xt∝p(x−αtx1σt)x_0 \sim p \Rightarrow x_t \propto p\left(\frac{x-\alpha_t x_1}{\sigma_t}\right)x0∼p⇒xt∝p(σtx−αtx1)
- 这里定义了一个直线的流(Linear Interpolation)。
- xtx_txt是x0x_0x0(噪声)和x1x_1x1(目标)的线性组合。
- x0∼px_0 \sim px0∼p:表示x0x_0x0是服从某个分布ppp(通常是高斯噪声)的。
FM 是一个全局的期望最小。
CFM 是一个微观的期望,在q(x1)真实数据分布中采样的点,p(x|x1)是锁定x1时候的条件密度,u(x|x1) 是锁定x1时候的每一个点 x 都有一个指向 x1 的目标速度
条件流匹配的核心是不去要求一个模糊的全局平均值,而是强制模型去拟合特定的微观路径。
两个等价,因为
v(x) 是神经网络预测的“无条件”速度,它的输入只有当前位置 x 和时间t。
但是神经网络vtv_tvt的输入: 只有当前位置的坐标xtx_txt和时间ttt。它的输入列表里没有x1x_1x1。
- 它的处境: 当你把一个具体的数值xtx_txt喂给网络时,作为“上帝”的你知道这个xtx_txt是从锁定的x1x_1x1路径上采出来的。但是网络自己完全不知道这个xtx_txt的“前世今生”(它不知道终点去哪)。
- 它的输出: 因此,vt(xt)v_t(x_t)vt(xt)只能根据当前这个孤立的坐标,输出该位置在整个大盘(全局)中的平均速度。
u(x|x1)是在时间t,锁定x1的x的速度。
第二个公式其实是第一个公式的等价蒙特卡洛采样形式。它把两个量放在一起做减法:
- x˙t\dot{x}_tx˙t(真值标签): 它是真正锁定x1x_1x1的瞬时速度(由蓝框中的条件速度公式计算得出)。
- vt(xt)v_t(x_t)vt(xt)(网络预测): 它是网络在不知道终点的情况下,仅仅根据当前位置xtx_txt盲猜的速度。
损失函数干了什么?
它在用“真正锁定的速度x˙t\dot{x}_tx˙t”作为标准答案,去惩罚和修正那个“不知道终点、只凭位置瞎猜的vt(xt)v_t(x_t)vt(xt)”。通过海量不同路径的xtx_txt冲刷训练,最终逼迫vt(xt)v_t(x_t)vt(xt)自动学会输出全大盘的平均速度。
这张幻灯片比较了两种不同的从噪声到数据样本的路径选择方式:
- Diffusion (VP - Variance Preserving) - 传统的扩散模型
- Cond-OT - 条件最优传输
传统的扩散过程 (Diffusion):
- 在 t 时刻,给定最终样本 x₁,中间状态 p_t(x|x₁) 服从正态分布 N(tx₁, (1-t)²I)
- 这意味着在扩散过程中,每一步都添加了随机噪声
- 路径是概率性的 - 每次采样可能产生不同的中间路径
Cond-OT 的选择:
- Ψ_t(x₀|x₁) = (1-t)x₀ + tx₁
- 这是一个确定性的线性插值路径
- 给定起点 x₀ 和终点 x₁,路径是唯一确定的
- 没有随机噪声,路径是直线的
- 这表明 Cond-OT 在高维稀疏数据中是动力学最优的
- 条件:n/d^{1/2} → 0,样本数 n 相对于维度d(1/2)d^{(1/2)}d(1/2)趋于0,即高维稀疏数据
参考
https://www.youtube.com/watch?v=5ZSwYogAxYg