23年以来,基于rectified flow[1]和flow-matching[2]的扩散模型在生成领域大展异彩,许多基于flow-matching的模型和文章如雨后春笋般涌现,仿佛“直线”已经成为一种政治正确。
该blog的动机,是源于网络平台,诸如知乎,小红书,乃至许多论文中都出现了很多对于rectified flow (flow-matching) 的错误理解和解读。本文希望能够提供一个相对合理的视角来重新思考关于rectified flow相关的话题, 抛砖引玉。
该blog基于最近的论文:
Rectified Diffusion: Straightness is Not Your Need
单位: MMLab-CUHK, Peking University, Princeton University
https://arxiv.org/pdf/2410.07303
https://github.com/G-U-N/Rectified-Diffusion/tree/master
https://huggingface.co/wangfuyun/Rectified-Diffusion
直观对比,FMs和一般的DMs有本质区别吗?
以这种视角我们看到,flow-matching,它只是general 扩散模型表达式的一种特例,他并不比其他的形式包括VP, VE, Sub-VP更加特殊。要说为什么有很多文章诸如sd3,flow-matching等文章中的效果要比其他form好,我个人认为更多是超参数导致的问题,例如如何分配时间的采样,时间t的weigthing,还有prediction type的差异等等。论文中通常为了表现自己方法的优越性,都会对自己的方法进行比较精细的超参数搜索。而对于一种diffusion form的最优超参数设置,未必适用于其他的diffusion forms。
FMs的轨迹真的直吗?
Rectified Flow是怎么让轨迹变直的?
通读rectified flow[1] [8] [9]的相关文章,我们可以看到rectified flow相较于一般的DDPM,主要有三点核心的观点:
Rectified flow的采样轨迹,只有在执行了多次(一次)的rectification的操作之后,才会慢慢的变为直线,这也正是rectified flow中实现单步生成的重要操作。
Rectified flow包括后续的诸多工作,都强调Rectification这个操作,仅适用于flow-matching形式的diffusion模型。也就是说他们认为前两点~(1和2)是采用Rectification并实现采样加速的的基础,并强调修正过程(Rectification)将ODE路径“拉直”。如果是其他的diffusion forms,如VP, VE, sub-VP[6]等,则无法采用rectification的操作来实现加速。
这就导致,在InstaFlow[10]中 (Rectified Flow的后续工作,其作者尝试将rectified flow拓展到stable diffusion上的文生图任务),rectified flow的作者使用stable diffusion的原始权重初始化,但是将SD转变为flow-matching的form,并采用v-prediction来进行重新训练。
所以,rectified flow中的这种观点真的正确吗?在加速sd的过程中,真的有必要首先将其转化为flow-matching的形式和v-prediction吗? Flow-matching的diffusion form真的显著比别的形式好吗?
Recfified Diffusion: 本质是使用配对的噪声样本对重训练。
Flow-matching Training是标准diffusion training的子集。此外,算法2 可视化了更一般的扩散模型的训练过程,与算法1的差异以蓝色和橙色标出。值得注意的是,流匹配是我们讨论的扩散形式的一个特殊情况。从算法中可以看出,它们之间的唯一区别在于扩散形式和预测类型。因此,流匹配训练只是特定扩散形式和预测类型下的标准扩散训练的特殊情况。
通过比较算法2 和算法3 与算法1,可以自然而然的推导出算法4。本质上,通过引入预训练模型来收集噪声-样本对,并在标准的扩散训练中用这些预先收集的配对替换随机采样的噪声和真实样本,我们就得到了Rectified Diffusion的训练算法。
训练目标是轨迹一阶化
一阶ODE与预定义扩散形式具有相同的形式
一阶化轨迹可能是弯曲的
实验验证
我们进行了广泛的实验验证和方法对比,我们的方法取得了一致超越rectified flow相关方法的性能,并且与最先进的蒸馏加速算法[11] [12]也取得了comparable的结果。