水墨工坊来了位学徒小D,师傅端出两杯水:一杯清澈见底,一杯黑如深夜。师傅说,工坊的独门功夫是把清水一滴一滴染黑,再让学徒把墨水一点点吸出来,把清水还原。这听起来像魔法,却是当下最火的生成模型——扩散模型(DDPM)——每天都在做的事。而决定这杯水“怎么滴黑”的节奏,就是噪声调度:有人按钟表匀速滴(Linear),有人像老师傅的手腕一样先缓后疾再缓(Cosine)。学徒练功时只猜一件事——“这杯水里已经滴了多少墨”,这就是简化训练目标;师傅验收时则用一台“水质仪”打分,那就是 FID。本文就从这一杯水墨讲起,带你彻底看懂 DDPM 的训练目标、Linear 与 Cosine 调度之争,以及 FID 收敛曲线背后的秘密。

岗位关联

学完本文,你将对扩散模型的训练机理建立直观心智模型,能读懂并使用噪声调度与 FID 曲线指导实际调参,这是从事生成模型训练与评估的 AI 工程师的必备内功。

目录
  1. 可视化演示
  2. DDPM 核心原理:滴墨成画
  3. 训练目标简化:只猜墨量
  4. Linear 调度:匀速滴墨
  5. Cosine 调度:师傅的手
  6. 收敛行为分析:信噪比计
  7. FID 评估指标:水质仪
  8. 调度策略选择:出师
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示DDPM中Linear与Cosine噪声调度曲线对比、FID收敛曲线分析、以及前向扩散过程的逐步加噪效果。

本节配有交互动效(进入视口后自动加载,约 3KB)。

'+_captions.noise+'

DDPM 核心原理:滴墨成画

师傅在小D面前摆了一排量杯。第一杯是清水,第二杯加了一滴墨,第三杯加了两滴……第一百杯已黑如深夜。师傅说:“看清这个过程,再把它倒过来做一遍。”小D每天的工作,就是盯着这排越来越黑的杯子,琢磨水是怎么一步步从清变黑的。这套功夫在数学里叫扩散模型,把水变黑的过程叫前向加噪,把黑水还原的过程叫逆向去噪。

前向过程从真实图像 x₀ 出发,每一步按一个很小的噪声强度 β_t 注入高斯噪声,走过 T 步后图像完全变成纯噪声。β_t 就像“每滴墨水的量”,是整个流水线最关键的旋钮。DDPM 最巧妙的地方在于:给定原始图 x₀,第 t 步的结果不必一步步推,可以直接用重参数化公式一步算出来。

小D恍然大悟:加墨过程根本不需要背录像带。握着一张“清水照片”和一把“墨量计算器”,就能瞬间算出任意时刻的黑水模样。接下来真正的功课,是怎么从黑水里把墨水吸出来。

xt=αˉt x0+1−αˉt ε,ε∼N(0,I),αˉt=∏s=1t(1−βs)x_t=\sqrt{\bar{\alpha}_t}\,x_0+\sqrt{1-\bar{\alpha}_t}\,\varepsilon,\qquad\varepsilon\sim\mathcal{N}(0,\mathbf{I}),\qquad\bar{\alpha}_t=\prod_{s=1}^{t}(1-\beta_s)
这个公式把“第 t 杯黑水”直接写成“清水 × 保留比例 + 墨迹 × 噪声比例”的混合,不需要逐杯倒水。
  1. 缩放原始信号$\sqrt{\bar{\alpha}_t}\,x_0$——原始图像按剩余信号比例褪色,相当于清水中还保留的清水部分。
  2. 注入高斯噪声$\sqrt{1-\bar{\alpha}_t}\,\varepsilon$——标准高斯噪声 ε 按噪声比例缩放后混入,相当于滴入并扩散开的墨水量。
  3. 累乘求保留率$\bar{\alpha}_t=\prod_{s=1}^{t}(1-\beta_s)$——每一步信号都乘以 (1-β_s),把所有步的“留存率”连乘,得到当前还剩多少清水。

训练目标简化:只猜墨量

起初小D想偷懒:他试图把“从黑水变清水”的完整过程背下来,像背课文一样。结果两天后发现,一百杯黑水根本背不完。师傅敲了敲他的脑袋:“谁让你背结局?我只要你看一眼黑水,说出它一共滴了多少墨水。”学术界的经历如出一辙——DDPM 原始推导给出了优雅的变分下界(ELBO)目标,但它由多个复杂的 KL 项组成,训练时处处需要调权重。

