Diffusion 公式推导

Diffusion:通过扩散和逆扩散过程生成图像的生成式模型 中已经对 diffusion 的原理进行了直观地梳理,本文对其中的数学推导进行讲解,还是先基于 DDPM。

一. 预备知识

1. 重参数技巧

重参数技巧 (Reparametrization Trick) 是一种在深度学习中用于训练概率模型的技术,通常用于变分推断和概率生成模型,如变分自动编码器 (Variational Autoencoders, VAE)。这些模型的部分参数是使用特定概率分布随机采样得到的而不是确定性的值,在梯度下降反向优化时难以计算。

因此引入了重参数技巧,通过重新引入可微变换来参数化随机变量,将采样操作转换为模型参数和一个固定的噪声项的函数,使得梯度计算变得可行。举个例子 1,如果要从高斯分布 z ∼ N ( z ; μ θ , σ θ 2 I ) z \sim \mathcal{N}\left(z ; \mu_\theta, \sigma_\theta^2 \mathbf{I}\right) zN(z;μθ,σθ2I) 中采样一个 z z z,可以写成:
z = μ θ + σ θ ⊙ ϵ , ϵ ∼ N ( 0 , I ) z=\mu_\theta+\sigma_\theta \odot \epsilon, \epsilon \sim \mathcal{N}(0, \mathbf{I}) z=μθ+σθϵ,ϵN(0,I)

其中, μ θ \mu_\theta μθ 表示分布的均值, σ θ \sigma_\theta σθ 表示分布的标准差, ⊙ \odot 表示对矩阵的逐元素相乘, ϵ \epsilon ϵ 是从标准高斯分布中采样的噪声项。这样,我们可以对 μ θ \mu_\theta μθ σ θ \sigma_\theta σθ 进行梯度计算,而不需要对采样操作进行梯度计算。

重参数技巧的使用可以使得概率模型的训练更加高效和稳定。

2. 高斯分布的可加性

两个互相独立的高斯分布之和仍为高斯分布,即:
X 1 ∼ N ( μ 1 , σ 1 2 ) X 2 ∼ N ( μ 2 , σ 2 2 ) X_1 \sim N(\mu_1, \sigma_1^2)\\X_2 \sim N(\mu_2, \sigma_2^2) X1N(μ1,σ12)X2N(μ2,σ22)

则:
X 1 + X 2 ∼ N ( μ 1 + μ 2 , σ 1 2 + σ 2 2 ) X 1 − X 2 ∼ N ( μ 1 − μ 2 , σ 1 2 + σ 2 2 ) X_1+X_2 \sim N(\mu_1+\mu_2, \sigma_1^2+\sigma_2^2)\\X_1-X_2 \sim N(\mu_1-\mu_2, \sigma_1^2+\sigma_2^2) X1+X2N(μ1+μ2,σ12+σ22)X1X2N(μ1μ2,σ12+σ22)

两个高斯分布的和本质上就是二维连续型随机变量函数的分布,可以通过计算其概率密度函数证明,见 证明两个互相独立的高斯分布之和仍为高斯分布

3. 扩散递推式的由来

不知道有多少读者和我一样,阅读 DDPM 时对扩散的递推式 q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) q(x_t \mid x_{t-1})=\mathcal{N}(x_t; \sqrt{1-\beta_t}x_{t-1}, \beta_t \bold I) q(xtxt1)=N(xt;1βt xt1,βtI) 感到疑惑,文中也没有解释这是怎么来的,网上的很多公式讲解也都是直接引用了该式进行推导。本节参考 一文解释 Diffusion Model (一) DDPM 理论推导,对扩散过程的递推式的由来进行梳理。2

基于 diffusion 的原理,扩散过程是一个不断加噪的过程,因此相邻图像应该满足线性关系,且图像信息应当被不断减弱,形如:
x t = a t x t − 1 + b t ε t , ε t ∼ N ( 0 , I ) \boldsymbol{x}_t=a_t \boldsymbol{x}_{t-1}+b_t \boldsymbol{\varepsilon}_t, \quad \boldsymbol{\varepsilon}_t \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) \\ xt=atxt1+btεt,εtN(0,I)

因为 x t \boldsymbol{x}_t xt 中包含的图像信息相较 x t − 1 \boldsymbol{x}_{t-1} xt1 更少,因此衰减系数 0 < a t < 1 0<a_t<1 0<at<1。同样,噪声系数 0 < b t < 1 0<b_t<1 0<bt<1

x t − 1 \boldsymbol{x}_{t-1} xt1 代入 x t \boldsymbol{x}_t xt 可以得到:
x t = a t x t − 1 + b t ε t = a t ( a t − 1 x t − 2 + b t − 1 ε t − 1 ) + b t ε t = a t a t − 1 x t − 2 + a t b t − 1 ε t − 1 + b t ε t = … = ( a t … a 1 ) x 0 + ( a t … a 2 ) b 1 ε 1 + ( a t … a 3 ) b 2 ε 2 + ⋯ + a t b t − 1 ε t − 1 + b t ε t \begin{aligned} \boldsymbol{x}_t & =a_t \boldsymbol{x}_{t-1}+b_t \boldsymbol{\varepsilon}_t \\ & =a_t\left(a_{t-1} \boldsymbol{x}_{t-2}+b_{t-1} \varepsilon_{t-1}\right)+b_t \varepsilon_t \\ & =a_t a_{t-1} \boldsymbol{x}_{t-2}+a_t b_{t-1} \boldsymbol{\varepsilon}_{t-1}+b_t \boldsymbol{\varepsilon}_t \\ & =\ldots \\ & =\left(a_t \ldots a_1\right) \boldsymbol{x}_0+\left(a_t \ldots a_2\right) b_1 \varepsilon_1+\left(a_t \ldots a_3\right) b_2 \varepsilon_2+\cdots+a_t b_{t-1} \varepsilon_{t-1}+b_t \varepsilon_t \\ \end{aligned} xt=atxt1+btεt=at(at1xt2+bt1εt1)+btεt=atat1xt2+atbt1εt1+btεt==(ata1)x0+(ata2)b1ε1+(ata3)b2ε2++atbt1εt1+btεt

