diffusion_models
约 1378 字大约 5 分钟
2026-06-18
stochastic processes
从上一讲中的常微分方程,延伸到随机微分方程,通过随机性改变了常微分方程的确定性轨迹,随机轨迹通常被称为随机过程(Xt)0≤t≤1,其定义为:
- Xt 对于每个 0≤t≤1 都是随机变量;
- X:[0,1]→Rd,t↦Xt 对于每次 X 的抽样都是一个随机轨迹。
特别地,当我们两次模拟同一个随机过程时,可能会得到不同的结果——因为动力学被设计为随机的。
Brownian motion
随机微分方程从布朗运动中构造,你可以想象布朗运动就是一段连续的随机行走。
现在让我们来定义布朗运动。
一个布朗运动 W=(Wt)0≤t≤1 是一个随机过程,满足 W0=0,轨迹 t↦Wt 是连续的,并且满足以下两个条件:
- 正态增量(Normal increments):对于所有 0≤s<t,有 Wt−Ws∼N(0,(t−s)Id),即增量服从高斯分布,且方差随时间线性增加(Id 是单位矩阵)。
- 独立增量(Independent increments):对于任意 0≤t0<t1<⋯<tn=1,增量 Wt1−Wt0,…,Wtn−Wtn−1 是相互独立的随机变量。
布朗运动也被称为维纳过程(Wiener process),这就是为什么我们用字母 "W" 来表示它。我们可以很容易地通过设定步长 h>0,令 W0=0,并更新如下公式来近似模拟布朗运动:
Wt+h=Wt+hϵt,ϵt∼N(0,Id)(t=0,h,2h,…,1−h)
从常微分方程到随机微分方程的转变,看起来是加了一个由布朗运动驱动的随机变量,实际上现实中,所有东西都有随机性的。因为有随机性,所有不能像 flow models里那样利用导数来定义。因此我们要换种方式来定义,并且不需要用到导数,因此我们来重新定义一个常微分方程的轨迹:
dtdXt=ut(Xt)⇔(i)h1(Xt+h−Xt)=ut(Xt)+Rt(h)⇔Xt+h=Xt+hut(Xt)+hRt(h)▹通过导数表达▹通过无穷小更新表达
其中Rt(h)是一个无穷小,可以忽略的函数。我们将利用上面的最后一个式子,来进行随机性,我们加上一些布朗运动的因素在里面:
Xt+h=Xt+确定性hut(Xt)+随机σt(Wt+h−Wt)+误差项hRt(h)
其中σt≥0 描述了一个扩散系数,并且Rt(h)描述了一个随机误差项,其标准差E[∥Rt(h)∥2]1/2→0当h→0趋于 0。这些加起来描述了一个随机微分方程,通常采用下面的方法来表示:
dXt=ut(Xt)dt+σtdWtX0=x0▹随机微分方程▹初始条件
需要记住的是随机微分方程不存在一个流ψt,因为这个值不是确定的,而是充满随机的。
随机微分方程解的存在性与唯一性
如果 u:Rd×[0,1]→Rd 是连续可微的且导数有界,并且 σt 是连续的,那么上面方程中的随机微分方程存在一个解,该解由满足方程 (6) 的唯一随机过程 (Xt)0≤t≤1 给出。
注意到每个常微分方程(ODE)也是一个随机微分方程(SDE)——只需让扩散系数消失,即σt=0。因此,在本课程的剩余部分,当我们谈论 SDE 时,我们将 ODE 视为一种特殊情况。
和常微分方程一样,很难计算出解析解,还是只能通过模拟的方式来计算。最简单被称为欧拉Euler-Maruyama 方法,它本质上对于 SDE 就如同 Euler 方法对于 ODE 一样。使用 Euler-Maruyama 方法,我们初始化X0=x0并通过以下方式迭代更新
Xt+h=Xt+hut(Xt)+hσtϵt,ϵt∼N(0,Id)
其中h=n−1>0是步长超参数,每次模拟,我们沿着ut(Xt)的方向走一小步。采用方法参考 flow models中的算法 1。
diffusion models
一个扩散模型定义如下:
X0∼pinitdXt=utθ(Xt)dt+σtdWt▹ 随机初始化▹ SDE
扩散模型(diffusion model)由一个神经网络 utθ 和一个固定的扩散系数 σt 组成,其中神经网络的参数 θ 用于参数化一个向量场:
神经网络:固定:uθ:Rd×[0,1]→Rd, (x,t)↦utθ(x)带参数 θσt:[0,1]→[0,∞), t↦σt
为了从我们的随机微分方程(SDE)模型中获取样本(即生成对象),过程如下:
初始化:模拟:目标:X0∼pinit▹ 用简单分布(例如高斯分布)进行初始化dXt=utθ(Xt)dt+σtdWt▹ 从 0 到 1 模拟 SDEX1∼pdata▹ 目标是使 X1 具有分布 pdata
当 σt=0 时的扩散模型是一个流模型(flow model)。