anschen
用户9113
添加快捷方式
分享
Flow and Diffusion Models
输入“/”快速插入内容
Flow and Diffusion Models
🖌 随着生成的模型发展,Diffusion的方法论,也变得越来越系统了,当然介绍相关知识的文档,也层出不穷。这个文档,我由数学到应用,解释当下Flow Model,Diffusion Model的原理和具体实现。这个Blog主要是想将原来那套Stable Diffusion的描述语言和现在Flow Matching这套描述语言统一起来。
备注:Blog中的一些可视化脚本都在
https://github.com/anschen1994/flow-diffusion#
这个仓库中
何为生成
首先在具体谈论数学模型之前,我们可以思考一下,生成在数学上是在做怎么样的一件事情。归根结底,生成在某种意义上就等价于数学上的“采样”。举个简单例子,我需要生成一张房屋的图片。那其实在数学上我们要做得事情:
•
找出
,condition on 房屋的整个图片的概率分布是什么样子的。
•
从
,从上面的这个条件概率中去采样一个样本出来即可。
但是,我们往往没有办法知道
这个分布是什么样子的,因此,整个事情就没有办法很好的实施。那现在主流的生成所采取的方案,尝试建立某种简单初始分布(一般为高斯分布)和目标分布之间的转移方式,就如下面图所示。
数学模型
Flow Model 和 Diffusion Model也都是建立上面这种大致的想法上,诞生的两种算法。
首先无论是生成图片,视频,3D模型等等,我们都可以将需要建模的对象,简化成一个高维的随机变量
Flow Model
Flow Model使用了简单的ODE去建立初始分布和目标分布之间的关系。
同时满足
所以对于简单的Flow Model来说,我们就是要找到
去建立两个分布之间的联系。
当然这个模型被称之为Flow Model的原因。我们会将下面这种满足某个初始点的解称之为Flow,即:
直观上来说
就构成了初始点在
的一些流,同时这些流在某些时空点
处,有的密集,有的稀疏。
Example
下面用一个简单的二维向原点收缩的例子,来可视化这个问题。
这个方程的解可以写成:
对应的flow为
从下面这个图,我们展现上面Flow Model对应的速度,其速度向量,都是沿着自身的反方向指向原点。
50%
50%
我们也可以用简单的ODE数值求解方法,并且可视化上面的各种Flow
,如下图:
这个图中,每个绿点对应初始的
, 每个红色轨迹,对应着一条flow
.
Diffusion Model