Ho 等人的关键贡献是发现:把目标里繁琐的权重统统去掉,只保留“预测噪声”这一项,训练反而更稳、效果更好。这个简化后的目标叫 L_simple,它不再要求模型还原整张原图,只要求模型学会一件事:给你一杯黑水 x_t 和它处于哪个阶段 t,请你猜出里面被滴入了多少墨(即噪声 ε)。

小D每天练的就是这个公式:随机抽一杯黑水,看一眼,猜墨量,对答案,改手艺。慢慢地他发现,猜墨量练熟了,倒放水质的能力自然而然就长出来了。

Lsimple(θ)=Et, x0, ε[∥ε−εθ(αˉt x0+1−αˉt ε, t)∥2]L_{\text{simple}}(\theta)=\mathbb{E}_{t,\ x_0,\ \varepsilon}\Big[\big\|\varepsilon-\varepsilon_\theta\big(\sqrt{\bar{\alpha}_t}\,x_0+\sqrt{1-\bar{\alpha}_t}\,\varepsilon,\ t\big)\big\|^2\Big]
训练的本质就是反复练习“看图猜墨量”,猜得越准,去噪还原的能力越强。
  1. 均匀抽取时刻$t\sim\mathcal{U}\{1,2,\dots,T\}$——每个时间步被抽中的概率相同,保证所有“黑水浓度”都被练习到。
  2. 构造含噪样本$\sqrt{\bar{\alpha}_t}\,x_0+\sqrt{1-\bar{\alpha}_t}\,\varepsilon$——用前向重参数化直接生成这一杯黑水,不用跑完整条链。
  3. 模型输出$\varepsilon_\theta(\cdot,\ t)$——去噪网络接收黑水和时刻 t,输出它猜的“含墨量”。
  4. 均方误差度量$\|\varepsilon-\varepsilon_\theta\|^2$——真实墨量与猜测墨量的平方误差,梯度回传更新网络参数。

Linear 调度:匀速滴墨

小D拿到了人生第一张“滴墨节奏表”,上面写着:每步一滴,每滴大小永远相同,风雨无阻。师傅说这叫 Linear 滴法,最老实、最经典。DDPM 原文采用的就是这种方案:噪声强度 β_t 从 0.0001 匀速增加到 0.02,画成 β 的曲线就是一条笔直的斜线。名字里“Linear”指的是 β 本身线性变化,而信号衰减曲线则完全不同。

把 β 累乘得到信号保留率 ᾱ_t,它的衰减是先平后陡——清水阶段还看得清,越到后面黑得越快。这意味着在时间步均匀采样的训练中,模型把大量的“课时”花在了信息几乎为零的后期黑水上。那段时间的图像早已淹没在噪声里,模型只能瞎猜,学不到任何有意义的结构。

小D练了两周匀速滴墨,发现面对最后几十杯“死黑”的水,他完全是在闭眼猜。师傅点点头:“这就是 Linear 的软肋——后期信噪比太低,练了也白练。”

βt=β1+t−1T−1 (βT−β1),β1=0.0001, βT=0.02\beta_t=\beta_1+\frac{t-1}{T-1}\,(\beta_T-\beta_1),\qquad \beta_1=0.0001,\ \beta_T=0.02
β_t 每步增加的量是固定的,但信号保留率的下降却越来越快,这就是“匀速滴墨”的悖论。
  1. 起点噪声β₁=0.0001——最开始每步只滴极少量的墨,清水还能看清轮廓。
  2. 线性插值$\beta_1+\frac{t-1}{T-1}(\beta_T-\beta_1)$——把起点和终点连成一条直线,中间每一刻的墨量按比例均匀分配。
  3. 终点噪声β_T=0.02——最后阶段每步滴的墨量是起点的一百倍,图像迅速变成一潭死墨。

Cosine 调度:师傅的手

