深度学习(生成式模型)——DDPM:denoising diffusion probabilistic models

编程入门 行业动态 更新时间:2024-10-25 19:22:13

<a href=https://www.elefans.com/category/jswz/34/1769690.html style=深度学习(生成式模型)——DDPM:denoising diffusion probabilistic models"/>

深度学习(生成式模型)——DDPM:denoising diffusion probabilistic models

文章目录

  • 前言
  • DDPM的基本流程
    • 前向过程
    • 反向过程
    • DDPM训练与测试伪代码
  • 前向过程详解
  • 反向过程详解
  • DDPM损失函数推导
  • 结语

前言

本文将总结扩散模型DDPM的原理,首先介绍DDPM的基本流程,接着展开介绍流程里的细节,最后针对DDPM的优化函数进行推导,以让读者明白DDPM参数估计的原理。

本文不会对扩散模型的motivation进行讲解,作者有点鬼才,完全想不到他是怎么想出这种训练范式的

生成式模型的代表作为GAN,然而,GAN的训练十分困难,对抗训练稍有不慎便会陷入模式坍塌(model collapse)。在此背景下产生了Diffusion Model,其具备训练简单,生成图像多样化的特点,DDPM便是其中的代表作。

以下推导如有错误,欢迎指出

DDPM的基本流程

DDPM分为前向过程与逆向过程。

前向过程

前向过程发生在训练时:

  • 从均匀分布Uniform(1,2,3…,T)中采样一个样本 t t t。
  • 对一张图像 x 0 x_0 x0​添加 t t t次从标准正态分布 N ( 0 , I ) \mathcal N(0,\mathcal I) N(0,I)中采样到的高斯噪声( ϵ 1 \epsilon_1 ϵ1​、 ϵ 2 \epsilon_2 ϵ2​、…、 ϵ t \epsilon_t ϵt​),得到噪声图像 x t x_t xt​。
  • x t x_t xt​输入到U-Net结构的网络,网络的输出将拟合第 t t t次添加到 x 0 x_0 x0​中的噪声 ϵ t \epsilon_t ϵt​。

在DDPM中,神经网络扮演的角色为预测最后一次添加到图像中的噪声。当 t t t足够大时,即 t = T t=T t=T时, x T x_T xT​为将服从标准正态分布。

反向过程

反向过程发生在推断时:

  • 从标准正态分布 N ( 0 , I ) \mathcal N(0,\mathcal I) N(0,I)中采样一个"噪声图像" x T x_T xT​。
  • 将 x T x_T xT​输入到U-Net结构的网络中,网络输出最后一次添加到图像 x T x_T xT​中的高斯噪声 ϵ T \epsilon_T ϵT​。
  • 从标准正态分布 N ( 0 , I ) \mathcal N(0,\mathcal I) N(0,I)中采样得到 z z z
  • 利用噪声图像 x T x_T xT​ 、 ϵ T \epsilon_T ϵT​、 z z z,依据重参数化公式得到(采样)图像 x T − 1 x_{T-1} xT−1​,重参数化公式可看下一章节中的Sampling
  • 重复上述过程 T T T次,即可生成图像 x 0 x_0 x0​。

DDPM训练与测试伪代码


上图中的 ϵ θ \epsilon_\theta ϵθ​即神经网络。

从前向过程和反向过程可以看出DDPM的训练和推断过程都需要耗费大量的计算资源。后续的DDIM有效降低了推断过程所需的计算资源,而stable diffsuion 则同时降低了训练和推断过程中所需的计算资源。后续的博客将对两者进行总结

后续内容将延续上述符号定义

在详细介绍前向过程和反向过程前,我们需要知道DDPM将图像生成看成一种马尔科夫链,即 x t x_t xt​的生成仅依赖于 x t − 1 x_{t-1} xt−1​ x t + 1 x_{t+1} xt+1​,则前向过程(虚线)和反向过(实线)程可以表示为下图

为了书写方便,除非特殊提及,在以下的所有推导中,所有的 x x x、 ϵ \epsilon ϵ符号都表示随机变量,而不是一个样本。

前向过程详解

依据马尔科夫链的特性,在前向过程中,定义 x t x_t xt​可从 x t − 1 x_{t-1} xt−1​中按下式得到:
x t = 1 − β t x t − 1 + β t ϵ t (1.0) x_t=\sqrt{1-\beta_t} x_{t-1}+\sqrt{\beta_t} \epsilon_{t}\tag{1.0} xt​=1−βt​ ​xt−1​+βt​ ​ϵt​(1.0)
β t \beta_t βt​是一个人为设定的常数,取值为(0,1)。其满足以下特性
β 1 < β 2 < . . . < β T \beta_1<\beta_2<...<\beta_T β1​<β2​<...<βT​

从式1.0可知 x t x_t xt​的生成仅仅依赖 x t − 1 x_{t-1} xt−1​,与 x 0 x_0 x0​无关,因此有 x t ∼ q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) (1.1) x_t\sim q(x_t|x_{t-1})=\mathcal N(x_t;\sqrt{1-\beta_t} x_{t-1},\beta_t \mathcal I)\tag{1.1} xt​∼q(xt​∣xt−1​)=N(xt​;1−βt​ ​xt−1​,βt​I)(1.1)

利用重参数化的技巧,从式1.0中的形式可以得出式1.1。

重参数化: X ∼ N ( 0 , I ) X\sim \mathcal N(0,\mathcal I) X∼N(0,I),则 μ + δ X ∼ N ( μ , δ 2 ) \mu +\delta X \sim N(\mu,\delta^2) μ+δX∼N(μ,δ2)

