Mean Flows for One-step Generative Modeling
- 作者:Zhengyang Geng、Mingyang Deng、Xingjian Bai、J. Zico Kolter、Kaiming He(CMU / MIT)
1. 要解决什么问题
扩散模型和 Flow Matching 把生成看成「把噪声分布运送到数据分布」:先沿一条路径把数据 x 和噪声 ε 插值成中间状态 z_t,训练网络学这条路径上的速度场,采样时从纯噪声出发、沿速度场一步步走回数据侧。这一步一步的行走在数学上就是数值求解一个常微分方程(ODE),通常要走几十到几百步:DiT-XL/2 在 ImageNet 256×256 上要 250 步(含 CFG 翻倍后 250×2 次网络评估)才拿到 FID 2.27。
少走几步乃至只走一步,是这个领域长期想解决的问题。之前的路线有两条。一条是蒸馏:先训练一个多步模型当老师,再把知识压进一个单步学生(如 Progressive Distillation、ADD、Diff-instruct、Score Identity Distillation)。蒸馏多一个训练阶段,而且没有老师就什么都没有。另一条是 Consistency Models 这条线(iCT、sCT、ECT):给网络强加「同一条轨迹上不同时刻的输出要指向同一个终点」的一致性约束,从零训练。这条线的问题在于,一致性是强加在网络行为上的性质,底层那条真值场长什么样没人知道,于是训练不稳定,需要精心设计「离散化课程」——先只在小时间区间上约束,再逐步放宽。
MeanFlow 的切口是:换一个建模对象。Flow Matching 学的瞬时速度 v(z_t, t) 描述「这一瞬间朝哪个方向走」,采样必须把无数个「这一瞬间」积分起来;MeanFlow 直接学平均速度 u(z_t, r, t),描述「从时刻 r 到时刻 t 平均每单位时间朝哪个方向走、走多远」。平均速度按定义就覆盖整段位移,所以采样一步就够了。关键的问题是:平均速度的定义里含积分,怎么拿它做训练目标?论文的回答是推导出一个把积分消掉的恒等式,训练目标里只剩下瞬时速度 v 和网络自己的导数。
2. 背景:Flow Matching 的瞬时速度场
Flow Matching 构造插值路径 z_t = (1−t)x + tε。t=0 时 z_0 = x 是数据,t=1 时 z_1 = ε 是标准高斯噪声。这条路径对 t 求导得到条件速度 v_t = dz_t/dt = ε − x:给定一个数据点 x 和一个噪声 ε,插值点 z_t 的移动方向是「从 x 指向 ε」。这里 ε − x 是定义路径时就能算出来的,所以条件速度可以直接当监督信号。
但同一个中间点 z_t 可能由很多不同的 (x, ε) 配对产生,每个配对给的速度都不一样。把所有这些条件速度按概率求期望,得到边缘速度 v(z_t, t) = E[v_t | z_t],这才是真正驱动采样的场。下面的左图里,同一个 z_t 上画了多支方向不同的蓝色箭头(不同的条件速度);右图把所有箭头平均成一支 v(z_t, t),轨迹也变成弯曲的一束。网络在训练时拟合的就是这个边缘速度场。

采样时求解 ODE dz_t/dt = v(z_t, t),从 z_1 = ε 出发往 t=0 走。数值上用欧拉法迭代:z_{t_{i+1}} = z_{t_i} + (t_{i+1} − t_i)·v(z_{t_i}, t_i)。每走一步只按当前点的切线方向前进一小段,轨迹弯曲的话就必须多走很多小步;即使条件路径是直线(rectified flow),平均后的边缘轨迹仍然弯曲,粗粒度离散化就会累积误差。这就是单步生成难的结构性原因:用瞬时速度做单步,等于用一条切线去代替整条弯曲轨迹。
3. 方法:学平均速度
3.1 平均速度的定义
先看定义。平均速度是区间 [r, t] 上的位移除以时间间隔:
u(z_t, r, t) = (1/(t−r))·∫_r^t v(z_τ, τ) dτ
这个式子的含义:把瞬时速度 v 从时刻 r 积到时刻 t,得到整段位移,再除以 (t−r),得到「平均每单位时间的速度」。u 有三个自变量:起点 r、终点 t、以及参考点 z_t(轨迹上的当前位置)。它有一个自然的边界条件:当 r 趋向 t、区间缩成一点时,平均速度回到瞬时速度,lim_{r→t} u = v。它还有一个从积分可加性自动成立的性质:跨一整段 [r,t] 的平均位移,等于先跨 [r,s] 再跨 [s,t] 两小段的位移之和,即 (t−r)u(z_t,r,t) = (s−r)u(z_s,r,s) + (t−s)u(z_t,s,t)。这意味着一个精确学好了 u 的网络,天然满足「大步和小步自洽」,不需要额外的一致性损失。
下图最左面板把关键区别画了出来:蓝色箭头是瞬时速度 v,贴着轨迹的切线方向;橙色箭头是平均速度 u,指向整段位移(弦)的方向,两者一般不重合。右侧三幅是固定终点 t=0.5/0.7/1.0 时平均速度场的形态。