终于,师傅亲自示范了他的手法:水还清时,他悬腕轻滴;水半黑时,他快速连滴;快全黑时,他反而放慢。小D看得入神——那黑水浓度的变化轨迹,是一条流畅的 S 形曲线。这个手法对应 Cosine 调度,它不直接规定每次滴多少墨,而是先设计信号保留率 ᾱ_t 沿余弦平方曲线从 1 平滑滑向 0,中间陡峭、两头平缓,再反推出每一步的噪声量。

这样设计的妙处在于:早期信号充足时少加噪,保护细节;中期信号衰减最快,让模型密集学习“看得见的变化”;后期信号稀薄时放慢节奏,避免瞬间掉入盲区。相比 Linear 的直线思维,Cosine 是一条懂得“张弛有度”的曲线。

小D发现,师傅的手法之所以高明,是因为它绝不让某一步“一口吃成胖子”——每个时间步都有值得学的内容。他照猫画虎,练得比匀速滴法轻松多了,还原出的清水也更透亮。

αˉt=cos⁡2 ⁣(t/T+s1+s⋅π2),βt=1−αˉtαˉt−1\bar{\alpha}_t=\cos^2\!\left(\frac{t/T+s}{1+s}\cdot\frac{\pi}{2}\right),\qquad\beta_t=1-\frac{\bar{\alpha}_t}{\bar{\alpha}_{t-1}}
先把“清水留存率”设计成 S 形,再用相邻两步的留存率之比反推出每步滴墨量,这是一个“先定结果、再推过程”的思路。
  1. 时间归一化$t/T$——把时间步映射到 0 到 1 的区间,便于套用标准函数。
  2. 余弦平方$\cos^2\!\left(\frac{t/T+s}{1+s}\cdot\frac{\pi}{2}\right)$——cos² 从 1 平滑降到 0,中间斜率最大、两端趋近于零,正好是 S 形。
  3. 反推噪声$\beta_t=1-\frac{\bar{\alpha}_t}{\bar{\alpha}_{t-1}}$——用前后两步留存率之比算这一步丢了多少信号,s=0.008 防止分母为零。

收敛行为分析:信噪比计

工坊里还有一位水质检验师,他拿着一个叫“信噪比计”的仪器。检验师不关心水黑不黑,只关心一个比例:这杯水里,清水的信号占几成,墨迹的噪声占几成。这正是信噪比 SNR——它把信号保留率 ᾱ_t 和噪声占比 1-ᾱ_t 放在一起比较,量化“信号与噪声的对抗”。SNR 高,说明模型看到的几乎还是原图;SNR 低,说明图像早已淹没在噪声中。

DDPM 训练难易的根源,就是 SNR 在时间轴上的退火曲线。在 Linear 调度下,SNR 后期呈近似指数级的暴跌,大量时间步落在“盲猜区”——模型在这些步上只能输出随机猜测,梯度信号微弱甚至带偏方向。而 Cosine 调度让 SNR 的下降节奏更稳定,每个时间段的猜墨难度都被控制在合理区间内,模型容量被均匀分配到所有难度层级。

小D终于明白师傅选 S 形节奏的深意:不是让每一杯水“看起来”都在变化,而是让每一杯水的信噪比都落在“可学区间”内。这正是收敛曲线平滑、FID 谷值更低的根本原因。

SNR(t)=αˉt1−αˉt\mathrm{SNR}(t)=\frac{\bar{\alpha}_t}{1-\bar{\alpha}_t}
信噪比是“可见信息量”的标尺:比值高代表题目简单,比值过低代表题目难到只能瞎猜。
  1. 分子是信号$\bar{\alpha}_t$——剩余清水保留的信号比例。
  2. 分母是噪声$1-\bar{\alpha}_t$——已经混入的墨迹噪声比例。
  3. 比值是信噪比$\frac{\bar{\alpha}_t}{1-\bar{\alpha}_t}$——信号越强、噪声越弱,比值越大,模型越容易从这杯水里认出原图。

FID 评估指标:水质仪

出师验收那天,师傅端出一台水质仪:把一杯真实清水和一杯小D还原的水同时注入检测槽,机器吐出两串长长的分子指纹,再算这两串指纹差多远。这台“水质仪”在 AI 界叫 FID——Fréchet Inception Distance。它用 Inception 网络把真实图像与生成图像都映射到高层特征空间,假设两类特征各自服从高斯分布,用均值向量 μ 和协方差矩阵 Σ 描述分布形态,再计算两个高斯分布之间的距离。