前向过程需要对式1.0重复t次,非常耗时,能否仅采样一次,就得到 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xt​∣xt−1​)中的样本呢?

为了实现上述想法,我们需要得到分布 q ( x t ∣ x 0 ) q(x_t|x_0) q(xt​∣x0​)的具体形式,

为了后续推导出的式子更加简洁,设
α t = 1 − β t α ˉ t = α t α t − 1 . . . α 0 \begin{aligned} \alpha_t&=1-\beta_t\\ \bar \alpha_t & = \alpha_t\alpha_{t-1}...\alpha_0 \end{aligned} αt​αˉt​​=1−βt​=αt​αt−1​...α0​​对式1.0进行展开可得
x t = 1 − β t x t − 1 + β t ϵ t = 1 − β t ( 1 − β t − 1 x t − 2 + β t − 1 ϵ t − 1 ) + β t ϵ t = α t ( α t − 1 x t − 2 + 1 − α t − 1 ϵ t − 1 ) + 1 − α t ϵ t = α t α t − 1 x t − 2 + α t ( 1 − α t − 1 ) ϵ t − 1 + 1 − α t ϵ t = α t α t − 1 x t − 2 + 1 − α t α t − 1 ϵ t = α ˉ t x 0 + 1 − α ˉ t ϵ t (1.2) \begin{aligned} x_t&=\sqrt{1-\beta_t} x_{t-1}+\sqrt{\beta_t} \epsilon_{t}\\ &=\sqrt{1-\beta_t} (\sqrt{1-\beta_{t-1}}x_{t-2}+\sqrt{\beta_{t-1}}\epsilon_{t-1})+\sqrt{\beta_t} \epsilon_{t}\\ &=\sqrt{\alpha_t}(\sqrt{\alpha_{t-1}}x_{t-2}+\sqrt{1-\alpha_{t-1}}\epsilon_{t-1})+\sqrt{1-\alpha_t}\epsilon_t\\ &=\sqrt{\alpha_t\alpha_{t-1}}x_{t-2}+\sqrt{\alpha_t(1-\alpha_{t-1})}\epsilon_{t-1}+\sqrt{1-\alpha_t}\epsilon_t\\ &=\sqrt{\alpha_t\alpha_{t-1}}x_{t-2}+\sqrt{1-\alpha_t\alpha_{t-1}}\epsilon_{t}\\ &=\sqrt{\bar \alpha_t}x_0+\sqrt{1-\bar\alpha_t}\epsilon_t\tag{1.2} \end{aligned} xt​​=1−βt​ ​xt−1​+βt​ ​ϵt​=1−βt​ ​(1−βt−1​ ​xt−2​+βt−1​ ​ϵt−1​)+βt​ ​ϵt​=αt​ ​(αt−1​ ​xt−2​+1−αt−1​ ​ϵt−1​)+1−αt​ ​ϵt​=αt​αt−1​ ​xt−2​+αt​(1−αt−1​) ​ϵt−1​+1−αt​ ​ϵt​=αt​αt−1​ ​xt−2​+1−αt​αt−1​ ​ϵt​=αˉt​ ​x0​+1−αˉt​ ​ϵt​​(1.2)
上述等式的倒数第二行推导逻辑如下,已知 ϵ t \epsilon_{t} ϵt​、 ϵ t − 1 \epsilon_{t-1} ϵt−1​服从标准正态分布,依据重参数化可知:
α t ( 1 − α t − 1 ) ϵ t − 1 ∼ N ( 0 , α t ( 1 − α t − 1 ) ) 1 − α t ϵ t ∼ N ( 0 , 1 − α t ) \begin{aligned} \sqrt{\alpha_t(1-\alpha_{t-1})}\epsilon_{t-1}&\sim \mathcal N(0,\alpha_t(1-\alpha_{t-1}))\\ \sqrt{1-\alpha_{t}}\epsilon_{t}&\sim \mathcal N(0,1-\alpha_{t}) \end{aligned} αt​(1−αt−1​) ​ϵt−1​1−αt​ ​ϵt​​∼N(0,αt​(1−αt−1​))∼N(0,1−αt​)​

两个均值为0的高斯分布相加具备以下性质

N ( 0 , δ 1 2 ) + N ( 0 , δ 2 2 ) = N ( 0 , δ 1 2 + δ 2 2 ) \mathcal N(0,\delta_1^2)+\mathcal N(0,\delta_2^2)=\mathcal N(0,\delta_1^2+\delta_2^2) N(0,δ12​)+N(0,δ22​)=N(0,δ12​+δ22​)

