Diffusion:通过扩散和逆扩散过程生成图像的生成式模型

在当今人工智能大火的时代,AIGC 可以帮助用户完成各种任务。作为继 GAN 之后 AIGC 主流模型的 DDPM,也时常在各种论文中被提起。DDPM (Denoising Diffusion Probabilistic Models) 本质就是一种扩散模型 (diffusion),可以用来生成图片或者为图片去噪。

Diffusion 定义了一个扩散的马尔科夫过程,每一步逐渐将随机噪声添加到数据中,然后通过学习逆扩散过程恢复数据以实现从噪声中构建所需的数据样本。和 GAN 一样,在大量数据上训练之后,diffusion 不需要任何文本输入就可以生成图像。

在这里插入图片描述

本文不再按照论文解读的方式逐段记录,并且略过其中繁杂的数学证明,只专注于介绍 diffusion 模型本身,主要基于 DDPM。本文参考 What are Diffusion Models?扩散模型(Diffusion Model)——由浅入深的理解,更多参考资料如下:

一. 背景

随着人工智能生成能力的不断进步,内容生产已经从用户生成内容 (UGC) 到专业生成内容 (PGC) ,再到人工智能生成内容 (AIGC, AI generated content)。从 AI 作画到 AI 视频等各种 AI 生成任务层出不穷,预示着 AIGC 时代已然拉开帷幕。

在这里插入图片描述

AIGC 主要依赖一些生成式模型,如 GANVAEFlow-based model 等,但这些模型都有一些自身的局限性,难以稳定且高质量地完成 AIGC 的任务。现在 AIGC 的主流模型使用的基本都是 DDPM,这是一种经典的 扩散模型 (diffusion model)。扩散模型定义了一个扩散的马尔科夫过程,每一步逐渐将随机噪声添加到数据中,然后通过学习逆扩散过程恢复数据以实现从噪声中构建所需的数据样本。与 VAE 和流模型不同,扩散模型是通过固定程序学习的,并且隐变量都具有与原始数据相同的维度。

马尔科夫过程:指具有马尔科夫性质的随机过程,即下一个状态的发生仅依赖于当前状态,而与过去状态的序列无关。这一性质也被称为 “无记忆性” 或 “马尔科夫性”。具体来说,考虑一个随机过程,其状态在不同时间点可以取不同的值。如果这个过程满足马尔科夫性,那么给定当前时刻的状态,未来的状态只与当前状态有关,而与过去状态的历史路径无关。这种性质可以表示为:
P ( X n + 1 = x ∣ X n = x n , X n − 1 = x n − 1 , … , X 0 = x 0 ) = P ( X n + 1 = x ∣ X n = x n ) P(X_{n+1} = x | X_n = x_n, X_{n-1} = x_{n-1}, \ldots, X_0 = x_0) = P(X_{n+1} = x | X_n = x_n) P(Xn+1=xXn=xn,Xn1=xn1,,X0=x0)=P(Xn+1=xXn=xn)

其实生成式建模的扩散思想早在 2015 年就在 diffusion probabilistic models 1 中被提出,但直到 2019 年斯坦福大学发布的 noise-conditioned score network 2 和 2020 年 Google Brain 发布的 denoising diffusion probabilistic models 3 改进了模型方法,才引发了 diffusion 模型的热潮。目前,包括 OpenAI 的 GLIDE 和 DALL-E 2,海德堡大学的 Latent Diffusion 和 Google Brain 的 ImageGen,都基于 diffusion 模型。

二. Diffusion 模型

Diffusion 模型的灵感来自非平衡热力学,通过定义一个扩散步骤的马尔科夫链:缓慢地将具有高斯分布的随机噪声添加到数据中,原始图片随着噪声的不断加入最后变为一个纯噪声图片;然后学习优化逆扩散过程,最终实现从噪声中构建所需的数据样本,反向过程可以用来生成图片。
在这里插入图片描述