FID 的思路很直白:真实图像是一群人的“平均长相”,生成图像也被统计成另一群人的“平均长相”,FID 就在问两群人的长相在特征层面有多大差异。它同时考量了“平均脸是否接近”和“长相的多样性是否一致”,因此比逐张像素对比更能反映整体生成质量。

FID 越低,说明徒弟还原的水和师傅的原始水在“特征指纹”上越接近。但小D也学到一个教训:水质仪只看指纹,不看颜值——它偶尔会漏判几滴视觉瑕疵。所以师傅总叮嘱:“看 FID,也别忘了用眼睛瞅瞅图。”

FID=∥μr−μg∥2+Tr⁡ ⁣(Σr+Σg−2(ΣrΣg)1/2)\mathrm{FID}=\|\mu_r-\mu_g\|^2+\operatorname{Tr}\!\left(\Sigma_r+\Sigma_g-2(\Sigma_r\Sigma_g)^{1/2}\right)
FID 由两项构成:第一项比“平均脸”,第二项比“长相的散开程度”,合成一个距离分数,越小越好。
  1. 均值距离$\|\mu_r-\mu_g\|^2$——真实特征中心与生成特征中心的欧氏距离平方,衡量“平均长相”差多少。
  2. 协方差差异$\Sigma_r+\Sigma_g-2(\Sigma_r\Sigma_g)^{1/2}$——两个分布的散开形态差异,包含矩阵平方根运算,衡量多样性是否一致。
  3. 取迹求和$\operatorname{Tr}(\cdot)$——把矩阵对角线相加,将多维差异压缩成一个标量总分。

调度策略选择:出师

小D学艺一年,师傅每天记录两本账:第一本记他“猜墨误差”(训练损失),第二本记“水质仪读数”(验证 FID)。两条曲线共同描绘他从笨手笨脚到炉火纯青的成长轨迹。实操中,训练每若干步保存一次模型检查点(checkpoint),在验证集上计算 FID,描点得到收敛曲线。这里有三条经验法则。

第一,用 EMA 平滑 FID 曲线后再判断趋势,避免单次评估的噪声干扰判断;第二,训练损失下降不代表 FID 也在下降——若 FID 触底回升,多半是过拟合,模型开始背诵训练集而不是真正学会去噪;第三,调度策略的选择要靠实验说话:高分辨率、大噪声预算的生成任务,Cosine 的均匀 SNR 分布往往带来更低的 FID 谷值;低分辨率、少推理步数的任务,Linear 简单直接也不落下风。最稳妥的做法是固定预算跑一组对比,用 FID 曲线下面积(AUF)做裁判。

小D出师时,工具箱里有两件宝贝:一件是匀速滴墨的 Linear 钟表,简单可靠;一件是 S 形手法的 Cosine 滴管,灵活均衡。真正的匠人,是懂得在不同工坊里挑对工具的人——而这份判断力,正是来自读懂了那两条收敛曲线。

AUF⁡=1K∑k=1KFID⁡(θk)\operatorname{AUF}=\frac{1}{K}\sum_{k=1}^{K}\operatorname{FID}(\theta_k)
FID 曲线下面积把“整个训练过程的收敛速度与稳定性”压缩成一个数字,面积越小,说明该调度全程表现越好。
  1. 保存检查点训练过程中每间隔一定步数保存一个模型参数 θ_k,共 K 个。
  2. 逐点算 FID$\operatorname{FID}(\theta_k)$——每个检查点在验证集上算一次 FID。
  3. 平均面积$\frac{1}{K}\sum_{k=1}^{K}\operatorname{FID}(\theta_k)$——对所有检查点的 FID 取平均,衡量该调度全程的收敛质量。

AI 应用场景

文生图大模型训练中的调度选型

阶段:模型训练与策略调优

解决的问题:文生图模型(如 Stable Diffusion 类)训练成本高昂,若沿用 Linear 调度,后期大量时间步处于低信噪比盲区,模型容量被浪费,FID 收敛慢且峰值质量受限。选择 Cosine 调度能让每个去噪阶段的学习难度更均衡,单位算力下的 FID 收敛速度明显提升。

