MIT 6.S184 Lec01 Flow and Diffusion Models

MIT 6.S184 Lec01 Flow and Diffusion Models

本节中,我们将描述如何通过模拟一个适当构造的微分方程来获得所需的转换。例如,流匹配和扩散模型分别涉及模拟常微分方程(ODE)和随机微分方程(SDE)。因此,本节的目标是定义和构建这些生成模型。具体来说,我们首先定义 ODE 和 SDE,并讨论它们的模拟。其次,我们描述如何使用深度神经网络对 ODE/SDE 进行参数化。从中推导出流模型和扩散模型以及从这些模型中采样的基本算法的定义。在后面的章节中,我们将探讨如何训练这些模型。

2.1 流模型

我们首先定义常微分方程 (Ordinary Differential Equations ODEs)。常微分方程的解由**轨迹 (Trajectory)**定义,即以下形式的函数:
X : [ 0 , 1 ] → R d ,    t ↦ X t X:[0,1]\rightarrow R^{d},\,\,t\mapsto X_{t} X:[0,1]Rd,tXt

  • 该函数是一个关于时间 t t t的函数,它将时间 t ∈ [ 0 , 1 ] t\in[0,1] t[0,1]映射到空间 R R R中的某个位置 X t X_{t} Xt,指定了某时间点内点的坐标。

每个常微分方程都由一个矢量场 (Vector Field) u u u 定义,即以下形式的函数:
u : R d × [ 0 , 1 ] → R d ,    ( x , t ) ↦ u t ( x ) u:R^{d}\times [0,1]\rightarrow R^{d},\;(x,t)\mapsto u_{t}(x) u:Rd×[0,1]Rd,(x,t)ut(x)

  • 即对于每个事件 t t t和位置 x x x,我们都得到一个向量 u t ( x ) ∈ R d u_{t}(x)\in R^{d} ut(x)Rd,它指定了空间中的速度。

常微分方程对轨迹施加了一个条件:我们希望轨迹 X X X沿着向量场 u t u_{t} ut的“线条“进行,并在 t = 0 t=0 t=0时刻从点 x 0 x_{0} x0开始。我们可以将此类轨迹形式化为方程的解:
d d t X t = u t ( X t ) X 0 = x 0 \begin{aligned} \frac{d}{dt}X_t &= u_t(X_t) \\ X_0 &= x_0 \end{aligned} dtdXtX0=ut(Xt)=x0

  • 上面一个式子要求 X t X_t Xt的导数由 u t u_t ut给出的方向指定。
  • 下面一个式子要求我们在 t = 0 t=0 t=0的时候从点 x 0 x_0 x0开始。

现在我们可能会问:如果我们在 t = 0 t=0 t=0时刻从 X 0 = x 0 X_0=x_0 X0=x0出发,那么在时间 t t t的时候我们在哪里(即 X t X_t Xt)?这个问题的由一个称为**流 (Flow)**的函数来回答,它是ODE在不同初始条件下的解的集合:
ψ : R d × [ 0 , 1 ] ↦ R d s.t. ( x 0 , t ) ↦ ψ t ( x 0 ) d d t ψ t ( x 0 ) = u t ( ψ t ( x 0 ) ) ψ 0 ( x 0 ) = x 0 \psi:R^{d}\times [0,1]\mapsto R^{d}\quad\text{s.t.}\quad(x_{0},t)\mapsto\psi_{t}(x_{0}) \\ \begin{aligned} \frac{d}{dt}\psi_{t}(x_0) &= u_t(\psi_t(x_0)) \\ \psi_0(x_0) &= x_0 \end{aligned} ψ:Rd×[0,1]Rds.t.(x0,t)ψt(x0)dtdψt(x0)ψ0(x0)=ut(ψt(x0))=x0
对于初始条件 X 0 = x 0 X_0=x_0 X0=x0,我们通过 X t = ψ t ( X 0 ) X_t = \psi_t(X_0) Xt=ψt(X0)来恢复常微分方程的轨迹。因此,向量场、常微分方程和流直观上是同一对象的三种描述方法:**向量场定义了常微分方程,其解是轨迹,流是针对各种初始条件的轨迹的集合。**与其他的每个方程一样,我们应该问自己关于常微分方程(ODE)的问题:是否存在解,如果是的话,它是否唯一?