如图所示,diffusion 模型包括前向和反向两个过程,无论是前向过程还是反向过程都是一个参数化的马尔科夫链 (Markov chain):

  • 前向过程 (forward process):又称为 扩散过程,图中 x 0 → x T x_0 \rightarrow x_T x0xT 的过程,表示 对图片逐渐加噪
  • 反向过程 (reverse process):又称为 逆扩散过程,图中 x T → x 0 x_T \rightarrow x_0 xTx0 的过程,表示 对图片去噪复原,可以用来生成图像;

对图片添加噪声其实就是在图像的每个像素上加入从高斯分布中随机抽取的值,使图像中的每个像素产生小的随机扰动,从而模拟实际图像中的随机噪声。
假设原始图像为 I ( x , y ) I(x, y) I(x,y),其中 ( x , y ) (x, y) (x,y) 表示图像中的像素坐标。对图像添加高斯噪声可以表示为:
I noisy ( x , y ) = I ( x , y ) + N ( x , y ) I_{\text{noisy}}(x, y) = I(x, y) + N(x, y) Inoisy(x,y)=I(x,y)+N(x,y)
其中噪声服从正态分布,即 N ( x , y ) ∼ N ( 0 , σ 2 ) N(x, y) \sim \mathcal{N}(0, \sigma^2) N(x,y)N(0,σ2)

1. 扩散过程

如上文所说,扩散过程 x 0 → x T x_0 \rightarrow x_T x0xT 对图片逐渐加噪。 x 0 x_0 x0 是从真实数据集中采样得到的一张图片,对 x 0 x_0 x0 逐渐添加具有高斯分布的噪声,图片逐会变得模糊,当 T T T 足够大时, x T x_T xT 为标准正态分布。由于每次添加的噪声是已知的,即 q ( x t + 1 ∣ x t ) q (x_{t+1} \mid x_t) q(xt+1xt) 是已知的,因此可以根据马尔科夫过程的性质,递归得到 q ( x T ∣ x 0 ) q (x_{T} \mid x_0) q(xTx0)
在这里插入图片描述

此处不再赘述公式推导的过程,详见 What are Diffusion Models?扩散模型(Diffusion Model)——由浅入深的理解由浅入深了解Diffusion ModelDiffusion扩散模型大白话讲解,看完还不懂?不可能! 等。

2. 逆扩散过程

如上文所说,逆扩散过程 x T → x 0 x_T \rightarrow x_0 xTx0 对图片去噪复原来生成图像。由于扩散过程的 T T T 取足够大时, x T x_T xT 为标准正态分布,因此 要想生成图片可以直接从标准正态分布的图像逆扩散回去就可以得到想要的图像。于是问题的关键就是学习逆扩散过程。

逆扩散不像前向过程每一步是固定的,逆扩散很难从后一张图像中去噪得到前一张图像,即 q ( x t − 1 ∣ x t ) q (x_{t-1} \mid x_t) q(xt1xt) 是未知的。因此只能用 p θ ( x t − 1 ∣ x t ) p_\theta (x_{t-1} \mid x_t) pθ(xt1xt) 来近似代替 q ( x t − 1 ∣ x t ) q (x_{t-1} \mid x_t) q(xt1xt),于是 逆扩散的学习过程就成了训练 p θ ( x t − 1 ∣ x t ) p_\theta (x_{t-1} \mid x_t) pθ(xt1xt) 网络,文中称为 U-Net。
在这里插入图片描述

虽然 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_0x_t) q(xt1x0xt) 是可知的。因此我们可以用 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) 进行训练。此处不赘述公式推导的过程。

3. 训练方法

Diffusion 的损失函数进行了大量的数学推导,核心思想就是最小化 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) 的 KL 散度。
在这里插入图片描述