具体案例:某团队在 256×256 人像数据集上训练扩散模型,分别用 Linear 与 Cosine 调度跑相同 50 万步。Cosine 组的 FID 在第 30 万步达到 8.3,而 Linear 组到 50 万步仍停留在 11.6;最终部署时采用 Cosine 调度的 checkpoint,生成人像的细节纹理显著更清晰。

视频生成模型的质量关卡

阶段:模型评估与迭代

解决的问题:视频生成模型训练中,逐帧评估生成质量困难且成本高。传统做法只看训练损失,容易在过拟合时误判。引入 FID 收敛曲线作为质量关卡,在验证集上定期计算 FID,用 EMA 平滑后监控趋势,当 FID 触底回升时及时回滚 checkpoint 并降低学习率。

具体案例:某短视频生成项目每 2000 步保存一个 checkpoint,在 100 个验证提示词上计算 FID 与 FVD(视频版 FID)。曲线显示第 12 万步后训练损失仍在下降但 FID 开始反弹,团队据此停止训练并选用第 11 万步的 checkpoint,生成视频的时序一致性和画质均达到上线标准。

医学影像修复的对比实验

阶段:数据与训练策略调优

解决的问题:医学影像数据量小、噪声类型特殊,无脑套用 Cosine 调度可能因平滑过渡导致有效训练信号不足。通过固定预算的调度对比实验,用 FID 曲线下面积客观选出最适合小样本场景的调度策略。

具体案例:某团队做低剂量 CT 去噪,数据集仅有 3000 张。对比实验显示 Linear 调度的 FID 曲线下面积比 Cosine 低 12%(AUF 31.2 vs 35.5),且推理时仅需 20 步。团队最终选择 Linear 调度,在保持诊断细节的同时把去噪时间缩短到可临床使用。

Python 演示

python57 行
import torchimport torch.nn as nnimport math class TinyNet(nn.Module):    def __init__(self, dim=16):        super().__init__()        self.fc = nn.Sequential(            nn.Linear(dim + 2, dim * 2), nn.ReLU(),            nn.Linear(dim * 2, dim * 2), nn.ReLU(),            nn.Linear(dim * 2, dim)        )     def forward(self, x, t):        te = torch.cat([            torch.sin(t * 0.1).unsqueeze(1),            torch.cos(t * 0.1).unsqueeze(1)        ], dim=1)        return self.fc(torch.cat([x, te], dim=1)) def linear_schedule(T, beta1=0.0001, betaT=0.02):    betas = torch.linspace(beta1, betaT, T)    alphas_bar = torch.cumprod(1.0 - betas, dim=0)    return betas, alphas_bar def cosine_schedule(T, s=0.008):    steps = torch.arange(T + 1, dtype=torch.float32) / T    alphas = torch.cos((steps + s) / (1 + s) * math.pi / 2) ** 2    alphas = alphas / alphas[0]    betas = torch.clamp(1.0 - alphas[1:] / alphas[:-1], 0.0001, 0.02)    return betas, alphas[:-1] def train_one_step(model, opt, x0, t, alphas_bar):    eps = torch.randn_like(x0)    xt = torch.sqrt(alphas_bar[t]) * x0 + torch.sqrt(1.0 - alphas_bar[t]) * eps    pred = model(xt, t.float())    loss = nn.functional.mse_loss(pred, eps)    opt.zero_grad()    loss.backward()    opt.step()    return loss.item() if __name__ == "__main__":    T = 100    _, lin_bar = linear_schedule(T)    _, cos_bar = cosine_schedule(T)    print("t=90  Linear alpha_bar:", round(lin_bar[89].item(), 4))    print("t=90  Cosine alpha_bar:", round(cos_bar[89].item(), 4))     model = TinyNet()    opt = torch.optim.Adam(model.parameters(), lr=1e-3)    x0 = torch.randn(32, 16)    for step in range(150):        t = torch.randint(0, T, (32,))        loss = train_one_step(model, opt, x0, t, cos_bar)        if step % 30 == 0:            print("step", step, "loss", round(loss, 4))
目的:用一个小型全连接网络演示 DDPM 的核心训练流程——生成 Linear/Cosine 两种调度、执行前向加噪、按简化目标做一步去噪训练,并直观对比两种调度在后期时间步的信号保留差异。
  1. alphas_bar = torch.cumprod(1.0 - betas, dim=0)把每步的留存率 (1-β) 累乘,得到累计信号保留率 ᾱ_t。
  2. alphas = torch.cos((steps + s) / (1 + s) * math.pi / 2) ** 2计算余弦平方调度下的 ᾱ_t,天然形成 S 形下降。
  3. xt = torch.sqrt(alphas_bar[t]) * x0 + torch.sqrt(1.0 - alphas_bar[t]) * eps用重参数化一步生成含噪样本,对应正文中的前向公式。
  4. pred = model(xt, t.float())网络接收黑水和时刻 t,输出预测的“含墨量”。
  5. loss = nn.functional.mse_loss(pred, eps)计算预测噪声与真实噪声的均方误差,正是 L_simple 目标。