x t \boldsymbol{x}_t xt 的第一项关于原始图像 x 0 \boldsymbol{x}_0 x0,其余余项可以利用高斯分布的可加性进行整合,满足高斯分布 N ( 0 , ( ( a t … a 2 ) 2 b 1 2 + ( a t … a 3 ) 2 b 2 2 + ⋯ + a t 2 b t − 1 2 + b t 2 ) I ) \mathcal{N}(\mathbf{0}, (\left(a_t \ldots a_2\right)^2 b_1^2+\left(a_t \ldots a_3\right)^2 b_2^2+\cdots+a_t^2 b_{t-1}^2+b_t^2)\mathbf{I}) N(0,((ata2)2b12+(ata3)2b22++at2bt12+bt2)I)。于是可以将 x t \boldsymbol{x}_t xt 写成:
x t = ( a t … a 1 ) x 0 + ( a t … a 2 ) b 1 ε 1 + ( a t … a 3 ) b 2 ε 2 + ⋯ + a t b t − 1 ε t − 1 + b t ε t = ( a t … a 1 ) x 0 + ( a t … a 2 ) 2 b 1 2 + ( a t … a 3 ) 2 b 2 2 + ⋯ + a t 2 b t − 1 2 + b t 2 ε ‾ t , \begin{aligned} \boldsymbol{x}_t & =\left(a_t \ldots a_1\right) \boldsymbol{x}_0+\left(a_t \ldots a_2\right) b_1 \varepsilon_1+\left(a_t \ldots a_3\right) b_2 \varepsilon_2+\cdots+a_t b_{t-1} \varepsilon_{t-1}+b_t \varepsilon_t \\ & =\left(a_t \ldots a_1\right) \boldsymbol{x}_0+\sqrt{\left(a_t \ldots a_2\right)^2 b_1^2+\left(a_t \ldots a_3\right)^2 b_2^2+\cdots+a_t^2 b_{t-1}^2+b_t^2} \overline{\boldsymbol{\varepsilon}}_t, \\ \end{aligned} xt=(ata1)x0+(ata2)b1ε1+(ata3)b2ε2++atbt1εt1+btεt=(ata1)x0+(ata2)2b12+(ata3)2b22++at2bt12+bt2 εt,

其中 ε ‾ t ∼ N ( 0 , I ) \overline{\varepsilon}_t \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) εtN(0,I),服从标准高斯分布。

接下来再看 ε ‾ t \overline{\varepsilon}_t εt 前面的系数,为了一般性表示,在前面添加 ( a t … a 1 ) 2 \left(a_t \ldots a_1\right)^2 (ata1)2 项,最后再减去即可:
( a t … a 1 ) 2 + ( a t … a 2 ) 2 b 1 2 + ( a t … a 3 ) 2 b 2 2 + ⋯ + a t 2 b t − 1 2 + b t 2 − ( a t … a 1 ) 2 = ( a t … a 2 ) 2 a 1 2 + ( a t … a 2 ) 2 b 1 2 + ( a t … a 3 ) 2 b 2 2 + ⋯ + a t 2 b t − 1 2 + b t 2 − ( a t … a 1 ) 2 = ( a t … a 2 ) 2 ( a 1 2 + b 1 2 ) + ( a t … a 3 ) 2 b 2 2 + ⋯ + a t 2 b t − 1 2 + b t 2 − ( a t … a 1 ) 2 = ( a t … a 3 ) 2 ( a 2 2 ( a 1 2 + b 1 2 ) + b 2 2 ) + ⋯ + a t 2 b t − 1 2 + b t 2 − ( a t … a 1 ) 2 = a t 2 ( a t − 1 2 ( … ( a 2 2 ( a 1 2 + b 1 2 ) + b 2 2 ) + … ) + b t − 1 2 ) + b t 2 − ( a t … a 1 ) 2 \begin{aligned} & \left(a_t \ldots a_1\right)^2+\left(a_t \ldots a_2\right)^2 b_1^2+\left(a_t \ldots a_3\right)^2 b_2^2+\cdots+a_t^2 b_{t-1}^2+b_t^2 - \left(a_t \ldots a_1\right)^2\\ =& \left(a_t \ldots a_2\right)^2 a_1^2+\left(a_t \ldots a_2\right)^2 b_1^2+\left(a_t \ldots a_3\right)^2 b_2^2+\cdots+a_t^2 b_{t-1}^2+b_t^2 - \left(a_t \ldots a_1\right)^2\\ =& \left(a_t \ldots a_2\right)^2\left(a_1^2+b_1^2\right)+\left(a_t \ldots a_3\right)^2 b_2^2+\cdots+a_t^2 b_{t-1}^2+b_t^2 - \left(a_t \ldots a_1\right)^2\\ =& \left(a_t \ldots a_3\right)^2\left(a_2^2\left(a_1^2+b_1^2\right)+b_2^2\right)+\cdots+a_t^2 b_{t-1}^2+b_t^2 - \left(a_t \ldots a_1\right)^2\\ =& a_t^2\left(a_{t-1}^2\left(\ldots\left(a_2^2\left(a_1^2+b_1^2\right)+b_2^2\right)+\ldots\right)+b_{t-1}^2\right)+b_t^2 - \left(a_t \ldots a_1\right)^2\\ \end{aligned} ====(ata1)2+(ata2)2b12+(ata3)2b22++at2bt12+bt2(ata1)2(ata2)2a12+(ata2)2b12+(ata3)2b22++at2bt12+bt2(ata1)2(ata2)2(a12+b12)+(ata3)2b22++at2bt12+bt2(ata1)2(ata3)2(a22(a12+b12)+b22)++at2bt12+bt2(ata1)2at2(at12((a22(a12+b12)+b22)+)+bt12)+bt2(ata1)2

