为什么「理论上的直线流」在真实训练后会弯曲
下面把问题拆成两层:(i) 理论上 v(x,t)=x-e 真的能完全由 x_t 决定吗? (ii) 就算真能决定,用一次 Euler 步是不是就足够?
1 . 信息丢失: x_t 只保留了一维混合,而 v 需要区分两个端点
- 训练时网络只看到 (xt,t)。
- 但是标签 v⋆=x−e 依赖 同时 知道 (x,e)。
- 对于同一个 (xt,t) 可以对应无数对 (x,e),因此 v⋆ 不是 (xt,t) 的单值函数。
- 最优网络只能学到条件期望
v~(xt,t)=E[x−e∣xt,t],
这在一般分布下是一个非线性、随 t 变化的缩放/弯曲场。
例如在高维高斯简化下
v~(xt,t)=t2+(1−t)22t−1xt,
系数随 t 变化而变形,已由闭式分析与实验证实 arxiv.org。
2 . 轨迹交叉 → 单值向量场必须“调和”冲突
- 直线插值 xt=(1−t)e+tx 会让许多不同样本在中间时刻 相遇于同一点;
那些样本的“真”速度指向不同方向,互相冲突。
- 连续可逆流要求 同一点只能有一个速度,网络只能取加权平均→轨迹自然被挤弯,避免交叉 iclr-blogposts.github.io。
3 . 归纳偏置与容量限制
- CNN/ViT 等网络倾向输出平滑场,无法表达大幅度分段线性;
- 训练时常用 w(t)∝(1−t) 等权重,中段误差被强调,首尾被弱化,进一步把速度场压到“更温和”的曲线。
4 . 采样时“一步 Euler” 与真实 ODE 的误差
即便我们奇迹般学到了正确的 v~,
一次 Euler 近似
x1≈x0+v(x0,0)Δt(Δt=1)
的局部截断误差是 O(Δt2)=O(1)。
在弯曲场里误差会把样本甩出数据流管;
因此需要 Heun / RK4 / DPM-Solver 等多步或自适应方法才能得到高保真图像。
小结与实用启示
现象 | 根本原因 | 应对办法 |
---|
学出的流非直线 | xt 对 (x,e) 非单射,网络学到的是条件期望 | 改用 Closed-Form CFM 或显式编码端点信息(如 ReFlow、FLUX) |
一步采样质量差 | ODE 离散误差 + 速度场缩放 | 用高阶/多步求解器或训练 one–step rectified flows |
t≈0/1 预测偏差 | 采样权重/正则化使端点低权重 | 加重端点 loss 或使用分段时间重采样 |
因此,“理论直线 ≠ 训练结果” 并不是模型训练失败,而是由观测信息不足、矛盾轨迹需要折中、网络容量与数值积分误差共同导致的必然现象。