常见误区

误区DDPM 原文用的就是 Linear 调度,祖师爷的配方不会有错,Cosine 不过是后来者搞的花架子。我直接抄 Linear 就行,懒得对比。

正解原文选用 Linear 主要因为数学推导简单、实现方便,它只是基线而非最优解。Cosine 调度让 ᾱ_t 呈 S 形下降,使每个时间步的信息量更均衡,在多数高分辨率任务上收敛更快、FID 更低。选择调度应靠实验证据,而不是看论文“出处”。

为何常见:人们习惯把经典论文的默认配置当作“标准答案”,忽略了它可能只是当时的最优妥协。

误区训练时看到 L_simple 一路走低就开心,等损失基本不降了便收工部署,心想“损失最小肯定最好”。

正解L_simple 只是“猜墨误差”的代理指标,与真实生成质量并非完全一致。训练损失继续下降时,FID 可能早已触底反弹——那是过拟合的信号。正确做法是定期在验证集上算 FID,用 FID 曲线挑选 checkpoint,而不是盯训练损失。

为何常见:监督学习的惯性思维是“loss 即目标”,但在生成模型里,损失只是通往目标的桥梁。

误区FID 降到 5 以下就到处炫耀“我的模型超越 SOTA”,以为这个数字说明每一张图都美如画。

正解FID 在 Inception 高层特征空间衡量分布距离,它不直接感知像素级模糊、局部伪影或颜色偏差。可能 FID 很低但单张图有明显瑕疵,也可能肉眼不错的图 FID 偏高。评估时应结合 FID 与人工视觉检查,二者互补。

为何常见:人们总希望用“一个数字概括全部质量”,却忽略了 FID 作为统计指标的归纳偏置。

误区听说 Cosine 比 Linear 好,于是所有项目一律换 Cosine,结果在低分辨率、少推理步数的任务上效果反而变差,还找不到原因。

正解调度选择依赖任务属性。低分辨率或推理步数少时,Linear 的单调快速退化可能更稳定;数据集极小时,Cosine 的平滑过渡也可能让有效训练信号不足。正确姿势是固定预算做一组 Linear vs Cosine 对比,用 FID 曲线下面积(AUF)做裁判。

为何常见:把某一篇论文的结论无条件泛化到所有场景,忽略了“最优策略依赖任务分布”这一基本事实。

面试题

Q1. DDPM 前向过程的核心作用是什么?

单选题 · easy

  • A.逐步为图像注入高斯噪声直至接近纯噪声← 正确答案
  • B.逐步从噪声中还原清晰原始图像
  • C.一次性添加固定幅度的随机噪声
  • D.使用卷积核对图像进行平滑模糊

答案:A。前向过程相当于“滴墨成画”,每一步按 β_t 注入高斯噪声,T 步后图像变成纯噪声。B 描述的是逆向去噪,C 忽略了“逐步”,D 是图像处理操作,均不符合。

Q2. 符号 ᾱ_t 在 DDPM 中代表什么?

单选题 · easy

  • A.前向过程每步噪声的强度
  • B.信号保留率的时序累积值← 正确答案
  • C.标准高斯噪声的采样结果
  • D.模型训练损失的期望值

答案:B。ᾱ_t 是前 t 步 (1-β_s) 的连乘,表示原始信号还剩多少,即“清水留存率”。β_t 是单步噪声强度(A 错),ε 是噪声采样(C 错),损失是另外的概念(D 错)。

Q3. Linear 噪声调度中 β_t 的变化规律是什么?

单选题 · mid

  • A.保持固定不变直到训练结束
  • B.随时间步长增大而线性增大← 正确答案
  • C.随时间步长增大而线性减小
  • D.按余弦函数的周期来回摆动