为了表示的简洁以及便于书写,加一个限制条件: a i 2 + b i 2 = 1 a_i^2+b_i^2=1 ai2+bi2=1,就可以将 x t \boldsymbol{x}_t xt 大大简化:
x t = ( a t … a 1 ) x 0 + ( a t … a 2 ) 2 b 1 2 + ( a t … a 3 ) 2 b 2 2 + ⋯ + a t 2 b t − 1 2 + b t 2 ε ‾ t , = ( a t … a 1 ) x 0 + 1 − ( a t … a 1 ) 2 ε ‾ t \begin{aligned} \boldsymbol{x}_t & =\left(a_t \ldots a_1\right) \boldsymbol{x}_0+\sqrt{\left(a_t \ldots a_2\right)^2 b_1^2+\left(a_t \ldots a_3\right)^2 b_2^2+\cdots+a_t^2 b_{t-1}^2+b_t^2} \overline{\boldsymbol{\varepsilon}}_t, \\ & = \left(a_t \ldots a_1\right) \boldsymbol{x}_0 + \sqrt{1-\left(a_t \ldots a_1\right)^2} \overline{\boldsymbol{\varepsilon}}_t \end{aligned} xt=(ata1)x0+(ata2)2b12+(ata3)2b22++at2bt12+bt2 εt,=(ata1)x0+1(ata1)2 εt

α ‾ t = ( a t … a 1 ) 2 \overline{\alpha}_t = \left(a_t \ldots a_1\right)^2 αt=(ata1)2,则有:
x t = α ‾ t x 0 + 1 − α ‾ t ε ‾ t , ε ‾ t ∼ N ( 0 , I ) \boldsymbol{x}_t=\sqrt{\overline{\alpha}_t} \boldsymbol{x}_0+\sqrt{1-\overline{\alpha}_t} \overline{\varepsilon}_t, \quad \overline{\varepsilon}_t \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) xt=αt x0+1αt εt,εtN(0,I)

上式和(7)式相同。

二. 扩散过程

1. 背景声明

  • 记原始图像为 x 0 x_0 x0,扩散过程累计 T T T 次对其添加高斯噪声,得到 x 1 , x 2 , … , x T x_1, x_2, \dots, x_T x1,x2,,xT

  • x t ∼ q ( x t ) x_t \sim q(x_t) xtq(xt),表示其服从的概率分布而不是一个具体的特定值;

  • 根据 diffusion 模型的原理, x T ∼ N ( 0 , I ) x_T \sim \mathcal{N}(0, \bold I) xTN(0,I),其中 I \bold I I 为单位矩阵;

  • 扩散过程添加的噪声都满足均值为 0 的高斯分布,方差是超参数,用来调整扩散效果。引入方差系数为 0 < β 1 < β 2 < ⋯ < β T < 1 0<\beta_1<\beta_2<\dots<\beta_T<1 0<β1<β2<<βT<1(因为扩散速度越来越快,所以 β t \beta_t βt 不断变大)。文中定义扩散过程如下:
    q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) (1) q(x_t \mid x_{t-1})=\mathcal{N}(x_t; \sqrt{1-\beta_t}x_{t-1}, \beta_t \bold I) \tag{1} q(xtxt1)=N(xt;1βt xt1,βtI)(1)

  • 因为扩散过程是马尔科夫过程,因此有:
    q ( x 1 : T ∣ x 0 ) = ∏ t = 1 T q ( x t ∣ x t − 1 ) (2) q(x_{1:T} \mid x_{0})=\prod_{t=1}^T q(x_t \mid x_{t-1}) \tag{2} q(x1:Tx0)=t=1Tq(xtxt1)(2)

    直观来讲, x t x_t xt x t − 1 x_{t-1} xt1 的基础上乘上系数 1 − β t \sqrt{1-\beta_t} 1βt ,相当于一个变淡的过程;再加上扰动 β t ϵ t − 1 \beta_t \epsilon_{t-1} βtϵt1,就能够让图像向标准高斯分布靠近。

  • 为了表示方便,记 α t = 1 − β t \alpha_t = 1- \beta_t αt=1βt α ‾ t = ∏ i = 1 t α i \overline{\alpha}_t = \prod_{i=1}^t \alpha_i αt=i=1tαi

2. 公式推导

将(1)式使用重参化技巧表示:
x t = 1 − β t x t − 1 + β t ϵ t − 1  其中  ϵ t − 1 ∼ N ( 0 , I ) (3) x_t = \sqrt{1-\beta_t}x_{t-1} + \sqrt{\beta_t} \epsilon_{t-1} \quad \text{ 其中 }\epsilon_{t-1} \sim \mathcal{N}(0, \bold I) \tag{3} xt=1βt xt1+βt ϵt1 其中 ϵt1N(0,I)(3)

x t − 1 x_{t-1} xt1 代入 x t x_{t} xt 得到:
∵ x t = 1 − β t x t − 1 + β t ϵ t − 1 x t − 1 = 1 − β t − 1 x t − 2 + β t − 1 ϵ t − 2 ∴ x t = 1 − β t ( 1 − β t − 1 x t − 2 + β t − 1 ϵ t − 2 ) + β t ϵ t − 1 = ( 1 − β t ) ( 1 − β t − 1 ) x t − 2 + ( 1 − β t ) β t − 1 ϵ t − 2 + β t ϵ t − 1 = α t α t − 1 x t − 2 + α t ( 1 − α t − 1 ) ϵ t − 2 + 1 − α t ϵ t − 1 (4) \because \quad x_t = \sqrt{1-\beta_t}x_{t-1} + \sqrt{\beta_t} \epsilon_{t-1}\\ \quad\quad x_{t-1} = \sqrt{1-\beta_{t-1}}x_{t-2} + \sqrt{\beta_{t-1}} \epsilon_{t-2}\\ \begin{aligned} \therefore \quad x_t & = \sqrt{1-\beta_t}(\sqrt{1-\beta_{t-1}}x_{t-2} + \sqrt{\beta_{t-1}} \epsilon_{t-2}) + \sqrt{\beta_t} \epsilon_{t-1}\\ & = \sqrt{(1-\beta_t)(1-\beta_{t-1})} x_{t-2} + \sqrt{(1-\beta_t)\beta_{t-1}} \epsilon_{t-2} + \sqrt{\beta_t} \epsilon_{t-1}\\ & = \sqrt{\alpha_t\alpha_{t-1}} x_{t-2} + \sqrt{\alpha_t(1-\alpha_{t-1})} \epsilon_{t-2} + \sqrt{1-\alpha_{t}} \epsilon_{t-1} \tag{4} \end{aligned} xt=1βt xt1+βt ϵt1xt1=1βt1 xt2+βt1 ϵt2xt=1βt (1βt1 xt2+βt1 ϵt2)+βt ϵt1=(1βt)(1βt1) xt2+(1βt)βt1 ϵt2+βt ϵt1=αtαt1 xt2+αt(1αt1) ϵt2+1αt ϵt1(4)

