大数跨境
0
0

Diffusion Model与SDE、ODE之间的联系

Diffusion Model与SDE、ODE之间的联系 极市平台
2024-05-30
1
↑ 点击蓝字 关注极市平台
作者丨Victor@知乎(已授权)
来源丨https://zhuanlan.zhihu.com/p/698737562
编辑丨极市平台

极市导读

 

SDE是什么?ODE又是什么?Diffusion模型和SDE、ODE之间又是如何联系到一起的? 一文详解!>>加入极市CV技术交流群,走在计算机视觉的最前沿

笔者最近在看Sora相关的代码仓库,发现很多代码仓都用到了DPM-Solver进行Diffusion Model的采样。于是又去看了下DPM-Solver这篇论文,不看不要紧,一看给自己开了一个新坑,又去狂补习了SDE、ODE、Neural ODE等相关知识,感觉学到了不少,遂整理出来给大家分享一下。

从DPM—Solver说起

首先问大家一个面试中可能遇到的问题:Diffusion Model能否通过一步采样得到图片? 这里我就不直接给出答案,大家可以在看完本篇文章后,在评论区留言讨论下。相信不少一开始做DDPM模型的朋友都知道,DDPM模型的一大缺点就是采样速度慢,推理往往需要1000多步才能得到较好的图片。而后来的DDIM, DPM-Solver等一系列工作就是为了改进DDPM采样速度慢的缺点。

这里简单了解一下DDIM和DPM-Solver的核心思想。DDPM模型中,我们往往要求扩散过程前向是符合马尔可夫链的,而反向过程也得同样符合马尔可夫链。因此在反向的采样过程中,我们无法省略其中的任何一步去噪过程 。而DDIM模型将前向扩散过程拓展到了non-markovian,同样地,它认为反向过程中只有一部分是符合markovian。因此,它能够实现跳步采样,从而大大缩短了模型采样时间。

而DPM-Solver,则是从另一个角度进行优化。它首先引用了几个结论,即:DDPM是Diffusion SDE(随机微分方程,Stochastic Differential Equation)的一阶离散化模型,而DDIM是Diffusion ODE(常微分方程,Ordinary Differential Equation)的一阶离散。DPM-Solver通过这个Diffusion ODE的形式,推导出了二阶、三阶的求解器(分别称为DPM-Solver-2和DPM-Solver-3算法),从而加速了采样过程。具体的原理推导今天就不细说了,等有空再讲一讲。

看到这里,我想大家肯定有不少的疑问:SDE是什么?ODE又是什么?Diffusion模型和SDE、ODE之间又是如何联系到一起的?别着急,今天这篇文章就是来回答上面的所有疑问。

ODE和SDE

首先回顾一下常微分方程ODE的相关知识。ODE通常是解决下面一类问题:存在一个未知的函数 , 如果方程中不仅含有自变量X, 还包含未知函数的导数 , 那么就被称为微分方程。如果未知函数 只包含一个未知变量, 那么就是常微分方程 。如果 是个多元函数,那么方程为偏微分方程PDE。

ODE可以用公式形式化表示如下:

其中,导数的最高阶就是ODE的阶。上面就是通常我们国内数学教材上的定义。

但实际上, ODE有一些更直观的物理意义, 它通常是来源于一些牛顿力学问题。ODE中的自变量其实就是物理上的时间, 未知函数通常表示为时间的函数 , 因此大家会经常在国外文献看到ODE的另外一种数学形式:

下面简单举一个ODE的例子:

可能很多人能够猜出这个ODE的解 , 但是 也同样是这个方程的解。准确来说, 我们对上式做一个积分, 就可以得到一类解:

那么如何得到一个唯一解呢? 显然, 为了使常数 固定, 仅有微分方程还不够, 我们还需要一个额外的条件, 通常称为初始条件。 这里, 我们假设初始条件为 , 那么上述ODE的解就只有 。刚才说过, ODE其实跟牛顿力学关系紧密, 这里给一个例子: 牛顿第二定律 , 这里表示的是位移,表示的是一个位移的二阶导, 其实就是加速度, 所以牛顿第二定律就是一个二阶的ODE方程。

了解完ODE,再来看随机微分方程SDE。和ODE类似,SDE也不是数学家们凭空想出来的一些方程,它和现实世界中的随机过程有着紧密联系。什么叫随机过程呢?随机过程就是指值随着时间以不确定的方式变化,并且我们只能知道在某个时间点,这个值的分布。(相反地,确定性过程就是只要给定了时间t,我们就能确定这个时间点的值x(t))。 现实世界中,存在最广泛的一类随机过程就是物理课本上的布朗运动(Brownian motion),它还有另外一个常见的名字Wiener Process(维纳过程)。下面我们简单了解下Wiener Process

Wiener Process是一种Markov随机过程,因此它未来时刻的状态只取决于当前状态,而与历史状态无关。它有一些比较特别的性质:

  1. 时间内发生的变化, 可以用 表示, 其中 。根据这个式子,我们知道 也是一个正态分布: 。方差会随着时间 越来越大, 越来越难预测。
  2. 在某一个时间点

