对于想要大概了解 Flow Matching 的童鞋,推荐 MIT 的这门小课 https://diffusion.csail.mit.edu/,对于核心概念讲解清晰且符合物理直觉。flow matching 的原理我感觉比 diffusion 更易理解(而且还SOTA :D)。讲一下我从小白视角的理解:
文生图(无 condition)的过程,我们可以理解成是从一个纯随机的正态分布采样一个点,逐渐把它变成很“真”的一张图片。diffusion 是逐渐把采样到的这个“白噪音”点不断“去噪”,变成一张图片。而 flow matching,是让一个“磁场”去推着这个点不断移动,最终“移动”变成一张图片(想象图片 vector 各个维度的数值有加有减不断变化)。
稍微展开来说,flow matching 本质上是在学习一个 vector field/向量场(一个vector field定义一个ODE),可以把它想象成一个磁场。一开始我们只有一个符合正态分布的“沙堆”,我们的目标是逐渐”推移“这个沙堆,让它最终的分布符合我们要的分布(真实世界的图片)。对于每粒沙子在每个时间点、每个位置,磁场力的方向(往哪个方向推)就是我们要 neural network 学习的东西。一粒沙子从初始位置到目标位置”被磁场推着“经过的路,就是一个 flow(ODE 的一个解),不同沙子走出了多条 flow 形成多个训练数据不断调教 NN 去学习磁场里的方向,大量平均下来就是我们想要的磁场/模型。
细心的童鞋可能会问,那 NN 咋知道往哪推啊?给定了一张图片,对于”想要成为它的沙子“,在一个时间点和一个位置,我们磁场力的方向是提前设计好的(conditional vector field),这样 NN 对于一个样本往哪推是知道的。我们不知道的是大量这样的数据,最终让 NN 平均下来会学成个啥样,即 marginal vector field(就是我们想要的)。
最后附几张作业截图证明我不是瞎吹牛(btw 作业很简单)