如果 ϵ t \epsilon_{t} ϵt 是特定值,后面的余项就不能继续处理。但 ϵ t \epsilon_{t} ϵt 是重参化过程中引入的标准高斯分布中采样,结合高斯分布的可加性,有:
∵ α t ( 1 − α t − 1 ) ϵ t − 2 ∼ N ( 0 , α t ( 1 − α t − 1 ) I ) 1 − α t ϵ t − 1 ∼ N ( 0 , ( 1 − α t ) I ) ∴ α t ( 1 − α t − 1 ) ϵ t − 2 + 1 − α t ϵ t − 1 ∼ N ( 0 , ( 1 − α t α t − 1 ) I ) \because \quad \sqrt{\alpha_t(1-\alpha_{t-1})} \epsilon_{t-2} \sim \mathcal{N}(0, \alpha_t(1-\alpha_{t-1})\bold I)\\ \sqrt{1-\alpha_{t}} \epsilon_{t-1} \sim \mathcal{N}(0, (1-\alpha_{t}) \bold I)\\ \therefore \quad \sqrt{\alpha_t(1-\alpha_{t-1})} \epsilon_{t-2} + \sqrt{1-\alpha_{t}} \epsilon_{t-1} \sim \mathcal{N}(0, (1-\alpha_t\alpha_{t-1})\bold I) αt(1αt1) ϵt2N(0,αt(1αt1)I)1αt ϵt1N(0,(1αt)I)αt(1αt1) ϵt2+1αt ϵt1N(0,(1αtαt1)I)

因此可以将余项合并,改写成:
α t ( 1 − α t − 1 ) ϵ t − 2 + 1 − α t ϵ t − 1 = 1 − α t α t − 1 ϵ ‾ t − 2 (5) \sqrt{\alpha_t(1-\alpha_{t-1})} \epsilon_{t-2} + \sqrt{1-\alpha_{t}} \epsilon_{t-1} = \sqrt{1-\alpha_t\alpha_{t-1}} \overline \epsilon_{t-2} \tag{5} αt(1αt1) ϵt2+1αt ϵt1=1αtαt1 ϵt2(5)

其中 ϵ ‾ t − 2 ∼ N ( 0 , I ) \overline \epsilon_{t-2} \sim \mathcal{N}(0, \bold I) ϵt2N(0,I),作为余项的统一表示。代入(4)式,得到:
x t = α t α t − 1 x t − 2 + α t ( 1 − α t − 1 ) ϵ t − 2 + 1 − α t ϵ t − 1 = α t α t − 1 x t − 2 + 1 − α t α t − 1 ϵ ‾ t − 2 (6) \begin{aligned} x_t & = \sqrt{\alpha_t\alpha_{t-1}} x_{t-2} + \sqrt{\alpha_t(1-\alpha_{t-1})} \epsilon_{t-2} + \sqrt{1-\alpha_{t}} \epsilon_{t-1}\\ & = \sqrt{\alpha_t\alpha_{t-1}} x_{t-2} + \sqrt{1-\alpha_t\alpha_{t-1}} \overline \epsilon_{t-2} \end{aligned} \tag{6} xt=αtαt1 xt2+αt(1αt1) ϵt2+1αt ϵt1=αtαt1 xt2+1αtαt1 ϵt2(6)

同理继续向下推导,可以得到 x t x_t xt 的通项:
x t = α t x t − 1 + 1 − α t ϵ ‾ t − 1 = α t α t − 1 x t − 2 + 1 − α t α t − 1 ϵ ‾ t − 2 = ⋯ = α t α t − 1 ⋯ α 1 x 0 + 1 − α t α t − 1 ⋯ α 1 ϵ ‾ 0 = α ‾ t x 0 + 1 − α ‾ t ϵ ‾ 0 (7) \begin{aligned} x_t & = \sqrt{\alpha_t} x_{t-1} + \sqrt{1-\alpha_t} \overline \epsilon_{t-1}\\ & = \sqrt{\alpha_t\alpha_{t-1}} x_{t-2} + \sqrt{1-\alpha_t\alpha_{t-1}} \overline \epsilon_{t-2}\\ & = \cdots \\ & = \sqrt{\alpha_t\alpha_{t-1}\cdots\alpha_1} x_{0} + \sqrt{1-\alpha_t\alpha_{t-1}\cdots\alpha_1} \overline \epsilon_{0}\\ & = \sqrt{\overline{\alpha}_t} x_{0} + \sqrt{1-\overline{\alpha}_t} \overline \epsilon_{0}\\ \end{aligned} \tag{7} xt=αt xt1+1αt ϵt1=αtαt1 xt2+1αtαt1 ϵt2==αtαt1α1 x0+1αtαt1α1 ϵ0=αt x0+1αt ϵ0(7)

此处 x t = α ‾ t x 0 + 1 − α ‾ t ϵ ‾ 0 x_t = \sqrt{\overline{\alpha}_t} x_{0} + \sqrt{1-\overline{\alpha}_t} \overline \epsilon_{0} xt=αt x0+1αt ϵ0 也有地方写作 x t = α ‾ t x 0 + 1 − α ‾ t ϵ ‾ t x_t = \sqrt{\overline{\alpha}_t} x_{0} + \sqrt{1-\overline{\alpha}_t} \overline \epsilon_{t} xt=αt x0+1αt ϵt,如果写成后者则(20)式应该表示为:
q ( x t − 1 ∣ x t , x 0 ) = N ( x t − 1 ; 1 a t ( x t − β t 1 − a ‾ t ϵ ‾ t ) , ( 1 − α ‾ t − 1 1 − α ‾ t ⋅ β t ) I ) q\left(x_{t-1} \mid x_t, x_0\right)=\mathcal{N}\left(x_{t-1} ; \frac{1}{\sqrt{a_t}}\left(x_t-\frac{\beta_t}{\sqrt{1-\overline{a}_t}} \overline \epsilon_{t}\right), \left(\frac{1-\overline{\alpha}_{t-1}}{1-\overline{\alpha}_t} \cdot \beta_t\right) \mathbf{I}\right) q(xt1xt,x0)=N(xt1;at 1(xt1at βtϵt),(1αt1αt1βt)I)

