想象你打理着一家画廊,墙上挂满了大师真迹。有一天,你想训练一位 AI 画师,让它能批量创作出全新的画作。但你发现,AI 学画画的方式和人类完全不一样——它不是握笔临摹,而是先要学会“把画变没”,再学会“把画还原”。这听起来像魔法,实际上正是 DDPM(去噪扩散概率模型)的核心思想:把一杯清水一滴滴染成墨汁,然后再教一位“净水师”把墨水一步步吸出来。整个过程像在跳一支优雅的“污染-还原”双人舞:前向扩散负责把图像逐步变成纯噪声,反向去噪负责从纯噪声中一步步“洗出”清晰图像。2020 年,Ho 等人在论文中提出 DDPM,让生成图像的质量第一次与 GAN 平起平坐,甚至超越——它奠定了 Stable Diffusion 等当今最强文生图模型的地基。
掌握 DDPM,你将真正理解 AIGC 时代最核心的生成模型原理。无论你是算法工程师、AI 产品经理还是技术面试者,这都是通往生成式 AI 前沿的必修课。
目录
可视化演示
本节配有交互动效(进入视口后自动加载,约 3KB)。
前向扩散:逐步添加高斯噪声 前向扩散公式1. 固定马尔可夫链,无需训练2. \u03B2_t: 预设噪声调度表(线性/余弦)q(x_t|x_{t-1}) = N(x_t; \u221A(1-\u03B2_t)\u00B7x_{t-1}, \u03B2_t\u00B7I)
1. 生成模型概述:AI画师的成长之路
试想你是画廊老板,想训练一位 AI 画师量产新画。传统思路有两条:一条是请一位毒舌评论家(判别器)不断挑刺,画师在被骂中改进画技——这是 GAN 的路线;另一条更有意思:让画师先学会一项本领——把一幅画“变没”,再倒着“变回来”,学会这套“复原魔法”,自然就会画画了——这就是 DDPM 的路线。听起来绕远路,但恰恰是这条弯道实现了超车。
生成模型的任务,就是从训练数据中学习真实分布,再从这个分布中采样出新样本。你画廊里的每一幅真迹,都是分布中的一个“点”;生成模型要画出那些“没被看过的新点”。评估一幅 AI 画作好不好,一看质量(清晰度、FID 指标),二看多样性(是否只画某一类风格)。主流方法分为显式密度建模(如 VAE)和隐式建模(如 GAN),而扩散模型走的是第三条路:把“学习画画”转化为“学习还原”。
从数学上看,生成模型的核心目标是让模型分布 \(p_\theta(x)\) 最大程度接近真实分布 \(p_{\text{data}}(x)\),经典做法是最大似然:
\[
\theta^* = \arg\max_\theta \mathbb{E}_{x \sim p_{\text{data}}(x)} \left[ \log p_\theta(x) \right]
\]
1. \(p_{\text{data}}(x)\):真实画作的分布——画廊里所有大师作品的“风格集合”。
2. \(p_\theta(x)\):AI 画师学到的分布——由参数 \(\theta\) 决定的模型概率函数。
3. \(\mathbb{E}_{x \sim p_{\text{data}}(x)}[\cdot]\):把画廊里的真画一张张取出来,对括号里的值求平均。
4. \(\arg\max_\theta\):找到让平均分最高的那组参数 \(\theta\),也就是让模型给真画打的分最高。
所以 DDPM 的路径不是“临摹”而是“复原”——当净水师学会了把墨汁从水里吸走,他自然比任何人都懂清水应该是什么样子。
2. 前向扩散:从清水到墨汁
现在,请把一张画想象成一杯清水。DDPM 的第一步,是亲手把水弄脏:拿起一支毛笔,蘸上墨汁,一滴滴往里滴。每滴一次,水就混沌一分。滴到第 100 步,画已经面目模糊;滴到第 1000 步,整杯水变成均匀的黑色——再没有任何画的痕迹。关键点在于:这个过程不需要学习,因为规则是你自己定的——滴多少墨、什么时候滴,全部提前写在“调墨表” \(\beta_t\) 里。
从数学上看,前向扩散是在数据上逐步叠加高斯噪声,形成一个马尔可夫链——每一步的状态只由当前状态决定,像多米诺骨牌那样一推到底,不需要回头看更早的步骤。每一步的条件转移分布写作:
\[
q(x_t \mid x_{t-1}) = \mathcal{N}\left(x_t;\ \sqrt{1-\beta_t}\, x_{t-1},\ \beta_t I\right)
\]
1. \(x_t\):第 \(t\) 步的图像状态——被滴了 \(t\) 滴墨汁的水。
2. \(q(x_t \mid x_{t-1})\):从第 \(t-1\) 步到第 \(t\) 步的条件转移分布,表示“已知上一步,下一步会怎样”。
3. \(\sqrt{1-\beta_t}\, x_{t-1}\):上一步影像按比例衰减,确保整杯水不因累积而膨胀。
4. \(\beta_t I\):新滴入的墨汁方差,\(\beta_t\) 控制这一步的浑浊程度,\(I\) 表示每个像素维度都是独立加噪。
更妙的是,利用重参数化技巧,我们可以从 \(x_0\) 一步到位得到任意时刻的带噪图像,不必真的滴 \(t\) 次墨:
\[
x_t = \sqrt{\bar{\alpha}_t}\, x_0 + \sqrt{1-\bar{\alpha}_t}\, \varepsilon,\quad \varepsilon \sim \mathcal{N}(0, I)
\]
1. \(\bar{\alpha}_t\):前 \(t\) 个 \((1-\beta_s)\) 的连乘,记录了“墨汁从未被抽走”的累计残留。
2. \(\sqrt{\bar{\alpha}_t}\, x_0\):原始画作衰减后的主体——水还保留下来的清澈部分。
3. \(\sqrt{1-\bar{\alpha}_t}\):累计浑浊程度——从第 1 步到第 \(t\) 步总共注入的墨量。
4. \(\varepsilon\):标准高斯噪声,代表每滴墨的随机形状。
在 DDPM 中,\(\beta_t\) 采用线性调度,从 \(10^{-4}\) 逐步升至 \(0.02\),总共 \(T=1000\) 步。为什么先少后多?就像滴墨时先轻轻试探、再放手去染,早期的微小噪声让图像平滑退化,后期的强噪声则保证最终完全变成纯黑——每一步都在为净水师铺设“可逆”的线索。
3. 反向去噪:净水师的一步一印
净水师面对一杯纯黑的水,他不会变魔术把水瞬间变清。他深谙一个朴素道理:水是怎么一步步变黑的,就该怎么一步步变清。上次滴了多少墨,这次就精准吸出多少墨。每一步只让水清澈一点点,但走完一千步,清水就能重现。DDPM 的反向过程,就是训练这样一位“净水师”。
反向过程的数学形式同样被建模为高斯条件分布,不过这次的方向反过来了:给定当前较浑浊的 \(x_t\),预测上一步较清澈的 \(x_{t-1}\):
\[
p_\theta(x_{t-1} \mid x_t) = \mathcal{N}\left(x_{t-1};\ \mu_\theta(x_t, t),\ \sigma_t^2 I\right)
\]
1. \(p_\theta(x_{t-1} \mid x_t)\):净水师从浑浊的 \(x_t\) 倒推澄清的 \(x_{t-1}\) 的条件分布。
2. \(\mu_\theta(x_t, t)\):条件高斯分布的均值——净水师判断“这一步最可能的清澈状态”。
3. \(\sigma_t^2 I\):方差项,表示每一步保留的随机性,让每次生成的作品不重样。
关键问题是:\(\mu_\theta\) 怎么算?论文的推导给出一个极优雅的结论——我们只需要让网络学会预测噪声。具体采样时,执行如下更新:
\[
x_{t-1} = \frac{1}{\sqrt{\alpha_t}}\left(x_t - \frac{\beta_t}{\sqrt{1-\bar{\alpha}_t}}\,\varepsilon_\theta(x_t, t)\right) + \sigma_t z,\quad z \sim \mathcal{N}(0, I)
\]
1. \(\varepsilon_\theta(x_t, t)\):U-Net 预测出的噪声——净水师目测“这杯水里还有多少墨”。
2. \(\frac{\beta_t}{\sqrt{1-\bar{\alpha}_t}}\varepsilon_\theta\):从当前状态中扣减本次应除去的墨量,让水面下降一档。
3. \(\frac{1}{\sqrt{\alpha_t}}\):幅度补偿——扣掉墨之后,把剩余信号缩放回正常大小。
4. \(\sigma_t z\):补入少量随机噪声,保证生成不是机械复读,而是有创造力的“每杯都不同”。
采样时,我们从纯噪声 \(x_T \sim \mathcal{N}(0, I)\) 出发,让净水师连续工作 \(T\) 次(通常 1000 步),最后得到 \(x_0\)——一幅从未存在过的新画作。整个“澄清之旅”就是 DDPM 的生成过程。
4. U-Net:墨迹之眼
为什么净水师能精准吸墨?因为他有一双“墨迹之眼”——不仅能看清整杯水黑不黑,还能看清每一团墨在什么位置、浓度如何。在 DDPM 中,这双眼睛就是 U-Net,它是噪声预测网络 \(\varepsilon_\theta(x_t, t)\) 的骨干架构。它接收两个输入:当前带噪图像 \(x_t\) 和扩散时刻 \(t\),输出与输入同等尺寸的噪声图。
U-Net 的结构分为三部分:编码器(下采样路径) 逐步把图像缩小、通道加深,像画家退后几步看整体构图,提取“哪里有大片墨迹”的语义信息;解码器(上采样路径) 逐步把特征图放大、通道减少,像画家凑近画布描绘细节,恢复每个像素级位置的墨量;跳跃连接 把编码器每层的浅层特征直接拼接到解码器对应层,像把笔记直接递给正在恢复细节的手,避免下采样时丢失的高频纹理(如发丝、水纹)在还原时找不回来。
除了图像本身,U-Net 还必须知道“现在滴到第几滴墨”——因为第 50 步和第 500 步,去除策略完全不同。做法是把时刻 \(t\) 通过正弦位置编码嵌入到网络中间。好比净水师知道“现在水已经黑了一半,下手要轻还是重”。
有了这双“墨迹之眼”,净水师才能指哪打哪:第 100 步时主要清理粗大墨块,第 900 步时打磨最细微的色差。正是 U-Net 强大的多尺度建模能力,让 DDPM 在图像细节还原上远远超过普通全连接网络。
5. 损失函数:练功评分尺
净水师怎么知道自己吸得准不准?很简单——每一滴墨都是当初他亲眼看着滴进去的,所以“水里实际有多少墨”是已知的。练功时,师傅递给他一杯带噪的水,问他:“你猜这里面墨的量是多少?”他说出一个值,师傅再对照真实的墨量打分。这个“评分尺”就是均方误差(MSE)——预测墨量和真实墨量之间的平方距离。
从变分下界(VLB)出发,DDPM 的原始推导包含多个 KL 散度项,但作者发现,在忽略权重系数后,训练目标可以惊人地简化成一个纯粹噪声回归的损失:
\[
L_{\text{simple}} = \mathbb{E}_{t,\ x_0,\ \varepsilon}\left[\left\| \varepsilon - \varepsilon_\theta(x_t, t) \right\|^2\right]
\]
1. \(t \sim \text{Uniform}(1, T)\):均匀随机抽一个扩散时刻,保证每个阶段的“含墨浓度”都练到。
2. \(\varepsilon\):这次加噪实际使用的墨量——训练时的真实标签。
3. \(\varepsilon_\theta(x_t, t)\):净水师目测估计的墨量——U-Net 的预测输出。
4. \(\left\|\varepsilon - \varepsilon_\theta(x_t, t)\right\|^2\):预测墨量与真实墨量的平方误差,越准分越高。
这个损失函数与 KL 散度的联系在于:变分下界可以拆解为若干“高斯分布间的 KL 散度”,而两个高斯之间的 KL 散度恰好化简为均值差的平方形式——所以训练网络预测噪声,本质上就是在最小化每一步条件分布的 KL 散度。
正因为评分尺如此简单稳定,DDPM 的训练没有 GAN 那种“生成器与判别器互相博弈”的紧张气氛,而是像一位安静的学徒做练习:拿一份噪声、猜一份噪声、算一个误差、更新一次梯度。不吵架、不崩溃,稳稳收敛。
6. 双雄对决:DDPM与GAN
画廊同时请了两位画师。“造假大师”GAN 天资聪颖:他旁边站着一位毒舌评论家,每次画完都被骂,骂一次改一次。这位大师学得很快,几小时就能画出以假乱真的作品,而且只要一笔就能完成创作——也就是单步生成。但他有个毛病:一旦发现某种题材最容易骗过评论家,他就只画那种题材。这被称为模式崩塌。
“净水师”DDPM 则完全不同:他没有评论家,只有一张“墨量评分尺”。他学得慢——每次训练都要随机滴一千种不同浓度的墨来练手——但练成之后,他不会偷懒只画一种风格,而是老老实实地覆盖整片数据分布。因为他的训练目标(预测噪声)与数据分布天然挂钩,理论上他不会忘掉任何一类画风。
两者的关键差异可以用一张对比表贯穿:训练稳定性上,GAN 要玩“猫鼠游戏”,容易训练振荡;DDPM 回归固定噪声目标,稳定省心。生成质量上,DDPM 在 FID 等指标上一度反超 GAN,尤其是高分辨率图像上的纹理细节更自然。模式崩塌风险上,GAN 的高风险正是 DDPM 的优势——扩散过程迫使模型学会整个“从黑水到清水”的完整路径,很难只走捷径。采样速度上则是 GAN 的天下:GAN 一次前向即可出图,DDPM 需要上千步迭代,慢了几个数量级。
正因如此,后来的研究者开发了 DDIM、DPM-Solver 等加速采样方法,把千步压缩到几十步;Stable Diffusion 又把扩散过程搬到隐空间,让“净水师”跑得更轻更快。如今,DDPM 家族已经接过 GAN 的接力棒,成为 AIGC 时代的核心引擎。
AI 应用场景
场景一:文生图大模型——Stable Diffusion 的地基
阶段:模型训练与推理生成
解决的问题:传统 GAN 文生图容易训练崩溃、模式单一,难以覆盖海量文本-图像组合;DDPM 通过稳定的噪声回归目标,让模型可以大规模训练,从任意文本描述中“逐步洗出”符合语义的图像。
具体案例:用户输入“一只戴着宇航员头盔的柴犬”,Stable Diffusion 先在隐空间生成纯噪声,再经 U-Net 逐步去噪,约 30~50 步后输出高清图片。背后的 Latent Diffusion 正是把 DDPM 的“清水滴墨”搬到压缩后的隐空间,让净水师在更小的画布上工作,速度大幅提升。
场景二:医学影像增强与去噪
阶段:数据预处理与图像修复
解决的问题:CT 或 MRI 影像常因低剂量扫描产生噪声,传统滤波方法会牺牲细节;DDPM 学习从“带噪影像”还原“清晰影像”,在去噪的同时保留病灶边缘纹理。
具体案例:某医院用 DDPM 对低剂量 CT 图像做后处理,输入带噪的腹部 CT 切片,模型预测噪声并逐步去除,输出图像的信噪比提升 30% 以上,医生对微小结节的检出率明显提高。
场景三:语音合成与音频修复
阶段:生成式建模与推理
解决的问题:语音合成中,直接从文本生成波形容易产生机械感;DiffWave 等扩散语音模型把音频片段视为“水”,一步步加噪再一步步还原,生成的自然度和韵律感优于早期自回归模型。
具体案例:语音助手公司将 DDPM 用于离线语音合成,输入文本特征,从随机噪声开始迭代还原出 24kHz 的完整语音波形,用户反馈听感自然度提升显著,且训练过程无需 GAN 的对抗调参。
Python 演示
import torchimport torch.nn as nn torch.manual_seed(42) # 1. 训练数据:两个高斯簇,模拟"画廊里的两类画作"n = 1024c1 = torch.randn(n, 2) * 0.8 + torch.tensor([3.0, 3.0])c2 = torch.randn(n, 2) * 0.8 + torch.tensor([-3.0, -3.0])data = torch.cat([c1, c2]) # 2. 扩散参数:T 步线性噪声调度T = 100beta = torch.linspace(0.0001, 0.02, T)alpha = 1 - betaalpha_bar = torch.cumprod(alpha, dim=0) def forward_diffuse(x0, t): # 前向扩散:重参数化直接算 t 步后的带噪样本 ab = alpha_bar[t].unsqueeze(1) noise = torch.randn_like(x0) xt = torch.sqrt(ab) * x0 + torch.sqrt(1 - ab) * noise return xt, noise # 3. 噪声预测网络:DDPM 中 U-Net 的极简替代(MLP + 时间嵌入)class NoiseNet(nn.Module): def __init__(self): super().__init__() self.net = nn.Sequential( nn.Linear(3, 64), nn.ReLU(), nn.Linear(64, 64), nn.ReLU(), nn.Linear(64, 2) ) def forward(self, xt, t): t_emb = t.float().unsqueeze(1) / T return self.net(torch.cat([xt, t_emb], dim=1)) model = NoiseNet()opt = torch.optim.Adam(model.parameters(), lr=1e-3)loss_fn = nn.MSELoss() # 4. 训练循环:预测噪声 vs 真实噪声for epoch in range(300): t = torch.randint(0, T, (n,)) xt, noise = forward_diffuse(data, t) pred = model(xt, t) loss = loss_fn(pred, noise) opt.zero_grad() loss.backward() opt.step() if epoch % 60 == 0: print(f"epoch {epoch:3d}: loss = {loss.item():.4f}") # 5. 反向采样:从纯噪声逐步去噪生成新样本def sample(n_samples=8): x = torch.randn(n_samples, 2) for t in range(T - 1, -1, -1): t_tensor = torch.full((n_samples,), t, dtype=torch.long) pred_noise = model(x, t_tensor) a = alpha[t].item() b = beta[t].item() ab = alpha_bar[t].item() x = (x - b / torch.sqrt(1 - ab) * pred_noise) / torch.sqrt(a) if t > 0: x += torch.sqrt(b) * torch.randn_like(x) return x samples = sample(8)print("生成样本坐标(应接近 ±3 附近):")print(samples.detach().numpy().round(2))
beta = torch.linspace(0.0001, 0.02, T)定义“调墨表”:从 0.0001 线性增长到 0.02,控制每步滴墨量。xt = torch.sqrt(ab) * x0 + torch.sqrt(1 - ab) * noise前向重参数化,一步算出任意时刻的带噪样本。loss = loss_fn(pred, noise)简化损失:预测噪声与真实噪声的均方误差,这就是净水师的“评分尺”。x = (x - b / torch.sqrt(1 - ab) * pred_noise) / torch.sqrt(a)反向去噪更新:扣减预测墨量并缩放。if t > 0: x += torch.sqrt(b) * torch.randn_like(x)每步补入随机项,保证生成样本的多样性。
常见误区
误区前向过程不就是一点点加噪声吗?有什么好学的?随便找个高斯噪声加进去不就行了?真正难的是反向过程。
正解前向扩散虽然不需要学习参数,但“加噪方式”直接决定了反向去噪是否可行。噪声调度 \(\beta_t\) 的选择(线性、余弦、sigmoid)会影响生成质量;加噪太快,图像过早变成纯噪声,反向无从学起;加噪太慢,训练效率低。它就像滴墨的节奏——滴墨的方式决定了净水师能否顺藤摸瓜还原清水。
为何常见:因为前向过程没有可训练参数,初学者容易把它看成“预处理”,忽略了它作为整个学习目标定义者的关键地位。
误区生成模型都会模式崩塌吧?GAN 会只生成一类图,DDPM 应该也一样,只是没被发现而已。
正解DDPM 的训练目标是最小化数据分布与模型分布之间的变分下界,本质上是在做分布拟合,而不是对抗博弈。它没有“骗过判别器就走捷径”的动力;反向采样的每一条路径都对应真实的去噪轨迹,天然覆盖整个数据分布。实证中 DDPM 几乎不会出现模式崩塌。
为何常见:大多数人先接触 GAN,习惯了“生成模型=对抗训练”的思维定式,误以为所有生成模型都共享同一套风险。
误区给网络看一张模糊图,让它输出一张清晰图,多训几次不就和 DDPM 的 U-Net 一样了吗?
正解单步去噪是一个确定性映射,输入一张带噪图输出一张干净图;DDPM 的反向过程则是 T 步条件高斯采样链,每一步只负责去除“这一步应该除去的墨量”,并且还保留随机扰动。它学的是整个扩散过程的时间演化规律,而非一次性的图像恢复函数。
为何常见:从直觉上“去噪”听起来像图像复原任务,导致初学者忽略了它的生成式本质和迭代式结构。
误区现在不是有很多“秒出图”的工具吗?那 DDPM 本身应该也不慢吧。
正解原始 DDPM 需要上千步迭代去噪,在 GPU 上生成一张 256×256 图像也要数秒甚至更久。所谓“秒出图”,依赖的是 DDIM 加速(把千步压缩到 50 步)、DPM-Solver 等更高阶数值解法,以及 Stable Diffusion 把扩散搬到低维隐空间。原始 DDPM 的采样速度恰恰是它最大的短板。
为何常见:人们容易把“基于扩散模型的商业产品”的体验,错误归因到原始论文算法上,而没有区分工程加速技术与基础模型的差别。
面试题
Q1. DDPM 中“前向扩散”过程本质上是?
- A.学习如何把噪声变成图像
- B.逐步向图像添加高斯噪声← 正确答案
- C.用判别器区分真假图像
- D.对图像做傅里叶变换
答案:B。前向扩散是一个固定的马尔可夫链,按预定义的噪声调度逐步向图像叠加高斯噪声,不需要学习任何参数。选项 A 描述的是反向去噪,C 是 GAN 的判别器思想,D 与扩散无关。这就像“滴墨”本身不需要技巧,技巧在于如何倒推。
Q2. DDPM 反向过程的目标是?
- A.从纯噪声逐步还原出清晰图像← 正确答案
- B.判别图像是否为生成样本
- C.压缩图像到低维特征空间
- D.把干净图像编码为隐变量
答案:A。反向过程训练一个参数化模型,从纯噪声 \(x_T\) 出发,通过 T 步条件高斯采样逐步还原出清晰图像 \(x_0\)。这就是净水师从黑水中一步步吸出墨汁的过程。B 是判别器的职责,C 和 D 是自编码器/VAE 的思路。
Q3. 前向重参数化公式正确的是?
- A.\(x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\varepsilon\)← 正确答案
- B.\(x_t=\bar\alpha_t x_0+(1-\bar\alpha_t)\varepsilon\)
- C.\(x_t=\sqrt{\beta_t}x_0+\sqrt{1-\beta_t}\varepsilon\)
- D.\(x_t=x_0+\beta_t\varepsilon\)
答案:A。\(\bar\alpha_t\) 是前 t 步的累计残留系数,\(x_t\) 等于原始信号按 \(\sqrt{\bar\alpha_t}\) 衰减,加上按 \(\sqrt{1-\bar\alpha_t}\) 加权的标准高斯噪声。其余选项的系数组合都不满足方差保持的约束,就像“滴墨总量”记错了账,水和墨的比例就对不上了。
Q4. 关于 U-Net 在 DDPM 中的作用,下列说法正确的是?
- A.预测每个时刻的噪声图← 正确答案
- B.通过跳跃连接融合底层细节← 正确答案
- C.直接把噪声还原为一张干净大图
- D.将扩散时刻编码后嵌入网络← 正确答案
答案:ABD。U-Net 的输入是带噪图像和时刻 t,输出是同尺寸的噪声预测图;跳跃连接把编码器浅层纹理传给解码器;时刻信息通过正弦位置编码嵌入,让网络知道“现在该除多少墨”。C 错在 U-Net 只预测噪声,不直接输出干净图像。
Q5. DDPM 的简化训练损失 L_simple 描述正确的是?
- A.判别器输出与真实标签的交叉熵
- B.真实噪声与预测噪声的均方误差← 正确答案
- C.生成图像与真实图像的 L1 距离
- D.生成图像与真实图像的感知损失
答案:B。DDPM 训练时随机采样时刻 t、加噪得到 \(x_t\),让 U-Net 预测噪声 \(\varepsilon_\theta(x_t,t)\),再用 MSE 与真实噪声 \(\varepsilon\) 比较。它不直接比较生成图和原图,而是比较“墨量估计”和“真实墨量”。A 是 GAN 的损失,C 和 D 是图像重建类损失的常见形式。
Q6. 关于 DDPM 与 GAN 的对比,下列说法正确的是?
- A.GAN 训练稳定且从不模式崩塌
- B.DDPM 需要多步迭代采样,生成速度较慢← 正确答案
- C.DDPM 的生成质量总是远差于 GAN
- D.GAN 使用 MSE 损失直接回归噪声
答案:B。GAN 是单步生成、速度快的代表,但训练存在对抗不稳定和模式崩塌风险;DDPM 需上千步迭代,速度是短板,但训练稳定、多样性好,且 FID 等指标上已达到或超过 GAN。D 错在 GAN 用的是对抗损失而不是 MSE 噪声回归。
Q7. DDPM 相比 GAN 的优势包括?
- A.训练目标稳定,没有对抗博弈← 正确答案
- B.单步采样,生成速度更快
- C.不易模式崩塌,覆盖全分布← 正确答案
- D.完全不需要任何网络架构设计
答案:AC。DDPM 把训练转化为噪声回归,避免了 GAN 生成器与判别器之间的零和博弈,训练更平稳;由于学习的是完整的扩散路径而非“骗过判别器”,天然覆盖数据分布,不易模式崩塌。B 说反了,DDPM 是迭代慢;D 也错误,U-Net 等架构设计对效果至关重要。
Q8. 原始 DDPM 中扩散总步数 T 通常取值为?
- A.1~5 步
- B.50 步左右
- C.1000 步左右← 正确答案
- D.百万级别
答案:C。原始 DDPM 论文采用 \(T=1000\) 步,每步噪声强度较小,保证反向过程可以近似为高斯分布,让净水师有足够多的小步去逐步吸墨。50 步是 DDIM 等加速方法压缩后的步数,1~5 步则是更激进的蒸馏模型才能达到的指标。
Q9. 反向采样中保证生成质量的做法包括?
- A.每步都从当前状态扣减预测噪声← 正确答案
- B.保留适量的随机噪声项← 正确答案
- C.一步去掉全部噪声直接输出
- D.用 U-Net 预测当前时刻的噪声← 正确答案
答案:ABD。反向采样循环中,每步用 U-Net 预测噪声并从 \(x_t\) 中扣减,再按系数缩放;除了最后一步,每步还要补入随机扰动,保证生成多样性。C 错在一步到位违背了扩散模型的迭代精髓——就像净水师不可能一口把整杯墨汁吸干。
Q10. 从变分下界(VLB)推导 L_simple 时,最终被保留的核心监督项是?
- A.图像重构的感知损失项
- B.噪声回归的均方误差项← 正确答案
- C.判别器的交叉熵对抗项
- D.特征空间的最大均值差异项
答案:B。作者在 VLB 的各 KL 散度项中,去掉权重系数后,发现损失可化简为各个时刻“真实噪声与预测噪声的 MSE”之和。这正是 L_simple 的核心——只监督 U-Net 把墨量估准。A 是图像生成任务中常见的附加损失,C 是 GAN 的损失,D 是分布匹配的另一种度量方式,均不属于 DDPM 的推导结果。