基本回答是"Yes!",我们只需要对 u t u_t ut施加弱假设:

定理:流的存在性和唯一性

如果 u : R d × [ 0 , 1 ] → R d u:R^{d}\times [0,1]\rightarrow R^{d} u:Rd×[0,1]Rd是连续可微且导数有界,则该ODE有唯一解,该解由流 ψ t \psi_t ψt给出。在此情况下, ψ t \psi_t ψt对与任意 t t t都是微分同胚,即 ψ t \psi_t ψt是连续可微的且 ψ t − 1 \psi_t^{-1} ψt1同样连续可微。

注意,流的存在性和唯一性在机器学习中几乎是毋庸置疑的,因为我们使用神经网络来参数化 u t ( x ) u_t(x) ut(x),并且它们总是有有界的导数。因此在我们感兴趣的情况下,流永远存在,并且是常微分方程的唯一解。

举例:线性ODE

向量场 u t ( x ) = − θ x    ( θ > 0 ) u_t(x)=-\theta x\;(\theta\gt0) ut(x)=θx(θ>0),则流的解析式为 ψ t ( x 0 ) = exp ⁡ ( − θ t ) x 0 \psi_t(x_0)=\exp{(-\theta t)}x_0 ψt(x0)=exp(θt)x0

证明:

  1. 初始条件: ψ t = 0 ( x 0 ) = exp ⁡ ( 0 ) x 0 = x 0 \psi_{t=0}(x_0)=\exp{(0)}x_0=x_0 ψt=0(x0)=exp(0)x0=x0
  2. ODE: d d t ψ t ( x 0 ) = − θ exp ⁡ ( − θ t ) x 0 = − θ ψ t ( x 0 ) = u t ( ψ t ( x 0 ) ) \frac{d}{dt}\psi_t(x_0)=-\theta\exp{(-\theta t)x_0}=-\theta\psi_t(x_0)=u_t(\psi_t(x_0)) dtdψt(x0)=θexp(θt)x0=θψt(x0)=ut(ψt(x0))

模拟常微分方程:一般来说,如果 u t u_t ut不是像线性函数那么简单,就无法显式地计算流 ψ t \psi_t ψt。在这种情况下,人们使用数值方法来模拟常微分方程。其中最简单、最直观的方法是欧拉法 (Euler Method)。在欧拉法中,我们初始化 X 0 = x 0 X_0=x_0 X0=x0,并且通过以下方式更新:
X t + h = X t + h u t ( X t )     ( t = 0 , h , 2 h , 3 h , … , 1 − h ) X_{t+h} = X_t+hu_t(X_t)\,\,\,(t=0,h,2h,3h,\dots,1-h) Xt+h=Xt+hut(Xt)(t=0,h,2h,3h,,1h)

  • 其中 h = 1 n > 0 ,    n ∈ N h=\frac{1}{n}\gt 0,\; n\in N h=n1>0,nN是一个步长超参数。

流模型:我们现在可以通过一个常微分方程构建一个生成模型。记住,我们的目标是把一个简单分布 p i n i t p_{init} pinit转换成一个复杂的分布 p d a t a p_{data} pdata。因此,模拟ODE是这种转换的自然选择,流模型由以下ODE描述:
X 0 ∼ p i n i t d d t X t = u t θ ( X t ) X_0\sim p_{init} \\ \frac{d}{dt}X_t = u_{t}^{\theta}(X_t) X0pinitdtdXt=utθ(Xt)

  • 其中向量场 u t θ : R d × [ 0 , 1 ] → R d u_{t}^{\theta}:R^{d}\times [0,1]\rightarrow R^{d} utθ:Rd×[0,1]Rd是一个带有参数 θ \theta θ的神经网络。