由此可以看出,扩散过程通过马尔科夫性质可以一步到位,这也是 diffusion 正向扩散的核心。

三. 逆扩散过程

Diffusion:通过扩散和逆扩散过程生成图像的生成式模型 中已经说了:逆扩散 q ( x t − 1 ∣ x t ) q (x_{t-1} \mid x_t) q(xt1xt) 是未知的,需要用 U-Net 学习 p θ ( x t − 1 ∣ x t ) p_\theta (x_{t-1} \mid x_t) pθ(xt1xt) 来近似;学习过程中使用 q ( x t − 1 ∣ x 0 x t ) q (x_{t-1} \mid x_0x_t) q(xt1x0xt) 来指导 p θ ( x t − 1 ∣ x t ) p_\theta (x_{t-1} \mid x_t) pθ(xt1xt) 进行训练。

1. 背景声明

  • q ( x t − 1 ∣ x t ) q (x_{t-1} \mid x_t) q(xt1xt) 是不可知的,但 q ( x t − 1 ∣ x 0 , x t ) q (x_{t-1} \mid x_0, x_t) q(xt1x0,xt) 是可知的。前者一般出现在推理阶段,后者出现在训练阶段。 记:
    q ( x t − 1 ∣ x t , x 0 ) = N ( x t − 1 ; μ ~ ( x t , x 0 ) , β ~ t I ) (8) q\left(x_{t-1} \mid x_t, x_0\right)=\mathcal{N}\left(x_{t-1} ; \tilde{\mu}\left(x_t, x_0\right), \tilde{\beta}_t \mathbf{I}\right) \tag{8} q(xt1xt,x0)=N(xt1;μ~(xt,x0),β~tI)(8)
  • 使用 q ( x t − 1 ∣ x 0 x t ) q (x_{t-1} \mid x_0x_t) q(xt1x0xt) 来指导 p θ ( x t − 1 ∣ x t ) p_\theta (x_{t-1} \mid x_t) pθ(xt1xt) 进行训练;
  • 根据马尔科夫性质,有:
    p θ ( x 0 : T ) = p ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t ) (9) p_\theta\left(x_{0: T}\right)=p\left(x_T\right) \prod_{t=1}^T p_\theta\left(x_{t-1} \mid x_t\right) \tag{9} pθ(x0:T)=p(xT)t=1Tpθ(xt1xt)(9)
  • 使用 U-Net 表示 p θ ( x t − 1 ∣ x t ) p_\theta (x_{t-1} \mid x_t) pθ(xt1xt)
    p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ θ ( x t , t ) , Σ θ ( x t , t ) ) (10) p_\theta\left(x_{t-1} \mid x_t\right)=\mathcal{N}\left(x_{t-1} ; \mu_\theta\left(x_t, t\right), \Sigma_\theta\left(x_t, t\right)\right) \tag{10} pθ(xt1xt)=N(xt1;μθ(xt,t),Σθ(xt,t))(10)

2. 公式推导

都说 q ( x t − 1 ∣ x t , x 0 ) q (x_{t-1} \mid x_t, x_0) q(xt1xt,x0) 是可知的,下面推导其表达式。根据贝叶斯公式,有:
q ( x t − 1 ∣ x t , x 0 ) = q ( x t ∣ x t − 1 , x 0 ) q ( x t − 1 ∣ x 0 ) q ( x t ∣ x 0 ) (11) q\left(x_{t-1} \mid x_t, x_0\right)=q\left(x_t \mid x_{t-1}, x_0\right) \frac{q\left(x_{t-1} \mid x_0\right)}{q\left(x_t \mid x_0\right)} \tag{11} q(xt1xt,x0)=q(xtxt1,x0)q(xtx0)q(xt1x0)(11)

其中 q ( x t − 1 ∣ x t , x 0 ) q\left(x_{t-1} \mid x_t, x_0\right) q(xt1xt,x0) 为后验概率, q ( x t ∣ x t − 1 , x 0 ) q\left(x_t \mid x_{t-1}, x_0\right) q(xtxt1,x0) 为似然估计, q ( x t − 1 ∣ x 0 ) q\left(x_{t-1} \mid x_0\right) q(xt1x0) 为先验概率, q ( x t ∣ x 0 ) q\left(x_t \mid x_0\right) q(xtx0) 为证据(evidence)。这一步贝叶斯公式巧妙地将逆向过程全部变回了前向。 注意,这里的表示和普通的贝叶斯公式有所不同(多了 x 0 x_0 x0 项)是因为先验概率和证据无法直接求解,需要结合 x 0 x_0 x0 求解得到。

根据扩散过程推出的 x t x_t xt 的通项,即(7)式,有:
q ( x t − 1 ∣ x 0 ) = α ‾ t − 1 x 0 + 1 − α ‾ t − 1 ϵ ∼ N ( α ‾ t − 1 x 0 , 1 − α ‾ t − 1 ) q ( x t ∣ x 0 ) = α ‾ t x 0 + 1 − α ‾ t ϵ ∼ N ( α ‾ t x 0 , 1 − α ‾ t ) (12) \begin{aligned} q\left(x_{t-1} \mid x_0\right)&=\sqrt{\overline{\alpha}_{t-1}} x_0+\sqrt{1-\overline{\alpha}_{t-1}} \epsilon \sim \mathcal{N}\left(\sqrt{\overline{\alpha}_{t-1}} x_0, 1-\overline{\alpha}_{t-1}\right) \\ q\left(x_t \mid x_0\right)&=\sqrt{\overline{\alpha}_t} x_0+\sqrt{1-\overline{\alpha}_t} \epsilon \sim \mathcal{N}\left(\sqrt{\overline{\alpha}_t} x_0, 1-\overline{\alpha}_t\right) \\ \end{aligned} \tag{12} q(xt1x0)q(xtx0)=αt1 x0+1αt1 ϵN(αt1 x0,1αt1)=αt x0+1αt ϵN(αt x0,1αt)(12)