则有
α t ( 1 − α t − 1 ) ϵ t − 1 + 1 − α t ϵ t ∼ N ( 0 , 1 − α t ) + N ( 0 , α t ( 1 − α t − 1 ) ) = N ( 0 , 1 − α t α t − 1 ) \sqrt{\alpha_t(1-\alpha_{t-1})}\epsilon_{t-1}+\sqrt{1-\alpha_t}\epsilon_t \sim \mathcal N(0,1-\alpha_{t})+ \mathcal N(0,\alpha_t(1-\alpha_{t-1}))=\mathcal N(0,1-\alpha_{t}\alpha_{t-1}) αt​(1−αt−1​) ​ϵt−1​+1−αt​ ​ϵt​∼N(0,1−αt​)+N(0,αt​(1−αt−1​))=N(0,1−αt​αt−1​)
因此我们可以利用分布 N ( 0 , 1 − α t α t − 1 ) \mathcal N(0,1-\alpha_{t}\alpha_{t-1}) N(0,1−αt​αt−1​)中的随机变量来替代 α t ( 1 − α t − 1 ) ϵ t − 1 + 1 − α t ϵ t \sqrt{\alpha_t(1-\alpha_{t-1})}\epsilon_{t-1}+\sqrt{1-\alpha_t}\epsilon_t αt​(1−αt−1​) ​ϵt−1​+1−αt​ ​ϵt​,利用重参数化技巧推出式1.3
q ( x t ∣ x 0 ) = N ( x t ; α ˉ t x 0 , ( 1 − α ˉ t ) I ) (1.3) q(x_t|x_0)=\mathcal N(x_t;\sqrt{\bar \alpha_t}x_0,(1-\bar\alpha_t)\mathcal I)\tag{1.3} q(xt​∣x0​)=N(xt​;αˉt​ ​x0​,(1−αˉt​)I)(1.3)

利用式1.2,我们可以仅通过一次采样就获取到服从 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xt​∣xt−1​)分布的样本。

反向过程详解

依据马尔科夫链的性质,我们需要得到分布 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 ( x t ) = q ( x t ∣ x t − 1 ) q ( x t − 1 ) q ( x t ) \begin{aligned} q(x_{t-1}|x_{t})&=\frac{q(x_{t-1}x_t)}{q(x_t)}\\ &=\frac{q(x_t|x_{t-1})q(x_{t-1})}{q(x_t)} \end{aligned} q(xt−1​∣xt​)​=q(xt​)q(xt−1​xt​)​=q(xt​)q(xt​∣xt−1​)q(xt−1​)​​

我们无法知晓 q ( x t − 1 ) q(x_{t-1}) q(xt−1​)、 q ( x t ) q(x_t) q(xt​)的具体分布形式,因此 q ( x t − 1 ∣ x x t ) q(x_{t-1}|x_{x_t}) q(xt−1​∣xxt​​)是intractable的。作者在此用了一个trick,在反向过程的马尔可夫链中,随机变量 x t − 1 x_{t-1} xt−1​仅仅依赖于 x t x_t xt​,不依赖于 x 0 x_0 x0​,利用这个特性,我们有
q ( x t − 1 ∣ x t ) = q ( x t − 1 ∣ x t , x 0 ) = q ( x t − 1 , x t , x 0 ) q ( x t , x 0 ) = q ( x t ∣ x t − 1 , x 0 ) q ( x t − 1 , x 0 ) q ( x t ∣ x 0 ) q ( x 0 ) = q ( x t ∣ x t − 1 , x 0 ) q ( x t − 1 ∣ x 0 ) q ( x 0 ) q ( x t ∣ x 0 ) q ( x 0 ) = q ( x t ∣ x t − 1 , x 0 ) q ( x t − 1 ∣ x 0 ) q ( x t ∣ x 0 ) = q ( x t ∣ x t − 1 ) q ( x t − 1 ∣ x 0 ) q ( x t ∣ x 0 ) (2.0) \begin{aligned} q(x_{t-1}|x_{t})&=q(x_{t-1}|x_{t},x_0)\\ &=\frac{q(x_{t-1},x_t,x_0)}{q(x_t,x_0)}\\ &=\frac{q(x_{t}|x_{t-1},x_0)q(x_{t-1},x_0)}{q(x_t|x_0)q(x_0)}\\ &=\frac{q(x_{t}|x_{t-1},x_0)q(x_{t-1}|x_0)q(x_0)}{q(x_t|x_0)q(x_0)}\\ &=\frac{q(x_{t}|x_{t-1},x_0)q(x_{t-1}|x_0)}{q(x_t|x_0)}\\ &=\frac{q(x_{t}|x_{t-1})q(x_{t-1}|x_0)}{q(x_t|x_0)}\tag{2.0} \end{aligned} q(xt−1​∣xt​)​=q(xt−1​∣xt​,x0​)=q(xt​,x0​)q(xt−1​,xt​,x0​)​=q(xt​∣x0​)q(x0​)q(xt​∣xt−1​,x0​)q(xt−1​,x0​)​=q(xt​∣x0​)q(x0​)q(xt​∣xt−1​,x0​)q(xt−1​∣x0​)q(x0​)​=q(xt​∣x0​)q(xt​∣xt−1​,x0​)q(xt−1​∣x0​)​=q(xt​∣x0​)q(xt​∣xt−1​)q(xt−1​∣x0​)​​(2.0)

结合式1.1、1.3,利用高斯分布的具体表达式,对式2.0(忽略高斯分布的系数)进行进一步推导有