其中, 。这个性质就很有意思, 我们可以简单改写一下上式:

从上面可以看出, Wiener Process的均值恒定不变, 就是 (通常, 我们就取 )。而在某个时刻的值, 则是多个正态分布随机变量的和

从上面均值恒定不变的Wiener Process, 数学家们又推导出了Generalized Wiener Process

这里的代表drift term, 表示随机过程中平均数的变化, 而则是 variance rate, 代表方差的变化,则是普通的Wiener Process里的随机变量。这里有一个结论:普通的Wiener Process实际上是drift term , variance rate 的特殊情况。

那么是否还存在更一般的随机过程呢? 存在, 它就是 Itô process (伊藤过程):

这里, 我们看到 Itô process实际上就是将drift term和variance rate从常量变成了x,t的函数。

这里的 我们称为drift和velocity。需要注意的是, 对于伊藤过程, 我们没法直接推导出 除此之外,伊藤过程还有个特殊的名字:diffusion process

其实到这里, 我们已经介绍完了SDE。Itô process和Generalized Wiener Process都是SDE, 更一般的, SDE可以写作下面的形式:

其中的含义是: 是一个随机变量, 并且它满足初始条件 。看到这里, 其实就明白了, 伊藤过程就是general SDE的表达式。

ODE Solver

即然讲到了ODE,就无法避免ODE Solver,它与我们后续聊到的多种多样的采样器有非常大的关联。对于一些简单的ODE,我们可以用积分的方式求出它的显式表达式,而对于复杂的ODE来说,我们只能通过数值计算的方式求解。ODE Solver就是求解ODE方程的一些数值求解方法。下面我们以Euler method简单举个例子:

假设ODE是如下的形式:

已知能否计算出

Euler Method

欧拉法假设h非常小, 那么我们可以用微分的思想, 用直线代替原本函数的曲线: , 其中 就是点的斜率。

根据 ODE中的 可以直接得到, 因此可以通过下面方式计算 :

有了上面这个递推公式,我们就可以一步一步计算出y值,如下图所示:

trajectory

Diffusion模型和SDE、ODE之间的联系

连续还是离散

背景知识终于讲解完了,现在我们回到扩散模型这个主题。它与SDE、ODE之间的关系到底是怎么联系起来的呢?要回答这个问题,我们首先得了解:continous-time/discrete-time diffusion model这二者之间的区别。扩散模型的连续和离散其实对应着随机过程里的概念。一般来说,discrete time指的是随机过程中的时间只能取离散整数值,而continous-time则指的是时间参数可以取连续值。discrete time随机过程中的参数在一个离散的时间点只能改变一次;而continuous-time随机过程的参数则可以随时发生变化。

DDPM和SDE

回想一下,我们在DDPM里的加噪过程。每一个time step,我们都会按照如下的离散马尔可夫链进行加噪:

为了将上述过程连续化,我们需要引入连续时间随机过程。而连续时间其实就是让每个离散的时间间隔

无限趋近于0,其实也等价于求出 时,上述马尔可夫链的极限

在求极限之前, 我们需要先引入一组辅助的noise scale, 并将上面的式子改写如下:

时, 上面的就成了一个关于时间 的连续函数 , 并且 。随后, 我们可以假设 , 在每个 时刻, 连续函数 都等于之前的离散值, 即:

以及 的情况下, 我们就可以用连续函数改写之前的式子:

上面的近似只有在 时成立。我们将其再移项后就可以得到下式:

其中,表示的就是Wiener Process。这里面的第二个式子,就是我们之前介绍过的SDE方程。

至此,我们证明了DDPM连续化之后,就可以得到一个SDE方程,并且回想一下上一节SDE里面的内容,我们发现这个SDE它是一种Variance Preserving的SDE。Variance Preserving的含义是当 时,它的方差依然有界。这种SDE在宋飏老师的论文里简称为VP SDE。

既然前向过程连续化之后就是一个VP SDE,那么反向过程又是什么呢?答案就是,反向过程也是一个SDE方程,称为reverse SDE

分数模型

并且,这个反向过程中的未知量就只有分数函数 。至此,DDPM和分数模型也产生了联系,实际上二者之间是相互等价的,这里就不再证明了。而DDPM和分数模型本质上都是在学习这个reverse SDE的解。

DDPM

DDIM和ODE

DDIM和ODE之间的推导过程较为复杂。这里,我们就先不给出详细的证明,有兴趣的朋友可以去看《Progressive Distillation for Fast Sampling of Diffusion Models》这篇论文的证明。这里直接给出它的结论:DDIM是一个probability flow ODE的一阶离散解。这里比较有趣的点在于,之前的DDPM是一个SDE的离散,怎么将diffusion model和ODE联系起来的呢?

