Diffusion
文章目录
-
- Diffusion
-
- 前置知识
- 基本介绍
- 数学推导
-
- 前向过程
- 反向过程
- 损失求解
前置知识
马尔科夫链:
第 i i i时刻上的状态条件依赖于且仅依赖于第 i − 1 i-1 i−1时刻的状态条件,即
P ( x i ∣ x i − 1 , x i − 2 , . . . , x 1 ) = P ( x i ∣ x i − 1 ) P(x_i|x_{i-1},x_{i-2},...,x_1)=P(x_i|x_{i-1}) P(xi∣xi−1,xi−2,...,x1)=P(xi∣xi−1)
重参数:
重参数化技巧(reparameterization trick)是为了使从复杂分布中采样的过程能够进行梯度反传。具体来说,它将采样过程改写为一个确定性函数与一个独立的随机变量的组合,从而允许梯度传递。
传统采样方法将随机性直接融入采样过程,使得采样结果成为一个不可微函数(non-differentiable function),这意味着我们无法对参数进行梯度计算和反传。
在传统方法中: [ z ∼ N ( μ , σ 2 ) ] [ z \sim N(\mu, \sigma^2) ] [z∼N(μ,σ2)] 这里的 z z z是直接从分布中采样的随机变量, μ μ μ 和 σ σ σ 作为参数,梯度无法通过随机采样直接传递给 $μ $和 σ σ σ。
而在重参数化方法中,我们将随机性抽离出来,重构为一个确定性函数和一个独立的随机变量的组合: [ z = μ + σ ϵ ] [ z = \mu + \sigma \epsilon ] [z=μ+σϵ] 其中, ϵ ∼ N ( 0 , 1 ) ϵ∼N(0,1) ϵ∼N(0,1) 是一个从标准正态分布中采样的随机变量。
这个重参数化公式使得 z z z变成了一个确定性函数 μ + σ ϵ μ+σϵ μ+σϵ,其中 μ μ μ 和 σ σ σ是可微的参数,而 ϵ ϵ ϵ 的随机性仅通过固定的标准正态分布引入。这样,我们就可以对 μ μ μ 和 σ σ σ进行梯度计算和反传,因为:
- μ μ μ和 σ σ σ 是直接与损失函数相关的参数。
- ϵ ϵ ϵ的随机性独立于参数 μ μ μ和 σ σ σ,因此不影响梯度计算。
总的来说,重参数化技巧通过将随机采样过程转换为一个可微函数,使得我们能够在训练过程中进行梯度反传,从而有效地优化模型参数。这样我们才能在如变分自编码器(VAE)等模型中进行有效的训练和参数更新。
基本介绍
Diffusion中文为扩散模型。主要包括两个过程,前向过程和反向过程。无论是前向过程还是反向过程都是一个参数化的马尔可夫链,主要原理是:通过连续添加高斯噪声来破坏训练数据,然后通过反转这个噪声过程,来学习恢复数据。其原理图如下,
- x 0 x_0 x0 到 x T x_T xT为逐步加噪过的前向过程,噪声是已知的,该过程从原始图片逐步加噪至一组纯噪声。
- x T x_T xT到 x 0 x_0 x0 为将一组随机噪声还原为输入的过程。该过程需要学习一个去噪过程,直到还原一张图片。
数学推导
前向过程
假设给定真实图片样本 x 0 x_0 x0服从 x 0 ∼ q ( x ) x_0\sim q(x) x0∼q(x),Diffision的前向过程通过 T T T次累计对其添加高斯噪声,得到 x 1 , x 2 , . . . , x T x_1,x_2,...,x_T x1,x2,...,xT。每一步的大小是由一系列高斯分布方差的超参数 { β t ∈ ( 0 , 1 ) } t = 1 T \{\beta_t\in(0,1)\}_{t=1}^T {
βt∈(0,1)}t=1T来控制的。前向过程由于每个时刻 t t t只与 t − 1 t-1 t−1有关,所以也可以看做马尔科夫过程:
q ( x 1 : T ∣ x 0 ) = ∏ t = 1 T q ( x t ∣ x t − 1 ) q ( x t ∣ x t − 1 ) = N ( x t , 1 − β t x t − 1 , β t I ) q(x_{1:T}|x_0)=\prod_{t=1}^Tq(x_t|x_{t-1})\\ q(x_t|x_{t-1})=N(x_t,\sqrt{1-\beta_t}x_{t-1},\beta_tI) q(x1:T∣x0)=t=1∏Tq(xt∣xt−1)q(xt∣xt−1)=N(xt,1−βtxt−1,βtI)
这个过程中,随着 t t t的增大, x t x_t xt越来越接近纯噪声。当 T → ∞ T\to\infty T→∞, x t x_t xt是完全的高斯噪声。
我们要从某个分布中随机采样(高斯分布)一个样本,这个过程是无法反传递梯度的。而这个通过高斯噪声采样得到的 x t x_t xt的过程在Diffusion中到处都是,因此我们需要通过重参数技巧来使其可微。
假设要从高斯分布 z ∼ N ( z ; μ θ , σ θ 2 I ) z\sim N(z;\mu_{\theta},\sigma_{\theta}^2I) z∼N(z;μθ,σθ2I)中随机采样一个 z z z,有如下式,
z = μ θ + σ θ ϵ , ϵ ∼ N ( 0 , 1 ) z=\mu_{\theta}+\sigma_{\theta} \epsilon,~\epsilon\sim N(0,1) z=μθ+σθϵ, ϵ∼N(0,1)
上式的 z z z依旧是有随机性的,且满足均值为 μ θ \mu_{\theta} μθ,方差为 σ θ 2 \sigma_{\theta}^2 σθ2的高斯分布。这里的 μ \mu μ, σ θ 2 \sigma_{\theta}^2 σθ2可以由参数 θ \theta θ的神经网络推断得到,整个采样过程依旧梯度可导,随机性被转移到了 ϵ \epsilon ϵ上。
接着,我们可以直接由 x 0 x_0 x0和 β t \beta_t βt得到 x t x_t xt。
假设 α 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,由重参数技巧展开 x t x_t xt可以得到,
q ( x t ∣ x t − 1 ) = N ( x t , 1 − β t x t − 1 , β t I ) x t = 1 − β t x t − 1 + β t ϵ t − 1 = α t x t − 1 + 1 − α t ϵ t − 1 = α t ( α t − 1 x t − 2 + 1 − α t − 1 ϵ t − 2 ) + 1 − α t ϵ t − 1 = α t α t − 1 x t − 2 + α t 1 − α t − 1 ⏟ σ 1 ϵ t − 2 + 1 − α t ⏟ σ 2 ϵ t − 1 \begin{aligned} q(x_t|x_{t-1})&=N(x_t,\sqrt{1-\beta_t}x_{t-1},\beta_tI)\\ x_t&=\sqrt{1-\beta_t}x_{t-1}+\sqrt{\beta_t}\epsilon_{t-1}\\ &=\sqrt{\alpha_t}x_{t-1}+\sqrt{1-\alpha_t}\epsilon_{t-1}\\ &=\sqrt{\alpha_t}(\sqrt{\alpha_{t-1}}x_{t-2}+\sqrt{1-\alpha_{t-1}}\epsilon_{t-2})+\sqrt{1-\alpha_t}\epsilon_{t-1}\\ &=\sqrt{\alpha_t\alpha_{t-1}}\mathbf{x}_{t-2}+\underbrace{\sqrt{\alpha_t}\sqrt{1-\alpha_{t-1}}}_{\sigma_1}\boldsymbol{\epsilon}_{t-2}+\underbrace{\sqrt{1-\alpha_t}}_{\sigma_2}\boldsymbol{\epsilon}_{t-1} \end{aligned} q(xt∣xt−1)xt=N(xt,1−βtxt−1,βtI)=1−βtxt−1+βtϵt−1=αtxt−1+1−αtϵt−1=αt(αt−1xt−2+1−αt−1ϵt−2)+1−αtϵt−1=αtαt−1xt−2+σ1
αt1−αt−1ϵt−2+σ2
1−αtϵt−1
我们将后面两项单独看做两个分布,第一个分布服从 N ( 0 , σ 1 2 I ) N(0,\sigma_1^2I) N(0,σ12I),第二个分布服从 N ( 0 , σ 2 2 ) N(0,\sigma_2^2) N(0,σ22),进而由两个独立高斯分布的可加性,即 N ( 0 , σ 1 2 I ) + N ( 0 , σ 2 2 ) ∼ N ( 0 , ( σ 1 2 + σ 2 2 ) I ) N(0,\sigma_1^2I)+N(0,\sigma_2^2)\sim N(0,(\sigma_1^2+\sigma_2^2)I) N(0,σ12I)+N(0,σ22)∼N(0,(σ12+σ22)I),所以上式继续推导,
= α t α t − 1 x t − 2 + α t 1 − α t − 1 ⏟ σ 1 ϵ t − 2 + 1 − α t ⏟ σ 2 ϵ t − 1 = α t α t − 1 x t − 2 + ( α t 1 − α t − 1 ) 2 + ( 1 − α t ) 2 ϵ ‾ t − 2 = α t α t − 1 x t − 2 + 1 − α t α t − 1 ϵ ‾ t − 2 = . . . = α ‾ t x 0 + 1 − α ‾ t ϵ \begin{aligned} &=\sqrt{\alpha_t\alpha_{t-1}}\mathbf{x}_{t-2}+\underbrace{\sqrt{\alpha_t}\sqrt{1-\alpha_{t-1}}}_{\sigma_1}\boldsymbol{\epsilon}_{t-2}+\underbrace{\sqrt{1-\alpha_t}}_{\sigma_2}\boldsymbol{\epsilon}_{t-1}\\ &=\sqrt{\alpha_t\alpha_{t-1}}\mathbf{x}_{t-2}+\sqrt{(\sqrt{\alpha_t}\sqrt{1-\alpha_{t-1}})^2+(\sqrt{1-\alpha_t})^2}\overline\epsilon_{t-2}\\ &=\sqrt{\alpha_t\alpha_{t-1}}\mathbf{x}_{t-2}+\sqrt{1-\alpha_t\alpha_{t-1}}\overline\epsilon_{t-2}\\ &=...\\ &=\sqrt{\overline\alpha_t}\mathbf{x}_0+\sqrt{1-\overline\alpha_t}\boldsymbol\epsilon \end{aligned} =αtαt−1xt−2+σ1
αt1−αt−1ϵt−2+σ2
1−αtϵt−1=αtαt−1xt−2+(αt1−αt−1)2+(1−αt)2ϵt−2=αtαt−1xt−2+1−αtαt−1ϵt−2=...=αtx0+1−αtϵ
因此任意时刻的 x t x_t xt满足,
q ( x t ∣ x 0 ) = N ( x t ; α ‾ t x 0 , ( 1 − α ‾ t ) I ) q(x_t|x_0)=N(x_t;\sqrt{\overline\alpha_t}x_0,(1-\overline\alpha_t)I) q(xt∣x0)=N(xt;αtx0,(1−αt)I)
反向过程
逆向是去噪的过程。如果能够逆转前向过程并从 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt−1∣xt)采样,就可以从高斯噪声 x T ∼ N ( 0 , I ) x_T\sim N(0,I) xT∼N(0,I)还原出原图分布 x 0 ∼ q ( x ) x_0\sim q(x) x0∼q(x)。数学原理证明,如果 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xt∣xt−1)满足高斯分布且 β t \beta_t βt足够小, q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt−1∣xt)仍然是一个高斯分布。然而我们无法简单推断 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt−1∣xt),因此我们使用神经网络(参数为 θ \theta θ)去预测这样的一个逆向的分布 p θ p_\theta pθ。
p θ ( X 0 : T ) = p ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t ) p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ θ ( x t , t ) , ∑ θ ( x t , t ) ) p_\theta(X_{0:T})=p(x_T)\prod_{t=1}^Tp_\theta(x_{t-1}|x_t)\\ p_\theta(x_{t-1}|x_t)=N(x_{t-1};\mu_\theta(x_t,t),\sum_\theta(x_t,t))