DDPM 是一种生成模型,它通过模拟一个逐步向数据添加噪声然后逐步去除噪声的过程来生成新的数据样本。这个过程类似于物理学中的扩散过程,因此得名“扩散模型”。
去噪过程主要是指从完全噪声的图像开始,通过逐步减少噪声,最终生成一个清晰的图像。去噪过程的简单描述:
DDPM 的核心思想是通过两个主要的步骤来工作:
前向扩散过程(Forward diffusion process):在这个过程中,模型逐步向输入数据添加噪声,直到数据变成纯粹的噪声。这个过程是完全可逆的,即给定足够的信息,可以从噪声状态恢复到原始数据。
反向去噪过程(Reverse denoising process):在这个过程中,模型学习如何从噪声状态逐步去除噪声,直到恢复出原始数据。这个过程是通过训练一个神经网络来实现的,该网络学习在每个时间步长上预测和去除噪声。
是通过一个预定义的噪声调度(noise schedule)来实现的。这个过程是一个确定性的数学过程,噪声调度描述了如何逐步向数据在每个时间步长中添加多少噪声,直到数据变成纯粹的噪声。不是通过神经网络实现的。
确定噪声调度的策略,例如线性、余弦或 sigmoid 调度。
定义每个时间步长上添加的噪声量。
Alpha 值(α):Alpha 值是与每个时间步长相关的参数,它决定了在该步长中数据的噪声水平。Alpha 值通常是累积的,即 α_cumprod
,表示从初始时间步长到当前时间步长的累积噪声水平。
Beta 值(β):Beta 值是 Alpha 值的衍生参数,通常用于计算每个时间步长的具体噪声量。Beta 值是相邻两个时间步长的 Alpha 值的比率,即 β_t = 1 - (α_cumprod_t / α_cumprod_{t-1})
。
在每个时间步长 t,数据
x
t
x_t
xt 是通过以下公式从上一个时间步长
x
t
−
1
x_{t−1}
xt−1计算得到的:
x
t
=
1
−
β
t
⋅
x
t
−
1
+
β
t
⋅
ϵ
x_t=\sqrt{1-\beta_t}\cdot x_{t-1}+\sqrt{\beta_t}\cdot\epsilon
xt=1−βt⋅xt−1+βt⋅ϵ
其中,
ϵ
\epsilon
ϵ 是从某个分布(通常是高斯分布)中采样的噪声
噪声调度的目标是确保在训练过程中,模型能够逐步学习如何从增加的噪声中恢复数据,并且在采样过程中,模型能够逐步去除噪声以生成高质量的样本。
每个时间步长 t 的噪声量是通过一个预定义的 beta 值( β t β_t βt)来控制的。这些 beta 值可以是以下策略:
线性调度:Beta 值随时间步长线性增加。
余弦调度:Beta 值随时间步长按照余弦函数变化。
Sigmoid 调度:Beta 值随时间步长按照 sigmoid 函数变化。
def linear_beta_schedule(timesteps):
"""
linear schedule, proposed in original ddpm paper
"""
scale = 1000 / timesteps
beta_start = scale * 0.0001
beta_end = scale * 0.02
return torch.linspace(beta_start, beta_end, timesteps, dtype = torch.float)
def cosine_beta_schedule(timesteps, s=0.008): # Strong
"""
cosine schedule as proposed in https://openreview.net/forum?id=-NEXDKk8gZ
生成扩散模型(如扩散概率模型)中的 beta 值序列,用于扩散模型中的噪声调度
timesteps:时间步数,即扩散过程中的步数
s:一个小的偏移量,默认值为 0.008,用于调整余弦函数的形状。
"""
steps = timesteps + 1
x = torch.linspace(0, timesteps, steps) # 生成时间步序列
alphas_cumprod = torch.cos((x / timesteps + s) / (1 + s) * math.pi * 0.5) ** 2 # 使用余弦函数计算积累alpha值
alphas_cumprod = alphas_cumprod / alphas_cumprod[0] # 归一化
betas = 1 - (alphas_cumprod[1:] / alphas_cumprod[:-1]) # 根据累积 alpha 值计算得到的,表示相邻两个时间步的 alpha 值的比率
return torch.clip(betas, 0.0001, 0.9999) # 将 betas 在 [0.0001, 0.9999] 的范围内
def sigmoid_beta_schedule(timesteps, start = -3, end = 3, tau = 1, clamp_min = 1e-5):
"""
sigmoid schedule
proposed in https://arxiv.org/abs/2212.11972 - Figure 8
better for images > x, when used during training
"""
steps = timesteps + 1
t = torch.linspace(0, timesteps, steps, dtype = torch.float) / timesteps
v_start = torch.tensor(start / tau).sigmoid()
v_end = torch.tensor(end / tau).sigmoid()
alphas_cumprod = (-((t * (end - start) + start) / tau).sigmoid() + v_end) / (v_end - v_start)
alphas_cumprod = alphas_cumprod / alphas_cumprod[0]
betas = 1 - (alphas_cumprod[1:] / alphas_cumprod[:-1])
return torch.clip(betas, 0, 0.999)
是通过神经网络实现的。在这个过程中,神经网络被训练来学习如何从每个时间步长的噪声状态逐步恢复到原始数据。这个网络通常是一个 U-Net 结构的网络,它接受当前的噪声状态和时间步长作为输入,并输出预测的去噪样本。
设计一个神经网络(通常是 U-Net 结构)来学习在每个时间步长上去除噪声。
网络的输入是带噪声的样本和当前的时间步长,输出是预测的去噪样本。
DDPM 的关键特点包括:
逐步去噪:模型不是一次性从噪声中恢复数据,而是通过一系列小步骤逐步去除噪声,这有助于模型更好地学习数据的复杂结构。
概率框架:DDPM 是建立在概率框架上的,它不仅学习数据的分布,还能够生成新的样本,这些样本遵循与训练数据相同的分布。
灵活性:DDPM 可以应用于各种类型的数据,包括图像、文本和音频等。
有4种类型的生成模型,即GAN、VAE、Flow、Diffusion的模型。它们在生成高质量样本方面获得了巨大的成功,但每一种都有其自身的一些局限性。例如,GAN模型由于其对抗性训练的性质,以潜在的不稳定的训练和较少的生成多样性而闻名。VAE依赖于代用损失。基于Flow的模型必须使用专门的架构来构建可逆变换。
DDPM(Denoising Diffusion Probabilistic Models)和 GANs(Generative Adversarial Networks)都是生成模型,它们的目标是从给定的数据分布中学习并生成新的样本。尽管它们都用于生成任务,但它们的工作原理和训练方法有所不同。
DDPM 与 GANs 的关系:
DDPM:DDPM 通过逐步向数据添加噪声然后逐步去除噪声的过程来生成数据。它使用一个前向扩散过程将数据转换为噪声,然后通过一个反向去噪过程从噪声中恢复数据。这个过程是确定性的,并且依赖于一个神经网络来学习如何在每个时间步长上去除噪声。
GANs:GANs 由两个网络组成:生成器(Generator)和判别器(Discriminator)。生成器试图生成与真实数据相似的样本,而判别器则试图区分生成的样本和真实样本。这两个网络通过对抗训练过程相互竞争,最终生成器学会生成高质量的样本。
DDPM:DDPM 的训练通常比 GANs 更稳定,因为它不涉及对抗训练,减少了模式崩溃(mode collapse)的风险。
GANs:GANs 的训练可能不稳定,容易出现模式崩溃问题,即生成器生成的样本多样性不足。
DDPM:DDPM 生成的样本质量通常很高,尤其是在图像生成任务中,能够生成细节丰富、多样性高的图像。
GANs:GANs 在生成高质量样本方面也非常成功,但可能需要仔细调整网络结构和训练参数以避免过拟合和模式崩溃。
定义前向扩散过程:
确定噪声调度的策略,例如线性、余弦或 sigmoid 调度。
定义每个时间步长上添加的噪声量。
定义反向去噪过程:
设计一个神经网络(通常是 U-Net 结构)来学习在每个时间步长上去除噪声。
网络的输入是带噪声的样本和当前的时间步长,输出是预测的去噪样本。
训练模型:
使用真实数据作为目标,训练网络学习如何从噪声中恢复数据。
使用损失函数(如均方误差)来衡量网络输出与真实数据之间的差异,并优化网络参数。
采样生成:
从纯噪声开始,使用训练好的网络逐步去除噪声,直到生成最终的样本。
可以通过调整采样过程中的参数(如时间步长)来控制生成样本的多样性和质量。
DDPM:
DDIM:
DDPM:
DDIM:
[1] Ho et al., 2020, To represent the reverse process, we use a U-Net backbone similar to an unmasked PixelCNN++ with group normalization throughout.
[2] Ho et al., 2020, We set T = 1000 for all experiments …
[3] Song et al., 2020, We present denoising diffusion implicit models (DDIMs)…a non-Markovian deterministic sampling process
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务