Appearance
Part 5(进阶3 选做):生成式魔法 —— Diffusion Model
本题将“实现方式的选择权”交给你:你既可以手搓公式,也可以调库完成工程闭环;但重心放在论文理解与实验复现上。
🎯 背景与目标
从 Stable Diffusion 到 Sora,现代生成式 AI 的核心几乎都是 Diffusion Model(扩散模型)。
本任务要求你复现这一前沿技术。我们不限制你使用的具体工具,但你必须完成指定目标,并证明你真正理解了背后的原理。
你的任务: 在 MNIST 或 Fashion-MNIST 数据集上训练一个 Diffusion Model。给它一堆全是雪花点的纯噪声,它能将其还原为图像。
📄 论文精读与思考
在开始写代码之前,请务必阅读 Diffusion 领域的开山之作(至少阅读 Abstract 和 Method 章节),并回答紧随其后的思考题。这有助于你理解代码中每一步在做什么。
- 必读论文: Denoising Diffusion Probabilistic Models(DDPM)(Ho et al., NeurIPS 2020)
🧠 论文导读思考题
关于前向过程:
论文中定义了一个固定的加噪过程。请问:随着时间步 $t$ 的增加(从 $0$ 到 $T$),图像 $x_t$ 的分布会逐渐趋近于什么分布?为什么这个性质对于生成过程至关重要?
关于逆向过程:
我们训练神经网络是为了模拟逆向过程。论文指出,为了从 $x_t$ 还原出 $x_{t-1}$,神经网络本质上是在预测什么?(是预测原图 $x_0$?还是预测该步加入的噪声 $\epsilon$?亦或是预测均值 $\mu$?)
关于网络输入:
为什么在输入图片 $x_t$ 的同时,还必须把当前的时间步 $t$(Time Step)告诉神经网络?如果不输入 $t$,网络在处理 $x_t$(微小噪声)和 $x_T$(巨大噪声)的图片时会遇到什么逻辑矛盾?
🛠️ 任务要求
你可以自由选择实现路径,但最终必须跑通以下流程:
Step 1:数据准备
- 加载 MNIST 或 Fashion-MNIST 数据集。
- 注意:Diffusion Model 通常要求输入数据归一化到
[-1, 1]之间,请确保你的预处理步骤正确。
Step 2:构建扩散模型
无论你是否使用库,你需要构建包含以下逻辑的 Pipeline:
- 噪声调度:定义 $\beta_t$ 从 $1$ 到 $T$ 的变化规律(通常是线性增长)。
- 网络结构:搭建一个 U-Net 风格的网络。
- 输入:
(Batch, 1, 28, 28)的图片 + 时间步t - 输出:与输入形状相同的预测噪声
- 输入:
- 提示:如果手写,注意如何将时间步 $t$ 编码并融入到卷积特征中。
Step 3:训练
实现论文中的训练算法:
- 随机采样干净图片 $x_0$ 和时间步 $t$。
- 生成随机高斯噪声 $\epsilon$。
- 根据公式生成带噪图片 $x_t$。
- 让网络根据 $x_t$ 和 $t$ 预测噪声 $\epsilon$。
- 计算 Loss。
Step 4:采样与生成
- 实现逆向去噪算法。
- 从标准正态分布采样纯噪声 $x_T$,经过 $T$ 步迭代,最终生成图片 $x_0$。
📂 提交内容
- 代码文件:完整的训练与采样脚本。
- 实验报告:
- 思考题回答:对上述 3 个论文导读问题的解答。
- Loss 曲线:证明你的模型收敛了。
- 生成结果展示:
- 生成一张 网格图,展示 16 个生成的数字/服饰。
- (加分项)动图/视频,展示一张图片从“满屏雪花点”一步步变清晰的过程。
