Flow Matching&生成算法

今天学习flow matching算法。Flow matching是近年来生成模型领域中快速崛起的一类新方法。许多先进模型如stable diffusion3 imagen3都采用了它的核心思想。他通过直接学习概率流的方式,将简单分布平滑地变为复杂的数据分布,比传统扩散模型更高效、训练更稳,采样更快。Flow match解决了过去噪声预测不稳定、采样步骤多等问题,为下一代生成模型奠定了重要的基础。

先讲一些基本概念,介绍什么是向量场,什么是流,理解这些基本概念是掌握flow matching的基础。

好的,我们现在就从flow matching的基本思想原理开始,让大家先有一个直观的认识。在生成问题里,我们要生成的对象,比如一张图片都是将它表示为一个高维度的向量。比如对一个100乘100的彩色图片,它就是由100乘100乘3,共3万维的一个向量来唯一对应一张图片的。这里的三代表RGB3个通道。

当然如果我们从这三万维的空间里随机采样一个向量,这个向量对应的图片几乎总是噪声数据,而不是一个真实的图片。那是因为真实图片在这个空间里的分布实在是太不均匀了。而我们生成的任务的本质就是找到这个非常不均衡、非常复杂的真实图片的分布,我们把这个分布叫做p data。比如我们想生成100 * 100的彩色人脸图片,就是在这三万维的空间里找到人脸图片的那个分布p data。有了p data我们只要从里面采样就可以,每一次采样就生成了一个真实的人脸图片。

一、Flow Matching直观理解

Flow matching的做法是通过流的思想,把已知分布一步步转化为真实的图片分布。可以看作概率密度在流动。原来所有的概率密度都在一个我们已知的概率分布上,这里是标准正态分布。然后一步步流动到真实的人脸图片分布上。我们把初始的分布用p init表示,我们的初始分布都是用标准正态分布,目标分布也就是我们期望得到的分布用p data表示。需要注意的是我们这里的演示是二维空间里的,但实际上我们处理的生成空间都是几万甚至几十万维空间的,上边我们就建立了对flow matching的直观理解。

虽然我们还不知道概率密度该如何去流动,这里我们需要先补充一些关于流的基础知识。

二、轨迹(trajectory)

第一个概念是轨迹,轨迹记录了一个点在不同时刻的位置信息。XT就表示在时刻T,X的位置,在flow matching里一个轨迹的时间是从0到1之间的时间,零时轨迹在初始位置时间,1时轨迹在终点,0到1之间是连续的,每个时间点都有一个确定的位置。

三、向量场(Victor Field)

下一个概念是向量场,Victor field向量场给出多维空间里每一个位置在每一个时刻的速度向量。向量场用小写的u来表示,ut表示向量场在时间t的状态。这里的XT是轨迹X在时间T的位置,ut(xt)就给出xt这个位置,在时刻T的速度V。我们知道速度就是位置随时间的变化率,所以DXT比上DT就等于ut(xt),它是一个常微分方程ODE,所以向量场就定义了运动规则。

在一个多维空间里,如果给定了点的初始位置X0,给定了向量场U,则这个轨迹X就是确定的。X0是初始位置向量 乘 U给出X0这个位置,在时刻零的速度,X就以这个速度移动到下一个位置。当X到达下一个位置,又以新的位置和当前时间从向量场获取新的速度,然后以新的速度运行到下一个位置,以此重复,直到时间到达1。所以向量场很重要,它定义了运动规则,决定了点的轨迹。

四、流(Flow)

最后一个概念就是流了,用Φ表示,它是一系列轨迹的集合,每个轨迹都按照向量场U的指挥进行运动。在给定一个初始位置X0,给定一个时刻T,Φ可以给出时刻TX的位置XT。XT等于Φt(x0)。在讲向量场时我们说过DXT比上DT就等于ut(xt)。现在我们把里面的XT用Φt(x0)来代替,就得到了流和向量场之间的公式了。dΦt(x0)比上dt就等于ut(Φt(x0))。

在我们研究问题的领域,流和向量场是一一对应的。确定了流的公式,那我们就可以求出向量场的公式。同样如果我们确定了向量场的公式,那也可以求出流的公式。

下边我们就来看一个例子,这里我们给出向量场和流的公式。向量场的公式为UTXT等于AXT,其中A是一个常数,流的公式为Φt(x0)等于e的AT次方X0。现在我们来验证一下这个向量场和流的公式是否满足我们上面给出的公式要求。证明时我们首先验证初始条件,当T等于零时,Φ0(x0)等于e的A乘以0次方X0这1这里A乘以零为0,E的0次方为1,最终结果就是X0。所以当T等于零时,根据流公式计算出来的位置正好是X0下边。我们来验证当时间等于T时位置对时间的求导,这里代入流的公式,这是求导后的结果。后边这部分E的AT次方X0刚好就是流的公式,我们替换为流的公式,然后这个式子又满足向量场的公式等于ut(Φt(x0))。所以我们就验证了这是一组配对的向量场和流的公式。

Flow matching的想法为用神经网络来学习一个向量场ut sitar。这里的西塔表示神经网络里面可学习的参数,然后从已知分布p init采样一个X0,然后用神经网络学到的这个向量场由T西塔来指导X0运动到X1,然后这个流在初始点X0满足分布p init终点X一满足分布p data。如果我们已经学到了这个向量场ut sitar,假设变化的步数为N首先我们设置T等于0,因为时间长度为一时间间隔H就等于一除以N然后从p init采样一个X0,然后从一到N减一进行循环。X的下一个时间步的位置XT加H等于当前位置xt加上时间间隔H乘以速度,速度就是UT西塔XT来计算。这个向量场是神经网络学习得到的,给定当前时间T当前位置XT就可以返回速度。然后更新T等于T加H以此循环,最后返回X1,就是最终生成的图片。

相关推荐
databook2 小时前
别让AI代码,变成明天的技术债
人工智能·程序员·ai编程
人工智能AI技术2 小时前
计算机专业面试必看!90%学生都踩过的算法面雷区
人工智能·面试
千寻girling2 小时前
面试官 : “ 说一下 Python 中的常用的 字符串和数组 的 方法有哪些 ? ”
人工智能·后端·python
m0_706653233 小时前
深入理解Gumbel-Softmax技巧及其应用
人工智能
七夜zippoe3 小时前
OpenClaw 接入 WhatsApp:消息推送实战
大数据·人工智能·microsoft·whatsapp·openclaw
眠りたいです3 小时前
使用LangChain进行AI应用构建-RAG及相关核心组件认识(二)
人工智能·langchain·rag
WeeJot嵌入式3 小时前
NVIDIA GTC 2026实战:Rubin平台AI五层架构部署指南
人工智能·架构
威化饼的一隅3 小时前
【大模型LLM学习】从强化学习到GRPO【下】
大模型·llm·agent·强化学习·智能体·grpo
我材不敲代码3 小时前
OpenCV实战:全自动答题卡识别与评分系统
人工智能·opencv·计算机视觉