【扩散模型第1篇】扩散概率模型DPM和去噪扩散概率模型DDPM

参考阅读:
[1] 张振虎博客

PS.内容基本上是参考博客的内容,以下内容本人复习用

1 马尔可夫分层概率模型

在这里插入图片描述
扩散模型可以看作是多层的VAE,既编码和解码过程分别重复了 T T T次。但无论是前向过程还是反向过程,都遵循马尔可夫过程(Markov chain):当前时刻 t t t仅与其上一时刻相关。

和VAE类似,其对数似然可以写成如下式子,利用詹森不等式可以求出其ELBO:
l o g p ( x ) = l o g ∫ p ( x , z 1 : T ) d z 1 : T = l o g ∫ p ( x , z 1 : T q ϕ ( z 1 : T ∣ x ) q ϕ ( z 1 : T ∣ x ) d z 1 : T = l o g E q ϕ ( z 1 : T ∣ x ) [ p ( x , z 1 : T ) q ϕ ( z 1 : T ∣ x ) ] ≥ E q ϕ ( z 1 : T ∣ x ) [ p ( x , z 1 : T ) q ϕ ( z 1 : T ∣ x ) ] \begin{aligned} log p(x) &= log\int p(x,z_{1:T})dz_{1:T}\\ &= log\int \frac{p(x,z_{1:T}q_\phi(z_{1:T}|x)}{q_\phi(z_{1:T}|x)}dz_{1:T}\\ &= log E_{q_\phi(z_{1:T}|x)}[ \frac{p(x,z_{1:T})}{q_\phi(z_{1:T}|x)}]\\ &\ge E_{q_\phi(z_{1:T}|x)}[ \frac{p(x,z_{1:T})}{q_\phi(z_{1:T}|x)}] \end{aligned} logp(x)=logp(x,z1:T)dz1:T=logqϕ(z1:Tx)p(x,z1:Tqϕ(z1:Tx)dz1:T=logEqϕ(z1:Tx)[qϕ(z1:Tx)p(x,z1:T)]Eqϕ(z1:Tx)[qϕ(z1:Tx)p(x,z1:T)]

2 扩散概率模型

在这里插入图片描述
在以上基础上,进行微调便可得到扩散模型:

  • 不再区分 x x x z z z,且尺寸保持不变(VAE中 z z z一般小于 x x x)
  • 前向过程不再需要学习,既 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xtxt1)固定为一个线性高斯变换,不再使用参数化的模型去拟合。
  • 结合线性高斯变换和马尔科夫链的特性,理论上 T → ∞ T\rightarrow \infty T时, x T x_T xT是一个正态分布,既其收敛到 N ( 0 , I ) N(0,I) N(0,I)

2.1 前向和反向过程

由上图可知,整个网络可以用前向过程 q q q或者反向过程 p p p表示,既联合概率可以表示为
p ( x 0 : T ) = q ( x 0 ) ∏ t = 1 T q ( x t ∣ x t − 1 ) = p ( x T ) ∏ t = 1 T p ( x t − 1 ∣ x t ) p(x_{0:T})=q(x_0)\prod_{t=1}^Tq(x_t|x_{t-1})=p(x_T)\prod_{t=1}^Tp(x_{t-1}|x_t) p(x0:T)=q(x0)t=1Tq(xtxt1)=p(xT)t=1Tp(xt1xt)
前向过程又叫扩散过程,是在前进过程中不断增加微小的标准高斯噪声,当 T T T很大时,原图趋近于标准高斯噪声;反向过程又叫采样过程,它可以从纯粹的标准高斯噪声随机变量逐渐转变为真实图片。

前向过程

定义
q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) q(x_t|x_{t-1}) = N(x_{t}; \sqrt{1-\beta_t}x_{t-1},\beta_t I) q(xtxt1)=N(xt;1βt xt1,βtI)
定义这个概率分布为线性高斯变换,是指 x t x_t xt的均值和 x t − 1 x_{t-1} xt1的值呈线性关系,也就是
x t = 1 − β t x t − 1 + β t ϵ   , ϵ ∼ N ( 0 , 1 ) x_t = \sqrt{1-\beta_t}x_{t-1}+\sqrt{\beta_t}\epsilon\space,\epsilon\sim N(0,1) xt=1βt xt1+βt ϵ ,ϵN(0,1)
β \beta β满足, t 1 > t 2 > . . . > t T t_1>t_2>...>t_T t1>t2>...>tT时,有 β 1 < β 2 < . . . < β T \beta_1<\beta_2<...<\beta_T β1<β2<...<βT,且 β ∈ [ 0 , 1 ] \beta\in[0,1] β[0,1]。也可以令 α t = 1 − β t \alpha_t=1-\beta_t αt=1βt,则 α t \alpha_t αt是单调递减的。则此时式子变成:
x t = α t x t − 1 + 1 − α t ϵ x_t = \sqrt{\alpha_t}x_{t-1}+\sqrt{1-\alpha_t}\epsilon xt=αt xt1+1αt ϵ

为什么要有 β \beta β系数呢?且为什么要小于1呢?
因为希望渐进 x t x_t xt趋近于标准高斯分布,且 x t x_t xt x t − 1 x_{t-1} xt1呈线性高斯变换,且 x t x_t xt仅与 x t − 1 x_{t-1} xt1有关,所以 μ x \mu_x μx x t − 1 x_{t-1} xt1的关系就是其乘上一个系数,所以设置了 β \beta β。设置为小于1,是因为要使得均值趋近于0,方差趋近于1。

因为是线性高斯变换的过程,且根据高斯分布的计算性质(也就是将 x t − 2 , ϵ t − 2 和 α t − 1 x_{t-2},\epsilon_{t-2}和\alpha_{t-1} xt2ϵt2αt1代入到上式的 x t − 1 x_{t-1} xt1中,如此直到 x 0 x_0 x0),我们可以得出 x t x_t xt x 0 x_0 x0的关系,其中令 α ˉ t = ∏ t = 0 T α t \bar\alpha_t=\prod_{t=0}^T\alpha_t αˉt=t=0Tαt
在这里插入图片描述
所以我们最终得到 x t x_t xt x 0 x_0 x0的关系,也是DPM的前提:
x t = α ˉ t x 0 + 1 − α ˉ t ϵ x_t = \sqrt{\bar\alpha_t}x_0 + \sqrt{1-\bar\alpha_t}\epsilon xt=αˉt x0+1αˉt ϵ

所以只要设置了 α 0 : T \alpha_{0:T} α0:T,我们就可以一步从 x 0 x_0 x0解析到 x t x_t xt

反向过程

反向过程已知是 p ( x 0 : T ) = p ( x T ) ∏ t = 1 T p ( x t − 1 ∣ x t ) p(x_{0:T})=p(x_T)\prod_{t=1}^Tp(x_{t-1}|x_t) p(x0:T)=p(xT)t=1Tp(xt1xt),其中 p ( x T ) ∼ N ( 0 , I ) p(x_T)\sim N(0,I) p(xT)N(0,I),而 p ( x t − 1 ∣ x t ) p(x_{t-1}|x_t) p(xt1xt)是难以计算的,我们可以使用神经网络去拟合 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ(xt1xt)。此处定义含 θ \theta θ的是模型,不含的是真实分布。

2.2 优化目标 ELBO

只有 x 0 x_0 x0是真实数据, x 1 : T x_{1:T} x1:T都是隐变量,所以我们极大化的是边缘分布 p ( x 0 ) p(x_0) p(x0)而不是联合分布 p ( x 0 : T ) p(x_{0:T}) p(x0:T)。继续推导ELBO公式,推导过程如下:
在这里插入图片描述
我们得到三项:

  • reconstruction term: E q ( x 1 ∣ x 0 ) [ l n p θ ( x 0 ∣ x 1 ) ] E_{q(x_1|x_0)}[ln p_\theta(x_0|x_1)] Eq(x1x0)[lnpθ(x0x1)]
  • prior matching term: E q ( x T − 1 ∣ x 0 ) [ K L ( q ( x T ∣ x T − 1 ) ∣ ∣ p ( x T ) ) ] E_{q(x_{T-1}|x_0)}[KL(q(x_T|x_{T-1})||p(x_T))] Eq(xT1x0)[KL(q(xTxT1)∣∣p(xT))]
  • consistency term : ∑ t = 1 T − 1 E q ( x t − 1 , x t + 1 ∣ x 0 ) [ K L ( q ( x t ∣ x t − 1 ) ∣ ∣ p θ ( x t ∣ x t + 1 ) ) ] \sum_{t=1}^{T-1}E_{q(x_{t-1},x_{t+1}|x_0)}[KL(q(x_t|x_{t-1})||p_\theta(x_t|x_{t+1}))] t=1T1Eq(xt1,xt+1x0)[KL(q(xtxt1)∣∣pθ(xtxt+1))]

对于重建损失:
和VAE第一项一样,也是从 x 1 x_1 x1还原回 x 0 x_0 x0的损失

对于先验匹配损失:
这一项并没有可学习参数,函数 q q q已知是没有可学习参数的,而 x T x_T xT已知满足标准高斯分布,当 T T T很大时,这一项趋近于0

对于consistency loss:
这一项是 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xtxt1) p θ ( x t ∣ x t + 1 ) p_\theta(x_t|x_{t+1}) pθ(xtxt+1)的KL散度,也就是希望解码器 p θ ( x t ∣ x t + 1 ) p_\theta(x_t|x_{t+1}) pθ(xtxt+1)生成的 x t x_t xt q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xtxt1)生成的内容保持一致,如下图所示
在这里插入图片描述
他有两个随机变量 x t − 1 , x t + 1 x_{t-1},x_{t+1} xt1xt+1,而是用马尔科夫链采样的方法对于两个随机变量会导致更大的方差,优化过程不稳定,难以收敛。所以直接优化不是很好的option。