根据(3)式,有:
q ( x t ∣ x t − 1 , x 0 ) = q ( x t ∣ x t − 1 ) = α t x t − 1 + 1 − α t ϵ ∼ N ( α t x t − 1 , 1 − α t ) (13) q\left(x_t \mid x_{t-1}, x_0\right)=q\left(x_t \mid x_{t-1}\right)=\sqrt{\alpha_t} x_{t-1}+\sqrt{1-\alpha_t} \epsilon \sim \mathcal{N}\left(\sqrt{\alpha_t} x_{t-1}, 1-\alpha_t\right) \tag{13} q(xtxt1,x0)=q(xtxt1)=αt xt1+1αt ϵN(αt xt1,1αt)(13)

根据高斯分布定义式,有:
N ( μ , σ 2 ) ∝ exp ⁡ ( − ( x − μ ) 2 2 σ 2 ) (14) \mathcal{N}\left(\mu, \sigma^2\right) \propto \exp \left(-\frac{(x-\mu)^2}{2 \sigma^2}\right) \tag{14} N(μ,σ2)exp(2σ2(xμ)2)(14)

将(12)~(14)式代入(11),有:
q ( x t − 1 ∣ x t , x 0 ) = q ( x t ∣ x t − 1 , x 0 ) q ( x t − 1 ∣ x 0 ) q ( x t ∣ x 0 ) ∝ exp ⁡ ( − 1 2 ( ( x t − α t x t − 1 ) 2 β t + ( x t − 1 − α ‾ t − 1 x 0 ) 2 1 − a ‾ t − 1 − ( x t − α ‾ t x 0 ) 2 1 − a ‾ t ) ) (15) \begin{aligned} q\left(x_{t-1} \mid x_t, x_0\right)& =q\left(x_t \mid x_{t-1}, x_0\right) \frac{q\left(x_{t-1} \mid x_0\right)}{q\left(x_t \mid x_0\right)} \\ & \propto \exp \left(-\frac{1}{2}\left(\frac{\left(x_t-\sqrt{\alpha_t} x_{t-1}\right)^2}{\beta_t}+\frac{\left(x_{t-1}-\sqrt{\overline{\alpha}_{t-1}} x_0\right)^2}{1-\overline{a}_{t-1}}-\frac{\left(x_t-\sqrt{\overline{\alpha}_t} x_0\right)^2}{1-\overline{a}_t}\right)\right) \\ \end{aligned} \tag{15} q(xt1xt,x0)=q(xtxt1,x0)q(xtx0)q(xt1x0)exp(21(βt(xtαt xt1)2+1at1(xt1αt1 x0)21at(xtαt x0)2))(15)

因为 q ( x t − 1 ∣ x t , x 0 ) q\left(x_{t-1} \mid x_t, x_0\right) q(xt1xt,x0) 是关于 x t − 1 x_{t-1} xt1 的表达式,因此将(15)式中平方项展开,再按 x t − 1 x_{t-1} xt1 合并同类项,可得:
exp ⁡ ( − 1 2 ( ( x t − α t x t − 1 ) 2 β t + ( x t − 1 − α ‾ t − 1 x 0 ) 2 1 − a ‾ t − 1 − ( x t − α ‾ t x 0 ) 2 1 − a ‾ t ) ) = exp ⁡ ( − 1 2 ( ( α t β t + 1 1 − α ‾ t − 1 ) x t − 1 2 ⏟ x t − 1  方差  − ( 2 α t β t x t + 2 a ‾ t − 1 1 − α ‾ t − 1 x 0 ) x t − 1 ⏟ x t − 1  均值  + C ( x t , x 0 ) ⏟ 与  x t − 1  无关  ) ) (16) \begin{aligned} & \exp \left(-\frac{1}{2}\left(\frac{\left(x_t-\sqrt{\alpha_t} x_{t-1}\right)^2}{\beta_t}+\frac{\left(x_{t-1}-\sqrt{\overline{\alpha}_{t-1}} x_0\right)^2}{1-\overline{a}_{t-1}}-\frac{\left(x_t-\sqrt{\overline{\alpha}_t} x_0\right)^2}{1-\overline{a}_t}\right)\right) \\ = & \exp \left(-\frac{1}{2}\left(\underbrace{\left(\frac{\alpha_t}{\beta_t}+\frac{1}{1-\overline{\alpha}_{t-1}}\right) x_{t-1}^2}_{x_{t-1} \text { 方差 }} - \underbrace{\left(\frac{2 \sqrt{\alpha_t}}{\beta_t} x_t+\frac{2 \sqrt{\overline{a}_{t-1}}}{1-\overline{\alpha}_{t-1}} x_0 \right) x_{t-1}}_{x_{t-1} \text { 均值 }}+\underbrace{C\left(x_t, x_0\right)}_{\text {与 } x_{t-1} \text { 无关 }}\right)\right) \\ \end{aligned} \tag{16} =exp(21(βt(xtαt xt1)2+1at1(xt1αt1 x0)21at(xtαt x0)2))exp 21 xt1 方差  (βtαt+1αt11)xt12xt1 均值  (βt2αt xt+1αt12at1 x0)xt1+ xt1 无关  C(xt,x0) (16)

其中 C ( x t , x 0 ) C\left(x_t, x_0\right) C(xt,x0) 是与 x t − 1 x_{t-1} xt1 无关的表达式,可以提到 exp ⁡ \exp exp 外作为常数项,因此没有展开。

将(16)式与高斯分布定义式指数展开做对比:
exp ⁡ ( − ( x − μ ) 2 2 σ 2 ) = exp ⁡ ( − 1 2 ( 1 σ 2 x 2 − 2 μ σ 2 x + μ 2 σ 2 ) ) \exp \left(-\frac{(x-\mu)^2}{2 \sigma^2}\right)=\exp \left(-\frac{1}{2}\left(\frac{1}{\sigma^2} x^2-\frac{2 \mu}{\sigma^2} x+\frac{\mu^2}{\sigma^2}\right)\right) exp(2σ2(xμ)2)=exp(21(σ21x2σ22μx+σ2μ2))

提取 x t − 1 x_{t-1} xt1 的平方项和一次项可得(8)式中方差 β ~ t \tilde{\beta}_t β~t
∵ 1 β ~ t = 1 σ 2 = ( α t β t + 1 1 − α ‾ t − 1 ) ∴ β ~ t = 1 − α ‾ t − 1 1 − α ‾ t ⋅ β t (17) \because \frac{1}{\tilde{\beta}_t}=\frac{1}{\sigma^2}=\left(\frac{\alpha_t}{\beta_t}+\frac{1}{1-\overline{\alpha}_{t-1}}\right)\\ \therefore \tilde{\beta}_t=\frac{1-\overline{\alpha}_{t-1}}{1-\overline{\alpha}_t} \cdot \beta_t \tag{17} β~t1=σ21=(βtαt+1αt11)β~t=1αt1αt1βt(17)

