文章目录
- 一、背景
- (一)生成模型
- (二)数学理论基础
- (三)扩散模型的三种生成范式
- 二、文章概览
- (一)核心思想
- (二)前向过程
- (三)后向过程
- (四)模型训练
- 三、数学推导
- (一)前向扩散过程
- 1、证明扩散模型的前向过程是有具体的表达式可以计算的
- 2、证明可以通过一次计算就得到加噪任意 t t t次之后的 x t x_t xt
- (二)反向生成过程
- (三)训练生成模型的过程就是最大似然估计的过程
- 1、证明负对数似然的上界表达式
一、背景
(一)生成模型
变分自动编码器(VAE) 结合了自动编码器和变分推断的思想。它主要包括编码器和解码器两个部分。
- 编码器将输入数据映射到潜在空间的概率分布参数,通常是均值和方差。
- 解码器则从潜在空间的采样中重构原始数据。
VAE能够学习数据的潜在表示,并生成具有相似分布的新样本。在训练过程中,VAE的目标是最大化数据的边际似然,同时使潜在表示与先验分布(通常是高斯分布)的KL散度最小化。
生成对抗网络(GAN): 由生成器和判别器组成。
- 生成器尝试生成与真实数据样本相似的假数据
- 判别器则尝试区分真实数据和生成器生成的假数据。
在训练过程中,生成器和判别器相互对抗、相互提升,最终使得生成器能够生成逼真的数据,判别器则很难区分真假数据。
流模型(Flow-based Models) 是一类生成模型,旨在学习数据的概率分布以生成新的样本。
- 核心思想是设计一个可逆的变换,将高维输入空间映射到高维输出空间,并确保该变换在变换和逆变换时都具有可导性。
- 与传统的生成模型如GAN(生成对抗网络)或VAE(变分自编码器)不同,流模型试图通过可逆的变换从一个简单的先验分布(如高斯分布)生成数据,而不是通过从隐变量空间中抽样。
(二)数学理论基础
- 先验概率和后验概率
- 先验概率:根据以往经验和分析得到的概率,往往作为“由因求果“问题中的“因"出现,如 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xt∣xt−1);
- 后验概率:指在得到“结果“的信息后重新修正的概率,是“执果寻因“问题中的“因",如 p ( x t − 1 ∣ x t ) p(x_{t-1}|x_t) p(xt−1∣xt)。
- 条件概率的一般形式
P ( A , B , C ) = P ( C ∣ B , A ) P ( B , A ) = P ( C ∣ B , A ) P ( B ∣ A ) P ( A ) P ( B , C ∣ A ) = P ( B ∣ A ) P ( C ∣ A , B ) P(A,B,C)=P(C|B,A)P(B,A)=P(C|B,A)P(B|A)P(A)\\ P(B,C|A)=P(B|A)P(C|A,B) P(A,B,C)=P(C∣B,A)P(B,A)=P(C∣B,A)P(B∣A)P(A)P(B,C∣A)=P(B∣A)P(C∣A,B) - 马尔科夫链条件概率形式(马尔可夫链指当前状态的概率至于上一时刻有关)
P ( A , B , C ) = P ( C ∣ B , A ) P ( B , A ) = P ( C ∣ B ) P ( B ∣ A ) P ( A ) P ( B , C ∣ A ) = P ( B ∣ A ) P ( C ∣ B ) P(A,B,C)=P(C|B,A)P(B,A)=P(C|B)P(B|A)P(A)\\ P(B,C|A)=P(B|A)P(C|B) P(A,B,C)=P(C∣B,A)P(B,A)=P(C∣B)P(B∣A)P(A)P(B,C∣A)=P(B∣A)P(C∣B)
- 高斯分布的KL散度公式
两个单一变量的高斯分布 p p p和 q q q的KL散度为: K L ( p , q ) = l o g σ 2 σ 1 + σ 2 + ( μ 1 − μ 2 ) 2 2 σ 2 2 − 1 2 KL(p,q)=log\frac{\sigma_2}{\sigma_1}+\frac{\sigma^2+(\mu_1-\mu_2)^2}{2\sigma_2^2}-\frac{1}{2} KL(p,q)=logσ1σ2+2σ22σ2+(μ1−μ2)2−21 - 重参数化
以高斯分布为例:原本需要从 N ( μ , σ 2 ) N(\mu,\sigma^2) N(μ,σ2)中采样得到 z z z,重参数化技巧将其转化为了从正态分布 N ( 0 , 1 ) N(0,1) N(0,1)中采样得到 ε \varepsilon ε,从而 z = μ + ε σ z=\mu+\varepsilon \sigma z=μ+εσ,从而把随机性转移出了计算图,解决了采样导致梯度不可传递的问题,整个过程可以通过梯度下降来进行优化。
(三)扩散模型的三种生成范式
扩散模型(Diffusion Model)是一种新兴的生成式模型,其首先向数据分布中逐步添加随机噪声到预设的先验分布,然后通过学习其逆过程来重建新的数据样本。通常而言,扩散模型具有三种生成范式:
- Score Matching with Langevin Dynamics (SMLD),
- Denoising Diffusion Probabilistic Model (DDPM)
- Score-based Generative Model (SGM)
二、文章概览
(一)核心思想
文章提出的扩散概率模型(diffusion probabilistic models)是使用变分推理训练的参数化马尔可夫链,以在有限时间后生成与数据匹配的样本。
- 这个马尔可夫链包括前向过程和反向过程,前向过程就是不断往图像上加噪声直到图像变成一个纯噪声,后向过程就是从纯噪声生成一张图像的过程。
(二)前向过程
前向过程是加噪的过程,前向过程中图像 x t x_t xt只和上一时刻的 x t − 1 x_{t-1} xt−1有关, q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xt∣xt−1)表示的就是前向过程。
扩散模型的前向过程是有具体的表达式可以计算的,满足:
- 左式:表示整个前向过程,是一个后验估计,由右式累乘得到
- 右式:在前向过程中,单步转移概率定义为关于 x t − 1 x_{t-1} xt−1的高斯分布,均值和协方差是 x t − 1 x_{t-1} xt−1和 β t \beta_t βt的函数
(三)后向过程
后向过程是去噪的过程,公式表达为 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt−1∣xt)。DDPM的后向过程是利用神经网络 P θ ( x t − 1 ∣ x t ) P_\theta(x_{t-1}|x_t) Pθ(xt−1∣xt)来拟合 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt−1∣xt)。
- 左式:表示反向过程的联合概率密度
- 右式:在后向过程中,转移概率分布函数为关于 x t − 1 x_{t-1} xt−1的高斯分布,均值和协方差是 x t x_t xt和 t t t的函数
(四)模型训练
马尔可夫链的前向过程是有具体的表达式可以计算的,后向过程是利用神经网络来学习的。因此模型训练主要集中在后向过程(逆扩散过程)。训练扩散模型的目标是学习正向的反过程,也就是训练概率分布 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ(xt−1∣xt),通过沿着马尔科夫链向后遍历,可以重新生成新的数据 x 0 x_0 x0。
从数学表达式来看,训练生成模型的过程就是最大似然估计的过程,即对 p θ ( x 0 ) p_\theta(x_0) pθ(x0)的最大似然估计进行优化,论文给出了负对数似然的上界表达式:
训练算法:
- 从数据中抽取一个样本;
- 从1-T中随机选取一个时间t;
- 在GaussionDiffusion中采样一个随机噪声,加到 x 0 x_0 x0生成 x t x_t xt;
- 神经网络利用 x 0 x_0 x0和 t t t以及生成的 x t x_t xt预测噪声;
- 将神经网络Unet预测的噪声与之前GaussionDiffusion采样的随机噪声求L2损失,计算梯度,更新权重;
- 重复以上步骤,直到网络训练完成。
采样算法:
- 从标准正态分布采样出 x T x_T xT;
- 从 T , T − 1 , . . . , 2 , 1 T,T-1,...,2,1 T,T−1,...,2,1依次重复以下步骤:
(1)从标准正态分布采样 z z z;
(2)利用重参数化技巧得到$x_{t-1} $; - 循环结束后返回 x 0 x_0 x0。
三、数学推导
(一)前向扩散过程
1、证明扩散模型的前向过程是有具体的表达式可以计算的
由于在前向过程中,单步转移概率定义为关于 x t − 1 x_{t-1} xt−1的高斯分布,均值和协方差是 x t − 1 x_{t-1} xt−1和 β t \beta_t βt的函数,即:
可以利用重参数化技巧,将其改写成下面的式子:(就可以很直观的看到前向过程的噪声是怎么加的)
重参数化技巧:从高斯分布 N ( μ , σ 2 ) N(\mu,\sigma^2) N(μ,σ2)中采样一个噪声 ε \varepsilon ε,等价于先从标准正态分布 N ( 0 , 1 ) N(0,1) N(0,1)中采样得到一个噪声 z z z,然后乘以标准差 σ \sigma σ之后加上均值 μ \mu μ。在本文中, x t x_t xt是从高斯分布 N ( 1 − β t x t − 1 , β t I ) N(\sqrt{1-\beta_t}x_{t-1},\beta_tI) N(1−βtxt−1,βtI)中采样出的噪声,因此可以得到下边的式子。
所以可以知道前向过程中得到的每一步的数据是怎样的。
2、证明可以通过一次计算就得到加噪任意 t t t次之后的 x t x_t xt
由上一个证明可以知道: x t = 1 − β t x t − 1 + β t z t − 1 x_t=\sqrt{1-\beta_t}x_{t-1}+\sqrt{\beta_t}z_{t-1} xt=1−βtxt−1+βtzt−1,此时我们令 α t = 1 − β t \alpha_t=1-\beta_t αt=1−βt,即可进行如下推导:
再次根据重参数化技巧,可以得到任意时刻的 x t x_t xt满足如下的高斯分布:
(二)反向生成过程
1、求解神经网络 P θ ( x t − 1 ∣ x t ) P_\theta(x_{t-1}|x_t) Pθ(xt−1∣xt)
DDPM的后向过程是利用神经网络 P θ ( x t − 1 ∣ x t ) P_\theta(x_{t-1}|x_t) Pθ(xt−1∣xt)来拟合 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt−1∣xt)。
在论文中,作者把条件概率 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ(xt−1∣xt)的方差直接取成了 β t \beta_t βt,而不是上面的需要网络估计的 Σ θ ( x t , t ) Σ_θ(x_t, t) Σθ(xt,t),所以在下面对于逆转过程的概率分布 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt−1∣xt)的解析形式的求解,只需要估计均值即可。
2、求解逆转过程的概率分布 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(xt−1∣xt),但是如果知道 x 0 x_0 x0, q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t, x_0) q(xt−1∣xt,x0)就可以直接写出:
利用贝叶斯公式可以进行如下推导:
结合马尔可夫公式可以求得均值和方差:
由于 x 0 x_0 x0和 x t x_t xt之间的关系已知,所以可以进一步将均值化简为:
因此,在给定 x 0 x_0 x0 的条件下,后验条件高斯分布的均值只和超参数、 x t x_t xt、 ε t ε_t εt 有关,方差只与超参数有关。通过以上的方差和均值,就可以得到 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t, x_0) q(xt−1∣xt,x0)的解析形式。
(三)训练生成模型的过程就是最大似然估计的过程
在训练阶段,DDPM通过最大化训练数据的似然来学习扩散过程的参数。训练是通过优化负对数似然的常见变分界限来执行的:
1、证明负对数似然的上界表达式
KL 散度是一种不对称统计距离度量,用于衡量一个概率分布 P 与另外一个概率分布 Q 的差异程度。由于KL散度具有恒大于等于0的性质,因此:
进一步可以对上式的交叉熵的上界进行化简:
- 对于 L T L_T LT:由于前向过程 q q q没有可学习的参数, x T x_T xT是纯高斯噪声,因此可以当做常量忽略
- 对于 L 0 L_0 L0:当 t t t为1时,第二项中 L t − 1 L_{t-1} Lt−1得到的结果就是后面那一项 L 0 L_0 L0
- 所以整个的优化过程可以变成直接对于 L t − 1 L_{t-1} Lt−1的优化:
如果有两个分布 p,q 都是高斯分布,则他们的KL散度为:
第二项 L t − 1 L_{t-1} Lt−1中的两个分布都是高斯分布,而且这两个分布的方差全是常数,和优化无关,所以其实优化目标就是两个分布均值的二范数:
分布 q ( x t − 1 ∣ x T , x 0 ) q(x_{t-1}|x_T,x_0) q(xt−1∣xT,x0)是一个高斯分布,均值和方差在之前已经证明得到;分布 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ(xt−1∣xt)是网络期望拟合的目标分布,均值用网络估计,方差设置成了和 β t \beta_t βt有关的常数。
由于 x t x_t xt是 μ θ \mu_\theta μθ的输入,其他量是常数,所以未知量为 ε \varepsilon ε,此时可以将 μ θ ( x t , t ) \mu_\theta(x_t,t) μθ(xt,t)定义为:
这样就可以不用网络直接预测 μ θ ( x t , t ) \mu_\theta(x_t,t) μθ(xt,t),而是用网络 ε θ ( x t , t ) \varepsilon_\theta(x_t,t) εθ(xt,t)先预测噪声 ε \varepsilon ε,然后带入到表达式计算出预测的均值。
最终作者经过这样一番推导之后得到了如下的L2 loss:
网络的输入是一张和噪声线性组合的图片,然后要估计出来这个噪声:
参考:
54、Probabilistic Diffusion Model概率扩散模型理论与完整PyTorch代码详细解读
【生成模型】DDPM概率扩散模型(原理+代码)
DDPM交叉熵损失函数推导
DDPM(Denoising Diffusion Probabilistic Models)扩散模型简述
扩散模型(Diffusion Model)奠基之作:DDPM 论文解读
一文解释 Diffusion Model (一) DDPM 理论推导