我们将 u t θ u_{t}^{\theta} utθ视为一个通用的神经网络。我们的目标是使轨迹的终点 X 1 X_1 X1具有分布 p d a t a p_{data} pdata,即:
X 1 ∼ p d a t a ⟺ ψ 1 θ ( X 0 ) ∼ p d a t a X_1\sim p_{data} \Longleftrightarrow \psi_{1}^{\theta}(X_0)\sim p_{data} X1pdataψ1θ(X0)pdata

  • 其中 ψ 1 θ \psi_{1}^{\theta} ψ1θ描述了由 u t θ u_{t}^{\theta} utθ诱导的流。

虽然被称为流模型,但是神经网络参数化的是向量场,而不是流。为了计算流,我们需要用欧拉法模拟ODE,具体算法如下:

2.2 Diffusion Models

随机过程

随机微分方程 (SDEs)扩展了常微分方程 (ODEs)的确定性轨迹,具有随机轨迹,随机轨迹通常被称为随机过程 (Stochastic)

其由下式给出:
∀ t ∈ [ 0 , 1 ] ,    X t  is a random variable X : [ 0 , 1 ] → R d ,    t ↦ X t  is a random trajectory for every draw of X \forall t\in [0,1],\;X_t\text{ is a random variable} \\ X:[0,1]\rightarrow R^{d},\,\,t\mapsto X_{t}\text{ is a random trajectory for every draw of X} t[0,1],Xt is a random variableX:[0,1]Rd,tXt is a random trajectory for every draw of X
模拟相同的随机过程两次,我们可能会得到不同的结果,因为动力学是随机的。

布朗运动

通过布朗运动构建SDEs——这是一个源于物理扩散过程研究的基本随机过程。可以把布朗运动想象成一个连续的随机游走。

  • 定义:布朗运动 W = ( W t ) 0 ≤ t ≤ 1 W=(W_t)_{0\le t\le1} W=(Wt)0t1是一个随机过程,满足 W 0 = 0 W_0=0 W0=0,轨迹 t ↦ W t t\mapsto W_t tWt连续,并且满足以下两个条件:

    1. Normal Increments: 增量是一个方差随着时间线性增长的高斯分布
      ∀ s ∈ [ 0 , t ) ,    W t − W s ∼ N ( 0 , ( t − s ) I d ) \forall s\in [0,t),\;W_t-W_s\sim\mathcal{N}(0,(t-s)I_d) s[0,t),WtWsN(0,(ts)Id)

      • 其中 I d I_d Id是单位矩阵。
    2. Independent Increments:
      0 ≤ t 0 < t 1 < ⋯ < t n = 1 W t 1 − W t 0 , … , W t n − W t n − 1  are independent random variables 0\le t_0 \lt t_1 \lt \dots \lt t_n = 1 \\ W_{t_1}-W_{t_0},\dots,W_{t_n}-W_{t_{n-1}}\text{ are independent random variables} 0t0<t1<<tn=1Wt1Wt0,,WtnWtn1 are independent random variables

我们可以用以下方式大致模拟一个布朗运动:
h > 0 , W 0 = 0 , ϵ t ∼ N ( 0 , I d )       ( t = 0 , h , 2 h , … , 1 − h ) W t + h = W t + h ϵ t h>0,W_0=0,\epsilon_t\sim\mathcal{N}(0,I_d)\,\,\,\,\,(t=0,h,2h,\dots,1-h) \\ W_{t+h}=W_t+\sqrt{h}\epsilon_{t} h>0,W0=0,ϵtN(0,Id)(t=0,h,2h,,1h)Wt+h=Wt+h ϵt

从常微分方程到随机微分方程

