摘要
使用扩散概率模型(一类受非平衡热力学启发的潜变量模型)展示了高质量的图像合成结果。作者最佳的结果是通过在加权变分界上进行训练获得的,该界是根据扩散概率模型与带朗之万动力学的去噪分数匹配之间的新型联系设计的,并且作者的模型自然地支持一种渐进式有损解压方案,这可以被解释为自回归解码的推广。在无条件 CIFAR10 数据集上,作者获得了 9.46 的 Inception 分数和 3.17 的最先进 FID 分数。在 256x256 的 LSUN 数据集上,作者获得了与 ProgressiveGAN 相似的样本质量。
核心思想解析
Denoising Diffusion Probabilistic Models (DDPM) 是一种基于扩散过程的生成模型,通过逐步添加和去除噪声实现数据生成。其核心分为前向扩散(加噪)和反向扩散(去噪)两个过程,最终学习从噪声中重构数据。
重参数化
前向扩散过程
前向过程将数据逐渐转化为高斯噪声,每一步根据预设的噪声调度参数 βt 添加噪声。给定数据 x0,第 t 步的加噪结果 xt 服从以下分布:
q(xt|xt−1) = N(xt; √(1-βt)xt−1, βtI)
通过重参数化技巧,可直接从 x0 计算任意 t 步的噪声数据:
xt = √ᾱt x0 + √(1-ᾱt) ε
其中 αt = 1-βt,ᾱt = Π(s=1 to t) αs,ε ~ N(0, I)。
反向扩散过程
反向过程通过神经网络学习逐步去噪。模型预测噪声 εθ 以重构数据,目标是最小化以下损失函数:
L = E[t,x0,ε][||ε - εθ(xt,t)||²]
去噪每一步的均值和方差通过以下公式计算:
pθ(xt−1|xt) = N(xt−1; μθ(xt,t), Σθ(xt,t))
其中 μθ 通常由预测噪声 εθ 推导得出。
训练与生成步骤
训练阶段:
- 从数据集中采样 x0,随机选择时间步 t。
- 生成噪声 ε 并计算 xt。
- 训练神经网络 εθ 预测噪声,优化均方误差损失。
生成阶段:
- 从高斯噪声 xT 开始,逐步去噪至 x0。
- 每一步使用 εθ 预测噪声,并通过采样得到 xt−1。
关键改进与扩展
- 噪声调度:线性或余弦调度的 βt 影响训练稳定性和生成质量。
- 加速采样:DDIM(Denoising Diffusion Implicit Models)通过非马尔可夫链加速生成。
- 条件生成:通过分类器引导或嵌入条件信息实现可控生成。
代码实现要点
# 噪声预测网络结构(U-Net 为例)
class UNet(nn.Module):
def __init__(self):
super().__init__()
self.time_embed = nn.Sequential(
nn.Linear(embed_dim, time_emb_dim),
nn.SiLU(),
nn.Linear(time_emb_dim, time_emb_dim)
)
self.down_blocks = nn.ModuleList([DownsampleBlock(...) for _ in range(num_layers)])
.up_blocks = nn.ModuleList([UpsampleBlock(...) _ (num_layers)])
():
noise = torch.randn_like(x0)
xt = sqrt_alphas_cumprod[t] * x0 + sqrt_one_minus_alphas_cumprod[t] * noise
predicted_noise = model(xt, t)
loss = F.mse_loss(predicted_noise, noise)
loss

