Diffusion Models:生成扩散模型 编者:郑英林
zhengyinglin@stu.xmu.edu.cn
这个不是我原创的哈,是博采众长,参考了许多知乎以及论文以及博客,详细信息看 参考文献
目前最近在 AI 作画这个领域 Transformer 火的一塌糊涂,AI 画画效果从 18 年的 DeepDream噩梦中惊醒过来,开始从 2022 年 OpenAI 的 DALL·E 2[2] 引来插画效果和联想效果都达到惊人效果。
但是要了解: Transformer 带来 AI + 艺术,从语言开始遇到多模态,碰撞艺术火花 这个主题,需要引申很多额外的知识点,可能跟 CV、NLP 等领域大力出奇迹的方式不同,AI + 艺术会除了遇到 Transformer 结构以外,还会涉及到 VAE、ELBO、Diffusion Model 等一系列跟数学相关的知识。
Transformer + Art 系列中,今天新挖一个 Diffusion Models 的坑,跟 VAE 一样原理很复杂,实现很粗暴。据说生成扩散模型以数学复杂闻名,似乎比 VAE、GAN 要难理解得多,是否真的如此?扩散模型能少来点数学吗?扩散模型真的做不到一个简单点的理解吗?
在本文中,我们将研究扩散模型的理论基础,然后演示如何在 PyTorch 中使用扩散模型生成图像。Let's dive in!
Diffusion Model 基本介绍 扩散模型(Diffusion Models)发表以来其实并没有收到太多的关注,因为他不像 GAN 那样简单粗暴好理解。不过最近这几年正在生成模型领域异军突起,当前最先进的两个文本生成图像——OpenAI 的 DALL·E 2 和 Google 的 Imagen,都是基于扩散模型来完成的。
如今生成扩散模型的大火,则是始于 2020 年所提出的 DDPM(Denoising Diffusion Probabilistic Model),仅在 2020 年发布的开创性论文 DDPM 就向世界展示了扩散模型的能力,在图像合成方面击败了 GAN,所以后续很多图像生成领域开始转向 DDPM 领域的研究。
看了下网上很多文章在介绍 DDPM 时,上来就引入概率转移分布,接着就是变分推断,然后极大值似然求解和引入证据下界(Evidence Lower Bound)。一堆数学记号下来,先吓跑了前几周的我(当然,从这种介绍我们可以再次看出,DDPM 实际上与 VAE 的理论关系是非常紧密),再加之人们对传统扩散模型的固有印象,所以就形成了 “需要很高深的数学知识” 的错觉。
生成模型对比 还是先横向对一下最近比较火的几个生成模型 GAN、VAE、Flow-based Models、Diffusion Models。
GAN 由一个生成器(generator)和判别器(discriminator)组成,generator 负责生成逼真数据以 “骗” 过 discriminator,而 discriminator 负责判断一个样本是真实的还是 “造” 出来的。GAN 的训练其实就是两个模型在相互学习,能不能不叫“对抗”,和谐一点。
VAE 同样希望训练一个生成模型 x = g ( z ) ,这个模型能够将采样后的概率分布映射到训练集的概率分布。生成隐变量 z ,并且 z 是及含有数据信息又含有噪声,除了还原输入的样本数据以外,还可以用于生成新的数据。
Diffusion Models 的灵感来自non-equilibrium thermodynamics (非平衡热力学)。理论首先定义扩散步骤的马尔可夫链,以缓慢地将随机噪声添加到数据中,然后学习逆向扩散过程以从噪声中构造所需的数据样本。与 VAE 或流模型不同,扩散模型是通过固定过程学习,并且隐空间 z 具有比较高的维度。
总的来看,Diffusion Models 领域正处于一个百花齐放的状态,这个领域有一点像 GAN 刚提出来的时候,目前的训练技术让 Diffusion Models 直接跨越了 GAN 领域调模型的阶段,直接可以用来做下游任务。
直观理解Diffusion model 生成式模型 本质上是一组概率分布。如下图所示,左边是一个训练数据集,里面所有的数据都是从某个数据 p d a t a 中独立同分布取出的随机样本。右边就是其生成式模型(概率分布),在这种概率分布中,找出一个分布 p θ 使得它离 p d a t a 的距离最近。接着在 p θ 上采新的样本,可以获得源源不断的新数据。
但是往往 p d a t a 的形式是非常复杂的,而且图像的维度很高,我们很难遍历整个空间,同时我们能观测到的数据样本也有限。
Diffusion做的是什么事呢?
我们可以将任意分布,当然也包括我们感兴趣的 p d a t a ,不断加噪声,使得他最终变成一个纯噪声分布 N ( 0 , I ) 。怎么理解呢?
从概率分布的角度来看, 考虑下图瑞士卷形状的二维联合概率分布 p ( x , y ) ,扩散过程q非常直观,本来集中有序的样本点,受到噪声的扰动,向外扩散,最终变成一个完全无序的噪声分布。
概率分布的变化
而diffusion model其实是图上的这个 逆过程 p ,将一个噪声分布 N ( 0 , I ) 逐步地去噪以映射到 p d a t a ,有了这样的映射,我们从噪声分布中采样,最终可以得到一张想要的图像,也就是可以做生成了。
而 从单个图像样本来 看这个过程,扩散过程 q 就是不断往图像上加噪声直到图像变成一个纯噪声,逆扩散过程 p 就是从纯噪声生成一张图像的过程。
单个图像样本的变化
形式化解析Diffusion model Diffusion Models 既然叫生成模型,这意味着 Diffusion Models 用于生成与训练数据相似的数据。从根本上说,Diffusion Models 的工作原理,是通过连续添加高斯噪声来破坏训练数据,然后通过反转这个噪声过程,来学习恢复数据。
训练后,可以使用 Diffusion Models 将随机采样的噪声传入模型中,通过学习去噪过程来生成数据。也就是下面图中所对应的基本原理,不过这里面的图仍然有点粗。
更具体地说,扩散模型是一种隐变量模型(latent variable model),使用马尔可夫链(Markov Chain, MC)映射到 latent space。通过马尔可夫链,在每一个时间步 t 中逐渐将噪声添加到数据 x i 中以获得 后验概率 q ( x 1 : T ∣ x 0 ) ,其中 x 1 , … , x T 代表输入的数据同时也是 latent space。也就是说 Diffusion Models 的 latent space与输入数据具有相同维度。
后验概率:在贝叶斯统计中,一个随机事件或者一个不确定事件的后验概率(Posterior probability)是在考虑和给出相关证据或数据后所得到的条件概率。 wiki
马尔可夫链为状态空间中经过从一个状态到另一个状态的转换的随机过程。 该过程要求具备“无记忆”的性质:下一状态的概率分布只能由当前状态决定,在时间序列中它前面的事件均与之无关。 这种特定类型的“无记忆性”称作马可夫性质。
Diffusion Models 分为正向的扩散过程和反向的逆扩散过程。下图为扩散过程,从 x 0 到最后的 x T 就是一个马尔可夫链,表示状态空间中经过从一个状态到另一个状态的转换的随机过程。而下标则是 Diffusion Models 对应的图像扩散过程。
最终,从 x 0 输入的真实图像,经过 Diffusion Models 后被渐近变换为纯高斯噪声的图片 x T 。
模型训练主要集中在逆扩散过程。 训练扩散模型的目标是,学习正向的反过程:即训练概率分布 p θ ( x t − 1 ∣ x t ) 。通过沿着马尔可夫链向后遍历,可以重新生成新的数据 x 0 。
读到这里就有点意思啦,Diffusion Models 跟 GAN 或者 VAE 的最大区别在于不是通过一个模型来进行生成的,而是基于马尔可夫链,通过学习噪声来生成数据。
除了生成很好玩的高质量图片之外呢,Diffusion Models 还具有许多其他好处,其中最重要的是 训练过程中没有对抗 了,对于 GAN 网络模型来说,对抗性训练其实是很不好调试的,因为对抗训练过程互相博弈的两个模型,对我们来说是个黑盒子。另外在训练效率方面,扩散模型还具有可扩展性和可并行性,那这里面如何加速训练过程,如何添加更多数学规则和约束,扩展到语音、文本、三维领域就很好玩了,可以出很多新文章。
详解 Diffusion Model 上面已经清晰表示了 Diffusion Models 由正向过程(或扩散过程)和反向过程(或逆扩散过程)组成,其中输入数据逐渐被噪声化,然后噪声被转换回源目标分布的样本。
接下来会是一点点数学,只能说我尽量讲得简单一点,就是个马尔可夫链 + 条件概率分布。 核心在于如何使用神经网络模型,来求解马尔可夫过程的概率分布 。
Diffusion 前向过程(扩散过程) 所谓前向过程,即往图片上加噪声的过程。虽然这个步骤无法做到图片生成,但是这是理解 diffusion model 以及 构建训练样本 GT 至关重要的一步。
给定真实图片样本 x 0 ∼ q ( x ) ,diffusion 前向过程通过 T 次累计对其添加高斯噪声,得到 x 1 , x 2 , . . . , x T ,如下图的 q 过程。每一步的大小是由一系列的高斯分布 方差 的超参数 { β t ∈ ( 0 , 1 ) } t = 1 T 来控制的。 前向过程由于每个时刻 t 只与 t − 1 时刻有关,所以也可以看做马尔科夫过程:
(1) q ( x t | x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) , q ( x 1 : T | x 0 ) = ∏ t = 1 T q ( x t | x t − 1 ) . 这个过程中,随着 t 的增大, x t 越来越接近纯噪声。当 T → ∞ , x T 是完全的高斯噪声(下面会证明,且与均值系数 1 − β t 的选择有关)。
前向过程介绍结束前,需要讲述一下 diffusion 在实现和推导过程中要用到的两个重要特性。
特性 1:重参数(reparameterization trick) 重参数技巧在很多工作(gumbel softmax, VAE)中有所引用。如果我们要从某个分布中随机采样 (高斯分布) 一个样本, 这个过程是无法反传梯度的 。而这个通过高斯噪声采样得到 x t 的过程在 diffusion 中到处都是,因此我们需要通过重参数技巧来使得他可微。
最通常的做法是把随机性通过一个独立的随机变量 ( ϵ ) 引导过去。即如果要从高斯分布 z ∼ N ( z ; μ θ , σ θ 2 I ) 采样一个 z ,我们可以写成:
上式的 z 依旧是有随机性的, 且满足均值为 μ θ 方差为 σ θ 2 的高斯分布。这里的 μ θ , σ θ 2 可以是由参数 θ 的神经网络推断得到的。整个 “采样” 过程依旧梯度可导,随机性被转嫁到了 ϵ 上。
特性 2:任意时刻的 x t 可以由 x 0 和 β t 表示 在前向过程中,有一个性质非常棒,就是我们其实可以通过 x 0 和 β 直接得到 x t 。
首先我们令 α t = 1 − β t ,并且 α ― t = ∏ i = 1 t α i ,展开 x t 可以得到:
(2) x t = α t x t − 1 + 1 − α t ϵ t − 1 ;where ϵ t − 1 , ϵ t − 2 , ⋯ ∼ N ( 0 , I ) = α t α t − 1 x t − 2 + 1 − α t α t − 1 ϵ ¯ t − 2 ;where ϵ ¯ t − 2 merges two Gaussians (*). = … = α ¯ t x 0 + 1 − α ¯ t ϵ 由于两个独立高斯分布可加性,即 N ( 0 , σ 1 2 I ) + N ( 0 , σ 2 2 I ) ∼ N ( 0 , ( σ 1 2 + σ 2 2 ) I ) , 所以
因此在推导的第二行,我们混合两个高斯分布得到标准差为 1 − α t α t − 1 的混合高斯分布。
因此任意时刻的 x t 满足
(3) q ( x t | x 0 ) = N ( x t ; α ¯ t x 0 , ( 1 − α ¯ t ) I ) 实际上 β t 随着 t 增大是递增的,即 β 1 < β 2 < . . . < β T 。在 GLIDE 的 code 中, β t 是由 0.0001 到 0.02 线性插值(以 T = 1000 为基准, T 增加, β t 对应增大)。
一开始笔者一直不清楚为什么 Eq(1) 中diffusion 的均值每次要乘上 1 − β t 。明明 β t 只是方差系数,怎么会影响均值呢?替换为任何一个新的超参数,保证它 <1,也能够保证值域并且使得最后均值收敛到 0(但是方差并不为 1). 然而通过 Eq(3)(4),可以发现当 T → ∞ , x T ∼ N ( 0 , I ) . 所以 1 − β t 的均值系数能够稳定保证 x T 最后收敛到方差为 1 的标准高斯分布,且在 Eq(4) 的推导中也更为简洁优雅。
Diffusion 逆扩散过程 如果说前向过程 (forward) 是加噪的过程,那么逆向过程(reverse) 就是diffusion 的去噪推断过程。
如果我们能够逆转上述过程并从 q ( x t − 1 | x t ) 采样,就可以从高斯噪声 x T ∼ N ( 0 , I ) 还原出原图分布 x 0 ∼ q ( x ) 。在文献7中证明了如果 q ( x t | x t − 1 ) 满足高斯分布且 β t 足够小, q ( x t − 1 | x t ) 仍然是一个高斯分布。然而我们无法简单推断 q ( x t − 1 | x t ) ,因此我们使用深度学习模型(参数为 θ ,目前主流是 U-Net+attention 的结构)去预测这样的一个逆向的分布 p θ (类似 VAE):
(5-1) p θ ( X 0 : T ) = p ( x T ) ∏ t = 1 T p θ ( x t − 1 | x t ) ; (5-2) p θ ( x t − 1 | x t ) = N ( x t − 1 ; μ θ ( x t , t ) , Σ θ ( x t , t ) ) . 然而在论文中,作者把条件概率 p θ ( x t − 1 | x t ) 的方差直接取了 β t ,而不是上面说的需要网络去估计的 Σ θ ( x t , t ) ,所以说实际上只有均值需要网络去估计 。
讲到这里我们就发现其实正向扩散和逆扩散过程都是一个骨架对吧,都是马尔可夫,然后正态分布,然后一步一步的条件概率,唯一的区别就是正向扩散里每一个条件概率的高斯分布的均值和方差都是已经确定的(依赖于 β t 和 x 0 ),而逆扩散过程里面的均值和方差是我们网络要学出来。
逆扩散条件概率推导 虽然我们无法得到逆转过程的概率分布 q ( x t − 1 | x t ) ,但是如果知道 x 0 , q ( x t − 1 | x t , x 0 ) 就可以直接写出,这个玩意儿大概是这么个形式
(6) q ( x t − 1 | x t , x 0 ) = N ( x t − 1 ; μ ~ ( x t , x 0 ) , β t ~ I ) 贝叶斯公式
基本的条件概率定理
乘法定理:若P(A)>0
(b1) P ( A B C ) = P ( A ) P ( B | A ) P ( C | A B ) 带入贝叶斯公式
可以通过贝叶斯公式推导如下:
方 差 均 值 与 无 关 (7-1) q ( x t − 1 | x t , x 0 ) = q ( x t , x 0 , x t − 1 ) q ( x t , x 0 ) (7-2) = q ( x 0 ) q ( x t − 1 | x 0 ) q ( x t | x t − 1 , x 0 ) q ( x 0 ) q ( x t | x 0 ) (7-3) = q ( x t | x t − 1 , x 0 ) q ( x t − 1 | x 0 ) q ( x t | x 0 ) (7-4) ∝ exp ( − 1 2 ( ( x t − α t x t − 1 ) 2 β t + ( x t − 1 − α ― t − 1 x 0 ) 2 1 − a ― t − 1 − ( x t − α ― t x 0 ) 2 1 − a ― t ) ) (7-3) = exp ( − 1 2 ( ( α t β t + 1 1 − α ― t − 1 ) x t − 1 2 ⏟ x t − 1 方 差 − ( 2 α t β t x t + 2 a ― t − 1 1 − α ― t − 1 x 0 ) x t − 1 ⏟ x t − 1 均 值 + C ( x t , x 0 ) ⏟ 与 x t − 1 无 关 ) ) .
7-1带入了贝叶斯公式b2
7-2带入乘法公式b1,再整理一下就能得到7-3
这里是我自己推导的,只能说很艰难
7-3中巧妙地将 逆向 过程全部变回了 前向 ,即 ( x t − 1 , x 0 ) → x t ; x 0 → x t ; x 0 → x t − 1 ,
请注意,由于前向过程具有马尔可夫性质 q ( x t | x t − 1 , x 0 ) 实际上等价于 q ( x t | x t − 1 ) ,即公式(1),因此这里所有的概率分布我们都是已知的
7-4 分别写出其对应的高斯概率密度函数
7-5则整理成了 x t − 1 的高斯分布概率密度函数形式。
一般的高斯概率密度函数的指数部分应该写为 exp ( − ( x − μ ) 2 2 σ 2 ) = exp ( − 1 2 ( 1 σ 2 x 2 − 2 μ σ 2 x + μ 2 σ 2 ) )
因此稍加整理我们可以得到 (6) 中的方差和均值为:
β ~ t = 1 / ( α t β t + 1 1 − α ¯ t − 1 ) = 1 / ( α t − α ¯ t + β t β t ( 1 − α ¯ t − 1 ) ) = 1 − α ¯ t − 1 1 − α ¯ t ⋅ β t μ ~ t ( x t , x 0 ) = ( α t β t x t + α ¯ t − 1 1 − α ¯ t − 1 x 0 ) / ( α t β t + 1 1 − α ¯ t − 1 ) = ( α t β t x t + α ¯ 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 放着就不用管了可以拿来用了
关于均值 的话,根据 特性2 的公式(2),我们得知 x 0 = 1 α ― t ( x t − 1 − α ― t ϵ t ) ,因此带入上式可以得到
(8-3) μ ~ t = 1 α t ( x t − 1 − α t 1 − α ― t ε t ) , 可以看出,在给定 x 0 的条件下,后验条件高斯分布的的均值只和超参数, x t , ϵ t 有关,方差只与超参数有关。
通过8-1的方差以及8-3的均值, 我们就得到了 q ( x t − 1 | x t , x 0 ) 的 解析形式 。
训练损失 搞清楚逆扩散过程之后,现在算是搞清楚去噪推断过程。但是如何训练 Diffusion Models 以求得公式 (3) 中的均值 μ θ ( x t , t ) 和方差 Σ θ ( x t , t ) 呢?
在 VAE 中我们学过极大似然估计的作用: 对于真实的训练样本数据已知,要求模型的参数,可以使用极大似然估计 。
统计学 中,似然函数是一种关于 统计模型 参数的 函数 。给定输出x时,关于参数θ的似然函数L(θ|x)(在数值上)等于给定参数θ后变量X的概率:L(θ|x)=P(X=x|θ)。
Diffusion Models 通过极大似然估计,来找到逆扩散过程中马尔可夫链转换的概率分布,这就是 Diffusion Models 的训练目的。即最大化模型预测分布的对数似然,从Loss下降的角度就是最小化负对数似然:
这个过程很像VAE,即可以使用变分下界(VLB)来优化负对数似然。
我们回顾一下, KL 散度是一种不对称统计距离度量,用于衡量一个概率分布 P 与另外一个概率分布 Q 的差异程度。
连续分布的 KL 散度的数学形式是:
D KL ( P ∥ Q ) = ∫ − ∞ ∞ p ( x ) log ( p ( x ) q ( x ) ) d x KL散度的性质:
非对称性: D KL ( P ∥ Q ) ≠ D KL ( Q ∥ P ) D KL ( P ∥ Q ) ≥ 0 ,仅在 P = Q 时等于0
由于 KL散度非负 ,可得到 − log p θ ( x 0 ) ≤ − log p θ ( x 0 ) + D KL ( q ( x 1 : T | x 0 ) ∥ p θ ( x 1 : T | x 0 ) ) = − log p θ ( x 0 ) + E x 1 : T ∼ 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 [ log q ( x 1 : T | x 0 ) p θ ( x 0 : T ) + log p θ ( x 0 ) ] = E q [ log q ( x 1 : T | x 0 ) p θ ( x 0 : T ) ] Let L VLB = E q ( x 0 : T ) [ log q ( x 1 : T | x 0 ) p θ ( x 0 : T ) ] ≥ − E q ( x 0 ) log p θ ( x 0 ) 进一步对 L V L B 推导,可以得到熵与多个 KL 散度的累加,具体可见文献 [8] . 这里我就复制一波 Lil 的博客中的推导过程:
L VLB = E q ( x 0 : T ) [ log q ( x 1 : T | x 0 ) p θ ( x 0 : T ) ] = E q [ log ∏ 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 − 1 | x t , 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 − 1 | x t , 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 − 1 | x t , 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 q ( x T | x 0 ) p θ ( x T ) + ∑ t = 2 T log q ( x t − 1 | x t , x 0 ) p θ ( x t − 1 | x t ) − log p θ ( x 0 | x 1 ) ] = E q [ D KL ( q ( x T | x 0 ) ∥ p θ ( x T ) ) ⏟ L T + ∑ t = 2 T D KL ( q ( x t − 1 | x t , x 0 ) ∥ p θ ( x t − 1 | x t ) ) ⏟ L t − 1 − log p θ ( x 0 | x 1 ) ⏟ L 0 ] 让我们把这堆东西简化一下
L V L B = L T + L T − 1 + . . . + L 0 L T = D K L ( q ( x T | x 0 ) | | p θ ( x T ) ) L t = D K L ( q ( x t | x t − 1 , x 0 ) | | p θ ( x t | x t + 1 ) ) ; 1 ≤ t ≤ T − 1 L 0 = − log p θ ( x 0 | x 1 ) . 接下来我们对 L T , L t , L 0 这三种情况进行分类讨论:
首先,由于前向过程 q 没有可学习参数,而 x T 则是纯高斯噪声,因此 L T 可以当做常量忽略。
然后, L t 是KL散度,则可以看做拉近 2 个分布的距离:
第一个 q ( x t − 1 | x t , x 0 ) 分布我们已经在上一节推导出其解析形式,这是一个高斯分布,其均值和方差为
μ ~ t = 1 α t ( x t − 1 − α t 1 − α ― t ε t ) , β ~ t = 1 − α ¯ t − 1 1 − α ¯ t ⋅ β t 第二个分布 p θ ( x t − 1 | x t ) 是我们网络期望拟合的目标分布,也是一个高斯分布,均值用网络估计,方差被设置为了一个和 β t 有关的常数。
p θ ( x t − 1 | x t ) = N ( x t − 1 ; μ θ ( x t , t ) , Σ θ ( x t , t ) ) 我们知道如果有两个分布 p , q 都是高斯分布,则他们的KL散度为
K L ( p , q ) = log σ 2 σ 1 + σ 1 2 + ( μ 1 − μ 2 ) 2 2 σ 2 2 − 1 2 然后因为这两个分布的方差全是常数,和优化无关,所以其实优化目标就是两个分布均值的二范数:
(9) L t = E q [ ‖ μ ~ t ( x t , x 0 ) − μ θ ( x t , t ) ‖ 2 ] = E x 0 , ϵ [ ‖ 1 α t ( x t ( x 0 , ϵ ) − β t 1 − α ¯ t ϵ ) − μ θ ( x t ( x 0 , ϵ ) , t ) ‖ 2 ] ϵ ∼ N ( 0 , 1 ) 这个时候我们应该也是可以用网络直接预测 μ θ ( x t , t ) ,但是,可以看出来 μ θ ( x t , t ) 是要尽可能的去预测 1 α t ( x t − β t 1 − α ¯ t ϵ )
因为 x t 是 μ θ 的输入,其他的量都是常数,所以其中的未知量其实只有 ϵ ,所以我们干脆把 μ θ ( x t , t ) 定义为:
(10) μ θ ( x t , t ) = 1 α t ( x t − β t 1 − α ¯ t ϵ θ ( x t , t ) ) 也就是说不用网络直接预测 μ ~ t ( x t , x 0 ) ,而是用网络 ϵ θ ( x t , t ) 先预测噪声 ϵ ,然后把预测出来的噪声带入到定义好的表达式去计算出预测的均值,其实是一样的。
然后我们把公式10带入到 公式9中 L t 中里面得到
把 常 数 项 系 数 都 扔 了 , 作 者 说 这 样 更 好 训 练 L t = E x 0 , ϵ [ ‖ 1 α t ( x t − β t 1 − α ¯ t ϵ ) − 1 α t ( x t − β t 1 − α ¯ t ϵ θ ( x t , t ) ) ‖ 2 ] ϵ ∼ N ( 0 , 1 ) = E x 0 , ϵ [ ‖ ϵ − ϵ θ ( x t , t ) ‖ 2 ] ϵ ∼ N ( 0 , 1 ) 把常数项系数都扔了,作者说这样更好训练 = E x 0 , ϵ [ ‖ ϵ − ϵ θ ( α ― t x 0 + 1 − α ― t ϵ , t ) ‖ 2 ] , ϵ ∼ N ( 0 , 1 ) 经过这样一番推导之后就是个 L2 loss。网络的输入是一张和噪声线性组合的图片,然后要估计出来这个噪声。
最后 L 0 部分因为涉及太多细节,不过不影响我们理解,详细的可以参考 Diffusion Models:生成扩散模型 - 知乎
训练过程 训练过程如图左边 Algorithm 1 Training 部分:
从标准高斯分布采样一个噪声 ϵ ∼ N ( 0 , I ) ; 通过梯度下降最小化损失 ∇ θ | ϵ − z θ ( α ¯ t x 0 + 1 − α ¯ t ϵ , t ) | 2 ; 训练到收敛为止(训练时间比较长,T 代码中设置为 1000) 测试(采样)如图右边 Algorithm 2 Sampling 部分:
从标准高斯分布采样一个噪声 x T ∼ N ( 0 , I ) ; 从时间步 T 开始正向扩散迭代到时间步 1; 如果时间步不为 1,则从标准高斯分布采样一个噪声 z ∼ N ( 0 , I ) ,否则 z = 0 ; 根据高斯分布计算每个时间步 t 的噪声图;
快速回顾
正向 / 扩散过程 正向过程或者说是扩散过程,采用的是一个固定的 Markov chain 形式,即逐步地向图片添加高斯噪声:
(1) q ( x t | x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) , q ( x 1 : T | x 0 ) = ∏ t = 1 T q ( x t | x t − 1 ) . 在 DDPM 中, β t 是预先设置的定值参数。
扩散过程有一个重要的特性, 我们可以直接采样任意时刻 t 下的加噪结果 x t 。将 α t := 1 − β t 以及 α ¯ t := ∏ s = 1 t α s ,则我们可以得到:
q ( x t | x 0 ) := N ( x t ; α ¯ t x 0 , ( 1 − α ¯ t ) I ) 这个解析公式使得我们可以直接获得任意程度的加噪图片,方便后续的训练。
逆向过程 逆向过程从一张随机高斯噪声图片 x T 开始,通过逐步去噪生成最终的结果 x 0 。这个过程是一个Markov Chain,可以被定义为:
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 ) ) 这个过程可以理解为,我们根据 x t 作为输入,预测高斯分布的均值和方差,再基于预测的分布进行随机采样得到 x t − 1 。通过不断的预测和采样过程,最终生成一张真实的图片 x 0 。
模型训练 为了实现基于扩散模型的生成,DDPM 采用了一个 U-Net 结构的 Autoencoder 来对 t 时刻的噪声进行预测,即 ϵ θ ( x t , t ) 。网络训练时采用的训练目标非常简单:
此处 ϵ 是高斯噪声。这里,噪声预测网络以加噪图片作为输入,目标是预测所添加的噪声。 此训练目标即希望预测的噪声和真实的噪声一致。最终在 DDPM 中, 均值 μ θ 的定义为
μ θ ( x t , t ) = 1 α t ( x t − 1 − α t 1 − α ¯ t ϵ θ ( x t , t ) ) 在 DDPM 中,逆向过程中高斯分布的方差项 Σ θ 采用的是一个常数项 ,后续也有工作用另外的网络分支去单独预测方差项,来获得更好的生成效果。
总结 Diffusion Model 通过参数化的方式表示为马尔科夫链,这意味着隐变量 x 1 , … , x T 都满足当前时间步 t 只依赖于上一个时间步 t − 1 ,这样对后续计算很有帮助。 马尔科夫链中的转变概率分布 p θ ( x t − 1 | x t ) 服从高斯分布,在正向扩散过程当中高斯分布的参数是直接设定的,而逆向过程中的高斯分布参数是通过学习得到的。 Diffusion Model 网络模型扩展性和鲁棒性比较强,可以选择输入和输出维度相同的网络模型,例如类似于UNet的架构,保持网络模型的输入和输出 Tensor dims 相等。 Diffusion Model 的目的是对输入数据求极大似然函数,实际表现为通过训练来调整模型参数以 最小化数据的负对数似然的变分上限 在概率分布转换过程中,因为通过马尔科夫假设,目标函数第4点中的变分上限都可以转变为利用 KL 散度来计算,因此避免了采用蒙特卡洛采样的方式。 参考文献 https://zhuanlan.zhihu.com/p/549623622 https://zhuanlan.zhihu.com/p/449284962 https://zhuanlan.zhihu.com/p/532736667 https://zhuanlan.zhihu.com/p/525106459 https://lilianweng.github.io/posts/2021-07-11-diffusion-models/ Denoising Diffusion Probabilistic Models Diffusion Models Beat GANs on Image Synthesis