同理可得均值 μ ~ t ( x t , x 0 ) \tilde{\mu}_t\left(x_t, x_0\right) μ~t(xt,x0)
∵ 2 μ ~ t ( x t , x 0 ) β ~ t = 2 μ σ 2 = 2 α t β t x t + 2 a ‾ t − 1 1 − α ‾ t − 1 x 0 ∴ μ ~ t ( x t , x 0 ) = α t ( 1 − α ‾ t − 1 ) 1 − α ‾ t x t + α ‾ t − 1 β t 1 − α ‾ t x 0 (18) \because \frac{2 \tilde{\mu}_t\left(x_t, x_0\right)}{\tilde{\beta}_t}=\frac{2 \mu}{\sigma^2}=\frac{2 \sqrt{\alpha_t}}{\beta_t} x_t+\frac{2 \sqrt{\overline{a}_{t-1}}}{1-\overline{\alpha}_{t-1}} x_0 \\ \therefore \tilde{\mu}_t\left(x_t, x_0\right)=\frac{\sqrt{\alpha}_t\left(1-\overline{\alpha}_{t-1}\right)}{1-\overline{\alpha}_t} x_t+\frac{\sqrt{\overline{\alpha}_{t-1}} \beta_t}{1-\overline{\alpha}_t} x_0 \tag{18} β~t2μ~t(xt,x0)=σ22μ=βt2αt xt+1αt12at1 x0μ~t(xt,x0)=1αtα t(1αt1)xt+1αtαt1 βtx0(18)

经过上面的分析, x t − 1 x_{t-1} xt1 可以通过 x 0 x_0 x0 x t x_t xt 得到。然而,diffusion 逆向传播时并不知道 x 0 x_0 x0 的情况,因此需要对其进行替换。 将(7)式代入,将 x 0 x_0 x0 替换成 x t x_t xt 表示,于是有:
μ ~ t ( x t , x 0 ) = α t ( 1 − α ‾ t − 1 ) 1 − α ‾ t x t + α ‾ t − 1 β t 1 − α ‾ t x 0 = α t ( 1 − α ‾ t − 1 ) 1 − α ‾ t x t + α ‾ t − 1 β t 1 − α ‾ t x t − 1 − α ‾ t ϵ ‾ 0 α ‾ t = 1 a t ( x t − β t 1 − a ‾ t ϵ ‾ 0 ) \begin{aligned} \tilde{\mu}_t\left(x_t, x_0\right)&=\frac{\sqrt{\alpha}_t\left(1-\overline{\alpha}_{t-1}\right)}{1-\overline{\alpha}_t} x_t+\frac{\sqrt{\overline{\alpha}_{t-1}} \beta_t}{1-\overline{\alpha}_t} x_0\\ &=\frac{\sqrt{\alpha}_t\left(1-\overline{\alpha}_{t-1}\right)}{1-\overline{\alpha}_t} x_t+\frac{\sqrt{\overline{\alpha}_{t-1}} \beta_t}{1-\overline{\alpha}_t} \frac{x_t-\sqrt{1-\overline{\alpha}_t} \overline \epsilon_{0}}{\sqrt{\overline{\alpha}_t}}\\ &=\frac{1}{\sqrt{a_t}}\left(x_t-\frac{\beta_t}{\sqrt{1-\overline{a}_t}} \overline \epsilon_{0}\right)\\ \end{aligned} μ~t(xt,x0)=1αtα t(1αt1)xt+1αtαt1 βtx0=1αtα t(1αt1)xt+1αtαt1 βtαt xt1αt ϵ0=at 1(xt1at βtϵ0)

上式中已经消去了 x 0 x_0 x0,只和 t t t 有关,记为 μ ~ t \tilde{\mu}_t μ~t,即:
μ ~ t = 1 a t ( x t − β t 1 − a ‾ t ϵ ‾ 0 ) (19) \tilde{\mu}_t=\frac{1}{\sqrt{a_t}}\left(x_t-\frac{\beta_t}{\sqrt{1-\overline{a}_t}} \overline \epsilon_{0}\right) \tag{19} μ~t=at 1(xt1at βtϵ0)(19)

综上, q ( x t − 1 ∣ x t , x 0 ) q (x_{t-1} \mid x_t, x_0) q(xt1xt,x0) 可以表示为高斯分布采样:
q ( x t − 1 ∣ x t , x 0 ) = N ( x t − 1 ; 1 a t ( x t − β t 1 − a ‾ t ϵ ‾ 0 ) , ( 1 − α ‾ t − 1 1 − α ‾ t ⋅ β t ) I ) (20) q\left(x_{t-1} \mid x_t, x_0\right)=\mathcal{N}\left(x_{t-1} ; \frac{1}{\sqrt{a_t}}\left(x_t-\frac{\beta_t}{\sqrt{1-\overline{a}_t}} \overline \epsilon_{0}\right), \left(\frac{1-\overline{\alpha}_{t-1}}{1-\overline{\alpha}_t} \cdot \beta_t\right) \mathbf{I}\right) \tag{20} q(xt1xt,x0)=N(xt1;at 1(xt1at βtϵ0),(1αt1αt1βt)I)(20)

即:
x t − 1 = 1 a t ( x t − β t 1 − a ‾ t ϵ ‾ 0 ) + ( 1 − α ‾ t − 1 1 − α ‾ t ⋅ β t ) ϵ  其中  ϵ ∼ N ( 0 , I ) (21) x_{t-1} = \frac{1}{\sqrt{a_t}}\left(x_t-\frac{\beta_t}{\sqrt{1-\overline{a}_t}} \overline \epsilon_{0}\right) + \sqrt{\left(\frac{1-\overline{\alpha}_{t-1}}{1-\overline{\alpha}_t} \cdot \beta_t\right)} \epsilon \quad \text{ 其中 }\epsilon \sim \mathcal{N}(0, \bold I) \tag{21} xt1=at 1(xt1at βtϵ0)+(1αt1αt1βt) ϵ 其中 ϵN(0,I)(21)