随机微分方程(SDE)的想法是通过添加由布朗运动驱动的随机动力学来扩展常微分方程的确定性动力学。因为一切都是随机的,我们可能不再能像以前那样求导。因此,我们需要找到一个不使用导数的ODEs的等效公式,我们可以如下重写ODEs的轨迹 ( X t ) 0 ≤ t ≤ 1 (X_t)_{0\le t\le1} (Xt)0t1
d d t X t = u t ( X t ) (ODEs) ⇔ 1 h ( X t + h − X t ) = u t ( X t ) + R t ( h ) ⇔ X t + h = X t + h u t ( X t ) + h R t ( h ) \begin{aligned} &\qquad\qquad\frac{d}{dt}X_t = u_t(X_t)\quad\text{(ODEs)} \\ &\Leftrightarrow \frac{1}{h}(X_{t+h}-X_t)=u_t(X_t)+R_t(h) \\ &\Leftrightarrow X_{t+h} = X_t+hu_t(X_t)+hR_t(h) \end{aligned} dtdXt=ut(Xt)(ODEs)h1(Xt+hXt)=ut(Xt)+Rt(h)Xt+h=Xt+hut(Xt)+hRt(h)

  • 其中 R t R_t Rt表示一个对于小量 h h h可以忽略的函数,即 lim ⁡ h → 0 R t ( h ) = 0 \lim_{h\to 0}R_t(h)=0 limh0Rt(h)=0

上述推导只是简单地重申了我们已知的内容:常微分方程的轨迹 ( X t ) 0 ≤ t ≤ 1 (X_t)_{0\le t\le1} (Xt)0t1在每一个时间步长都沿着方向 u t ( X t ) u_t(X_t) ut(Xt)迈出一个小步。现在我们可以修改最后一个方程,使其变为随机过程:随机微分方程的轨迹 ( X t ) 0 ≤ t ≤ 1 (X_t)_{0\le t\le1} (Xt)0t1在每一个时间步长都沿着方向 u t ( X t ) u_t(X_t) ut(Xt)迈出一个小步,并加上来自布朗运动的某些贡献:
X t + h = X t + h u t ( X t ) ⏟ deterministic + σ t ( W t + h − W t ) ⏟ stochastic + h R t ( h ) ⏟ error term X_{t+h}=X_t+\underbrace{hu_t(X_t)}_{\text{deterministic}}+\sigma_t\underbrace{(W_{t+h}-W_t)}_{\text{stochastic}}+\underbrace{hR_t(h)}_{\text{error term}} Xt+h=Xt+deterministic hut(Xt)+σtstochastic (Wt+hWt)+error term hRt(h)

  • 其中 σ t ≥ 0 \sigma_t\ge0 σt0扩散系数 R t ( h ) R_t(h) Rt(h)是随机误差项,其服从 lim ⁡ h → 0 E [ ∥ R t ( h ) ∥ 2 ] → 0 \lim_{h\to0}{\sqrt{\mathbf{E}[\|R_t(h)\|^2]}}\to0 limh0E[Rt(h)2] 0

上式描述了一个随机微分方程 (SDE)。通常用以下符号表示:
d X t = u t ( X t ) d t + σ t d W t X 0 = x 0 \begin{aligned} dX_t&=u_t(X_t)dt+\sigma_tdW_t \\ X_0&=x_0 \end{aligned} dXtX0=ut(Xt)dt+σtdWt=x0
随机微分方程不再有流映射 ϕ t \phi_{t} ϕt。这是因为 X t X_t Xt的值不再完全由 X 0 ∼ p i n i t X_0\sim p_{init} X0pinit决定,因为其演化本身是随机的。尽管如此,与常微分方程一样,我们可以确定SDE的解具有存在性和唯一性:

定理:SDE的解的存在性和唯一性

如果 u : R d × [ 0 , 1 ] → R d u:R^d\times[0,1]\to R^d u:Rd×[0,1]Rd是连续可微且导数有界的,且 σ t \sigma_{t} σt是连续的,则SDE有解,解为满足方程 ( 14 ) (14) (14)的唯一随机过程 ( X t ) 0 ≤ t ≤ 1 (X_t)_{0\le t\le1} (Xt)0t1

实际上每个ODE只不过是SDE的一种特殊情况,即 σ t = 0 \sigma_{t}=0 σt=0,因此当我们讨论SDE的时候,我们将ODE视为一种特殊情况。

Ornstein-Uhlenbeck (OU) Process

考虑一个由常微分线性方程 u t ( x ) = − θ x , θ > 0 u_t(x)=-\theta x,\theta\gt0 ut(x)=θx,θ>0和一个常数扩散系数 σ t = σ ≥ 0 \sigma_t=\sigma\ge0 σt=σ0构成的SDE:
d X t = − θ X t d t + σ d W t dX_t=-\theta X_tdt+\sigma dW_t dXt=θXtdt+σdWt
上述SDE的一个解 ( X t ) 0 ≤ t ≤ 1 (X_t)_{0\le t\le1} (Xt)0t1被称为Ornstein-Uhlenbeck (OU) Process,其可视化过程如上图所示。