3.2 MeanFlow Identity:把积分消掉
直接拿定义当监督目标没法训练,因为 ∫v dτ 要算积分。论文的关键一步是把这个定义式对 t 求导,把积分换成代数关系。推导逐行如下。
第一步,两边同乘 (t−r):
(t−r)·u(z_t, r, t) = ∫_r^t v(z_τ, τ) dτ
第二步,两边对 t 求导,r 视为与 t 无关的常数。左边是乘积,用乘积法则:d/dt[(t−r)u] = u + (t−r)·du/dt。右边是积分,用微积分基本定理:d/dt ∫_r^t v dτ = v(z_t, t)。于是:
u(z_t, r, t) + (t−r)·(d/dt)u(z_t, r, t) = v(z_t, t)
第三步,移项得到 MeanFlow Identity:
u(z_t, r, t) = v(z_t, t) − (t−r)·(d/dt)u(z_t, r, t)
这个恒等式的读法:平均速度 = 瞬时速度 − 区间长度 × 平均速度随时间的变化率。它回答了「怎么不积分就知道平均速度」——把「积很多步」换成「当前瞬时速度」和「平均速度自己随时间怎么变」这两件可算的事。附录 B.3 还证明了两边可以反推:用位移场 S = (t−r)u 代入,利用边界条件 S|_{t=r} = 0 消掉积分常数,说明恒等式与定义式等价,条件既必要也充分。
3.3 JVP:怎么算 du/dt
上式里的 d/dt 是全导数,要按链式法则展开。z_t 沿轨迹移动 dz_t/dt = v(z_t, t),r 不随 t 变化 dr/dt = 0,t 自己是 dt/dt = 1,所以:
(d/dt)u(z_t, r, t) = v(z_t, t)·∂_z u + ∂_t u
逐项解释:∂_z u 是 u 对轨迹状态 z 的梯度(和 z 同维度,ImageNet 上是 32×32×4=4096 维),∂_t u 是 u 对终点时间 t 的偏导(标量)。这个式子本质上是雅可比矩阵 (∂_z u, ∂_r u, ∂_t u) 与切向量 [v, 0, 1] 的乘积——雅可比-向量积(JVP)。∂_r u 那一项因为 dr/dt = 0 被乘掉了,但 r 仍然通过条件化影响 u 本身。现代框架里这就是一次 torch.func.jvp 或 jax.jvp 调用,只需要一次额外的反向传播;论文在 B/4 模型、TPU v4-8 上实测训练开销约 +16%(0.045 → 0.052 s/iter)。
3.4 训练损失
把网络参数化 u_θ,让它去拟合恒等式右边的目标:
u_tgt = v_t − (t−r)·(v_t·∂_z u_θ + ∂_t u_θ)
其中 v_t = ε − x 是条件速度(论文沿用 Flow Matching 的做法,用条件速度替代边缘速度,目标等价)。注意两点:一是目标里 u 的导数用网络自己的导数 ∂u_θ 代替,二是目标整体做 stop-gradient(sg)——这样反向传播时 ∂u_θ 被当成常数,不需要对 JVP 再做一次反向(避免二阶优化)。损失就是回归误差的平方:
L(θ) = E[‖u_θ(z_t, r, t) − sg(u_tgt)‖²]
论文在实践上给误差加自适应权重 w = 1/(‖Δ‖² + c)^p,p=1.0 时最好(等价于对大的误差降低权重、对小的误差抬高权重;p=0 是普通 L2,p=0.5 接近 Pseudo-Huber)。训练时从 logit-normal(−0.4, 1.0) 采样 (r, t),强制 t≥r,其中 75% 的样本令 r=t——r=t 时第二项消失,损失退化成标准 Flow Matching,给训练一个稳定底子;剩下 25% 的 r≠t 样本通过 JVP 把跨区间信息传进来。官方代码里 loss 的实际写法正是如此:u_tgt = v_g − clip(t−r, 0, 1)·du_dt(du_dt 来自 jax.jvp(u_fn, (z_t, t, r), (v_g, 1, 0))),对 u_tgt 做 stop_gradient,然后 (u − u_tgt)² 逐像素求和、按自适应权重缩放、对 batch 取平均。
3.5 一步采样
训练好之后,生成极简。一般地,从 z_t 到 z_r 的位移就是 (t−r)·u(z_t, r, t):
z_r = z_t − (t−r)·u(z_t, r, t)
取 t=1、r=0、z_1 = ε,一步采样就是:
x0 = x1 − u(x1, 0, 1) = ε − u(ε, 0, 1)
即从标准高斯噪声出发,一次前向算出 u(ε, 0, 1),减掉它就直接得到生成结果。官方代码的 solver_step 就是这么写的:z_t − (t−r)·net(z_t, t=1, h=1, y)。整段 [0,1] 的位移被平均速度一次覆盖,NFE=1。
3.6 CFG 内建,采样不翻倍
标准 CFG 在采样时要做两次前向:条件模型和无条件模型各算一次,再按 ω 加权,NFE 直接翻倍。MeanFlow 把引导放进目标场本身:定义引导后的速度场 v_cfg = ω·v(·|c) + (1−ω)·v(·),然后直接学 v_cfg 的平均速度 u_cfg。训练目标的形式不变,只是把目标里的 v_t 换成一个混合速度:
ṽ_t = ω·v_t + (1−ω)·u_cfg(z_t, t, t)
这里用到了边界条件:零长度区间上的平均速度等于瞬时速度,v(·) = u_cfg(·, t, t),所以无条件速度可以用网络自己在 (z_t, t, t) 处的输出代替。采样时直接使用 u_cfg 的输出,公式不变、仍然只有一次前向。附录 B.1 再加一个 κ 混合(把条件版 u_cfg(·|c) 也混进目标),有效引导尺度 ω' = ω/(1−κ),消融显示 κ 混合能进一步降 FID。
4. 关键实验
主实验在 ImageNet 256×256 上做类别条件生成,FID 用 5 万张生成图评估,全部模型从零训练。
头号结果(Fig.1):MF-XL/2(676M 参数,240 epoch)1-NFE FID 3.43。对照上一代:Shortcut-XL/2 的 1-NFE 是 10.60(相对提升约 68%),iCT-XL/2 是 34.24,IMM 的单步 7.77 实际用了 2 次网络评估的 guidance(相对提升约 56%)。横轴是训练算力(GFLOPs 对数刻度),MF 四个尺寸的点整体压在所有前代方法下方。

两步追平多步(Tab.2):MF-XL/2+(训练更久)2-NFE FID 2.20,与多步扩散/流模型的代表 DiT-XL/2(2.27,250×2 NFE)和 SiT-XL/2(2.06,250×2 NFE;正文里写 2.15,两处略有不一致)同一水平。2 次函数评估追平 500 次,这是「大幅缩小单步与多步差距」的直接证据。
规模扩展(Fig.4):B/2 → M/2 → L/2 → XL/2(131M → 308M → 459M → 676M)在 240 epoch 的 1-NFE FID 是 6.17 → 5.01 → 3.84 → 3.43,四条曲线随 epoch 单调下降。说明平均速度目标是个干净的回归问题,规模法则在 1-NFE 下照常成立,加算力就能继续推。