至此, q ( x t − 1 ∣ x t , x 0 ) q (x_{t-1} \mid x_t, x_0) q(xt1xt,x0) 的高斯分布的均值和方差就都有了,只剩下式中的 ϵ ‾ 0 \overline \epsilon_{0} ϵ0,交给 U-Net 使用深度学习方法进行预测。3

四. 训练过程

前两节分别介绍了 diffusion 正向和逆向扩散过程中的数学公式推导,留下了 ϵ ‾ 0 \overline \epsilon_{0} ϵ0 需要 U-Net 进行预测。因为训练时正向扩散过程中添加的噪声在采样后是已知的,因此只需要训练 U-Net 的预测结果向所添加的噪声靠近即可。记训练过程中的噪声采样为 ϵ \epsilon ϵ,U-Net 的预测噪声为 ϵ θ ( α ‾ t x 0 + 1 − α ‾ t ϵ , t ) \epsilon_{\theta}(\sqrt{\overline{\alpha}_t} x_{0} + \sqrt{1-\overline{\alpha}_t} \epsilon, t) ϵθ(αt x0+1αt ϵ,t),于是有训练过程:
在这里插入图片描述

目标函数为:
L D M = E x , ϵ ∼ N ( 0 , 1 ) , t [ ∥ ϵ − ϵ θ ( x t , t ) ∥ 2 2 ] L_{D M}=\mathbb{E}_{x, \epsilon \sim \mathcal{N}(0,1), t}\left[\left\|\epsilon-\epsilon_\theta\left(x_t, t\right)\right\|_2^2\right] LDM=Ex,ϵN(0,1),t[ϵϵθ(xt,t)22]

需要注意的是,这里输入 U-Net 的是 x t x_t xt 而非将 α ‾ t x 0 + 1 − α ‾ t ϵ ‾ \sqrt{\overline{\alpha}_t} x_{0} + \sqrt{1-\overline{\alpha}_t} \overline \epsilon αt x0+1αt ϵ 每一项分别输入,所以不存在真值泄露问题。

五. 推理过程

推理过程就是从 x T x_{T} xT x 0 x_{0} x0 的逆扩散:
在这里插入图片描述
其中 σ t \sigma_t σt 即为(20)式中的 1 − α ‾ t − 1 1 − α ‾ t ⋅ β t \sqrt{\frac{1-\overline{\alpha}_{t-1}}{1-\overline{\alpha}_t} \cdot \beta_t} 1αt1αt1βt


Q & A:

Q1:笔者第一次推导 DDPM 时,对(11)式使用贝叶斯公式推导逆扩散公式非常不解,为什么不能直接将(3)式进行代换:
x t − 1 = x t − β t ϵ t − 1 1 − β t x_{t-1} = \frac{x_t - \sqrt{\beta_t} \epsilon_{t-1}}{\sqrt{1-\beta_t}} xt1=1βt xtβt ϵt1

然后训练 U-Net 预测 ϵ t − 1 \epsilon_{t-1} ϵt1

A1:从过程上分析, ϵ t − 1 \epsilon_{t-1} ϵt1 是个符合正态分布的随机变量,但是其采样结果完全未知,甚至在 DDPM 正向过程中完全没有出现过(因为 DDPM 使用(7)式一步到位得到了 x T x_T xT),如果想 训练 U-Net 预测该随机变量明显缺少监督信息。况且, 如果直接将(3)式进行代换得到逆扩散公式,那么整个 DDPM 就退化成了 VAE 的结构。但 VAE 的生成模型和后验都是通过学习得到的,生成模型和后验双向奔赴共同优化以寻找最优解,而 DDPM 的后验是人为指定的一个标准正态分布,几乎磨灭掉了所有的输入信息,全靠生成模型这一边去恢复,难度过大。

Q2:DDPM 的训练过程使用 x 0 → x t x_0 \rightarrow x_t x0xt 的真实加噪噪声监督 U-Net 训练,那么 U-Net 的预测噪声 ϵ θ ( x t , t ) \epsilon_\theta\left(x_t, t\right) ϵθ(xt,t) 应该是 x 0 → x t x_0 \rightarrow x_t x0xt 的噪声才对。为什么推理时用 U-Net 的预测噪声 ϵ θ ( x t , t ) \epsilon_\theta\left(x_t, t\right) ϵθ(xt,t) 作为 x t − 1 → x t x_{t-1} \rightarrow x_t xt1xt 的近似噪声?
A2:这里有一个误区, x 0 → x t x_0 \rightarrow x_t x0xt 的实际加噪过程 x t = α ‾ t x 0 + 1 − α ‾ t ϵ x_t = \sqrt{\overline{\alpha}_t} x_{0} + \sqrt{1-\overline{\alpha}_t} \epsilon xt=αt x0+1αt ϵ 采样的 ϵ ∼ N ( 0 , I ) \epsilon \sim \mathcal{N}(0, \bold I) ϵN(0,I) 并不是 x 0 → x t x_0 \rightarrow x_t x0xt 的真实噪声,而仅仅是 重参化后的一个服从高斯分布的纯净噪声(参见 (1)~(7) 式的推导过程)。因此 U-Net 只起预测当前步到前一步的纯净噪声的作用,所以推理时带入的也是 x t → x t − 1 x_t \rightarrow x_{t-1} xtxt1 的公式(即 (3) 式),而非 x t → x 0 x_t \rightarrow x_0 xtx0 的公式(即 (7) 式)。

Q3:为什么 DDPM 的训练过程设计成这种 x 0 → x t x_0 \rightarrow x_t x0xt 一步加噪再预测纯噪声的模式?单步加噪 x 0 → x 1 → . . . → x t x_0 \rightarrow x_1 \rightarrow ... \rightarrow x_t x0x1...xt 分别记录每一步噪声再用真实噪声监督 U-Net 训练不是更符合直觉吗?
A3:DDPM 最初尝试过这种方式,但是效果较差,所以改成了现在这种训练模式。


  1. 由浅入深了解Diffusion Model ↩︎

  2. 一文解释 Diffusion Model (一) DDPM 理论推导 ↩︎

  3. Diffusion扩散模型大白话讲解,看完还不懂?不可能! ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值