第 1 章面试题库:90 秒答案与追问¶
用途:把第 1 章知识压缩成面试语言。
方法:先自己答,再看参考;每题至少练 3 遍,第 3 遍录音。标记:S = 必须熟练;A = 高频;B = 加分。
1. 本章 6 道核心题¶
| 题号 | 题目 | 重要度 | 主材料 |
|---|---|---|---|
| D2 | 能否使用其他噪声? | A | 1.4 |
| D5 | 推演 DDPM 公式 | S | 1.2、1.3 |
| D6 | GAN 和 Diffusion 的区别 | A | 1.1 |
| D9 | 实现 DDPM 需要什么条件 | A | 1.3 |
| D10 | 为什么加噪幅度不一致 | S | 1.2 |
| A3 | 重参数技巧 | A | 1.2 |
2. D5:推演 DDPM 公式(S)¶
90 秒版¶
“DDPM 前向是马尔可夫高斯加噪:\(q(x_t|x_{t-1})=\mathcal N(\sqrt{\alpha_t}x_{t-1},\beta_t I)\),展开得到 \(x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\epsilon\)。反向要学 \(p_\theta(x_{t-1}|x_t)\);给定 \(x_0\) 时,真实后验 \(q(x_{t-1}|x_t,x_0)\) 是高斯,均值 \(\tilde\mu_t\) 是 \(x_0\) 和 \(x_t\) 的线性组合。通过 ELBO,固定方差后每步 KL 只和均值差有关。把 \(x_0\) 用 \(x_t,\epsilon\) 替换,均值变成 \(\frac{1}{\sqrt{\alpha_t}}(x_t-\frac{\beta_t}{\sqrt{1-\bar\alpha_t}}\epsilon)\),所以网络预测噪声 \(\epsilon\)。最后简化成 MSE,采样时从 \(x_T\) 开始逐步去噪。”
追问 1:为什么后验是高斯?¶
因为 \(q(x_t|x_{t-1})\)、\(q(x_{t-1}|x_0)\) 都是高斯,乘起来还是高斯;分母与 \(x_{t-1}\) 无关,只影响归一化。配方后得到高斯均值和方差。
追问 2:为什么可以只预测噪声?¶
因为 \(x_0\) 可以由 \(x_t\) 和 \(\epsilon\) 解出:
把它代入后验均值,均值就变成 \(x_t\) 和 \(\epsilon\) 的函数。预测 \(\epsilon\) 等价于预测后验均值,也等价于学习 score。
追问 3:\(\mathcal L_{\mathrm{simple}}\) 是精确 ELBO 吗?¶
不是。它丢掉了时间相关权重,是对 ELBO 的简化/重加权;但实验上生成质量更好。
追问 4:为什么 \(t=T\) 要接近标准高斯?¶
因为采样从 \(p(x_T)=\mathcal N(0,I)\) 开始;如果训练时 \(x_T\) 不是纯噪声,训练和推理的起点不一致,采样会偏。
易错点¶
- 把 \(\beta_t\) 和 \(\tilde\beta_t\) 混用;
- 后验均值符号/系数写错;
- 说 \(\mathcal L_{\mathrm{simple}}\) 是精确似然;
- 采样最后一步仍加噪声。
3. D10:为什么加噪幅度不一致(S)¶
90 秒版¶
“因为 \(\beta_t\) 是一个 schedule,不是常数。前向是 \(x_t=\sqrt{\alpha_t}x_{t-1}+\sqrt{\beta_t}\epsilon\),展开后 \(x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\epsilon\)。随着 \(t\) 增大,信号系数 \(\sqrt{\bar\alpha_t}\) 下降,噪声系数 \(\sqrt{1-\bar\alpha_t}\) 上升,SNR 下降。这样设计是为了早期小噪声保留结构、后期大噪声把数据破坏成标准高斯,同时让训练难度平滑变化。注意 \(\beta_t\) 是每步噪声方差,\(1-\bar\alpha_t\) 是累计噪声方差。”
追问 1:为什么不每步加一样大的噪声?¶
可以定义常数 \(\beta\),但 SNR 轨迹不同;可能早期破坏太快或后期噪声不够,实际效果通常不如精心设计的 schedule。
追问 2:schedule 怎么选?¶
线性是基线;cosine 让 SNR 更平滑;scaled linear 常用于 SD;zero terminal SNR 让 \(t=T\) 严格为标准高斯。选择要看分辨率、数据、训练稳定性。
追问 3:\(\beta_t\) 是 \(x_t\) 的方差吗?¶
不是。\(\beta_t\) 是每步增量;\(x_t\) 的噪声方差是 \(1-\bar\alpha_t\)。
易错点¶
- 把 \(\bar\alpha_t\) 当累加;
- 把“每步噪声”与“总噪声”混为一谈;
- 说“因为高斯随机,所以幅度不一样”。
4. D6:GAN 和 Diffusion 的区别(A)¶
90 秒版¶
“GAN 用生成器和判别器做对抗训练,学隐式采样映射,通常一步出图,快、锐利,但训练不稳定、容易模式坍塌。Diffusion 学逐步去噪:前向把数据加噪到高斯,反向学习每一步去噪,采样从噪声迭代恢复;训练目标稳定、模式覆盖通常更好、条件控制自然,但采样慢。实际系统会混合,比如 VQGAN 用 GAN 提升重建,或少步扩散用对抗蒸馏。”
追问 1:为什么 Diffusion 训练稳定?¶
每个时间步都有明确的噪声回归目标,不需要判别器提供动态信号;损失是 MSE/变分下界,训练信号稳定。
追问 2:Diffusion 一定比 GAN 好吗?¶
不一定。大规模文生图上 Diffusion 占优;GAN 在实时、低算力、特定域仍有优势。
追问 3:为什么 Diffusion 慢?¶
多步迭代,每步跑一次网络;步数、模型大小、分辨率共同决定时延。
易错点¶
- 说“Diffusion 没有模式坍塌”;
- 说“GAN 已经完全过时”;
- 只比较速度,不比较训练稳定性/可控性。
5. D9:实现 DDPM 需要什么条件(A)¶
90 秒版¶
“分两层。如果问条件生成,DDPM 本身不需要标签,原始 DDPM 是无条件生成;条件可以通过 cross-attention、AdaGN 或条件 embedding 加。如果问实现前提,最小闭环是数据、噪声 schedule、带时间步编码的网络、噪声预测损失和采样器;理论上需要高斯马尔可夫前向、闭式边缘、反向高斯近似、\(T\) 足够大。它不需要 GAN 判别器,也不需要显式分类器。”
追问 1:一定要 U-Net 吗?¶
不一定。MLP、CNN、DiT 都可以;U-Net 只是归纳偏置好。
追问 2:一定要 1000 步吗?¶
不一定。\(T\) 是训练 schedule 的长度;采样可以用 DDIM/DPM-Solver 跳步。步数影响训练/采样质量与成本。
追问 3:DDPM 需要条件吗?¶
不需要。无条件 DDPM 只学 \(p(x)\);条件生成是额外能力。
易错点¶
- 说“DDPM 必须有标签”;
- 说“必须用 classifier”;
- 忽略时间步编码、EMA、数据归一化。
6. A3:重参数技巧(A)¶
90 秒版¶
“重参数化是把随机采样写成确定性变换加外部噪声。比如 \(z\sim\mathcal N(\mu,\sigma^2)\),写成 \(z=\mu+\sigma\odot\epsilon\),\(\epsilon\sim\mathcal N(0,I)\),随机性只来自 \(\epsilon\),梯度可以对 \(\mu,\sigma\) 反传。VAE 用它训练编码器;Diffusion 的前向加噪也是同一个技巧,所以 \(x_t\) 可以直接从 \(x_0\) 采样,训练目标可以写成噪声回归。VQ-VAE 的离散选择不能用普通重参数化,通常用 straight-through。”
追问 1:为什么不用 REINFORCE?¶
REINFORCE/score function 估计方差大;重参数化提供低方差的路径导数。
追问 2:VQ-VAE 为什么不用它?¶
离散选择不可导;straight-through 是人为把梯度传过去,有偏。
易错点¶
- 把重参数化说成“重新定义参数”;
- 把 straight-through 当成重参数化;
- 说“所有分布都能重参数化”。
7. D2:能否使用其他噪声(A)¶
90 秒版¶
“可以。扩散的本质是定义破坏过程并学习其逆过程,高斯不是理论必需。Cold Diffusion 用模糊、遮挡、下采样等确定性退化;D3PM 用离散转移矩阵,适合 token;Poisson/Gamma 扩散适合计数/非负数据;Flow Matching 用任意概率路径和速度场。但换噪声要重写前向边缘、后验、反向变分族、损失和采样。高斯因为闭式边缘、闭式后验、可算 KL、score 简单、最大熵,成为默认选择。”
追问 1:为什么不用均匀噪声?¶
后验不再简单高斯,KL/score 更难算;均匀分布支撑有界,和图像分布不匹配。
追问 2:Flow Matching 是 Diffusion 吗?¶
同属连续生成模型,但 Flow 用确定性概率路径 + 速度回归,采样解 ODE;可以看作 Diffusion 的广义版本。
易错点¶
- 说“换噪声只改采样”;
- 说“高斯是理论强制”;
- 把 Flow Matching 当成一个 sampler。
8. 延伸题:10 个高频追问¶
Q1:扩散模型和 VAE 的关系?¶
都用变分/潜变量思想。VAE 直接学编码—解码;Diffusion 学逐步去噪,ELBO 也来自变分推断。Stable Diffusion 的 VAE 是图像压缩器,不是生成器。
Q2:扩散模型和 score matching 的关系?¶
DDPM 的噪声预测等价于学习 score:\(\nabla_{x_t}\log q(x_t|x_0)=-\epsilon/\sqrt{1-\bar\alpha_t}\)。Score SDE 把离散步骤推广到连续时间。
Q3:为什么 \(x_t\) 的方差是 1?¶
如果 \(x_0\) 归一化到单位方差,\(\mathrm{Var}(x_t)=\bar\alpha_t+(1-\bar\alpha_t)=1\),所以叫 variance-preserving。
Q4:为什么后验方差是 \(\tilde\beta_t\)?¶
由两个高斯相乘的二次型系数决定;它介于 0 和 \(\beta_t\) 之间,反映给定 \(x_t,x_0\) 后 \(x_{t-1}\) 的不确定性。
Q5:为什么训练时 \(t\) 均匀采样?¶
简单、无偏;也可以通过 importance sampling 或 logit-normal 调整,让某些时间步权重更高。
Q6:DDPM 的似然怎么算?¶
用 ELBO 作为下界;\(\mathcal L_{\mathrm{simple}}\) 不是精确似然。可以做 bits-per-dim 评估,但生成质量更常用 FID 等。
Q7:为什么高噪声时 \(x_0\) 预测不稳?¶
因为 \(x_t\) 几乎没有 \(x_0\) 信息,\(x_0\) 的后验方差很大;预测噪声的尺度更稳定。
Q8:Zero Terminal SNR 解决什么?¶
让 \(t=T\) 时 \(\bar\alpha_T=0\),\(x_T\) 严格为标准高斯,减少训练/推理端点不一致;常配合 \(v\)-prediction。
Q9:Offset Noise 和换噪声是一回事吗?¶
不是。Offset Noise 仍是高斯,只是加了一个低频、空间相关的偏移,解决亮度偏置;换噪声是换分布/破坏过程。
Q10:如果数据是离散 token,用高斯扩散合适吗?¶
不合适。优先离散扩散(D3PM/吸收态)或自回归/掩码生成;高斯扩散适合连续数据。
9. 追问树:D5¶
DDPM 怎么推?
├── 前向为什么能一步采样?
│ ├── 马尔可夫 + 高斯可加性
│ └── 写出 q(x_t|x0)
├── 后验为什么是高斯?
│ ├── 高斯 × 高斯
│ └── 配方得到均值和方差
├── ELBO 怎么分解?
│ ├── L_T / L_{t-1} / L_0
│ └── 固定方差 → KL 只依赖均值
├── 为什么预测噪声?
│ ├── x0 用 xt, ε 表示
│ ├── 均值参数化
│ └── 等价于 score
└── 采样怎么来?
├── 从 xT ~ N(0,I)
└── 每步算均值 + 噪声
10. 15 分钟模拟面试脚本¶
| 时间 | 内容 | 目标 |
|---|---|---|
| 0–2 | 自我介绍 + 项目一句话 | 建立上下文 |
| 2–6 | D5 推演 | 看公式主线 |
| 6–9 | D10 / A3 追问 | 看概念边界 |
| 9–12 | D6 / D9 | 看比较与工程 |
| 12–15 | 反问 + 反馈 | 看表达与诚实 |
评分(每项 1–5)¶
- 正确性:公式/概念是否有错;
- 结构:是否先结论后展开;
- 深度:是否能接两层追问;
- 表达:是否简洁、有逻辑;
- 诚实:不会时是否承认并给出推理。
11. 练习方法¶
- 第一遍:看答案,标出关键词;
- 第二遍:遮住答案,90 秒复述;
- 第三遍:录音,回听卡壳点;
- 第四遍:找人追问,练“为什么”。
不要背全文。背“结构 + 3 个关键词 + 1 个公式”,比背段落更稳。