DDPM/DDIM去噪扩散概率模型和GANs

定义

DDPM 是一种生成模型,它通过模拟一个逐步向数据添加噪声然后逐步去除噪声的过程来生成新的数据样本。这个过程类似于物理学中的扩散过程,因此得名“扩散模型”。

去噪过程主要是指从完全噪声的图像开始,通过逐步减少噪声,最终生成一个清晰的图像。去噪过程的简单描述:

  1. 初始步骤(噪声):
    在初始步骤中,图像是纯噪声,此时的图像没有任何结构和可辨识的特征,看起来为随机的像素点。
  2. 中间步骤:
    模型通过多个时间步(Timesteps)将噪声逐渐减少,每一步都试图恢复更多的图像信息。
    • 早期阶段,图像中开始出现一些模糊的结构和形状。虽然仍然有很多噪声,但可以看到一些基本轮廓和大致的图像结构

    • 中期阶段,图像中的细节开始变得更加清晰。面部特征如眼睛、鼻子和嘴巴开始显现,噪声显著减少,图像的主要轮廓和特征逐渐清晰。

  3. 最终步骤(完全去噪):
    在最后的步骤中,噪声被最大程度地去除,图像变清晰。**

步骤

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} xt1计算得到的:
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 xt1+β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.float64)

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 > 64x64, when used during training
    """
    steps = timesteps + 1
    t = torch.linspace(0, timesteps, steps, dtype = torch.float64) / 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 可以应用于各种类型的数据,包括图像、文本和音频等。

与GANs比较

有4种类型的生成模型,即GAN、VAE、Flow、Diffusion的模型。它们在生成高质量样本方面获得了巨大的成功,但每一种都有其自身的一些局限性。例如,GAN模型由于其对抗性训练的性质,以潜在的不稳定的训练和较少的生成多样性而闻名。VAE依赖于代用损失。基于Flow的模型必须使用专门的架构来构建可逆变换。

在这里插入图片描述
GAN/VAE/FLOW/DIff

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 在生成高质量样本方面也非常成功,但可能需要仔细调整网络结构和训练参数以避免过拟合和模式崩溃。

训练过程

  1. 定义前向扩散过程:

     确定噪声调度的策略,例如线性、余弦或 sigmoid 调度。
     定义每个时间步长上添加的噪声量。
    
  2. 定义反向去噪过程:

     设计一个神经网络(通常是 U-Net 结构)来学习在每个时间步长上去除噪声。
     网络的输入是带噪声的样本和当前的时间步长,输出是预测的去噪样本。
    
  3. 训练模型:

     使用真实数据作为目标,训练网络学习如何从噪声中恢复数据。
     使用损失函数(如均方误差)来衡量网络输出与真实数据之间的差异,并优化网络参数。
    
  4. 采样生成:

     从纯噪声开始,使用训练好的网络逐步去除噪声,直到生成最终的样本。
     可以通过调整采样过程中的参数(如时间步长)来控制生成样本的多样性和质量。
    

DDIM 去噪扩散隐式模型

DDPM
DDIM

训练/推理过程的差异

DDPM:

  • DDPM 的训练分为前向扩散和反向去噪两个部分:
    前向扩散逐步给图像添加噪声。
    反向去噪使用 U-Net 模型,通过最小化预测噪声和实际噪声的差异来训练,逐步去掉这些噪声。
    • Ho et al., 2020, To represent the reverse process, we use a U-Net backbone similar to an unmasked PixelCNN++ with group normalization throughout.
  • 但需要处理大量的时间步(比如1000步),训练时间相对DDIM来说更长。
    • Ho et al., 2020, We set T = 1000 for all experiments …

DDIM:

  • DDIM 的训练与 DDPM 类似,但使用非马尔可夫 的确定性采样过程。
    • Song et al., 2020, We present denoising diffusion implicit models (DDIMs)…a non-Markovian deterministic sampling process

生成图像的差异

DDPM:

  • 生成的图像质量很高,每一步去噪都会使图像变得更加清晰,但步骤多,整个过程比DDIM慢。

DDIM:

  • 步骤少,生成速度快,且生成的图像质量与 DDPM 相当。
    • Song et al., 2020, Notably, DDIM is able to produce samples with quality comparable to 1000 step models within 20 to 100 steps …

为什么 DDIM 更快

  1. 步骤更少:DDIM 在推理过程中减少了很多步骤。例如,DDPM 可能需要 1000 步,而 DDIM 可能只需要 50-100 步。
    Song et al., 2020, Notably, DDIM is able to produce samples with quality comparable to 1000 step models within 20 to 100 steps, which is a 10× to 50× speed up compared to the original DDPM. Even though DDPM could also achieve reasonable sample quality with 100× steps, DDIM requires much fewer steps to achieve this; on CelebA, the FID score of the 100 step DDPM is similar to that of the 20 step DDIM.
  2. 非马尔可夫采样
    Song et al., 2020, These non-Markovian processes can correspond to generative processes that are deterministic, giving rise to implicit models that produce high quality samples much faster.
  3. 效率:确定性的采样方式使得 DDIM 能更快地生成高质量的图像。
    Song et al., 2020, For DDIM, the generative process is deterministic, and would depend only on the initial state .

参考文献

[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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值