答案:B。Linear 调度让 β_t 从 0.0001 线性增长到 0.02,是一条匀速上升的直线。A 是恒定调度,C 方向反了,D 是余弦类调度的特征。

Q4. Cosine 调度下 ᾱ_t 曲线的形状是?

单选题 · mid

  • A.直线单调下降的快速衰减形态
  • B.先快后慢的指数式衰减形态
  • C.中间陡峭两端平缓的 S 形形态← 正确答案
  • D.先慢后快的凹曲线加速形态

答案:C。cos² 函数在 0 到 π/2 之间先缓、中间加速、最后再放缓,整体呈 S 形。A 是线性衰减,B 更接近 Linear 的累计效果,D 只是 S 形的前半段特征,不完整。

Q5. 关于 DDPM 简化训练目标 L_simple,正确的说法有哪些?

多选题 · mid

  • A.让模型直接预测注入的噪声← 正确答案
  • B.去除了原目标中的繁琐权重← 正确答案
  • C.需要预测整段逆向过程轨迹
  • D.使用均方误差衡量预测偏差← 正确答案

答案:ABD。L_simple 的核心是让网络 ε_θ 预测噪声 ε,用 MSE 度量偏差,且去掉了 ELBO 里的各项权重。它不需要预测整段轨迹——这正是“简化”的关键,因此 C 错误。

Q6. FID 值越小表示什么?

单选题 · mid

  • A.生成分布与真实分布越接近← 正确答案
  • B.生成图像的亮度值整体更高
  • C.训练使用的数据量变得更少
  • D.噪声调度的方差显著变大

答案:A。FID 在特征空间度量两个高斯分布的距离,越小代表真实图与生成图的特征分布越接近。亮度、数据量、调度方差都与 FID 的定义无关。

Q7. 关于 SNR(t)=ᾱ_t/(1-ᾱ_t),下列说法正确的是?

单选题 · hard

  • A.SNR 随时间步的增加而单调增大
  • B.SNR 随时间步的增加而单调减小← 正确答案
  • C.SNR 在训练过程中始终保持恒定
  • D.SNR 只由网络结构决定而无关

答案:B。随时间步 t 增大,ᾱ_t 单调下降,1-ᾱ_t 单调上升,比值必然单调减小。A 方向反了,C 忽略了噪声的累积效应,D 与调度无关的说法显然错误。

Q8. 训练 DDPM 时,时间步 t 的采样方式通常是?

单选题 · mid

  • A.仅从 t 接近 T 的后期阶段采样
  • B.仅从 t 接近 0 的早期阶段采样
  • C.从全部时间步中按均匀分布采样← 正确答案
  • D.根据实时 FID 曲线动态加权采样

答案:C。简化训练目标要求 t 从 1 到 T 均匀采样,让模型均衡练习所有噪声浓度。只采样后期或早期都会让模型缺失某个难度的学习,动态加权采样并非标准做法。

Q9. 关于 Linear 与 Cosine 调度对比,正确的有哪些?

多选题 · mid

  • A.Cosine 调度中间阶段衰减速度最快← 正确答案
  • B.Linear 调度后期去噪难度急剧升高← 正确答案
  • C.Cosine 调度尾部信号衰减会放缓← 正确答案
  • D.Cosine 调度在所有任务中必优于 Linear

答案:ABC。Cosine 的 ᾱ_t 是 S 形,中间斜率最大、尾部趋缓,因此 A、C 正确。Linear 后期 SNR 指数级暴跌,模型易陷入盲猜,B 正确。D 太绝对,低分辨率或小数据集任务中 Linear 可能更稳。

Q10. 训练中观察 FID 收敛曲线时,合理的实践有哪些?

多选题 · hard

  • A.用 EMA 平滑 FID 曲线辅助判断← 正确答案
  • B.只看训练损失曲线决定是否早停
  • C.选验证集 FID 最低的检查点部署← 正确答案
  • D.忽略曲线只看训练结束时的指标

答案:AC。EMA 能过滤单次评估噪声,FID 最低的 checkpoint 是部署的首选,因此 A、C 正确。训练损失下降不代表生成质量提升,可能已经过拟合,B 错误;训练结束时的单点 FID 无法反映全程收敛质量,D 错误。