q ( x t − 1 ∣ x t ) = exp ⁡ ( − 1 2 ( ( x t − α t x t − 1 ) 2 β t + ( x t − 1 − α ˉ t − 1 x 0 ) 2 1 − α ˉ t − 1 − ( x t − α ˉ t x 0 ) 2 1 − α ˉ t ) ) = exp ⁡ ( − 1 2 ( x t 2 − 2 α t x t x t − 1 + α t x t − 1 2 β t + x t − 1 2 − 2 α ˉ t − 1 x 0 x t − 1 + α ˉ t − 1 x 0 2 1 − α ˉ t − 1 − ( x t − α ˉ t x 0 ) 2 1 − α ˉ t ) ) = exp ⁡ ( − 1 2 ( ( α t β t + 1 1 − α t − 1 ) x t − 1 2 − ( 2 α t β t x t + 2 α ˉ t − 1 1 − α ˉ t − 1 x 0 ) x t − 1 + C ( x t , x 0 ) ) ) (2.1) \begin{aligned} q(x_{t-1}|x_t)&=\exp(-\frac{1}{2}(\frac{(x_t-\sqrt{\alpha_t}x_{t-1})^2}{\beta_t}+\frac{(x_{t-1}-\sqrt{\bar\alpha_{t-1}}x_0)^2}{1-\bar\alpha_{t-1}}-\frac{(x_t-\sqrt{\bar\alpha_t}x_0)^2}{1-\bar \alpha_t}))\\ &=\exp(-\frac{1}{2}(\frac{x_t^2-2\sqrt{\alpha_t}x_tx_{t-1}+\alpha_tx_{t-1}^2}{\beta_t}+\frac{x_{t-1}^2-2\sqrt{\bar\alpha_{t-1}}x_0x_{t-1}+\bar\alpha_{t-1}x_0^2}{1-\bar\alpha_{t-1}}-\frac{(x_t-\sqrt{\bar\alpha_t}x_0)^2}{1-\bar \alpha_t}))\\ &=\exp(-\frac{1}{2}((\frac{\alpha_t}{\beta_t}+\frac{1}{1-\alpha_{t-1}})x_{t-1}^2-(\frac{2\sqrt{\alpha_t}}{\beta_t}x_t+\frac{2\sqrt{\bar\alpha_{t-1}}}{1-\bar\alpha_{t-1}}x_0)x_{t-1}+C(x_t,x_0)))\tag{2.1} \end{aligned} q(xt−1​∣xt​)​=exp(−21​(βt​(xt​−αt​ ​xt−1​)2​+1−αˉt−1​(xt−1​−αˉt−1​ ​x0​)2​−1−αˉt​(xt​−αˉt​ ​x0​)2​))=exp(−21​(βt​xt2​−2αt​ ​xt​xt−1​+αt​xt−12​​+1−αˉt−1​xt−12​−2αˉt−1​ ​x0​xt−1​+αˉt−1​x02​​−1−αˉt​(xt​−αˉt​ ​x0​)2​))=exp(−21​((βt​αt​​+1−αt−1​1​)xt−12​−(βt​2αt​ ​​xt​+1−αˉt−1​2αˉt−1​ ​​x0​)xt−1​+C(xt​,x0​)))​(2.1)

等式的最后一列就是合并同类项,不包含 x t − 1 x_{t-1} xt−1​的项都合并到了 C ( x t , x 0 ) C(x_t,x_0) C(xt​,x0​)中(依据条件概率,可以看成是已知项),我们对高斯分布的展开形式做个回顾:

N ( μ , δ 2 ) = 1 2 π δ exp ⁡ ( − ( x − μ ) 2 2 δ 2 ) = 1 2 π δ exp ⁡ ( − ( 1 2 δ 2 x 2 − μ δ 2 x + μ 2 δ 2 ) ) \begin{aligned} \mathcal N(\mu,\delta^2)&=\frac{1}{\sqrt{2\pi}\delta}\exp(-\frac{(x-\mu)^2}{2\delta^2})\\ &=\frac{1}{\sqrt{2\pi}\delta}\exp(-(\frac{1}{2\delta^2}x^2-\frac{\mu}{\delta^2}x+\frac{\mu^2}{\delta^2})) \end{aligned} N(μ,δ2)​=2π ​δ1​exp(−2δ2(x−μ)2​)=2π ​δ1​exp(−(2δ21​x2−δ2μ​x+δ2μ2​))​

