Skip to content

Part 5(进阶3 选做):生成式魔法 —— Diffusion Model

本题将“实现方式的选择权”交给你:你既可以手搓公式,也可以调库完成工程闭环;但重心放在论文理解实验复现上。

🎯 背景与目标

从 Stable Diffusion 到 Sora,现代生成式 AI 的核心几乎都是 Diffusion Model(扩散模型)

本任务要求你复现这一前沿技术。我们不限制你使用的具体工具,但你必须完成指定目标,并证明你真正理解了背后的原理。

你的任务:MNISTFashion-MNIST 数据集上训练一个 Diffusion Model。给它一堆全是雪花点的纯噪声,它能将其还原为图像。

📄 论文精读与思考

在开始写代码之前,请务必阅读 Diffusion 领域的开山之作(至少阅读 Abstract 和 Method 章节),并回答紧随其后的思考题。这有助于你理解代码中每一步在做什么。

🧠 论文导读思考题

  1. 关于前向过程:

    论文中定义了一个固定的加噪过程。请问:随着时间步 $t$ 的增加(从 $0$ 到 $T$),图像 $x_t$ 的分布会逐渐趋近于什么分布?为什么这个性质对于生成过程至关重要?

  2. 关于逆向过程:

    我们训练神经网络是为了模拟逆向过程。论文指出,为了从 $x_t$ 还原出 $x_{t-1}$,神经网络本质上是在预测什么?(是预测原图 $x_0$?还是预测该步加入的噪声 $\epsilon$?亦或是预测均值 $\mu$?)

  3. 关于网络输入:

    为什么在输入图片 $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:训练

实现论文中的训练算法:

  1. 随机采样干净图片 $x_0$ 和时间步 $t$。
  2. 生成随机高斯噪声 $\epsilon$。
  3. 根据公式生成带噪图片 $x_t$。
  4. 让网络根据 $x_t$ 和 $t$ 预测噪声 $\epsilon$。
  5. 计算 Loss。

Step 4:采样与生成

  • 实现逆向去噪算法。
  • 从标准正态分布采样纯噪声 $x_T$,经过 $T$ 步迭代,最终生成图片 $x_0$。

📂 提交内容

  1. 代码文件:完整的训练与采样脚本。
  2. 实验报告
    • 思考题回答:对上述 3 个论文导读问题的解答。
    • Loss 曲线:证明你的模型收敛了。
    • 生成结果展示:
      • 生成一张 网格图,展示 16 个生成的数字/服饰。
      • (加分项)动图/视频,展示一张图片从“满屏雪花点”一步步变清晰的过程。

Released under the MIT License.