根据条件独立性
在这里插入图片描述
我们有 q ( x t ∣ x t − 1 ) = q ( x t − 1 ∣ x t , x 0 ) q(x_t|x_{t-1})=q(x_{t-1}|x_t,x_0) q(xtxt1)=q(xt1xt,x0),根据贝叶斯公式,有
q ( x t − 1 ∣ x t , x 0 ) = q ( x t − 1 ∣ x t , x 0 ) q ( x t ∣ x 0 ) q ( x t − 1 ∣ x 0 ) q(x_{t-1}|x_t,x_0)=\frac{q(x_{t-1}|x_{t},x_0)q(x_{t}|x_0)}{q(x_{t-1}|x_0)} q(xt1xt,x0)=q(xt1x0)q(xt1xt,x0)q(xtx0)
注意写这一项是因为我们已知前向过程满足马尔科夫链性质,所以前向过程各个随机变量之间是满足条件独立性。而且上述ELBO包含项 p ( x t ∣ x t − 1 ) p(x_t|x_{t-1}) p(xtxt1)
在这里插入图片描述
这三项变为:

  • reconstruction term: E q ( x 1 ∣ x 0 ) [ l n p θ ( x 0 ∣ x 1 ) ] E_{q(x_1|x_0)}[ln p_\theta(x_0|x_1)] Eq(x1x0)[lnpθ(x0x1)]
  • prior matching term: K L ( q ( x T ∣ x 0 ) ∣ ∣ p ( x T ) ) KL(q(x_T|x_0)||p(x_T)) KL(q(xTx0)∣∣p(xT)) (原来为 E q ( x T − 1 ∣ x 0 ) [ K L ( q ( x T ∣ x T − 1 ) ∣ ∣ p ( x T ) ) ] E_{q(x_{T-1}|x_0)}[KL(q(x_T|x_{T-1})||p(x_T))] Eq(xT1x0)[KL(q(xTxT1)∣∣p(xT))]
  • consistency term : ∑ t = 2 T E q ( x t ∣ x 0 ) [ K L ( q ( x t − 1 ∣ x t , x 0 ) ∣ ∣ p θ ( x t − 1 ∣ x t ) ) ] \sum_{t=2}^TE_{q(x_t|x_0)}[KL(q(x_{t-1}|x_t,x_0)||p_\theta(x_{t-1}|x_t))] t=2TEq(xtx0)[KL(q(xt1xt,x0)∣∣pθ(xt1xt))](原来为 ∑ t = 1 T − 1 E q ( x t − 1 , x t + 1 ∣ x 0 ) [ K L ( q ( x t ∣ x t − 1 ) ∣ ∣ p θ ( x t ∣ x t + 1 ) ) ] \sum_{t=1}^{T-1}E_{q(x_{t-1},x_{t+1}|x_0)}[KL(q(x_t|x_{t-1})||p_\theta(x_t|x_{t+1}))] t=1T1Eq(xt1,xt+1x0)[KL(q(xtxt1)∣∣pθ(xtxt+1))]

第一项重建损失保持不变;

第二项发生了变化但是没有影响,本质还是约束 x T x_T xT要尽量接近分布 p ( x T ) p(x_T) p(xT);

第三项需要采样的变量变为了 x t − 1 x_{t-1} xt1一个,约束参数化模型 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ(xt1xt)尽可能接近 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)
在这里插入图片描述

对其进行详细推导:

第一项 p θ ( x 0 ∣ x 1 ) p_\theta(x_0|x_1) pθ(x0x1)依赖于 x 1 x_1 x1的条件高斯分布,假设它的均值 μ θ \mu_\theta μθ是关于 x 1 和 t = 1 x_1和t=1 x1t=1的参数化函数,假设方差 Σ \Sigma Σ是个常量,我们可以用神经网络去拟合它,既 μ θ ( x 1 , t = 1 ) \mu_\theta(x_1,t=1) μθ(x1,t=1)

在这里插入图片描述
模型的输出实际上就是在预测 x 0 x_0 x0,所以更换掉 μ \mu μ符号:
在这里插入图片描述

第二项先验匹配项,可知其趋近于0,不需要关注

第三项去噪匹配项,我们先来推导 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)的均值和方差:
在这里插入图片描述
可得 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)的均值和方差为:
μ q ( x t , x 0 ) = α t ( 1 − α ˉ t − 1 ) 1 − α ˉ t x t + α ˉ t − 1 ( 1 − α t ) 1 − α ˉ t x 0 Σ q ( t ) = ( 1 − α t ) ( 1 − α ˉ t − 1 ) 1 − α ˉ t I \begin{aligned} \mu_q(x_t,x_0)&=\frac{\sqrt{\alpha_t}(1-\bar\alpha_{t-1})}{1-\bar\alpha_t}x_t+\frac{\sqrt{\bar\alpha_{t-1}}(1-\alpha_t)}{1-\bar\alpha_t}x_0\\ \Sigma_q(t) &= \frac{(1-\alpha_t)(1-\bar\alpha_{t-1})}{1-\bar\alpha_t} I \end{aligned} μq(xt,x0)Σq(t)=1αˉtαt (1αˉt1)xt+1αˉtαˉt1 (1αt)x0=1αˉt(1αt)(1αˉt1)I
均值和 x 0 , x t x_0,x_t x0,xt有关,而方差是一个常数;