依据上述展开,以及 α ˉ t = α t α t − 1 . . . α 0 \bar \alpha_t = \alpha_t\alpha_{t-1}...\alpha_0 αˉt​=αt​αt−1​...α0​、 α t = 1 − β t \alpha_t=1-\beta_t αt​=1−βt​, x t = α ˉ t x 0 + 1 − α ˉ t ϵ t x_t=\sqrt{\bar \alpha_t}x_0+\sqrt{1-\bar\alpha_t}\epsilon_t xt​=αˉt​ ​x0​+1−αˉt​ ​ϵt​,我们对式2.1进行补齐缺失项后可得 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt−1​∣xt​)的均值 μ t \mu_t μt​和方差 δ t \delta_t δt​为
δ t = 1 α t β t + 1 1 − α t − 1 = 1 α t − α ˉ t + β t β t ( 1 − α ˉ t − 1 ) = 1 − α ˉ t − 1 1 − α ˉ t β t μ t = ( 2 α t β t x t + 2 α ˉ t − 1 1 − α ˉ t − 1 x 0 ) / ( α t β t + 1 1 − α t − 1 ) = ( 2 α t β t x t + 2 α ˉ t − 1 1 − α ˉ t − 1 x 0 ) 1 − α ˉ t − 1 1 − α ˉ t β t = α 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 ϵ t α ˉ t ) = 1 α t ( x t − 1 − α t 1 − α ˉ t ϵ t ) (2.2) \begin{aligned} \delta_t&=\frac{1}{\frac{\alpha_t}{\beta_t}+\frac{1}{1-\alpha_{t-1}}}=\frac{1}{\frac{\alpha_t-\bar\alpha_t+\beta_t}{\beta_t(1-\bar\alpha_{t-1})}}=\frac{1-\bar\alpha_{t-1}}{1-\bar\alpha_t}\beta_t\\ \mu_t&=(\frac{2\sqrt{\alpha_t}}{\beta_t}x_t+\frac{2\sqrt{\bar\alpha_{t-1}}}{1-\bar\alpha_{t-1}}x_0)/(\frac{\alpha_t}{\beta_t}+\frac{1}{1-\alpha_{t-1}})\\ &=(\frac{2\sqrt{\alpha_t}}{\beta_t}x_t+\frac{2\sqrt{\bar\alpha_{t-1}}}{1-\bar\alpha_{t-1}}x_0)\frac{1-\bar\alpha_{t-1}}{1-\bar\alpha_t}\beta_t\\ &=\frac{\sqrt{\alpha_t}(1-\bar\alpha_{t-1})}{1-\bar\alpha_t}x_t+\frac{\sqrt{\bar\alpha_{t-1}}\beta_t}{1-\bar\alpha_t}x_0\\ &=\frac{\sqrt{\alpha_t}(1-\bar\alpha_{t-1})}{1-\bar\alpha_t}x_t+\frac{\sqrt{\bar\alpha_{t-1}}\beta_t}{1-\bar\alpha_t}(\frac{x_t-\sqrt{1-\bar\alpha_t}\epsilon_t}{\sqrt{\bar\alpha_t}})\\ &=\frac{1}{\sqrt{\alpha_t}}(x_t-\frac{1-\alpha_t}{\sqrt{1-\bar\alpha_t}}\epsilon_t) \end{aligned}\tag{2.2} δt​μt​​=βt​αt​​+1−αt−1​1​1​=βt​(1−αˉt−1​)αt​−αˉt​+βt​​1​=1−αˉt​1−αˉt−1​​βt​=(βt​2αt​ ​​xt​+1−αˉt−1​2αˉt−1​ ​​x0​)/(βt​αt​​+1−αt−1​1​)=(βt​2αt​ ​​xt​+1−αˉt−1​2αˉt−1​ ​​x0​)1−αˉt​1−αˉt−1​​βt​=1−αˉt​αt​ ​(1−αˉt−1​)​xt​+1−αˉt​αˉt−1​ ​βt​​x0​=1−αˉt​αt​ ​(1−αˉt−1​)​xt​+1−αˉt​αˉt−1​ ​βt​​(αˉt​ ​xt​−1−αˉt​ ​ϵt​​)=αt​ ​1​(xt​−1−αˉt​ ​1−αt​​ϵt​)​(2.2)
上式中的 ϵ t \epsilon_t ϵt​表示最后一次添加到图像 x t − 1 x_{t-1} xt−1​中的噪声,可以由神经网络预测得到(可回顾“DDPM基本流程章节”)。依据式2.2,利用重参数化从样本 x t x_t xt​得到样本 x t − 1 x_{t-1} xt−1​的流程为

  • 从 N ( 0 , I ) \mathcal N(0,\mathcal I) N(0,I)采样得到 z z z
  • 将 x t x_t xt​输入到网络中,由网络预测 ϵ t \epsilon_t ϵt​
  • x t − 1 x_{t-1} xt−1​= 1 α t ( x t − 1 − α t 1 − α ˉ t ϵ t ) + δ t z \frac{1}{\sqrt{\alpha_t}}(x_t-\frac{1-\alpha_t}{\sqrt{1-\bar\alpha_t}}\epsilon_t)+\delta_tz αt​ ​1​(xt​−1−αˉt​ ​1−αt​​ϵt​)+δt​z

DDPM损失函数推导

至此,我们已经对前向过程与反向过程进行了详细的介绍,也知晓神经网络在DDPM中扮演的角色为预测最后一次添加到图像中的噪声,自然也能推断出DDPM的损失函数类似于MSE。在本章节中,博主将推导DDPM的损失函数。

深度学习领域的许多模型都通过极大化对数似然来进行参数估计,设网络为 p θ ( x 0 ) p_\theta(x_0) pθ​(x0​),则对数似然为 log ⁡ p θ ( x 0 ) \log p_\theta(x_0) logpθ​(x0​),最大化对数似然等价于最小化 − log ⁡ p θ ( x 0 ) -\log p_\theta(x_0) −logpθ​(x0​),DDPM通过优化其上界进行参数估计。已知KL散度取值大于等于0,则其上界为