答案就在宋飏老师的博客以及他在ICLR 2021发表的那篇论文中。他在论文中证明了,对于所有的扩散过程,都存在一个确定性过程,并且这个确定性过程和SDE有着相同的边缘概率密度 (原文当中用到的符号是 , 这里为了和diffusion model论文中的常见符号一致, 我们用 表示扩散过程中的分布,表示降噪分布)。除此之外, 这个确定性过程还符合一个 ODE (这种SDE对应的ODE, 被称为 probability flow ODE):

这个结论有什么作用呢? 非常有用! 首先, 我们其实更在乎的是边缘概率分布 , 因为我们需要保证它在足够长的时刻 可以变成一个纯噪声, 同时我们还需要 符合原始数据分布。上述结论可以保证这一点。同时,扩散模型本质上是在学习一个扩散过程的逆过程,既然前向SDE存在一个对应的ODE,那么反向过程reverse SDE其实也有一个对应的ODE,这个反向过程对应的ODE形式也是上面的式子

既然引入了ODE,那么我们的模型就可以去学习如何解这个ODE,同时也可以引入各种传统的ODE solver例如:Euler method, Runge–Kutta method等一些方法。这就是为什么我们可以看到像Stable Diffusion之类的模型会有那么多sampler的原因,本质上都是一些ODE solver和SDE solver。但是后面的研究者发现,传统的ODE solver在采样效果上比不过DDIM,这就非常奇怪了。DPM-Solver的作者在他们的论文中给出了原因:DDIM充分利用了diffusion ODE的半线性结构(semi-linear structure),并且它是一个semi-linear ODE的一阶Solver,而传统的ODE solver并没有利用好这个半线性结构,因此DDIM的准确度会更高一些,因此采样效果也更好。

这里还需要注意的点是,diffusion ODE这类模型相比diffusion SDE存在着诸多好处,比如:1. 没有随机性,ODE是一个确定性过程,可以以更快的速度收敛,因此可以达到更快的采样速度;2. 可以计算数据似然(likelihood)等。

总结

在本篇文章中,我们补充介绍了ODE的数学知识,然后从Wiener Process出发,给出了Generalized Wiener Process以及 Itô process,从这些随机过程中我们进而得到了SDE方程。随后我们以Euler method举例,给出了ODE Solver的一个具体案例,解释了ODE Solver的作用。最后,我们通过理论推导证明了DDPM是diffusion SDE的一阶离散,DDIM是diffusion ODE的一阶离散这个结论,并且揭露了diffusion model与SDE、ODE之间是如何相互联系的。下面就是一个整篇文章的知识点脉络图,如果觉得对你有帮助,不妨点个赞:

最后附上我的个人公众号:SotaAI技术随笔。感兴趣的朋友可以关注下。

参考资料

  1. https://zeqiang-lai.github.io/blog/posts/ai/dpm_solver/DPM-Solver_short_talk.pdf
  2. https://physicscourses.colorado.edu/phys2210/phys2210_fa21/lecture/lec06-odes/
  3. https://ethz.ch/content/dam/ethz/special-interest/mavt/dynamic-systems-n-control/idsc-dam/Lectures/Stochastic-Systems/SDE.pdf
  4. https://services.math.duke.edu/~holee/math361-2020/lectures/Lec7-ODEs.pdf
  5. https://homepage.ntu.edu.tw/~jryanwang/courses/Financial%20Computation%20or%20Financial%20Engineering%20(graduate%20level)/FE_Ch01%20Wiener%20Process.pdf
  6. https://arxiv.org/abs/2011.13456
  7. https://arxiv.org/abs/2202.00512
  8. https://arxiv.org/abs/2010.02502
  9. https://arxiv.org/abs/2206.00927
  10. https://yang-song.net/blog/2021/score/
  11. https://economics.smu.edu.sg/sites/economics.smu.edu.sg/files/2023-09/Math%20Camp%20Part%202A_2018.pdf
  12. https://zhuanlan.zhihu.com/p/554790455
  13. https://zhuanlan.zhihu.com/p/148808235
  14. https://zhuanlan.zhihu.com/p/655443690
  15. https://www.zhihu.com/question/536012286/answer/2533146567

公众号后台回复“数据集”获取100+深度学习各方向资源整理

极市干货

技术专栏:多模态大模型超详细解读专栏搞懂Tranformer系列ICCV2023论文解读极市直播
极视角动态欢迎高校师生申报极视角2023年教育部产学合作协同育人项目新视野+智慧脑,「无人机+AI」成为道路智能巡检好帮手!
技术综述:四万字详解Neural ODE:用神经网络去刻画非离散的状态变化transformer的细节到底是怎么样的?Transformer 连环18问!

点击阅读原文进入CV社区

收获更多技术干货

【声明】内容源于网络
0
0
极市平台
为计算机视觉开发者提供全流程算法开发训练平台,以及大咖技术分享、社区交流、竞赛实践等丰富的内容与服务。
内容 8155
粉丝 0
极市平台 为计算机视觉开发者提供全流程算法开发训练平台,以及大咖技术分享、社区交流、竞赛实践等丰富的内容与服务。
总阅读7.6k
粉丝0
内容8.2k