而我们第三项的目标是让模型参数尽可能接近真实后验分布,所以模型参数也需要是一个高斯分布也行。我们假设模型参数的均值和方差分别为 μ θ , Σ θ \mu_\theta, \Sigma_\theta μθ,Σθ,又因为真实后验分布的方差是一个常数,我们简单地设 Σ θ = Σ q ( t ) \Sigma_\theta=\Sigma_q(t) Σθ=Σq(t)即可。

两个高斯分布的KL散度计算公式是已知的:
在这里插入图片描述
极大化ELBO,等同于极小化 K L ( q ( x t − 1 ∣ x t , x 0 ) ∣ ∣ p θ ( x t − 1 ∣ x t ) ) KL(q(x_{t-1}|x_t,x_0)||p_\theta(x_{t-1}|x_t)) KL(q(xt1xt,x0)∣∣pθ(xt1xt)),等同于极小化他们之间的均值的均方误差。

又已知 μ q ( x t , x 0 ) = α t ( 1 − α ˉ t − 1 ) 1 − α ˉ t x t + α ˉ t − 1 ( 1 − α t ) 1 − α ˉ t x 0 \mu_q(x_t,x_0)=\frac{\sqrt{\alpha_t}(1-\bar\alpha_{t-1})}{1-\bar\alpha_t}x_t+\frac{\sqrt{\bar\alpha_{t-1}}(1-\alpha_t)}{1-\bar\alpha_t}x_0 μq(xt,x0)=1αˉtαt (1αˉt1)xt+1αˉtαˉt1 (1αt)x0, 我们可以人为地定义 μ θ \mu_\theta μθ为一样的形式,既 μ θ ( x t , t ) = α t ( 1 − α ˉ t − 1 ) 1 − α ˉ t x t + α ˉ t − 1 ( 1 − α t ) 1 − α ˉ t x 0 ^ ( x t , t ) \mu_\theta(x_t,t)=\frac{\sqrt{\alpha_t}(1-\bar\alpha_{t-1})}{1-\bar\alpha_t}x_t+\frac{\sqrt{\bar\alpha_{t-1}}(1-\alpha_t)}{1-\bar\alpha_t}\hat{x_0}(x_t,t) μθ(xt,t)=1αˉtαt (1αˉt1)xt+1αˉtαˉt1 (1αt)x0^(xt,t)

