去噪扩散概率模型(DDPM)的简单理解

Posted Xavier Jiezou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了去噪扩散概率模型(DDPM)的简单理解相关的知识,希望对你有一定的参考价值。

图1 DDPM 无条件控制生成的图像。 这些不是真实的人、地方、动物或物体。

前言

扩散模型最近在图像生成领域取得了巨大的成功,类似 OpenAI 的 DALL-E 2,Google 的 Imagen,以及 Stability AI 最近发行的能够达到商业级绘画目的的 Stable Diffusion 等,都是基于扩散模型来进行图像生成的。本文对知乎上各位大佬对于扩散模型(特别是 DDPM)的讲解进行了融合,带领大家深入浅出理解扩散和逆扩散过程。

数学基础

  1. 先验概率和后验概率
  • 先验概率:根据以往经验和分析得到的概率。它往往作为由因求果问题中的因出现,如 q ( X t ∣ X t − 1 ) q(X_t|X_t-1) q(XtXt1)

  • 后验概率:是指在得到结果的信息后重新修正的概率。是执果寻因问题中的因,如 p ( X t − 1 ∣ X t ) p(X_t-1|X_t) p(Xt1Xt)

  1. KL 散度

对于两个单一变量的高斯分布的 p p p q q q 而言,它们的 KL 散度为:

K L ( p , q ) = l o g σ 2 σ 1 + σ 1 2 + ( μ 1 − μ 2 ) 2 2 σ 2 2 − 1 2 KL(p, q)=log\\frac\\sigma_2\\sigma_1+\\frac\\sigma_1^2+(\\mu_1-\\mu_2)^22\\sigma_2^2-\\frac12 KL(p,q)=logσ1σ2+2σ22σ12+(μ1μ2)221

  1. 参数重整化

若希望从高斯分布 N ( μ , σ 2 ) N(\\mu, \\sigma^2) N(μ,σ2) 中采样,可以先从标准分布 N ( 0 , 1 ) N(0, 1) N(0,1) 采样出 z z z,再得到 σ ∗ z + μ \\sigma*z+\\mu σz+μ,这就是我们想要的采样结果。这样做的好处是将随机性转移到了 z z z 这个常量上,而 σ \\sigma σ μ \\mu μ 则当作仿射变换网络的一部分。

模型介绍

  1. 模型总览

图2 DDPM 是经过训练以逐渐去除噪声数据的参数化马尔可夫链。我们估计生成过程的参数。

DDPM 主要分为两个过程:

  • forward 加噪过程(从右往左)
  • reverse 去噪过程(从左往右)

加噪过程是指向数据集中的真实图像逐步加入高斯噪声,而去噪过程是指对加了噪声的图片逐步去噪,从而还原出真实图像。加噪过程满足一定的数学规律,不需要学习,而去噪过程则采用神经网络模型来学习。这样一来,神经网络模型就可以从一堆杂乱无章的噪声图片中生成真实图片了。

  1. 扩散过程
  • 逐步加噪

给定初始数据分布 x 0 ∼ q ( x ) x_0 \\sim q(x) x0q(x),我们定义一个前向扩散过程(forward diffusion process):我们向数据分布中逐步添加高斯噪声,加噪过程持续 T T T 次,产生一系列带噪声的图片 x 1 , . . . , x T x_1,...,x_T x1,...,xT。在由 x t − 1 x_t-1 xt1 加噪至 x t x_t xt 的过程中,噪声的标准差/方差是以一个在区间 ( 0 , 1 ) (0, 1) (0,1) 内的固定值 β T \\beta_T βT 来确定的,均值是以固定值 β T \\beta_T βT 和当前时刻的图片数据 x t − 1 x_t-1 xt1 来确定的。以上描述的加噪过程可以写成公式:

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), \\quad q(x_t|x_t-1) := \\mathcal N(x_t;\\sqrt1-\\beta_tx_t-1,\\beta_t\\mathbfI) q(x1:Tx0):=t=1Tq(xtxt1),q(xtxt1):=N(xt;1βt xt1,βtI)

上式的意思是:由 x t − 1 x_t-1 xt1得到 x t x_t xt的过程,满足分布 N ( x t ; 1 − β t x t − 1 , β t I ) \\mathcal N(x_t;\\sqrt1-\\beta_tx_t-1, \\beta_t\\mathbfI) N(xt;1βt xt1,βtI),因此噪声只由 β T \\beta_T βT x t − 1 x_t-1 xt1来确定,是一个固定值而不是一个可学习的过程。因此,只要有了 x 0 x_0 x0,并且提前确定每一步的固定值 β 1 , . . . , β T \\beta_1,...,\\beta_T β1,...,βT,我们就可以推出任意一部的加噪数据 x 1 , . . . , x T x_1,...,x_T x1,...,xT。值得注意的是,这里的加噪过程是一个马尔科夫链过程,即当前状态的概率只与上一时刻有关。

  • 加噪结果

随着 t t t 的不断增大,最终原始数据 x 0 x_0 x0 会逐步失去它的特征。最终当 T → ∞ T\\rightarrow\\infty T时, x T x_T xT以上是关于去噪扩散概率模型(DDPM)的简单理解的主要内容,如果未能解决你的问题,请参考以下文章

简单基础入门理解Denoising Diffusion Probabilistic Model,DDPM扩散模型

Diffusion扩散模型学习1——Pytorch搭建DDPM实现图片生成

DDPM(Denoising Diffusion Probabilistic Models)

扩散模型DDPM开源代码的剖析对应公式与作者给的开源项目,diffusion model

DDPM模型——pytorch实现

PyTorch - Diffusion Model 公式推导