− log ⁡ p θ ( x 0 ) ≤ − log ⁡ p θ ( x 0 ) + D K L ( q ( x 1 : T ∣ x 0 ) ∣ ∣ p θ ( x 1 : T ∣ x 0 ) ) = − log ⁡ p θ ( x 0 ) + E q ( x 1 : T ∣ x 0 ) [ log ⁡ q ( x 1 : T ∣ x 0 ) p ( x 0 : T ) / p θ ( x 0 ) ] = − log ⁡ p θ ( x 0 ) + E q ( x 1 : T ∣ x 0 ) [ log ⁡ q ( x 1 : T ∣ x 0 ) p ( x 0 : T ) + log ⁡ p θ ( x 0 ) ] = − log ⁡ p θ ( x 0 ) + E q ( x 1 : T ∣ x 0 ) [ log ⁡ q ( x 1 : T ∣ x 0 ) p ( x 0 : T ) ] + E q ( x 1 : T ∣ x 0 ) [ log ⁡ p θ ( x 0 ) ] = − log ⁡ p θ ( x 0 ) + E q ( x 1 : T ∣ x 0 ) [ log ⁡ q ( x 1 : T ∣ x 0 ) p ( x 0 : T ) ] + log ⁡ p θ ( x 0 ) = E q ( x 1 : T ∣ x 0 ) [ log ⁡ q ( x 1 : T ∣ x 0 ) p ( x 0 : T ) ] \begin{aligned} -\log p_\theta(x_0) &\leq -\log p_\theta(x_0)+D_{KL}(q(x_{1:T}|x_0)||p_{\theta}(x_{1:T}|x_0))\\ &=-\log p_\theta(x_0)+E_{q(x_{1:T}|x_0)}[\log\frac{q(x_{1:T}|x_0)}{p(x_{0:T})/p_{\theta}(x_0)}]\\ &=-\log p_\theta(x_0)+E_{q(x_{1:T}|x_0)}[\log\frac{q(x_{1:T}|x_0)}{p(x_{0:T})}+\log p_{\theta}(x_0)]\\ &=-\log p_\theta(x_0)+E_{q(x_{1:T}|x_0)}[\log\frac{q(x_{1:T}|x_0)}{p(x_{0:T})}]+E_{q(x_{1:T}|x_0)}[\log p_{\theta}(x_0)]\\ &=-\log p_\theta(x_0)+E_{q(x_{1:T}|x_0)}[\log\frac{q(x_{1:T}|x_0)}{p(x_{0:T})}]+\log p_{\theta}(x_0)\\ &=E_{q(x_{1:T}|x_0)}[\log\frac{q(x_{1:T}|x_0)}{p(x_{0:T})}] \end{aligned} −logpθ​(x0​)​≤−logpθ​(x0​)+DKL​(q(x1:T​∣x0​)∣∣pθ​(x1:T​∣x0​))=−logpθ​(x0​)+Eq(x1:T​∣x0​)​[logp(x0:T​)/pθ​(x0​)q(x1:T​∣x0​)​]=−logpθ​(x0​)+Eq(x1:T​∣x0​)​[logp(x0:T​)q(x1:T​∣x0​)​+logpθ​(x0​)]=−logpθ​(x0​)+Eq(x1:T​∣x0​)​[logp(x0:T​)q(x1:T​∣x0​)​]+Eq(x1:T​∣x0​)​[logpθ​(x0​)]=−logpθ​(x0​)+Eq(x1:T​∣x0​)​[logp(x0:T​)q(x1:T​∣x0​)​]+logpθ​(x0​)=Eq(x1:T​∣x0​)​[logp(x0:T​)q(x1:T​∣x0​)​]​
对其展开则有
L = E q ( x 1 : T ∣ x 0 ) [ log ⁡ q ( x 1 : T ∣ x 0 ) p ( x 0 : T ) ] = E q [ ∏ t = 1 T q ( x t ∣ x t − 1 ) p θ ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t ) ] = E q [ − log ⁡ p θ ( x T ) + ∑ t = 1 T log ⁡ q ( x t ∣ x t − 1 ) p θ ( x t − 1 ∣ x t ) ] = E q [ − log ⁡ p θ ( x T ) + ∑ t = 2 T log ⁡ q ( x t ∣ x t − 1 ) p θ ( x t − 1 ∣ x t ) + log ⁡ q ( x 1 ∣ x 0 ) p θ ( x 0 ∣ x 1 ) ] = E q [ − log ⁡ p θ ( x T ) + ∑ t = 2 T log ⁡ ( q ( x t ∣ x t − 1 , x 0 ) p θ ( x t − 1 ∣ x t ) . q ( x t ∣ x 0 ) q ( x t − 1 ∣ x 0 ) ) + log ⁡ q ( x 1 ∣ x 0 ) p θ ( x 0 ∣ x 1 ) ] = E q [ − log ⁡ p θ ( x T ) + ∑ t = 2 T log ⁡ q ( x t ∣ x t − 1 , x 0 ) p θ ( x t − 1 ∣ x t ) + ∑ t = 2 T log ⁡ q ( x t ∣ x 0 ) q ( x t − 1 ∣ x 0 ) + log ⁡ q ( x 1 ∣ x 0 ) p θ ( x 0 ∣ x 1 ) ] = E q [ − log ⁡ p θ ( x T ) + ∑ t = 2 T log ⁡ q ( x t ∣ x t − 1 , x 0 ) p θ ( x t − 1 ∣ x t ) + log ⁡ q ( x T ∣ x 0 ) q ( x 1 ∣ x 0 ) + log ⁡ q ( x 1 ∣ x 0 ) p θ ( x 0 ∣ x 1 ) ] = E q [ − log ⁡ p θ ( x T ) + ∑ t = 2 T log ⁡ q ( x t ∣ x t − 1 , x 0 ) p θ ( x t − 1 ∣ x t ) + log ⁡ q ( x T ∣ x 0 ) p θ ( x 0 ∣ x 1 ) ) ] = E q [ log ⁡ q ( x T ∣ x 0 ) p θ ( x T ) + ∑ t = 2 T log ⁡ q ( x t ∣ x t − 1 , x 0 ) p θ ( x t − 1 ∣ x t ) − log ⁡ p θ ( x 0 ∣ x 1 ) ) ] = E q [ D K L ( q ( x T ∣ x 0 ) ∣ ∣ p θ ( x T ) ) q ( x T ∣ x 0 ) + ∑ t = 2 T D K L ( q ( x t − 1 ∣ x t , x 0 ) ∣ ∣ p θ ( x t − 1 ∣ x t ) ) q ( x t − 1 ∣ x t , x 0 ) − log ⁡ p θ ( x 0 ∣ x 1 ) ) ] \begin{aligned} L&=E_{q(x_{1:T}|x_0)}[\log\frac{q(x_{1:T}|x_0)}{p(x_{0:T})}]\\ &=E_q[\frac{\prod_{t=1}^Tq(x_t|x_{t-1})}{p_{\theta}(x_T)\prod_{t=1}^Tp_\theta(x_{t-1}|x_t)}]\\ &=E_q[-\log p_\theta(x_T)+\sum_{t=1}^T\log\frac{q(x_t|x_{t-1})}{p_\theta(x_{t-1}|x_t)}]\\ &=E_q[-\log p_\theta(x_T)+\sum_{t=2}^T\log\frac{q(x_t|x_{t-1})}{p_\theta(x_{t-1}|x_t)}+\log\frac{q(x_1|x_0)}{p_\theta(x_0|x_1)}]\\ &=E_q[-\log p_\theta(x_T)+\sum_{t=2}^T\log(\frac{q(x_t|x_{t-1},x_0)}{p_\theta(x_{t-1}|x_t)}.\frac{q(x_t|x_0)}{q(x_{t-1}|x_0)})+\log\frac{q(x_1|x_0)}{p_\theta(x_0|x_1)}]\\ &=E_q[-\log p_\theta(x_T)+\sum_{t=2}^T\log\frac{q(x_t|x_{t-1},x_0)}{p_\theta(x_{t-1}|x_t)}+\sum_{t=2}^T\log\frac{q(x_t|x_0)}{q(x_{t-1}|x_0)}+\log\frac{q(x_1|x_0)}{p_\theta(x_0|x_1)}]\\ &=E_q[-\log p_\theta(x_T)+\sum_{t=2}^T\log\frac{q(x_t|x_{t-1},x_0)}{p_\theta(x_{t-1}|x_t)}+\log\frac{q(x_T|x_0)}{q(x_{1}|x_0)}+\log\frac{q(x_1|x_0)}{p_\theta(x_0|x_1)}]\\ &=E_q[-\log p_\theta(x_T)+\sum_{t=2}^T\log\frac{q(x_t|x_{t-1},x_0)}{p_\theta(x_{t-1}|x_t)}+\log\frac{q(x_T|x_0)}{p_\theta(x_0|x_1))}]\\ &=E_q[\log \frac{q(x_T|x_0)}{p_\theta(x_T)}+\sum_{t=2}^T\log\frac{q(x_t|x_{t-1},x_0)}{p_\theta(x_{t-1}|x_t)}-\log{p_\theta(x_0|x_1))}]\\ &=E_q[\frac{D_{KL}(q(x_T|x_0)||p_\theta(x_T))}{q(x_T|x_0)}+\sum_{t=2}^T\frac{D_{KL}(q(x_{t-1}|x_t,x_0)||p_\theta(x_{t-1}|x_t))}{q(x_{t-1}|x_t,x_0)}-\log{p_\theta(x_0|x_1))}] \end{aligned} L​=Eq(x1:T​∣x0​)​[logp(x0:T​)q(x1:T​∣x0​)​]=Eq​[pθ​(xT​)∏t=1T​pθ​(xt−1​∣xt​)∏t=1T​q(xt​∣xt−1​)​]=Eq​[−logpθ​(xT​)+t=1∑T​logpθ​(xt−1​∣xt​)q(xt​∣xt−1​)​]=Eq​[−logpθ​(xT​)+t=2∑T​logpθ​(xt−1​∣xt​)q(xt​∣xt−1​)​+logpθ​(x0​∣x1​)q(x1​∣x0​)​]=Eq​[−logpθ​(xT​)+t=2∑T​log(pθ​(xt−1​∣xt​)q(xt​∣xt−1​,x0​)​.q(xt−1​∣x0​)q(xt​∣x0​)​)+logpθ​(x0​∣x1​)q(x1​∣x0​)​]=Eq​[−logpθ​(xT​)+t=2∑T​logpθ​(xt−1​∣xt​)q(xt​∣xt−1​,x0​)​+t=2∑T​logq(xt−1​∣x0​)q(xt​∣x0​)​+logpθ​(x0​∣x1​)q(x1​∣x0​)​]=Eq​[−logpθ​(xT​)+t=2∑T​logpθ​(xt−1​∣xt​)q(xt​∣xt−1​,x0​)​+logq(x1​∣x0​)q(xT​∣x0​)​+logpθ​(x0​∣x1​)q(x1​∣x0​)​]=Eq​[−logpθ​(xT​)+t=2∑T​logpθ​(xt−1​∣xt​)q(xt​∣xt−1​,x0​)​+logpθ​(x0​∣x1​))q(xT​∣x0​)​]=Eq​[logpθ​(xT​)q(xT​∣x0​)​+t=2∑T​logpθ​(xt−1​∣xt​)q(xt​∣xt−1​,x0​)​−logpθ​(x0​∣x1​))]=Eq​[q(xT​∣x0​)DKL​(q(xT​∣x0​)∣∣pθ​(xT​))​+t=2∑T​q(xt−1​∣xt​,x0​)DKL​(q(xt−1​∣xt​,x0​)∣∣pθ​(xt−1​∣xt​))​−logpθ​(x0​∣x1​))]​