按如下推导化简均值的均方误差:
在这里插入图片描述
所以又等同于极小化模型的输出和 x 0 x_0 x0之间的均方误差

整合一下:
在这里插入图片描述

2.3 采样过程

我们可以知道模型参数 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ(xt1xt)的均值和方差,既:
μ θ ( x t , t ) = α t ( 1 − α ˉ t − 1 ) 1 − α ˉ t x t + α ˉ t − 1 ( 1 − α t ) 1 − α ˉ t x 0 ^ ( x t , t ) Σ q ( t ) = ( 1 − α t ) ( 1 − α ˉ t − 1 ) 1 − α ˉ t I \begin{aligned} \mu_\theta(x_t,t)&=\frac{\sqrt{\alpha_t}(1-\bar\alpha_{t-1})}{1-\bar\alpha_t}x_t+\frac{\sqrt{\bar\alpha_{t-1}}(1-\alpha_t)}{1-\bar\alpha_t}\hat{x_0}(x_t,t)\\ \Sigma_q(t) &= \frac{(1-\alpha_t)(1-\bar\alpha_{t-1})}{1-\bar\alpha_t} I \end{aligned} μθ(xt,t)Σq(t)=1αˉtαt (1αˉt1)xt+1αˉtαˉt1 (1αt)x0^(xt,t)=1αˉt(1αt)(1αˉt1)I