其中 x 0 x_0 x0 表示原始图像, t t t 表示时间步长, ϵ \epsilon ϵ 表示扩散过程添加的噪声, ϵ θ \epsilon _{\theta} ϵθ 表示逆扩散过程预测的噪声。每一轮训练包含:

  1. 选择随机时间步长 t t t 并将其编码;
  2. 将时间步长 t t t 对应的高斯噪声 ϵ \epsilon ϵ 应用到原始图像 x 0 x_0 x0 中得到噪声图像 x t x_t xt
  3. 将编码的 t t t 和噪声图像 x t x_t xt 传入 U-Net,预测其噪声 ϵ ^ \hat{\epsilon} ϵ^,然后和真实噪声 ϵ \epsilon ϵ 计算损失,反向优化 U-Net;

在这里插入图片描述

这里的 U-Net 是一个 U 字形的网络,它包含编码器和解码器两部分。编码阶段,图像不断卷积并下采样,通道数变多,大小减小(也有是保持不变);解码阶段,图像不断卷积并上采样,通道数变少,大小增大(或保持不变)。为了避免遗忘,还引入了残差机制:
在这里插入图片描述

三. 图像生成

训练完 p θ ( x t − 1 ∣ x t ) p_\theta (x_{t-1} \mid x_t) pθ(xt1xt) 后,就可以通过逆扩散过程生成图像:
在这里插入图片描述

具体过程是:

  1. 随机生成高斯噪声作为 x T x_T xT
  2. 反向扩散 T T T 轮,每一轮将前一轮得到的去噪图像 x t x_t xt 作为噪声图像,使用 U-Net 去噪得到 x t − 1 x_{t-1} xt1
  3. 逆扩散完成后,即可得到高清图像 x 0 x_0 x0

在这里插入图片描述

四. 实验

详见 https://arxiv.org/pdf/2006.11239.pdf

网上有很多 DDPM 的实现代码,包括论文中基于 tensorflow 的实现,还有基于 pytorch 的实现,感兴趣的可以自行复现。

五. 总结

Diffusion 其实就是一个扩散和逆扩散的过程:先给一张图片逐步加噪声直到变成纯粹的噪声,然后再对噪声进行去噪得到真实的图片。所谓的扩散模型就是让神经网络学习预测噪声,学习完成后可以从高斯分布还原出原始图像。Diffusion 和其他模型最大的区别是它的隐空间特征数和原图是同尺寸大小的,当然后面也有基于压缩的 latent diffusion model 4

Diffusion 本质上是一种图像生成模型,在给定数据集上训练完成后,不需要接受文本输入以引导图像生成,就可以生成图像。Diffusion 还可以用于图像去噪、图像修复、图像插值、图像超分辨率等任务。现在大火的最 GLIDE5、DALLE26、Imagen7,以及一系列的 Image Editing 方法,也都是基于 diffusion。


  1. Sohl-Dickstein J, Weiss E, Maheswaranathan N, et al. Deep unsupervised learning using nonequilibrium thermodynamics[C]//International conference on machine learning. PMLR, 2015: 2256-2265. ↩︎

  2. Song Y, Ermon S. Generative modeling by estimating gradients of the data distribution[J]. Advances in neural information processing systems, 2019, 32. ↩︎

  3. Ho J, Jain A, Abbeel P. Denoising diffusion probabilistic models[J]. Advances in neural information processing systems, 2020, 33: 6840-6851. ↩︎

  4. Rombach, Robin, et al. “High-Resolution Image Synthesis with Latent Diffusion Models.” arXiv preprint arXiv:2112.10752 (2021). ↩︎

  5. Nichol, Alex, et al. “Glide: Towards photorealistic image generation and editing with text-guided diffusion models.” arXiv preprint arXiv:2112.10741 (2021). ↩︎

  6. Ramesh, Aditya, et al. “Hierarchical text-conditional image generation with clip latents.” arXiv preprint arXiv:2204.06125 (2022). ↩︎

  7. Saharia, Chitwan, et al. “Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding.” arXiv preprint arXiv:2205.11487 (2022). ↩︎

  • 18
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值