消融(Tab.1,B/4、80 epoch、400K 迭代),每个都直接支撑方法的一个环节:
- r≠t 比例:0%(退化成纯 Flow Matching)时 1-NFE FID 328.91——瞬时速度一步完全不行;25% 时最优 61.06;50% 为 63.14;100% 为 67.32。25% 这个「大部分时间退化成 FM、小部分时间注入跨区间信息」的配比是关键。
CIFAR-10(Tab.3):无条件 1-NFE FID 2.92(55M U-net,像素空间直接训练,无 EDM 预条件器),对比 iCT 2.83、sCT 2.97、IMM 3.20、ECT 3.60——与同类方法相当,说明方法不依赖 VAE 潜空间也能工作,但在这一个小数据集上并没有压过最强对手。
5. 谱系定位
MeanFlow 处在「从零训练单步模型」这条线上,和三个直接相关的工作对照最清楚。
vs Consistency Models(iCT/sCT/ECT):CM 锚定 r≡0,条件化单个时间变量,一致性是强加在网络输出上的行为约束,底层真值场未知,需要离散化课程;MeanFlow 把 r、t 都当自由变量,恒等式由定义必然推出,自洽性从积分可加性自动涌现。
vs Shortcut / IMM:Shortcut 在 Flow Matching 之上再加两时间点自一致性损失,IMM 建模随机插值的时间一致性矩,都属于启发式约束;MeanFlow 只有一个从定义推出的回归目标,外加 JVP 实现导数项。
vs Flow Map Matching:FMM 直接建模位移 S = ∫v dτ;MeanFlow 指出直接参数化位移需要显式边界条件 S|_{t=r}=0 才与定义等价,而参数化平均速度 u 时这个边界条件自动满足——这是平均速度比位移更适合做参数化的一个技术理由(附录 B.3)。
一句话概括谱系:蒸馏路线有老师依赖,consistency 路线缺真值场,MeanFlow 用「定义驱动」补上了真值场这一环。
6. 局限
- 离多步模型仍有差距:1-NFE 的 3.43 高于 SiT-XL/2 的 2.06(250×2 NFE),2-NFE 的 2.20 只是追平 DiT/SiT;带 REPA 的多步模型(1.42)领先更明显。论文说的是「大幅缩小差距」,没有声称消除。
7. 复现
官方仓库 Gsunshine/meanflow(JAX,TPU)提供训练与推理脚本、配置文件和 MF-B/4 检查点(README 预期 FID 11.4),并复现了论文数字(MF-B/4 80 epoch 无引导 FID 60.75–61.09)。ImageNet 训练细节:240 epoch、batch 256、Adam lr 1e-4、EMA 0.9999、logit-normal(−0.4, 1.0)、25% r≠t、p=1.0、CFG 有效尺度 ω'=2.0/2.5;CIFAR:800K 迭代、batch 1024、lr 6e-4、EMA 0.99995、75% r≠t、p=0.75。
图速查
| 图 | 页 | 讲什么 | 重要度 |
|---|---|---|---|
| Figure 1 | 1 | 1-NFE FID vs 训练算力,MF 全面低于 Shortcut/IMM/iCT;附生成样例 | key |
| Figure 2 | 3 | 条件速度 vs 边缘速度:瞬时速度场为什么弯曲、为什么要积分 | key |
| Figure 3 | 4 | 平均速度 u 是弦、瞬时速度 v 是切线;u(z,r,t) 依赖双时间 | key |
| Figure 4 | 9 | 四个规模在 40–240 epoch 的 1-NFE FID 单调下降 | supportive |
给 Flow Matching 换一个训练目标:不学瞬时速度 v,改学一段区间 [r,t] 上的平均速度 u;从平均速度的定义出发推导出 MeanFlow Identity (u = v − (t−r)du/dt),训练时用一次 JVP 实现该恒等式、采样时一步到位 x0 = x1 − u(x1,0,1)。ImageNet 256×256 上 1-NFE FID 3.43(XL/2,240 epoch 从零训练,CFG 内建),相比上一代单步方法 Shortcut-XL 的 10.60 提升约 68%,全程无需预训练、蒸馏或课程学习。
阅读提示
精读深度:精读
清单提示:原文提示:逐行推导 MeanFlow Identity (u = v − (t−r)du/dt) 及其 JVP 实现;理解为什么「自包含、无蒸馏」是关键卖点;注意采样仅一步 x0 = x1 − u(x1,0,1)。建议同时读其开源代码理解 loss 的实际写法。(如能联网可查 GitHub: mean-flows,但以论文为主。)
问题
要解决什么:扩散/流匹配模型采样要数值求解 ODE,通常要几十到几百步;单步生成模型要么依赖从预训练模型蒸馏(需要老师模型和额外训练阶段),要么靠 consistency 这类『行为约束』来让网络自洽,训练不稳定且需要精心设计的离散化课程。MeanFlow 想用一条定义驱动的、有 ground-truth 目标场的方式,直接从零训练出 1-NFE 的生成模型。
为什么 prior work 不够:Flow Matching 学的是瞬时速度 v,采样必须用数值积分器把 z_t 从 t=1 推到 t=0;即便条件路径是直线(rectified),边缘速度场仍然弯曲,粗粒度离散化会引入误差(论文第 3 节)。Consistency Models 把一致性当成网络行为的约束,底层 ground-truth 场未知,训练不稳定、要『离散化课程』([46,43,15,31]);Shortcut、IMM 在 Flow Matching 之上再加两时间点的自一致性损失,仍属于启发式约束。
输入 / 输出
输入
| 名称 | 类型 | 说明 |
|---|---|---|
| 噪声潜变量 z_t | latent (32×32×4, ImageNet) / pixel (32×32×3, CIFAR) | 插值点 z_t = (1−t)x + tε,t∈[0,1],x 是数据、ε 是标准高斯噪声;ImageNet 用预训练 VAE tokenizer 得到 32×32×4 潜空间。 |
| 时间对 (r, t) | 两个标量时间 | t≥r;网络以位置编码方式条件化,最优配置是 (t, t−r),即当前时间和区间长度。 |
| 类别标签 c | int | 仅类别条件生成(ImageNet 1000 类);10% 概率丢弃类别以支持 CFG。 |
输出
| 名称 | 类型 | 说明 |
|---|---|---|
| 平均速度 u_θ(z_t, r, t) | latent/pixel 同维向量场 | 网络直接输出整段区间 [r,t] 的平均速度;采样时一步 z_r = z_t − (t−r)u_θ(z_t,r,t)。 |
数据集
| 数据 | 规模 | 备注 |
|---|---|---|
| ImageNet 256×256(类别条件) | 128 万训练图 | VAE 潜空间 32×32×4(SD VAE ft-mse);FID-50K 评估;主实验 240 epoch、batch 256。 |
| CIFAR-10 32×32(无条件) | 5 万训练图 | 像素空间直接训练,55M U-net(源自 [44]);800K 迭代、batch 1024、EMA 0.99995。 |
架构(摘要)
主干与结构
backbone:DiT 风格 ViT(adaLN-Zero 条件化),B/M/L/XL 四档;CIFAR 用 U-net
参数:B/2 131M,M/2 308M(注:Table 4 误记为 497.8M,Fig.1 与 Table 2 均为 308M),L/2 459M,XL/2 676M
类型:flow matching 变体:网络回归平均速度场 u_θ(z_t, r, t),时间条件为 (t, t−r) 的位置编码 + 2 层 MLP
关键组件
- 平均速度网络 u_θ(z_t, r, t):输入噪声潜变量 + 双时间条件 (t, t−r) + 类别
- JVP 计算 d u_θ/dt = v·∂_z u_θ + ∂_t u_θ(jax.jvp / torch.func.jvp,切线 (v, 0, 1))
- 回归目标 u_tgt = v − (t−r)(v·∂_z u_θ + ∂_t u_θ),带 stop-gradient
- 自适应加权损失 w = 1/(‖Δ‖² + c)^p,p=1.0 最优
- CFG 内建:目标里用 ṽ_t = ω v_t + (1−ω) u_θ(z_t,t,t)(κ 混合见 B.1),采样仍 1-NFE
为什么这样设计
瞬时速度场采样要数值积分,平均速度场一步就能给整段位移;为了让训练不用算积分,作者把平均速度的定义式对 t 求导,把积分换成 v 和 u 的导数关系(MeanFlow Identity),导数用网络自身的 JVP 替代,配合 stop-gradient 避免二阶优化。
→ 详见 Architecture tab。
关键结果
| 指标 | 值 | 最强 baseline | setup |
|---|---|---|---|
| ImageNet 256×256 1-NFE FID-50K | 3.43(MF-XL/2,676M 参数) | 上一代 1-NFE SOTA Shortcut-XL/2 为 10.60(675M);iCT-XL/2 为 34.24;IMM-XL/2 单步 7.77(但用了 2 次网络评估的 guidance) | 从零训练 240 epoch、batch 256、CFG 内建保持 1-NFE;相对 Shortcut 提升约 68%、相对 IMM 提升约 56%(论文第 8–9 页、Fig.1/Tab.2) |
| ImageNet 256×256 2-NFE FID-50K | 2.20(MF-XL/2+,训练更久) | 多步扩散/流模型的代表:DiT-XL/2 为 2.27(250×2 NFE)、SiT-XL/2 为 2.06(250×2 NFE,表 2 数值;正文写 2.15,两处略有不一致) | 同样 XL/2 backbone;2 次函数评估即可追平需要 250 步×2(含 CFG)的 DiT/SiT |
| 规模扩展:1-NFE FID 随模型变大单调下降 | B/2 6.17 → M/2 5.01 → L/2 3.84 → XL/2 3.43(240 epoch) | 同规模无引导配置:MF-B/4 80 epoch 无 CFG 为 61.06;参考 DiT-B/4 250-NFE 为 68.4、SiT-B/4 250-NFE 为 58.9 | ImageNet 256×256,全部从零训练,CFG 保持 1-NFE(Fig.4、Tab.2、论文第 7 节) |
| CIFAR-10 无条件 1-NFE FID-50K | 2.92 | iCT 2.83(同类最佳)、sCT 2.97、IMM 3.20、ECT 3.60;这些对手都用 EDM 预条件器,MF 没有用任何预条件器 | 55M U-net 直接在 32×32 像素空间训练,800K 迭代、batch 1024(Tab.3) |
| 消融:r≠t 采样比例(B/4,80 epoch,1-NFE) | 25% 比例时 61.06 最优 | 0%(退化为纯 Flow Matching)为 328.91;50% 为 63.14;100% 为 67.32 | ImageNet 256×256,ViT-B/4,400K 迭代,无 CFG(Tab.1a) |
| 消融:JVP 切线的正确性 | 正确切线 (v, 0, 1) 时 61.06 | 错误切线 (v,0,0) 268.06、(v,1,0) 329.22、(v,1,1) 137.96 | 同上 B/4 配置;(v,0,1) 对应雅可比 (∂_zu, ∂_ru, ∂_tu) 与切向量 [dz/dt, dr/dt, dt/dt]=[v,0,1](Tab.1b) |
| 消融:CFG 尺度 ω(B/4,1-NFE) | ω=3.0 时 15.53 最优 | ω=1.0(无引导)61.06;ω=1.5 33.33;ω=2.0 20.15;ω=5.0 20.75 | 同上 B/4 配置,κ=0 版本;κ 混合改进见 Tab.5(ω'=2.0 固定时 κ=0.9 达 18.63) |
| JVP 训练开销 | +16% 墙钟时间(0.045 → 0.052 s/iter) | 对比对象:同等 Flow Matching 训练(无 JVP) | B/4 模型,JAX,TPU v4-8(附录 B.4) |
Insights
- 平均速度 u 是瞬时速度 v 的泛函(u = F[v],由定义给出),它先于任何神经网络存在,因此有真正的 ground-truth 目标场;这与 Consistency 把一致性当『网络行为约束』、底层真值未知形成对照(论文第 4.1 节)——这也是『自包含、无蒸馏』的理论根基。
- 一致性从定义自动涌现:积分可加性给出 (t−r)u(zt,r,t) = (s−r)u(zs,r,s) + (t−s)u(zt,s,t),任何精确近似 u 的网络天然满足跨区间自洽,无需额外一致性损失或课程(第 4.1 节)。
- 边界条件 lim_{r→t} u = v 让 CFG 能内建:无条件瞬时速度 v(·) 可以用 u_cfg(z,t,t) 表示,引导就变成目标场本身的性质,采样保持 1-NFE(第 4.2 节)。
- 一步采样 x0 = x1 − u(x1,0,1) 把『数值积分整条轨迹』压缩成『一次网络前向』:平均速度按定义覆盖整段位移,这是 1-NFE 能成立的结构性原因(第 4.1 节、Alg.2)。
vs 同类工作
- vs Consistency Models([46,43,15,31]):CM 锚定 r≡0,只条件化单个时间变量,一致性是强加在网络输出上的行为约束,且底层真值场未知、要离散化课程;MeanFlow 的恒等式由平均速度定义必然推出,r、t 都是自由变量,没有课程。
- vs Shortcut Models([13]):Shortcut 在 Flow Matching 损失之上额外加两时间点自一致性损失;MeanFlow 的跨区间自洽来自积分可加性,自动满足,不额外加损失。
- vs Inductive Moment Matching([52]):IMM 建模随机插值在不同时间步的自一致性矩;同样属于启发式约束,且其『单步』结果实际用了 2-NFE guidance。
- vs Flow Map Matching([3]):FMM 直接建模位移 S = ∫v dτ;MeanFlow 指出直接参数化位移需要显式边界条件 S|_{t=r}=0,而参数化平均速度 u 时该边界条件自动成立(附录 B.3),所以恒等式是充分必要条件。
局限
- 与多步模型仍有差距:1-NFE 的 3.43 仍高于 SiT-XL/2 的 2.06(250×2 NFE);即使 2-NFE 的 2.20 也只是『追平』DiT/SiT 而没超过,REPA 加持的多步模型(1.42)更明显领先(论文第 5.2 节自承 'narrows the gap' 而非消除)。
- 训练目标带自引用:u_tgt 里含网络自身的 JVP(∂u_θ)以及 CFG 下的 u_θ(z,t,t),靠 stop-gradient 固定;论文只证明『零损失 ⇒ 满足恒等式』,没有分析实际优化动力学是否收敛、收敛到哪个固定点——训练稳定性主要靠经验验证,这是证据最弱的一环(第 4.1 节 + 我们读出的)。
- 『自包含』的范围:从零训练指不需要预训练扩散/流老师,但 ImageNet 实验仍依赖预训练 VAE tokenizer(SD VAE ft-mse)把图像压到 32×32×4 潜空间,端到端意义上并不完全自包含(第 5 节 setup + 我们读出的)。
- 实验结果规模有限:只有 ImageNet 256 类别条件与 CIFAR-10 无条件两类设置,没有 text-to-image、视频、512/1024 分辨率或 class-unconditional ImageNet 验证;CIFAR 上 2.92 只是『与对手相当』,仍被 iCT 的 2.83 小幅压过(Tab.3)。
- 数值细节有待敲实:Table 4 把 M/2 参数记为 497.8M,与 Fig.1/Table 2 的 308M 冲突;正文与表 2 中 SiT 的 FID 也一处 2.15、一处 2.06。这类不一致削弱了复现对照时的可信度(我们读出的)。
- 对 JVP 的依赖:方法需要网络对输入 (z, t, r) 可微并支持 JVP 接口;对使用定制 kernel(如 flash attention 类)的实现要额外适配,且大模型上的 JVP 开销论文只测了 B/4(+16%),更大规模未报告(附录 B.4 + 我们读出的)。
可复现性
- code:https://github.com/Gsunshine/meanflow(官方 JAX 实现,TPU;另发布 PyTorch CIFAR 版本与改进版 iMF/pMF)
- weights:官方仓库提供 MF-B/4 检查点(Google Drive,README 预期 FID 11.4)与 FID 统计文件
- setup:官方仓库复现了论文数字:MF-B/4 80 epoch 无引导 FID 60.75–61.09;论文训练细节见表 4(ImageNet:240 epoch、batch 256、lr 1e-4、EMA 0.9999、lognorm(−0.4,1.0)、25% r≠t、p=1.0)与附录 A(CIFAR:800K 迭代、batch 1024、lr 6e-4、EMA 0.99995、75% r≠t、p=0.75)
主干与结构
backbone:DiT 风格 ViT(adaLN-Zero 条件化),B/M/L/XL 四档;CIFAR 用 U-net
参数:B/2 131M,M/2 308M(注:Table 4 误记为 497.8M,Fig.1 与 Table 2 均为 308M),L/2 459M,XL/2 676M
类型:flow matching 变体:网络回归平均速度场 u_θ(z_t, r, t),时间条件为 (t, t−r) 的位置编码 + 2 层 MLP
关键组件
- 平均速度网络 u_θ(z_t, r, t):输入噪声潜变量 + 双时间条件 (t, t−r) + 类别
- JVP 计算 d u_θ/dt = v·∂_z u_θ + ∂_t u_θ(jax.jvp / torch.func.jvp,切线 (v, 0, 1))
- 回归目标 u_tgt = v − (t−r)(v·∂_z u_θ + ∂_t u_θ),带 stop-gradient
- 自适应加权损失 w = 1/(‖Δ‖² + c)^p,p=1.0 最优
- CFG 内建:目标里用 ṽ_t = ω v_t + (1−ω) u_θ(z_t,t,t)(κ 混合见 B.1),采样仍 1-NFE
为什么这样设计
瞬时速度场采样要数值积分,平均速度场一步就能给整段位移;为了让训练不用算积分,作者把平均速度的定义式对 t 求导,把积分换成 v 和 u 的导数关系(MeanFlow Identity),导数用网络自身的 JVP 替代,配合 stop-gradient 避免二阶优化。
1-NFE 生成对比:训练算力 vs FID + 生成样例
原文 caption:One-step generation on ImageNet 256×256 from scratch. Our MeanFlow (MF) model achieves significantly better generation quality than previous state-of-the-art one-step diffusion/flow methods. iCT, Shortcut, and our MF are all 1-NFE generation, while IMM's 1-step result involves 2-NFE guidance. Detailed numbers are in Tab. 2. Images shown are generated by our 1-NFE model.
全文头号结果图。横轴是训练算力(GFLOPs,对数刻度),纵轴是 1-step FID(越低越好),每个点是一个模型:MF-B/M/L/XL(紫色)显著低于 Shortcut-XL(10.60)、IMM-XL(7.77,注意它算 1 步但用了 2 次网络评估做 guidance)、iCT-XL(34.24)。图上方 5 张图是 1-NFE 模型自己生成的 ImageNet 样例。读法:同样算力下 MF 的 FID 最低,且 MF-XL 用约 2^37.8 GFLOPs 就拿到 3.43。它支撑『单步生成质量大幅超过前代』的核心主张。
Flow Matching 的瞬时速度场:条件速度 vs 边缘速度
原文 caption:Velocity fields in Flow Matching. Left: conditional flows. A given z_t can arise from different (x, ε) pairs, resulting in different conditional velocities v_t. Right: marginal flows, obtained by marginalizing over all possible conditional velocities. The marginal velocity field serves as the underlying ground-truth field for network training. All velocities shown here are instantaneous velocities.
背景铺垫图:左图同一个中间点 z_t 可以来自不同 (x,ε) 配对,各自有不同切线速度 v_t;右图把所有可能速度求期望得到边缘速度 v(z_t,t),这才是网络要拟合的 ground-truth 场。读法:看左右两图从『多条箭头』到『一条平均箭头』的变化。它解释了为什么 Flow Matching 采样要解 ODE 走很多步——右图的轨迹是弯曲的,而 Average velocity 正是要在这种弯曲轨迹上定义『弦』。
平均速度场 u(z,r,t):弦 vs 切线
原文 caption:The field of average velocity u(z, r, t). Leftmost: the instantaneous velocity v determines the tangent direction of the path, while the average velocity u(z, r, t) is generally not aligned with v. The average velocity is aligned with the displacement, which is (t−r)u(z, r, t). Right three subplots: the field u(z, r, t) is conditioned on both r and t, and is shown here for t = 0.5, 0.7, and 1.0.
核心概念图。最左面板:沿弯曲轨迹,蓝色切线箭头是瞬时速度 v,橙色箭头 u 指向整体位移方向(弦),两者一般不重合;位移 = (t−r)u。右侧三幅:固定终点 t=0.5/0.7/1.0 时,从不同起点 r 指向终点的平均速度场形态。读法:平均速度回答的是『从 r 到 t 平均每单位时间走了多远、朝哪个方向』,所以一步 (t−r)u 就能覆盖整段位移。它把『为什么 1-NFE 可行』画了出来,是理解 MeanFlow Identity 的图形基础。
模型规模扩展性:epoch 增加、模型变大 FID 稳定下降
原文 caption:Scalability of MeanFlow models on ImageNet 256×256. 1-NFE generation FID is reported. All models are trained from scratch. CFG is applied while maintaining the 1-NFE sampling behavior. Our method exhibits promising scalability with respect to model size.
扩展性实验:横轴训练 epoch(40–240),纵轴 1-NFE FID,四条曲线对应 B/2(131M)、M/2(308M)、L/2(459M)、XL/2(676M),全部从零训练、CFG 保持 1-NFE。读法:看四条曲线随 epoch 单调下降,且更大模型起点更低、终点更好(240 epoch 时 6.17 → 3.43)。它支撑『平均速度目标本身是干净的回归问题,规模法则在 1-NFE 下仍然成立』,说明方法可以靠算力继续推。
🎧 音频版
时长 36:16 · Edge TTS
Mean Flows for One-step Generative Modeling(对话版·深度版)
这篇论文解决了什么问题,为什么值得做一整期
小播:老播,先给我一个一句话的答案:这篇《Mean Flows for One-step Generative Modeling》到底干了件什么事?
老播:一句话版本:它给生成模型里的 Flow Matching 换了一个训练目标——原来学的是瞬时速度,它改学平均速度,于是采样可以只走一步,就能在 ImageNet 256×256 上拿到 FID 3.43,而且整个模型从零开始训练,没有预训练、没有蒸馏、没有课程学习。作者是 CMU 和 MIT 的团队,作者列表里有 Kaiming He。
小播:等等,平均速度这个说法我好像在别处也听过,但这里听起来不太一样。为什么换个目标就能只走一步?这是整期要讲清楚的核心。你先说,这篇为什么值得单独做一整期。
老播:三个理由。第一,它代表一条新路线:之前做单步生成,要么靠蒸馏老师模型,要么靠 consistency 这类启发式约束,训练都比较麻烦;MeanFlow 声称自己是从定义里推出来的,目标场真实存在。第二,它把单步生成和需要几百步的多步模型之间的差距大幅缩小——2 次函数评估的 FID 2.20,追平了 DiT 跑 250 步的结果。第三,它很短、很干净,训练代码几十行就能说清楚。这期结束,你应该能自己推导那个核心恒等式,并且说清一步采样为什么可行。
小播:先说清楚为什么单步生成这件事本身重要,值得这个领域花这么多年去追。采样步数多,代价是什么?
老播:代价直接写在推理成本上。生成一张图,模型要跑多少次前向,决定了延迟和电费。一个需要几百次网络评估的模型,在手机、端侧、实时交互场景里基本没法用。单步生成等于把每次生成的成本压到一次前向,这是工业界很想要的性质。所以你可以看到近几年论文都在卷同一件事:少步数、乃至一步,同时尽量保住生成质量。这篇的工作,就是在这条竞争线上把质量的天花板抬高了。
小播:那我们这期的路线图是什么?
老播:四段。先讲 Flow Matching 的原理和它为什么慢;然后重点推导平均速度和 MeanFlow Identity,这是全篇的数学核心;接着看实验数字验证;最后挑刺。你跟着走会发现,需要的数学工具不会超过本科微积分:求导、乘积法则、微积分基本定理,就这三样。公式出现前我会先说它要回答什么问题,出现后逐项解释符号。
小播:好,那我先确认一下两个术语,免得后面听得糊涂。FID 是什么?NFE 是什么?
老播:FID 是 Fréchet Inception Distance 的缩写,生成质量的标准度量:把真实图和生成图各自送进 Inception 网络提特征,比较两组特征分布的距离,数字越低说明生成图越像真实分布。ImageNet 256×256 上,业界常用 5 万张生成图来算。NFE 是 Number of Function Evaluations,一次函数评估就是网络跑一次前向。一篇论文说 1-NFE,就是说整个生成过程只跑了一次网络。这两个数字一个管质量、一个管成本,后面所有对比都围着它们转。
先讲清楚 Flow Matching 在做什么,卡在哪一步
小播:好,现在讲基础。Flow Matching 是怎么工作的?
老播:把生成想成把两个分布互相搬运。具体做法:取一张训练图 x 和一个高斯噪声 ε,按时间 t 线性插值出中间状态 z_t = (1−t)x + tε。t=0 时 z_0 就是数据 x,t=1 时 z_1 就是噪声 ε。对这个式子求导,得到条件速度 v_t = ε − x——它告诉你这个插值点在往哪个方向动。训练时让网络预测这个速度,采样时从纯噪声 ε 出发,沿着速度场走回数据那一端。
小播:等一下,有个细节我想确认:同一个中间点,会不会对应多个不同的原图?那样速度不就冲突了吗?
老播:会,而且这是理解这篇论文的关键。中间状态 z_t 是个插值点,很多不同的 (x, ε) 配对都能插出同一个 z_t,每个配对给出的条件速度 v_t = ε − x 都不同。网络该学哪个?Flow Matching 的做法是把所有可能配对的概率加权平均,得到边缘速度 v(z_t, t)。你可以看论文 Figure 2 的左图:同一个 z_t 上画了好几支方向不同的蓝色箭头,那就是不同条件速度;右图把所有箭头平均成一支,轨迹变成一束弯曲的线。网络学的是右边这个平均场,它才是真正驱动采样的东西。
小播:那为什么采样要几百步?不能一步从噪声走到数据吗?
老播:可以算给你看。采样在数学上是解一个常微分方程 dz_t/dt = v(z_t, t)。数值解 ODE 的欧拉法是一次走一小步:z_{t_{i+1}} = z_{t_i} + (t_{i+1} − t_i)·v(z_{t_i}, t_i)。一步就是沿当前点的切线方向走一小段。问题在于,网络学到的边缘速度场,轨迹是弯的——就算你设计直线化的条件路径,也就是 rectified flow 那条线,把众多 (x, ε) 配对平均之后,边缘轨迹照样弯。DiT-XL/2 在 ImageNet 256×256 上要 250 步、加 CFG 翻倍成 250×2 次网络评估,才拿到 FID 2.27,这是这个领域常用的基线尺子。一步走完弯轨迹,等于拿一条切线去代替整条曲线,误差巨大。
小播:那为什么不干脆把步长加大?一步从 1 跳到 0,欧拉法不就等于一步采样了吗?
老播:加大步长就是单步近似,你可以在消融里看到它的下场:B/4 模型如果把 r≠t 比例设成 0%,等于网络只学过瞬时速度,1-NFE 采样的 FID 直接是 328.91,接近随机。欧拉法只沿当前切线方向走,轨迹弯的时候大步长就飞出去了;更高阶的求解器能修正一部分,但本质上还是靠多走几步逼近积分。这就是为什么瞬时速度这条路必须拿步数换精度,也是 MeanFlow 想绕开的根本原因。
小播:明白了,症结在学的是瞬时速度——每一瞬间的方向知道,但全程怎么走要靠积分累出来。那之前的人怎么解决单步这个难题?
老播:两条主流。一条是蒸馏:先训一个多步模型当老师,再把知识压进单步学生,比如 Progressive Distillation、ADD、Diff-instruct 这类工作。代价是多一个训练阶段,没有老师就什么都没有。另一条是 Consistency Models 这条线,iCT、sCT、ECT 都是它的改进:给网络强加同一条轨迹上不同时刻的输出要指向同一个终点的一致性约束。它的麻烦在于,一致性是强加在网络行为上的要求,底层那个真值场谁也不知道长什么样,所以训练不稳定,得靠离散化课程——先只在小时间区间上约束,再慢慢放宽。MeanFlow 的切入点是第三样东西:这两条路都不走,直接换建模对象。
小播:你说的离散化课程,能再具体一点吗?我印象里 consistency 方法确实都爱提这个。
老播:以 Consistency Models 的训练为例:网络要对同一条轨迹上两个时间点 t1、t2 的输出做一致性约束,要求它们指向同一个终点。早期直接上大间隔,训练容易崩,就先取非常接近的两个时间点,比如只差 0.001,让约束很弱、容易满足;模型稳定了,再逐步拉开时间差,这个由易到难的安排就叫离散化课程。iCT、sCT、ECT 这些改进版主要在调课程和损失函数,这本身就说明这个痛点真实存在。MeanFlow 里没有这个机制:跨区间的自洽性由积分可加性保证,网络直接学,不需要课程。
小播:我在想,换个建模对象,风险是不是也很大?万一换过去训练不起来,或者数学上站不住。
老播:你说到点子上了。作者显然也明白,所以他们全篇花力气做两件事:一是把数学推导写得非常完整,恒等式从定义推出,还证明充分必要;二是把训练实现写得极简,只有一条损失、一次 JVP,没有一堆启发式技巧。这两件事合起来,就是他们卖点的来源——自包含、无蒸馏。下一段我们就把这个数学推导从头走一遍,你听完可以自己验证。
核心来了:平均速度怎么定义,恒等式怎么推
小播:换建模对象,具体换成了什么?
老播:Flow Matching 学瞬时速度 v(z_t, t),MeanFlow 学平均速度 u(z_t, r, t)。先给定义。平均速度等于区间 [r, t] 上的总位移除以时间间隔:u = (1/(t−r))·∫_r^t v(z_τ, τ) dτ。逐符号解释:把瞬时速度 v 从起点时刻 r 积到终点时刻 t,得到整段位移,再除以区间长度 (t−r),得到平均每单位时间朝哪个方向走、走多远。z_t 是轨迹上的当前位置,r 和 t 是两个自由的时间变量——平均速度天生带两个时间变量,这是它和瞬时速度最明显的外形差异。论文 Figure 3 左图把这个差异画了出来:蓝色箭头是瞬时速度,贴着轨迹的切线方向;橙色箭头是平均速度,指向整段位移也就是弦的方向,两者一般不重合。
小播:图里右边还有三张小图,画的是什么?
老播:Figure 3 右边三幅分别固定终点 t=0.5、0.7、1.0,画的是从各个起点 r 指向这个终点的平均速度场。同一个轨迹点,在不同 (r, t) 组合下的 u 会不一样——从 r=0.2 到 t=1.0 的平均方向,和从 r=0.2 到 t=0.5 的平均方向就可能不同。这提醒我们,网络输入里必须真的带两个时间变量。消融实验也验证了这一点:只用区间长度 t−r 一个条件就能工作,FID 63.13,但加上当前时间 t 效果最好,61.06。实现层面,DiT 骨架用 adaLN-Zero 做条件化,两个时间变量各自过位置编码加两层 MLP,再求和进网络。
小播:那平均速度凭什么一步就够?
老播:凭定义本身。位移等于时间间隔乘以平均速度,这是定义直接保证的恒等式:从 z_t 到 z_r 的位移就是 (t−r)·u(z_t, r, t)。所以采样公式极简:z_r = z_t − (t−r)·u(z_t, r, t)。取 t=1、r=0、z_1 = ε,一步采样就是 x0 = x1 − u(x1, 0, 1),也就是 ε − u(ε, 0, 1):从标准高斯噪声出发,一次前向算出 u(ε, 0, 1),减掉,就得到生成结果。官方代码的采样函数就是这么写的,一行。整段 [0,1] 的位移被平均速度一次覆盖,不需要解积分。请记住这个式子,它是本期要重复三遍的结论之一:采样只走一步。
小播:等一下,定义里不是有个积分吗?∫v dτ 在训练的时候怎么算?总不能真去做数值积分吧。
老播:问到了要害,这就是核心贡献——MeanFlow Identity。训练没法算积分,所以作者把定义式对 t 求导,把积分消掉。推导一共三步,你跟我走一遍。第一步,两边同乘 (t−r),得到 (t−r)·u(z_t, r, t) = ∫_r^t v(z_τ, τ) dτ。第二步,两边对 t 求导,把 r 当常数。左边是乘积,用乘积法则,得到 u + (t−r)·(du/dt);右边是积分,用微积分基本定理,得到 v(z_t, t)。第三步,移项,得到:
u(z_t, r, t) = v(z_t, t) − (t−r)·(d/dt)u(z_t, r, t)
小播:这就是那个 MeanFlow Identity?u 等于 v 减去 (t−r) 乘以 du/dt。每个符号帮我过一遍。
老播:好。左边 u 是我们要学的平均速度;右边第一项 v(z_t, t) 是当前时刻 t 的瞬时速度;第二项里 (t−r) 是区间长度,乘上 du/dt,也就是平均速度对时间的变化率。合起来的意思:平均速度等于当前瞬时速度,减去区间越长、平均速度变化越快时需要的修正。这个恒等式把所有时间点上的 u 通过 v 和 u 自己的导数串起来。这里还有一个微妙但重要的点:附录 B.3 证明了它和原始定义式完全等价——用位移场 S = (t−r)u 代入,边界条件 S 在 t=r 时等于 0,正好消掉积分常数。恒等式既是定义的必要条件也是充分条件,让网络满足它,就等于在学定义里的那个 u。顺带说一句,如果直接建模位移 S 而不是平均速度 u,这个边界条件就得显式加进网络,MeanFlow 因为选了平均速度,边界条件自动成立。你还可以自己验算一个特例:如果轨迹是直的、速度恒定,平均速度就等于瞬时速度,修正项自动为零;轨迹越弯,u 和 v 差得越多,第二项起的作用越大。所以第二项可以理解成对轨迹弯曲程度的补偿,曲线越弯,单靠瞬时速度越不够。
小播:那 du/dt 怎么算?这个导数看起来不太常规。
老播:展开成偏导。du/dt 是全导数,按链式法则有三项:z_t 沿轨迹移动 dz_t/dt = v(z_t, t),所以有 v·∂_z u 这一项;r 不随 t 变化,dr/dt = 0,所以 ∂_r u 那项被乘掉了;t 自己 dt/dt = 1,所以还有 ∂_t u 这一项。合起来:du/dt = v·∂_z u + ∂_t u。逐符号说:∂_z u 是 u 对轨迹状态 z 的梯度,ImageNet 的潜空间里是 32×32×4 共 4096 维;∂_t u 是 u 对终点时间 t 的偏导,一个标量。这两项合起来,就是雅可比矩阵 (∂_z u, ∂_r u, ∂_t u) 和切向量 [v, 0, 1] 的乘积——雅可比-向量积,简称 JVP。JVP 和更常见的 VJP 是反的:VJP 是把梯度从输出传回输入,JVP 是把一个切向量从输入推向前向传播的方向,正好适合这里沿着轨迹方向算导数。现代框架一行搞定:jax.jvp 或者 torch.func.jvp。它只需要一次额外的反向传播,论文在 B/4 模型、TPU v4-8 上实测训练开销只有约 16%,从每步 0.045 秒涨到 0.052 秒。
小播:所以训练目标就是让网络满足这个恒等式?具体损失怎么写?
老播:对。网络参数化 u_θ,回归目标 u_tgt = v_t − (t−r)·(v_t·∂_z u_θ + ∂_t u_θ)。逐项解释:v_t = ε − x 是条件速度,训练时直接算出来,是目标里唯一的真实信号;∂_z u_θ 和 ∂_t u_θ 是网络自己的导数,用来代替恒等式里真值的导数;整个目标做 stop-gradient,把网络自己的导数当常数,这样反向传播不会对 JVP 再做一次求导,避免二阶优化。损失就是 u_θ 和这个目标之间的平方误差。官方代码里的实际写法我念一遍:u_tgt = v_g − clip(t−r, 0, 1)·du_dt,其中 du_dt 来自 jax.jvp(u_fn, (z_t, t, r), (v_g, 1, 0)),然后对 u_tgt 做 stop_gradient,再算 (u − u_tgt) 的平方、逐像素求和、按自适应权重缩放、对 batch 取平均。和论文公式逐行对应。我特意提代码,是因为论文公式到代码之间常有坑,这里直接对照最保险。
小播:那训练的时候 r 和 t 怎么取?总不能每个样本都随机两个时间点吧?
老播:这里有个重要细节。作者从 logit-normal(−0.4, 1.0) 分布采样 (r, t),强制 t≥r,然后把 75% 的样本令 r=t。为什么?因为 r=t 时区间长度是零,修正项消失,损失退化成标准 Flow Matching——给训练一个稳定底子;剩下 25% 的 r≠t 样本,通过 JVP 把跨区间的信息传进网络。消融实验显示这个比例很关键:25% 时 B/4 模型 1-NFE FID 是 61.06,把比例改成 0%,也就是完全退化成 Flow Matching,直接崩到 328.91。这个对比说明什么?单靠瞬时速度做一步生成完全不行,必须让网络学到跨区间的平均速度。时间条件用 (t, t−r) 编码,也就是当前时间和区间长度,比直接编码 (r, t) 略好。损失上还有一个自适应权重 w = 1/(‖Δ‖² + c)^p,p=1.0 时最好;p 的直觉可以这样给:对已经很大的误差降权、对很小的误差提权,让训练更专注于中等误差的样本。
小播:还有 CFG,类别引导,那个大幅提升生成质量的技巧。它不会让采样变成两遍吗?
老播:标准 CFG 会,采样时条件和无条件各算一次,NFE 翻倍。MeanFlow 的做法是把引导直接写进目标场:定义引导后的速度场 v_cfg = ω·v(·|c) + (1−ω)·v(·),然后网络直接学 v_cfg 的平均速度 u_cfg。训练时目标里的速度换成 ṽ_t = ω·v_t + (1−ω)·u_cfg(z_t, t, t)。这里用了一个边界性质:零长度区间的平均速度等于瞬时速度,所以无条件速度 v(·) 可以用网络自己在 (z_t, t, t) 的输出代替。采样时直接用 u_cfg,公式不变,仍然一次前向。消融里 CFG 的效果很明显:B/4 无引导是 61.06,引导尺度 ω=3.0 时降到 15.53。附录还有一个 κ 混合的改进,把条件版和无条件版的 u_cfg(z,t,t) 都混进目标,固定有效尺度 ω'=2.0 时能把 FID 从 20.15 再压到 18.63。官方代码里引导是按 ω' 和 κ 的换算实现的,训练时还有 10% 概率丢弃类别标签,这些细节和标准 CFG 的做法一致。
小播:核心思想我捋一遍,你看我说得对不对:定义平均速度,推导出消掉积分的恒等式,用 JVP 实现恒等式里的导数项,训练让网络满足恒等式,采样用位移公式一步到位,CFG 也内建进目标场。对吗?
老播:完全对。你这段话本身就是这个结论的第一遍:MeanFlow 的全部分量都从一个定义出发,目标场真实存在、与网络无关,所以不需要蒸馏,不需要 consistency 启发式,不需要课程。这是它自包含的根基,也是后面所有对比的坐标系。自包含三个字的含义再拆开一遍:从零训练指不需要任何预训练扩散模型当老师;无蒸馏指没有教师学生两个训练阶段;无课程指不需要循序渐进安排时间区间。三个 none 合起来,就是它和前代工作的分水岭。接下来看数字,验证这套说法在实验里站不站得住。
小播:最后确认一个角度:MeanFlow 是不是可以理解成 Flow Matching 加上一个修正项?
老播:可以。r=t 时修正项消失,损失退化成标准 Flow Matching;r≠t 时,目标里多了 −(t−r)·(v_t·∂_z u_θ + ∂_t u_θ) 这一项,把跨区间的信息带进来。实现上就是在 Flow Matching 的回归目标上改了一行,但这一行的行为差异巨大——r≠t 比例从 0% 变到 25%,1-NFE 的 FID 从 328.91 变到 61.06。训练管道里最明显的额外代价,就是那一次 JVP 的前向和反向传播。
数字说话:一步 FID 3.43,两步追平几百步
小播:好,现在上实验。头号结果是什么?
老播:ImageNet 256×256 类别条件生成,FID 用 5 万张生成图评估,模型全部从零训练。头号结果:MF-XL/2,676M 参数,训练 240 epoch,1-NFE FID 3.43。对照上一代单步方法:Shortcut-XL/2 是 10.60,iCT-XL/2 是 34.24,IMM 的单步 7.77 还用了 2 次网络评估做 guidance。3.43 相对 10.60 是约 68% 的提升,相对 IMM 的 7.77 是约 56%。看论文的 Figure 1:横轴是训练算力、对数刻度,纵轴是 1-step FID,MF 四个尺寸的点整体压在对手下面;图上方那几张图就是 1-NFE 模型自己生成的 ImageNet 样例,类别包括动物、植物、自然场景,看着已经是正常图像。读图的时候注意一点:同样一次前向,IMM 那个点其实偷跑了,它的一步用了两次网络评估做引导,MF 是实打实的一次。
小播:那一步追平几百步这个说法有依据吗?
老播:有,看 2-NFE 那一行。MF-XL/2+ 训练得更久,2 次函数评估 FID 2.20;对照 DiT-XL/2 是 2.27、SiT-XL/2 是 2.06,这两个都要 250×2 次网络评估,也就是 500 次前向(含 CFG 翻倍)。2 次对 500 次,FID 同一水平。正文里 SiT 写的是 2.15,表格里是 2.06,论文内部有一点点不一致,不影响结论:两步追平需要几百步的多步模型,这正是大幅缩小单步与多步差距的实证。差距仍然存在:最好的多步模型,比如加 REPA 的 SiT,是 1.42,单步还没有超过它。
小播:那放到更大的生成模型版图里,这个 3.43 是什么水平?
老播:给一个容易忽略的诚实参照。在扩散和流这条线之外,单步生成的质量纪录长期由 GAN 保持:ImageNet 256×256 上 BigGAN 一步 6.95,GigaGAN 一步 3.45,StyleGAN-XL 一步 2.30。MF-XL 的 3.43 追平了 GigaGAN 的 3.45,但还没超过 StyleGAN-XL 的 2.30。另一条对照是自回归和掩码模型:MaskGIT 8 步 6.18,VAR 用 20 次评估是 1.92,多步的自回归线仍然更强。所以准确的表述是:在扩散和流匹配的单步方法内部,MF 是新的 SOTA;放到整个单步生成版图里,天花板还握在 GAN 手里。这些数字都在论文 Table 2 右半部分,读的时候别只盯着左半边。
小播:规模扩展实验呢?单步模型会不会越大越难训?
老播:相反。Figure 4 里四个规模 B/2、M/2、L/2、XL/2,131M 到 676M,全部从零训练,横轴 epoch 从 40 到 240,纵轴 1-NFE FID,四条曲线都单调下降:240 epoch 时分别是 6.17、5.01、3.84、3.43。这说明平均速度目标是一个干净的回归问题,规模法则照常成立,加算力就能继续推。一个细节:论文 Table 4 把 M/2 参数写成 497.8M,但 Figure 1 和 Table 2 都写 308M,应该是笔误,我按 308M 记。
小播:消融实验里哪些数字最有说服力?
老播:挑四个。第一个是 r≠t 比例,前面说过:0% 时 328.91,25% 时 61.06——证明跨区间信息是方法能工作的原因。第二个是 JVP 切线:正确切线 (v, 0, 1) 是 61.06,改成 (v, 0, 0) 是 268.06,改成 (v, 1, 0) 是 329.22,改成 (v, 1, 1) 是 137.96——JVP 必须严格按链式法则算对,错一点就崩,这直接验证了恒等式的正确性。第三个是损失幂 p:p=1.0 是 61.06,p=0 也就是普通 L2 是 79.75,p=0.5 接近 Pseudo-Huber 是 63.98——损失加权不是可有可无的细节。第四个是 CFG 尺度:ω 从 1.0 加到 3.0,FID 从 61.06 降到 15.53,再加大到 5.0 反而回到 20.75,说明引导有最优区间。时间采样器也有影响:logit-normal(−0.4, 1.0) 是 61.06,均匀采样是 65.90。这些消融都在 B/4 模型、80 epoch、400K 迭代的同一配置下做的,数字可以直接互比。再给你一个对照尺子:DiT-B/4 用 250 步采样是 68.4 的 FID,SiT-B/4 是 58.9,而 MF-B/4 一步就有 61.06——单步模型在同样规模的骨干上,已经追到甚至低于 DiT 的 250 步水平了。
小播:CIFAR-10 的结果呢?是不是也大幅领先?
老播:这里要诚实:CIFAR-10 无条件生成,1-NFE FID 2.92,55M 的 U-net 直接在像素空间训练,没加任何 EDM 预条件器;对照 iCT 2.83、sCT 2.97、IMM 3.20、ECT 3.60。结论是与同类方法相当,在这个小数据集上还差 iCT 一点点。它的意义在于证明方法不依赖 VAE 潜空间、不依赖 ImageNet 这个场景,但单步方法在小数据上的领先还没有建立起来。另外提一个数字支撑训练成本:JVP 的开销,论文在 B/4、TPU v4-8 上实测每步训练从 0.045 秒涨到 0.052 秒,约 16%,这个成本对大规模训练是可控的。
谱系里它站在哪:和 Consistency、Shortcut、Flow Map Matching 的区别
小播:把它放进谱系里,和最近的几个工作比,区别到底在哪?
老播:最直接的对照是 Consistency Models。CM 把一致性当作网络行为约束:要求同一条轨迹上不同时刻的输出指向同一个终点,锚定 r≡0,只条件化一个时间变量,而且底层真值场未知,训练靠离散化课程稳住。MeanFlow 的 r 和 t 都是自由变量,自洽性来自积分可加性——跨一整段 [r,t] 的位移等于先走 [r,s] 再走 [s,t] 两段之和,这个性质精确学好的网络自动满足,不需要额外损失。Shortcut 和 IMM 则在 Flow Matching 之上额外加两时间点的自一致性损失或矩匹配,属于启发式约束;MeanFlow 只有一个从定义推出的恒等式目标。还有一个更近的工作 Flow Map Matching,直接建模位移 S = ∫v dτ;MeanFlow 指出直接参数化位移需要显式边界条件 S|_{t=r}=0,而参数化平均速度时这个条件自动满足。所以你看,同一片竞争区里,CM 是一条锚定数据端的线,Shortcut 和 IMM 是两时间点约束的线,MeanFlow 和 Flow Map Matching 是直接建模区间量的线,而 MeanFlow 强调了平均速度这个参数化在边界条件上的优势。
小播:除了单步,这个框架做多步采样方便吗?
老播:方便,而且不用换公式。z_r = z_t − (t−r)·u(z_t, r, t) 对任意区间 (r, t) 都成立,论文明确说 few-step 采样只要沿用这个式子,连求解器都不用换。这和 CM 的 consistency sampling 思路类似,但 MeanFlow 里它就是位移定义的直接推论,没有额外的约束需要满足。
小播:所以谱系上的位置是:蒸馏靠老师,consistency 靠约束,MeanFlow 靠定义?
老播:对,一句话版。它处在从零训练单步模型这条线上,补上了 ground-truth 目标场这一环。这也是为什么作者反复强调自包含、无蒸馏——对这篇论文来说,这是它区别于前代工作的立身之本。再记住一遍:目标场由定义决定、与网络无关,所以最优解原则上不依赖具体网络结构,训练可以更稳定。这句话是第二遍,收尾我们还会再碰一次。
挑刺时间:论文承认的局限,和我们读出来的
小播:好,挑刺时间。先讲论文自己承认的局限。
老播:论文承认的至少有三条。第一条,它说自己的贡献是大幅缩小单步与多步的差距,没有说消除——1-NFE 的 3.43 高于多步 SiT-XL/2 的 2.06,带 REPA 的多步模型 1.42 领先更多。第二条,自包含指没有预训练扩散老师,但 ImageNet 实验仍然依赖预训练 VAE tokenizer 把图像压到 32×32×4 潜空间,端到端意义上并不完全自包含。第三条,实验范围有限:只有 ImageNet 256 类别条件和 CIFAR-10 无条件,没有 text-to-image、视频、更高分辨率。还可以补一条论文暗示过的:2-NFE 的最好成绩 MF-XL/2+ 是靠更长的训练(1000 epoch)和专门调过的配置换来的,不是免费午餐。
小播:那你们读出来的呢?有没有比论文说的更值得警惕的地方?
老播:有,这是我认为证据最弱的一点:训练目标是自引用的。u_tgt 里含网络自己的 JVP,也就是 ∂u_θ,CFG 版本里还含 u_θ(z,t,t),都靠 stop-gradient 固定。论文证明的是:如果损失能到零,网络就满足恒等式。但损失到不了零,实际优化是一个移动目标——目标本身随网络更新而变化,收敛到什么、稳不稳定,论文没有理论分析,全靠经验验证。这个空缺不影响这篇论文的实验结论,但想把它当真值场方法推广到新架构时,得自己掂量。方法对超参也偏敏感:r≠t 比例从 0% 到 25%,FID 从 328.91 到 61.06,换数据集时这套配置大概率要重新调。另外两个小问题:Table 4 的 M/2 参数 497.8M 与其它两处的 308M 冲突;SiT 的 FID 一处 2.15、一处 2.06。还有一点要留意:iCT 的几个数字是从 IMM 那篇论文转引的,脚注里标了来源,对照时别当成第一手测量。复现的时候,官方代码仓库把 B/4 80 epoch 无引导的 FID 复现到 60.75,论文里报 61.09,对得上,这是加分项。
收尾:记住三件事
小播:最后我总结本期该记住的三件事。第一,MeanFlow 学平均速度 u(z_t, r, t),定义是位移除以时间间隔,一步采样 x0 = x1 − u(x1, 0, 1) 就是定义的直接后果。第二,训练不靠数值积分,靠 MeanFlow Identity:u = v − (t−r)·(du/dt),从定义对 t 求导推出,JVP 一行实现,目标 u_tgt = v_t − (t−r)·(v_t·∂_z u_θ + ∂_t u_θ)。第三,它自包含:从零训练、无蒸馏、无 consistency 启发式、无课程,ImageNet 256 上 1-NFE FID 3.43,比上一代单步 SOTA 的 10.60 提升约 68%,两步采样 2.20 追平 DiT 的 250 步。
老播:补一句对后续的意义。这篇把单步生成从靠约束和蒸馏硬凑,推到了有一个干净目标场的位置,等于给后续工作留了一个公共坐标系:谁能把自引用目标的理论缺口补上,或者把平均速度推广到视频、文本、更高分辨率,谁就站在这条线的下一个台阶上。对听众来说,最值得带走的判断是:一步生成在 ImageNet 上已经拿到 3.43 的 FID,这个数字在两三年前需要几百次网络评估才能达到。采样只走一步、目标场由定义决定,这两句话就是这篇论文留给你的记忆锚点。