采样过程(逆过程):

  1. 设定T=1000;
  2. 从标准高斯分布中采样 x T x_T xT
  3. 神经网络计算 x ^ 0 ( x t , t ) \hat x_0(x_t,t) x^0(xt,t)
  4. 计算网络参数均值和方差
  5. p ( x t − 1 ∣ x t ) p(x_{t-1}|x_t) p(xt1xt)采样到 x t − 1 x_{t-1} xt1
  6. 重复3-5,直到t=1

存在的问题是,神经网络每时每刻都在预测 x 0 x_0 x0,但实际上当t较大时, x t x_t xt距离 x 0 x_0 x0应该比较远,意味着同样的参数,要解决不同的t。所以DPM的生成质量不高。

3 去噪扩散概率模型DDPM

之前的前向过程,我们可以得到 x t = α ˉ t x 0 + 1 − α ˉ t ϵ x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\epsilon xt=αˉt x0+1αˉt ϵ,所以反过来,有
x 0 = x t − 1 − α ˉ t ϵ α ˉ t x_0 = \frac{x_t-\sqrt{1-\bar\alpha_t}\epsilon}{\sqrt{\bar\alpha_t}} x0=αˉt xt1αˉt ϵ

代入到 μ \mu μ的计算中,可得:
在这里插入图片描述
同样也对 μ θ \mu_\theta μθ做一样的参数化,可得
μ θ ( x t , t ) = 1 α t x t − 1 − α t 1 − α ˉ t α t ϵ ^ θ ( x t , t ) \mu_\theta(x_t,t)=\frac{1}{\sqrt{\alpha_t}}x_t-\frac{1-\alpha_t}{\sqrt{1-\bar\alpha_t}\sqrt{\alpha_t}}\hat\epsilon_\theta(x_t,t) μθ(xt,t)=αt 1xt1αˉt αt 1αtϵ^θ(xt,t)

一起代入之前的均值的均方误差,得:
在这里插入图片描述

此时的训练过程变为(对每一个时刻 t t t):

  1. 从标准正态分布中随机采样一个噪声,注意每一时刻的 t , ϵ t,\epsilon t,ϵ都是不同的。
  2. 通过前向传导计算出 x t x_t xt
  3. x t x_t xt t t t传入模型计算出预测噪音 ϵ ^ θ ( x t , t ) \hat\epsilon_\theta(x_t,t) ϵ^θ(xt,t)
  4. 与采样得到的噪声计算均方误差

直觉上来说,模型预测噪声要比直接预测输出 x 0 x_0 x0合理的多,以下为训练过程的伪代码。
在这里插入图片描述

以下为采样过程的伪代码:
在这里插入图片描述
首先从标准正态分布中采样 x T x_T xT,然后模型预测噪声,通过 x 0 ( x t , ϵ ) x_0(x_t,\epsilon) x0(xt,ϵ)的式子计算出 x ~ 0 \tilde x_0 x~0,然后通过 μ t ( x t , x ~ 0 ) \mu_t(x_t,\tilde x_0) μt(xt,x~0)计算出均值,如果 t ≠ 1 t\not = 1 t=1,则 x t − 1 = μ ~ + σ t z x_{t-1}=\tilde \mu +\sigma_t z xt1=μ~+σtz,加上随机噪声(加了效果会更好)。
最后 t = 1 t=1 t=1时刻,预测出的 x 0 x_0 x0实际上是模型输出的均值
在这里插入图片描述
至此,DPM和DDPM模型理论部分就学习完毕了

4 基于分数解释DDPM

5 扩散模型的三种等价表示

6 改进 DDPM

  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值