因此需要优化的项有三个
L 0 = D K L ( q ( x T ∣ x 0 ) ∣ ∣ p θ ( x T ) ) L 1 = ∑ t = 2 T D K L ( q ( x t − 1 ∣ x t , x 0 ) ∣ ∣ p θ ( x t − 1 ∣ x t ) ) L 2 = log ⁡ p θ ( x 0 ∣ x 1 ) \begin{aligned} L_0&=D_{KL}(q(x_T|x_0)||p_\theta(x_T))\\ L_1&=\sum_{t=2}^TD_{KL}(q(x_{t-1}|x_t,x_0)||p_\theta(x_{t-1}|x_t))\\ L_2&=\log{p_\theta(x_0|x_1)} \end{aligned} L0​L1​L2​​=DKL​(q(xT​∣x0​)∣∣pθ​(xT​))=t=2∑T​DKL​(q(xt−1​∣xt​,x0​)∣∣pθ​(xt−1​∣xt​))=logpθ​(x0​∣x1​)​

对于 L 0 L_0 L0​项,经过 T T T次( T T T一般很大)加噪后, q ( x T ∣ x 0 ) q(x_T|x_0) q(xT​∣x0​)与 p θ ( x T ) p_\theta(x_T) pθ​(xT​)基本等价于标准正态分布,因此 L 0 L_0 L0​项取值接近于0。

对于 L 2 L_2 L2​,感兴趣的可以浏览原文的3.3章节(具体实现见链接),最终作者发现优化 L 1 L_1 L1​项,模型的效果最佳,因此本章节只对 L 1 L_1 L1​进行推导。已知高斯分布 N ( x ; μ 1 , ∑ 1 ) \mathcal N(x;\mu_1,\sum_1) N(x;μ1​,∑1​)、 N ( x ; μ 2 , ∑ 2 ) \mathcal N(x;\mu_2,\sum_2) N(x;μ2​,∑2​)的KL散度公式为(具体推导可浏览生成模型VAE):

假设 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ​(xt−1​∣xt​)服从 N ( x ; μ θ , δ t I ) \mathcal N(x;\mu_\theta,\delta_tI) N(x;μθ​,δt​I),已知 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt−1​∣xt​,x0​)服从 N ( x ; μ t , δ t I ) \mathcal N(x;\mu_t,\delta_tI) N(x;μt​,δt​I)(均值和方差的式子见式2.2),则有
L 2 = ∑ t = 2 T D K L ( q ( x t − 1 ∣ x t , x 0 ) ∣ ∣ p θ ( x t − 1 ∣ x t ) ) = ∑ t = 2 T ( 1 2 ( n + 1 δ t 2 ∣ ∣ μ t − μ θ ∣ ∣ 2 − n + l o g 1 ) = ∑ t = 2 T ( 1 2 δ t 2 ∣ ∣ μ t − μ θ ∣ ∣ 2 ) \begin{aligned} L_2&=\sum_{t=2}^TD_{KL}(q(x_{t-1}|x_t,x_0)||p_\theta(x_{t-1}|x_t))\\ &=\sum_{t=2}^T(\frac{1}{2}(n+\frac{1}{\delta_t^2}||\mu_t-\mu_\theta||^2-n+log1)\\ &=\sum_{t=2}^T(\frac{1}{2\delta_t^2}||\mu_t-\mu_\theta||^2)\\ \end{aligned} L2​​=t=2∑T​DKL​(q(xt−1​∣xt​,x0​)∣∣pθ​(xt−1​∣xt​))=t=2∑T​(21​(n+δt2​1​∣∣μt​−μθ​∣∣2−n+log1)=t=2∑T​(2δt2​1​∣∣μt​−μθ​∣∣2)​
则 μ θ \mu_\theta μθ​需要拟合 μ t \mu_t μt​,结合式2.2, μ θ = 1 α t ( x t − 1 − α t 1 − α ˉ t ϵ θ ( x t ) ) \mu_\theta=\frac{1}{\sqrt{\alpha_t}}(x_t-\frac{1-\alpha_t}{\sqrt{1-\bar\alpha_t}}\epsilon_\theta(x_t)) μθ​=αt​ ​1​(xt​−1−αˉt​ ​1−αt​​ϵθ​(xt​)),可得
L 2 = ∑ t = 2 T ( ( 1 − α t ) 2 2 δ t 2 α t ( 1 − α ˉ t ) ∣ ∣ ϵ t − ϵ θ ( x t ) ∣ ∣ 2 ) L_2=\sum_{t=2}^T(\frac{(1-\alpha_t)^2}{2\delta_t^2\alpha_t(1-\bar\alpha_t)}||\epsilon_t-\epsilon_\theta(x_t)||^2) L2​=t=2∑T​(2δt2​αt​(1−αˉt​)(1−αt​)2​∣∣ϵt​−ϵθ​(xt​)∣∣2)

结合式子1.2以及坐标下降法,可得DDPM最终优化目标 L L L为
L = ∣ ∣ ϵ t − ϵ θ ( α ˉ t x 0 + 1 − α ˉ t ϵ t ) ∣ ∣ 2 L=||\epsilon_t-\epsilon_\theta(\sqrt{\bar \alpha_t}x_0+\sqrt{1-\bar\alpha_t}\epsilon_t)||^2 L=∣∣ϵt​−ϵθ​(αˉt​ ​x0​+1−αˉt​ ​ϵt​)∣∣2

结语

DDPM利用马尔科夫链建模图像生成的过程很巧妙,最终推导得到的式子也十分简单,确实是个很漂亮的工作

更多推荐

深度学习(生成式模型)——DDPM:denoising diffusion probabilistic models

本文发布于:2023-12-08 03:49:56,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1672272.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:深度   模型   DDPM   denoising   probabilistic

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!