与前面的思路一样,我们还是从Mean Flow被提出的动机出发。何恺明教授在CVPR2025上做了十分精彩的演讲,提出生成模型目前还基于一步一步的生成,有点类似于识别模型在反向传播算法提出以前的状态,而这显然是不够快的。为了实现端到端的一步生成,他们提出了meanflow,期望可以通过一次前向传播就可以由初始分布转移到目标分布。
MeanFlow里的mean就有平均数的意思,而meanflow的核心思想就是用“平均速度”代替flow matching或者说rectified flow里的“瞬时速度”。观察flow matching中的核心ODE$\frac{dx_t}{dt}=v(x_t,t)$,我们不难看出其意义更接近物理中的“瞬时速度”,而采样的多步要求实际上就来自这个速度的瞬时性,在数值求解中,我们在解ODE时,由于路径不一定是直线,我们又只知道一个点的瞬时速度,自然只能把时间步dt缩小以达到积分的效果。之前的一些工作,比如Rectified Flow,更偏向于想办法把路径拉直,以达到用瞬时速度拟合平均速度的效果,但我们有没有办法直接拟合平均速度呢?其实也是有办法的,我们下面来介绍MeanFlow的思路。
平均速度在物理上怎么定义的呢?是位移除以时间,这里我们也采取类似的方法定义:$\bar v(z_t,r,t)=\frac{1}{t-r}\int_r^tv(z_\tau,\tau)d\tau$
但是这个怎么训练呢?我们虽然可以写出损失函数$L=\mathbb{E}||\bar{v}_\theta(z_t,r,t)-\bar{v}(z_t,r,t)||_2^2$,但是与之前面临着同样的问题:ground truth 不知道,这次我们也没法像之前那样用条件速度代替边缘速度,因为我们有两个时间自变量,那怎么办呢?MeanFlow给出了另一种办法——构建平均速度和瞬时速度的关系。
请看下面的推导:
$\bar v(z_t,r,t)=\frac{1}{t-r}\int_r^tv(z_\tau,\tau)d\tau\Leftrightarrow$
$(t-r)\bar v(z_t,r,t)=\int_r^tv(z_\tau,\tau)d\tau\Leftrightarrow$
$\frac{d}{dt}(t-r)\bar v(z_t,r,t)=\frac{d}{dt}\int_r^tv(z_\tau,\tau)d\tau\Leftrightarrow$
$\bar v(z_t,r,t)+(t-r)\frac{d}{dt}\bar v(z_t,r,t)=v(z_t,t)\Leftrightarrow$
$\bar v(z_t,r,t)=v(z_t,t)-(t-r)\frac{d}{dt}\bar v(z_t,r,t)$
其中$\frac{d}{dt}\bar v(z_t,r,t)=\frac{d \bar v}{dz} \cdot \frac{dz}{dt}+\frac{d\bar v}{dr}\cdot\frac{dr}{dt}+\frac{d\bar v}{dt}\cdot\frac{dt}{dt}=\frac{d \bar v}{dz} \cdot v(z_t,t)+\frac{d\bar v}{dt}=jvp(\bar v,(z,r,t),(v,0,1))$
最后可以得到$\bar v(z_t,r,t)=v(z_t,t)-(t-r)jvp(\bar v,(z,r,t),(v,0,1))$
观察到这个表达式实际上是自举的,也就是说$\bar v$与$\bar v$有关,但是没关系,我们可以在训练时采取梯度停止技术,即在反向传播时把等式右边视为一个常量,从而训练下面这个损失函数:
$L=\mathbb{E}||\bar{v}\theta(z_t,r,t)-sg(v(z_t,t)-(t-r)jvp(\bar v\theta,(z,r,t),(v,0,1)))||_2^2$
这里面的$v(z_t,t)$像Flow Matching一样用条件速度$x_1-x_0$代替,即可得到训练算法: