3854 个字词
19 分钟
流模型 Chapter1——基础概念
首次发布: 2025-09-30
... 次访问

流模型的基础概念

1.1 流模型与扩散模型#

1.1.1 定义#

  • 流模型: 流模型是指通过常微分方程(ODE)描述物质在空间中随时间演化的确定性动力学模型。
  • 扩散模型: 扩散模型是通过随机微分方程(SDE)描述物质在空间中随机扩散的模型,考虑了确定性漂移和随机波动。

1.1.2 数学描述#

流模型和扩散模型都包含一个确定性的速度向量场分量。区别在于流模型仅包含该分量,而扩散模型还包含一个随机扩散分量。

速度向量场

设有速度向量场 ut(x)u_t(x),定义为

u:Rd×RRd,(x,t)ut(x)u: \mathbb{R}^d \times \mathbb{R} \rightarrow \mathbb{R}^d, \quad (x, t) \mapsto u_t(x)

其中 dd 是空间维度,tt 是时间。

方程形式

对于流模型,通常有以下形式的ODE方程

dXt=ut(Xt)dt,X0=x0dX_t = u_t(X_t) dt, \quad X_0 = x_0

对于扩散模型,通常有以下形式的SDE方程

dXt=ut(Xt)dt+σtdWt,X0=x0dX_t = u_t(X_t) dt + \sigma_t dW_t, \quad X_0 = x_0

其中 σtRd×k\sigma_t \in \mathbb{R}^{d \times k} 是扩散系数矩阵,dWtRkdW_t \in \mathbb{R}^k 是标准维纳过程,ut()u_t(\cdot) 是速度场,x0x_0 是初始位置,XtX_t 是在时间 tt 的位置随机向量。

轨迹

给定一个初始位置 x0x_0,一条轨迹是指在速度向量场 utu_t 作用下,粒子从 x0x_0 开始随时间演化的路径。一条轨迹对应于一个从特定的初始位置 x0x_0 出发的ODE或SDE解。

流函数

流函数(或称为流映射) ψt(x0)\psi_t(x_0) 给出了从初始位置 x0x_0 (这里 x0x_0 是函数的自变量)出发,在时间 tt 时的位置,它包含了所有可能轨迹的信息。对于流模型,流函数满足

ddtψt(x0)=ut(ψt(x0)),ψ0(x0)=x0\frac{d}{dt} \psi_t(x_0) = u_t(\psi_t(x_0)), \quad \psi_0(x_0) = x_0

维纳过程

维纳过程是一个重要的随机过程,通常用来描述随机波动。它可以被定义为一个连续时间的随机过程 WtW_t,满足以下性质:

  1. W0=0W_0 = 0,即初始位置为零。
  2. WtW_t 具有独立增量,即对于任意时间点 0t1<t2<<tn0 \leq t_1 < t_2 < \cdots < t_n,增量 Wt2Wt1,Wt3Wt2,,WtnWtn1W_{t_2}-W_{t_1}, W_{t_3}-W_{t_2}, \ldots, W_{t_n}-W_{t_{n-1}} 相互独立。
  3. WtW_t 的增量服从正态分布,即 WtWsN(0,ts)W_t - W_s \sim \mathcal{N}(0, t-s),对于 t>st > s

纯扩散过程(无漂移)的动力学方程为

dXt=σtdWtdX_t = \sigma_t dW_t

dWtdW_t 是什么?如何在数学公式中计算?

dWtdW_t 是维纳过程的无穷小增量,表示在时间 tt 的瞬时变化。严格数学上,dWtdW_t 是随机微分方程中的随机积分记号。满足

E[dWt]=0,Var(dWt)=dt\mathbb{E}[dW_t] = 0, \quad \text{Var}(dW_t) = dt

dWt=ϵdt,ϵN(0,I)dW_t = \epsilon \sqrt{dt}, \quad \epsilon \sim \mathcal{N}(0, I)

在数值计算中(如Euler-Maruyama方法),dWtdW_t 通过离散化近似为

ΔWt=ϵΔt,ϵN(0,I)\Delta W_t = \epsilon \sqrt{\Delta t}, \quad \epsilon \sim \mathcal{N}(0, I)

其中 Δt\Delta t 是时间步长,ϵ\epsilon 是标准正态分布的随机向量。

1.2 概率分布函数的演化#

1.2.1 随机过程#

假设有若干粒子在动力学方程 dXt=ut(Xt)dt+σtdWtdX_t = u_t(X_t) dt + \sigma_t dW_t 的作用下演化,且这些粒子在初始时刻 t=0t = 0 的位置服从初始分布 x0p0(x0)x_0 \sim p_0(x_0)。随着时间的推移,这些粒子的位置分布会发生变化,形成一个时间依赖的概率分布 pt(x)p_t(x)

考虑其中一个粒子的运动轨迹 XtX_t。根据上述分析,位置 XtX_t 是一个随机变量,其分布由初始分布 p0(x0)p_0(x_0) 和动力学方程共同决定。也就是说,Xtpt(xt)X_t \sim p_t(x_t) 是一个随机过程。

概率流函数 (Probability Flow)

定义概率流函数为

Jt(x)=ut(x)pt(x)J_t(x) = u_t(x) p_t(x)

其中 ut(x)Rdu_t(x) \in \mathbb{R}^d 是速度场,pt(x)Rp_t(x) \in \mathbb{R} 是时间 tt 的概率分布。

需要注意的是,概率流函数 Jt(x)J_t(x) 是一个向量值函数,其每个分量表示在位置 xx 处,单位时间内通过该位置的概率质量流动的速率。与前述的流函数 ψt(x0)\psi_t(x_0) 不同。

1.2.2 概率分布的演化方程#

Liouville 方程

ODE 方程的概率分布 pt(x)p_t(x) 的演化可以通过偏微分方程来描述。对于满足动力学方程

dXt=ut(Xt)dtdX_t = u_t(X_t) dt

的流模型,其概率分布 pt(x)p_t(x) 满足 Liouville 方程

pt(x)t+x(ut(x)pt(x))=0\frac{\partial p_t(x)}{\partial t} + \nabla_x \cdot (u_t(x) p_t(x)) = 0

其中 x=x1+x2++xd\nabla_x \cdot = \frac{\partial}{\partial x_1} + \frac{\partial}{\partial x_2} + \cdots + \frac{\partial}{\partial x_d} 表示散度算子。Liouville 的推导见 附录 A.1

引入概率流函数 Jt(x)=ut(x)pt(x)J_t(x) = u_t(x) p_t(x),Liouville 方程可以改写为

pt(x)t+xJt(x)=0\frac{\partial p_t(x)}{\partial t} + \nabla_x \cdot J_t(x) = 0

Fokker-Planck 方程

Fokker-Planck 方程描述了随机过程的概率分布随时间的演化。对于满足 SDE

dXt=ut(Xt)dt+σtdWtdX_t = u_t(X_t) dt + \sigma_t dW_t

的扩散模型,Fokker-Planck 方程可以表示为

pt(x)t=x(pt(x)ut(x))+12x2:(σtσtpt(x))\frac{\partial p_t(x)}{\partial t} = -\nabla_x \cdot (p_t(x) u_t(x)) + \frac{1}{2}\nabla_x^2 : (\sigma_t\sigma_t^\top p_t(x))

其中 x2:  =i=1dj=1d2xixj\nabla_x^2 :\ \ = \sum_{i=1}^{d}\sum_{j=1}^{d} \frac{\partial^2}{\partial x_i \partial x_j} 表示对矩阵的双重散度操作, Dt=σtσtRd×dD_t = \sigma_t\sigma_t^\top \in \mathbb{R}^{d \times d} 是扩散张量。同理,Fokker-Planck 方程可以类似 Liouville 方程的推导过程得到。

引入概率流函数 Jt(x)=ut(x)pt(x)J_t(x) = u_t(x) p_t(x),Fokker-Planck 方程可以改写为

pt(x)t=xJt(x)+12x2:(Dtpt(x))\frac{\partial p_t(x)}{\partial t} = -\nabla_x \cdot J_t(x) + \frac{1}{2}\nabla_x^2 : (D_t^\top p_t(x))

1.2.3 概率分布演化——一个简单的例子#

分布的设置

设初始分布为标准高斯分布 pinit(x0)=N(0,Id)p_{init}(x_0) = \mathcal{N}(0, I_d),目标分布为 pdata(x1)=δz,zRdp_{data}(x_1) = \delta_z, z \in \mathbb{R}^d,时间 t[0,1]t \in [0, 1]。目标分布设置为 Dirac delta 分布表示我们的目标是为了将所有的初始分布的点都汇聚到 zz 这个点上。

这里我们人为地构造演化分布形式,采用 zz 构造高斯分布

pt(xt)=N(xt;αtz,βt2Id)p_t(x_t) = \mathcal{N}(x_t; \alpha_t z, \beta_t^2 I_d)

这个公式也可以改写为重参数化的形式

xt=αtz+βtϵt,ϵtN(0,Id)x_t = \alpha_t z + \beta_t \epsilon_t, \quad \epsilon_t \sim \mathcal{N}(0, I_d)

其中 αt\alpha_tβt\beta_t 是调度参数。

需要注意的是,人为构造的演化分布 ptp_t 需要满足

{p0(x0)=pinit(x0)p1(x1)=pdata(x1)\begin{cases} p_0(x_0) = p_{init}(x_0) \\ p_1(x_1) = p_{data}(x_1) \end{cases}

因此

p0(x0)=N(0,Id)=N(α0z,β02Id)    α0=0,β0=1p1(x1)=N(α1z,β12Id)=δz    α1=1,β1=0\begin{align*} p_0(x_0) &= \mathcal{N}(0, I_d) = \mathcal{N}(\alpha_0 z, \beta_0^2 I_d) \implies \alpha_0 = 0, \beta_0 = 1 \\ p_1(x_1) &= \mathcal{N}(\alpha_1 z, \beta_1^2 I_d) = \delta_z \implies \alpha_1 = 1, \beta_1 = 0 \end{align*}

于是我们可以设置调度参数为

αt=t,βt=1t\alpha_t = t, \quad \beta_t = 1 - t

可视化结果

演化结果如下图所示

动力学方程的推导

根据

xt=αtz+βtϵt,ϵtN(0,Id)x_t = \alpha_t z + \beta_t \epsilon_t, \quad \epsilon_t \sim \mathcal{N}(0, I_d)

对时间 tt 求导 (注意到 ϵt\epsilon_t 不可导),得到

dxt=dαtdtzdt+dβtdtϵtdtdx_t = \frac{d\alpha_t}{dt} z \, dt + \frac{d\beta_t}{dt} \epsilon_t \, dt

代入 ϵt=xtαtzβt\epsilon_t = \frac{x_t - \alpha_t z}{\beta_t},得到

dxt=zxtβtdtdx_t = \frac{z - x_t}{\beta_t}\, dt

dxt=zxt1tdt\boxed{ dx_t = \frac{z - x_t}{1 - t}\, dt }

Liouville 方程的验证

(a) 计算概率分布函数对时间的导数

pt(x)=N(x;αtz,βt2Id)=1(2π)d/2βtdexp(xαtz22βt2)p_t(x) = \mathcal{N}(x; \alpha_t z, \beta_t^2 I_d) = \frac{1}{(2\pi)^{d/2}\beta_t^d} \exp\left(-\frac{\|x - \alpha_t z\|^2}{2\beta_t^2}\right)

取对数方便计算导数

logpt(x)=d2log(2π)dlogβtxαtz22βt2\log p_t(x) = -\frac{d}{2}\log(2\pi) - d\log \beta_t - \frac{\|x - \alpha_t z\|^2}{2\beta_t^2}

对时间 tt 求导,得到

logpt(x)t=d1βtdβtdt+(xαtz)βt2(dαtdtz+dβtdtxαtzβt)\frac{\partial \log p_t(x)}{\partial t} = -d\frac{1}{\beta_t}\frac{d\beta_t}{dt} + \frac{(x - \alpha_t z)^\top}{\beta_t^2}\left(\frac{d\alpha_t}{dt} z + \frac{d\beta_t}{dt}\frac{x - \alpha_t z}{\beta_t}\right)

因此

pt(x)t=pt(x)[d1txtz2(1t)3+(xtz)z(1t)2]\frac{\partial p_t(x)}{\partial t} = p_t(x)\left[\frac{d}{1 - t} - \frac{\left\Vert x - tz\right\Vert^2}{(1 - t)^{3}} + \frac{(x - tz)^\top z}{(1 - t)^2}\right]

(b) 计算散度项

概率流函数为

Jt(x)=ut(x)pt(x)=zx1tpt(x)J_t(x) = u_t(x) p_t(x) = \frac{z - x}{1 - t} p_t(x)

根据 (av)=av+va\nabla\cdot (a \mathbf{v}) = a \nabla \cdot \mathbf{v} + \mathbf{v} \cdot \nabla a 计算散度

xJt(x)=pt(x)ut(x)xlogpt(x)+xut(x)pt(x)\nabla_x \cdot J_t(x) = p_t(x) u_t(x) \cdot \nabla_x \log p_t(x) + \nabla_x \cdot u_t(x) p_t(x)

其中

xlogpt(x)=xαtzβt2=xtz(1t)2\nabla_x \log p_t(x) = -\frac{x - \alpha_t z}{\beta_t^2} = -\frac{x - tz}{(1 - t)^2}

ut(x)=zx1t=[z0x01t,z1x11t,,zdxd1t]u_t(x) = \frac{z - x}{1 - t} = \begin{bmatrix} \frac{z_0 - x_0}{1 - t}, \frac{z_1 - x_1}{1 - t}, \cdots, \frac{z_d - x_d}{1 - t}\end{bmatrix},因此 xut(x)=dt1\nabla_x\cdot u_t(x) = \frac{d}{t - 1} 于是

xJt(x)=pt(x)[(xtz)(zx)(1t)3d1t]\nabla_x \cdot J_t(x) = p_t(x)\left[-\frac{(x - tz)^\top (z - x)}{(1 - t)^3}-\frac{d}{1 - t}\right]

(c) 两项相加

将 (a) 和 (b) 两项相加,得到

pt(x)t+xJt(x)=0\frac{\partial p_t(x)}{\partial t} + \nabla_x \cdot J_t(x) = 0

从而验证了 Liouville 方程。

1.3 动力学方程的基本求解方法#

1.3.1 流模型的求解#

流模型的求解涉及到 ODE 求解。部分 ODE 存在解析解,但大部分 ODE 需要数值解法。常用的数值解法就是欧拉方法。

class EulerMethod:
    def __init__(self, ode_u_func):
        self.u = ode_u_func

    def step(self, xt, t, dt):
        # $x_{t+1} = x_t + u_t(x_t) dt$
        xt_new = xt + self.u(t, xt) * dt
        return xt_new

1.3.2 维纳过程的模拟#

由于扩散过程的动力 SDE 可以分解为 ODE + 维纳过程 的形式,因此我们只要能求解出维纳过程,就可以求解出扩散过程的动力学方程。

离散化

形式上,我们看似可以用积分的方法求解维纳过程

Wt=0tdWs=0tϵsdsW_t = \int_0^t dW_s = \int_0^t \epsilon_s \sqrt{ds}

但是事实上,只有左侧的公式是正确的 (Wt=0tdWsW_t = \int_0^t dW_s 叫做伊藤积分,见 附录 B),右侧的积分是无法积出来的。最起码的 ds\sqrt{ds} 这个无穷小量的平方根对应的积分是没有定义的。

Wt0tϵsdsW_t \neq \int_0^t \epsilon_s \sqrt{ds}

正确的做法是通过离散极限和的形式得到 WtW_t 的值

Wt=0tdWs=limΔ0i=0n1ϵtiΔti,ϵtii.i.d.N(0,I)W_t = \int_0^t dW_s = \lim_{\Vert \Delta \Vert \to 0} \sum_{i=0}^{n-1} \epsilon_{t_i} \sqrt{\Delta t_i}, \quad \epsilon_{t_i} \overset{\text{i.i.d.}}{\sim} \mathcal{N}(0, I)

其中 Δti=titi1>0,Δ=maxi=1nΔti\Delta t_i = t_i - t_{i-1} > 0, \quad \Delta = \max_{i=1}^n \Delta t_i 是时间步长的最大值,tit_i 是离散化后的时间点。

为什么求解 WtW_t 时,只有离散化求和的方法?

因为维纳过程的路径虽然连续,但是并不光滑。其运动路径处处不可导的性质决定了我们无法用积分的方式直接求解。

数值解法——欧拉-丸山方法

欧拉-丸山方法是一种常用的数值解法,可用于求解维纳过程的动力学方程。其基本思想是将连续时间的随机过程离散化为一系列小时间步长的近似。具体做法是将时间区间 [0,T][0, T] 划分为 NN 个小时间步长 Δt=TN\Delta t = \frac{T}{N},然后在每个时间步长上近似计算维纳过程的增量。

class EulerMaruyamaMethod4Wiener:
    def __init__(self, wiener_sigma_func):
        self.sigma = wiener_sigma_func

    def sample_eps(self, x_size):
        return torch.randn(x_size)

    def step(self, xt, t, dt):
        # $x_{t+1} = x_t + \sigma_t \epsilon_t \sqrt{dt}$
        eps = self.sample_eps(xt.shape)
        sigma_t = self.sigma(t)
        xt_new = xt + sigma_t * eps * torch.sqrt(dt)
        return xt_new

1.3.3 扩散模型的求解#

扩散模型的求解可以看作是流模型的扩展。由于扩散模型包含了随机性,因此需要在流模型的基础上加入维纳过程的模拟。我们依然采用数值解法来求解扩散模型的动力学方程。

class EulerMaruyamaMethod:
    def __init__(self, sde_u_func, sde_sigma_func):
        self.u = sde_u_func
        self.sigma = sde_sigma_func
    
    def sample_eps(self, x_size):
        return torch.randn(x_size)
    
    def step(self, xt, t, dt):
        # $x_{t+1} = x_t + u_t(x_t) dt + \sigma_t \epsilon_t \sqrt{dt}$
        eps = self.sample_eps(xt.shape)
        u_t = self.u(t, xt)
        sigma_t = self.sigma(t)
        xt_new = xt + u_t * dt + sigma_t * eps * torch.sqrt(dt)
        return xt_new

1.3.4 经典案例#

Ornstein-Uhlenbeck (OU) 过程

Ornstein-Uhlenbeck 过程是一个经典的扩散模型,常用于描述随机振动和物理系统中的噪声。其动力学方程为

dXt=θ(μXt)dt+σdWt,X0=x0dX_t = \theta (\mu - X_t) dt + \sigma dW_t, \quad X_0 = x_0

其中 θ\theta 是衰减系数,μ\mu 是均值,σ\sigma 是扩散系数。OU 过程的解可以通过欧拉-丸山方法进行数值模拟。

class OrnsteinUhlenbeckProcess:
    def __init__(self, theta, mu, sigma):
        self.theta = theta
        self.mu = mu
        self.sigma = sigma

    def step(self, xt, t, dt):
        # $x_{t+1} = x_t + \theta (\mu - x_t) dt + \sigma dW_t$
        eps = torch.randn(xt.shape)
        drift = self.theta * (self.mu - xt) * dt
        diffusion = self.sigma * eps * torch.sqrt(dt)
        xt_new = xt + drift + diffusion
        return xt_new

OU 过程的解析解是

Xt=ψt(x0)=μ+(x0μ)eθt+σ0teθ(ts)dWsX_t = \psi_t(x_0) = \mu + (x_0 - \mu) e^{-\theta t} + \sigma \int_0^t e^{-\theta (t-s)} dW_s

这一点可以通过 ddtψt(x0)\frac{d}{dt}\psi_t(x_0) 来验证。

ddtψt(x0)=θ(x0μ)eθt+σeθtdWt\frac{d}{dt} \psi_t(x_0) = -\theta (x_0 - \mu) e^{-\theta t} + \sigma e^{-\theta t} dW_t

Langevin 动力学

Langevin 动力学是一个特殊的 OU 过程,通常用于模拟粒子在流体中的运动。其动力学方程为

dXt=12σ2logp(Xt)dt+σdWt,X0=x0dX_t = \frac{1}{2}\sigma^2 \nabla \log p(X_t) dt + \sigma dW_t, \quad X_0 = x_0

可以证明,当满足

p(x)=N(0,σ22θ)p(x) = \mathcal{N}(0, \frac{\sigma^2}{2\theta})

Langevin 动力学的解与 OU 过程的解是等价的。

证明:

对于 Langevin 动力学方程

dXt=12σ2logp(Xt)dt+σdWtdX_t = \frac{1}{2}\sigma^2 \nabla \log p(X_t) dt + \sigma dW_t

p(x)=N(0,σ22θ)p(x) = \mathcal{N}(0, \frac{\sigma^2}{2\theta}) 时,有

logp(x)=θσ2x2+C\log p(x) = -\frac{\theta}{\sigma^2} x^2 + C

因此

logp(x)=2θσ2x\nabla \log p(x) = -\frac{2\theta}{\sigma^2} x

将此代入 Langevin 动力学方程

dXt=12σ2(2θσ2Xt)dt+σdWtdX_t = \frac{1}{2}\sigma^2 \cdot \left(-\frac{2\theta}{\sigma^2} X_t\right) dt + \sigma dW_t=θXtdt+σdWt= -\theta X_t dt + \sigma dW_t

这正是 OU 过程的动力学方程(当 μ=0\mu = 0 时)

dXt=θ(0Xt)dt+σdWt=θXtdt+σdWtdX_t = \theta(0 - X_t) dt + \sigma dW_t = -\theta X_t dt + \sigma dW_t

因此,当目标分布为零均值高斯分布 N(0,σ22θ)\mathcal{N}(0, \frac{\sigma^2}{2\theta}) 时,Langevin 动力学等价于均值为零的 OU 过程。

1.4 逆向动力学方程#

在生成模型中,我们通常先定义一个从数据分布 p0p_0 到先验分布 pTp_T 的前向动力学过程(时间从 00TT),然后学习并求解其对应的逆向动力学过程(时间从 TT00),从而实现从先验分布中采样生成数据。

1.4.1 逆向 ODE#

对于流模型的前向动力学方程

dXt=ut(Xt)dt,X0p0dX_t = u_t(X_t) dt, \quad X_0 \sim p_0

其对应的逆向动力学方程为

dXˉt=uTt(Xˉt)dt,Xˉ0pTd\bar{X}_t = -u_{T-t}(\bar{X}_t) dt, \quad \bar{X}_0 \sim p_T

这里 Xˉt\bar{X}_t 表示在逆向时间 t[0,T]t \in [0, T] 下的粒子状态,它与前向过程的关系是 Xˉt=XTt\bar{X}_t = X_{T-t}。注意,逆向过程的速度场是前向速度场的时间反转形式 uTt-u_{T-t}

1.4.2 逆向 SDE (Anderson 定理)#

对于扩散模型的前向动力学方程

dXt=ut(Xt)dt+σtdWt,X0p0dX_t = u_t(X_t) dt + \sigma_t dW_t, \quad X_0 \sim p_0

根据 Anderson 定理,其对应的逆向 SDE 为

dXˉt=[uTt(Xˉt)+σTt2logpTt(Xˉt)]dt+σTtdWˉt,Xˉ0pTd\bar{X}_t = \left[-u_{T-t}(\bar{X}_t) + \sigma_{T-t}^2 \nabla \log p_{T-t}(\bar{X}_t)\right] dt + \sigma_{T-t} d\bar{W}_t, \quad \bar{X}_0 \sim p_T

其中 Wˉt\bar{W}_t 是一个标准维纳过程。这个方程描述了从 t=0t=0t=Tt=T 的逆向过程,等价于从 pTp_T 演化到 p0p_0

在实际应用中,我们通常直接写出从 TT00 的反向积分形式,令 ttTT 走回 00

dXt=[ut(Xt)σt2logpt(Xt)](dt)+σtdWˉtdX_t = \left[u_t(X_t) - \sigma_t^2 \nabla \log p_t(X_t)\right] (-dt) + \sigma_t d\bar{W}_t

这里的 (dt)(-dt) 表示时间是反向流逝的。在数值求解时,这对应于一个负的时间步长。

1.5 流模型与扩散模型作为生成模型#

流模型与扩散模型作为一类强大的生成模型,其核心思想是利用连续时间动力学来描述数据分布的演化。目标是先构建出从复杂数据分布到简单先验分布的动力学过程,然后通过学习它的逆向动力学模型实现对复杂数据分布的建模。通常设置 t=0t = 0 时的分布为目标数据分布 pdatap_{data}t=Tt = T 时的分布为简单的先验分布 pTp_T

动力学模型与分布变换

这个变换过程由一个常微分方程(ODE)或随机微分方程(SDE)定义的动力学模型所驱动。该模型的核心是用神经网络学习出一个时间依赖的速度场(或漂移场)ut(x)u_t(x),它精确地指引了数据点在分布空间中演化的方向和速率。当神经网络完全学习到从简单先验分布到复杂数据分布的速度场后,数据点在该速度场的引导下,能够逐渐从噪声状态“流动”到真实数据分布。

生成过程:基于采样的动力学

数据生成的过程本质上是一个采样过程

  1. 采样先验: 从简单的先验分布 pTp_T 中随机采样一个点 xTx_T。这个点可以看作是编码在潜在空间中的信息。
  2. 求解下一时刻状态: 将 xTx_T 作为初始条件,通过求解学习到的逆向ODE或SDE(从时间 TT00),模拟该点在速度场 ut(x)u_t(x) 的引导下“去噪”或“结构化”的轨迹。
  3. 生成样本: 最终在时间 t=0t=0 得到的状态 x0x_0 就是一个近似服从原始数据分布 pdatap_{\text{data}} 的新生成样本。

通过这种方式,模型能够将先验分布中的随机性,通过确定性的、可学习的动力学路径,转化为具有复杂结构的数据。

流模型 Chapter1——基础概念
https://adalovelemon.github.io/blog/posts/content/coursenotes/generativeai/flowmodels/chapter1/
Author
Ada Lovelemon
Published at
2025-09-30

留言板