模拟随机微分方程

如果你觉得SDEs的概念太抽象了,不用担心。一个更直观的思考SDEs的方法是思考如何模拟SDE。最简单的方法被称为Euler-Maruyama Method,它对于SDEs的作用就像欧拉方法对于ODEs的作用。利用Euler-Maruyama方法,我们初始化 X 0 = x 0 X_0=x_0 X0=x0并且通过以下公式递推更新:
X t + h = X t + h u t ( X t ) + h σ t ϵ t ,     ϵ t ∼ N ( 0 , I d ) X_{t+h}=X_t+hu_t(X_t)+\sqrt{h}\sigma_t\epsilon_t,\,\,\,\epsilon_t\sim\mathcal{N}(0,I_d) Xt+h=Xt+hut(Xt)+h σtϵt,ϵtN(0,Id)

  • 其中 h = n − 1 > 0 ,    n ∈ N h = n^{-1}\gt0,\,\,n\in N h=n1>0,nN是步长超参数。

换句话说,用Euler-Maruyama Method来模拟SDEs时,我们在 u t ( X t ) u_t(X_t) ut(Xt)方向上迈出一小步,并且添加一点按比例 h σ t \sqrt{h}\sigma_{t} h σt缩放的高斯噪声。这是主要的模拟方法

扩散模型

现在,我们可以通过SDE构建生成模型。我们的目标是将简单的分布 p i n i t p_{init} pinit转化为复杂的分布 p d a t a p_{data} pdata。与ODE一样,对于这种转化,用 X 0 ∼ p i n i t X_0\sim p_{init} X0pinit随机初始化的SDE模拟是一种自然的选择。为了参数化这个SDE,我们可以简单的参数化它的中心成分,也就是把向量场 u t u_{t} ut利用神经网络参数化为 u t θ u_{t}^{\theta} utθ。因此扩散模型由下式得出:

d X t = u t θ d t + σ t d W t X 0 ∼ p i n i t \begin{aligned} dX_t &= u_{t}^{\theta}dt+\sigma_tdW_t \\ X_0&\sim p_{init} \end{aligned} dXtX0=utθdt+σtdWtpinit

Summary

在本文中,扩散模型由神经网络 u t θ u_{t}^{\theta} utθ组成,参数 θ \theta θ表示矢量场,扩散系数 σ t \sigma_{t} σt固定:
Neural Network : u θ : R d × [ 0 , 1 ] → R d ,   ( x , t ) ↦ u t θ ( x )  with parameters  θ Fixed : σ t : [ 0 , 1 ] → [ 0 , ∞ ] ,   t ↦ σ t \begin{aligned} \text{Neural Network}&: u^{\theta}:R^d\times[0,1]\to R^d,\,(x,t)\mapsto u_{t}^{\theta}(x)\text{ with parameters }\theta \\ \text{Fixed}&:\sigma_{t}:[0,1]\to [0,\infty],\,t\mapsto\sigma_{t} \end{aligned} Neural NetworkFixed:uθ:Rd×[0,1]Rd,(x,t)utθ(x) with parameters θ:σt:[0,1][0,],tσt
从我们的SDE模型中获取样本(即生成对象),步骤如下:
Initialization : X 0 ∼ p i n i t Simulation : d X t = u t θ d t + σ t d W t Goal : X 1 ∼ p d a t a \begin{aligned} \text{Initialization}&:X_0\sim p_{init} \\ \text{Simulation}&:dX_t = u_{t}^{\theta}dt+\sigma_tdW_t \\ \text{Goal}&: X_1\sim p_{data} \end{aligned} InitializationSimulationGoal:X0pinit:dXt=utθdt+σtdWt:X1pdata
一个 σ t = 0 \sigma_{t}=0 σt=0的扩散模型就是流模型。

你可能感兴趣的:(机器学习,人工智能)