扩散模型教程第9章:迷你实验与选型清单
本章是系列第 9 章(收尾章):不讲新理论,而是用三个 CPU 就能跑的玩具脚本把前八章的机制、旋钮、评估变成肌肉记忆,再用一张 Go/No-Go 清单把整个系列的选型纪律落到你自己的课题上。 前置:第 2 章(加噪机制)、第 6 章(采样步数)、第 7 章(四层评估与选型)。本章是它们的动手验证。 配套脚本:本章代码在
content/inbox/diffusion-models-ch09-diffusers-lab/scripts/,CPU 即可运行。
1. 本章目标与验收标准
Section titled “1. 本章目标与验收标准”学完本章并跑完三个实验,你应能:
- 亲眼看到 linear 与 cosine 噪声调度的 曲线差异,把第 2 章的公式变成图像直觉。
- 在 2D 玩具 DDPM 上复现「采样步数不够 → 模式粘连 / 糊成一团」的现象,把第 6 章的步数-质量权衡看在眼里。
- 用迷你评估仪表盘亲手制造出「L1 分布指标好、但 L3 下游任务差」的反例,把第 7 章「好看 ≠ 好用」验证一遍。
- 用 Go/No-Go 清单对自己的真实课题做一次开题自查。
- 说清「玩具能证明什么、不能证明什么」——避免拿 2D 结论去套真实生物任务。
字数与深度定位:动手收尾章(约 8500–12000 汉字)。不讲新理论、不追求生产级代码、不要求 GPU。
2. 为什么收尾章是「动手」而不是「总结」
Section titled “2. 为什么收尾章是「动手」而不是「总结」”学完前八章,你已经有了完整的概念地图:生成直觉(第 1 章)、加噪去噪机制(第 2、3 章)、与其他家族的对照(第 4 章)、五大机制族(第 5 章)、训练采样旋钮(第 6 章)、评估与选型(第 7 章)、生物落地(第 8 章)。但读懂 ≠ 会用。很多同学能背出「步数不够会糊」「FID 低不代表有用」,却从没亲眼见过它们长什么样——这种知识是脆的,一到真实项目就用不出来。
本章的设计哲学是:用最小的成本,把最容易「以为自己懂了」的三件事,变成亲眼见过、亲手做过的肌肉记忆。
flowchart TB E1["实验1 · 噪声调度可视化<br/>把第 2 章 β schedule 变成图"] --> E2 E2["实验2 · 2D 玩具 DDPM<br/>把第 6 章步数权衡看在眼里"] --> E3 E3["实验3 · 迷你评估仪表盘<br/>把第 7 章 好看≠好用 做出来"] --> E4 E4["Go/No-Go 清单<br/>把选型纪律落到自己的课题"]
| 实验 | 对应理论 | 你要带走的直觉 | 脚本 |
|---|---|---|---|
| 1 | 前向加噪、β schedule(第 2 章) | 「噪声如何一步步盖住信号」 | noise_schedule_viz.py |
| 2 | 反向采样、步数权衡(第 6 章) | 「20 步 vs 5 步长什么样」 | toy_ddpm_2d.py |
| 3 | 四层评估里的 L1/L3 缩微(第 7 章) | 「分布指标好 ≠ 下游好」 | eval_dashboard_toy.py |
| 4 | 选型纪律(第 7 章) | 开题一页纸 | diffusion_go_nogo_checklist.py + 文内表格 |
一个重要的边界:这一章刻意不用 diffusers 这类高层库。库很好用,但它把加噪、去噪、采样、评估都封装进了几行 API,你看不见里面在动什么。玩具脚本反过来——代码短到能逐行读懂,每个部件的因果一目了然。先在玩具上建立因果直觉,再去用库,你才知道每个参数在调什么。 等你跑完本章,再回头用 diffusers 加载一个真实模型做消融,会顺畅得多。
3. 动手前的准备
Section titled “3. 动手前的准备”3.1 环境
Section titled “3.1 环境”三个脚本都为 CPU 设计,环境极简:
cd content/inbox/diffusion-models-ch09-diffusers-lab/scripts/pip install -r requirements.txtrequirements.txt 只有三行:numpy、matplotlib、torch。其中 numpy 和 matplotlib 支撑实验 1、3;torch 只被实验 2(2D 玩具 DDPM)用到,且只需 CPU 版。如果你暂时装不了 torch,实验 1、3 仍能独立跑通。
3.2 一键冒烟测试
Section titled “3.2 一键冒烟测试”想先确认环境没问题,跑一遍冒烟脚本:
bash run_smoke.sh它会依次跑三个实验(2D 玩具 DDPM 用减配参数快速过一遍),最后打印 SMOKE OK。看到这行,说明三个实验都能在你的机器上跑。
3.3 与强化学习动手阶段的最后一次边界对照
Section titled “3.3 与强化学习动手阶段的最后一次边界对照”如果你也学过强化学习系列的动手章,这里再钉一次两者的根本差异——因为玩具实验最容易让人混淆「在看什么」:
| 强化学习玩具(如 CartPole) | 扩散玩具(本章 2D DDPM) | |
|---|---|---|
| 你盯着看的曲线 | 回报曲线(reward 随训练上升) | 生成分布(散点云是否覆盖真实数据) |
| 「成功」长什么样 | 回报达到阈值、策略稳定 | 生成点云覆盖所有模式、不崩不糊 |
| 失败的典型样子 | 奖励黑客、训练发散 | mode collapse(只剩一个团)、步数不够糊成一片 |
一句话记忆:RL 玩具看「分数上没上去」,扩散玩具看「生成的分布对不对」。别把 reward 曲线的思维套到扩散上——扩散的 loss 下降根本不保证生成变好,这正是实验 3 要亲手演示的。
4. 实验一:噪声调度可视化
Section titled “4. 实验一:噪声调度可视化”4.1 为什么做这个实验
Section titled “4.1 为什么做这个实验”第 2 章讲过:前向过程按 逐步加噪,而看懂课表的关键量是 (还剩多少信号)。很多同学停留在「就是加高斯噪声」——但加多少、加多快,直接决定训练难度和后期采样质量。这个实验让你亲眼看到两种最常见调度的信噪比曲线差异。
一句话类比: schedule 像 PCR 的退火温度曲线——升温太猛(噪声加太快)模板碎了;太温吞则变性不彻底,后面酶(网络)不好工作。
4.2 关键步骤与调法
Section titled “4.2 关键步骤与调法”| 步骤 | 为什么需要 | 关键参数 | 怎么调 | 调坏会怎样 |
|---|---|---|---|---|
| 选 schedule | 控制信噪比下降速度 | linear / cosine | 先两个都画出来对比 | linear 末端有时过噪;cosine 通常更顺 |
| 设 T | 扩散离散步数 | T=100~1000(玩具 200 即可) | 玩具小 T 方便画图 | T 太小,前向「不够纯噪」 |
| 画 / SNR | 看见信号还剩多少 | 看曲线是否平滑降到近 0 | 若很早归零 → 后期 t 信息量极低 |
只保留讲解用公式(必记含义,第 2 章讲过):
- 接近 1:还很像原数据;
- 接近 0:基本是纯噪声;
- 网络在不同 t 上难度不同:中间 t 往往信息与噪声拉锯最激烈。
4.3 怎么跑
Section titled “4.3 怎么跑”python noise_schedule_viz.py# 输出:noise_schedule_compare.png(同目录)脚本会画四个子图:linear/cosine 的 曲线、 曲线、log10 信噪比下降曲线,以及一团 2D 点云在 cosine 调度下 的逐步加噪散点。
4.4 预期结果与常见失败
Section titled “4.4 预期结果与常见失败”预期:
- linear 与 cosine 的 都从约 1 降到约 0,但 cosine 通常在中段降得更「匀」;
- 对同一个 2D 点云示意,大 时点云应接近各向同性高斯(融成一个圆团)。
常见失败:
- 图是空的 → 检查是否有写文件权限、是否在脚本目录运行;
- 曲线不降 → β 写反或累乘实现错误(脚本已写好,若你改了代码先 diff)。
看图时具体盯什么:脚本输出的 noise_schedule_compare.png 有四个子图,按这个顺序读——先看左上的 曲线(每步新加多少噪声),linear 是直线上升、cosine 是先慢后快的弧线;再看右上的 (累计还剩多少信号),这是最关键的一张,两条线都从 1 降到 0,重点比较它们「降到一半」发生在哪个 ——linear 往往在 就腰斩,cosine 能拖到 ;然后看左下的 log-SNR 曲线(信噪比的对数),它把「中段拉锯区」放大得最清楚;最后看右下的双高斯点云在不同 的加噪快照,直观感受「结构如何被噪声吞没」。把这四张图连起来看,你就把第 2 章的抽象公式变成了肌肉记忆——这正是这个不需要 GPU 的实验的全部价值。
4.5 生物迁移
Section titled “4.5 生物迁移”| 真实任务 | 这个实验帮你想清的问题 |
|---|---|
| scRNA latent 扩散 | 调度是否过早把稀有类型信号「洗没」? |
| 病理 LDM | latent 空间的 schedule 是否与 VAE 动态范围匹配? |
| 分子构象 | 连续坐标对噪声尺度极敏感,过猛加噪会破坏键长几何先验 |
| 蛋白骨架扩散 | frame 空间的噪声(旋转 + 平移)也有自己的日程,别把图像 β 直搬(第 8 章) |
这张表里藏着一个通用教训:调度不是一个可以「照搬默认」的次要超参。图像领域的 linear/cosine 是在自然图像的动态范围上调出来的,直接搬到 latent 空间、连续坐标、frame 空间往往水土不服——因为这些空间的「信号」和「噪声」的尺度关系完全不同。分子坐标尤其敏感:键长只有 1–1.5 Å 的量级,噪声尺度稍大就会把合理的化学几何冲垮。所以当你在一个新的生物模态上跑扩散、发现怎么调都学不好时,先回来画一下 曲线,确认调度和你的数据尺度匹配——这个实验一分钟就能做,却能省掉几天的瞎调。
4.6 §4 checklist
Section titled “4.6 §4 checklist”- 我能解释 从 1 到 0 的含义
- 我能对比 linear vs cosine 的肉眼差异
- 我知道 schedule 属于第 5 章四维度里「路径 / 离散化」相关的选择
自测:若 在 就接近 0,训练可能出现什么现象?(提示:大量时间步信息量极低,模型在容易的区间「摸鱼」,真正难的中段反而训不透。)
5. 实验二:2D 玩具 DDPM——步数如何换质量
Section titled “5. 实验二:2D 玩具 DDPM——步数如何换质量”5.1 为什么做这个实验
Section titled “5.1 为什么做这个实验”第 6 章的核心体感是:采样步数 = 质量与速度的主旋钮。真实病理图太重、蛋白结构太抽象,很难当场看出步数的影响。而 2D 双高斯 / 环形分布足够让你一眼看见「步数不够 → 模式粘连 / 糊成一团」。
一句话类比:多步去噪像把搅浑的培养液逐步透析回清澈;步数太少 = 一次硬滤,膜两侧浓度还没平衡就结束。
5.2 实验设计(极简)
Section titled “5.2 实验设计(极简)”flowchart LR A["采样真实 2D 数据<br/>双高斯或环形"] --> B["前向加噪训练<br/>小 MLP 预测噪声"] B --> C["反向采样<br/>steps=5 / 20 / 100"] C --> D["并排散点图<br/>肉眼比分布"]
| 项目 | 默认 | 为什么 |
|---|---|---|
| 数据 | 双高斯混合(可切 ring / moons) | 一看就知道有没有 mode collapse |
| 网络 | 2→128→128→2 的 MLP + 时间嵌入 | CPU 分钟级可训 |
| T | 100 | 玩具够用 |
| 训练步 | 约 3000–8000 | 以「点云像样」为准,不追求极致 |
| 采样步 | 5 / 20 / 100 | 对齐第 6 章「步数敏感」叙事 |
| 优化器 | Adam, lr≈1e-3 | 简单稳 |
讲解用损失(第 2 章回顾,必记含义):
模型学的是:在带噪输入上,噪声长什么样;采样时一步步减噪。
5.3 关键参数怎么调
Section titled “5.3 关键参数怎么调”| 参数 | 怎么调 | 调坏会怎样 |
|---|---|---|
steps(采样) | 5 → 20 → 100 扫 | 5 步:两团粘、糊;过少可能只剩单模式 |
| 训练 iterations | 看真实 vs 生成散点 | 过少欠拟合;过多玩具上易过拟合噪声 |
hidden | 64 / 128 / 256 | 太小学不动复杂的环形分布 |
| schedule | linear / cosine | 与实验 1 对照 |
5.4 怎么跑
Section titled “5.4 怎么跑”python toy_ddpm_2d.py# 输出:# toy_ddpm_target.png — 真实数据# toy_ddpm_steps_compare.png — 不同采样步数# toy_ddpm_loss.png — 训练损失(辅助)脚本支持命令行参数,方便你扫不同设置:
python toy_ddpm_2d.py --steps 5,20,100 --iters 5000 --data moons建议的探索顺序(每步只改一个变量,对应第 6 章「不要越级调参」的纪律):先用默认参数跑一遍,确认 toy_ddpm_target.png 里的真实数据是你预期的形状;再固定训练不变,只扫 --steps 5,20,100,把三张采样图并排看——你应该能亲眼定位「悬崖」大概在几步。然后固定步数在 20,改 --data moons 或 --data ring 换更难的分布,看 MLP 还撑不撑得住;如果环形分布学不出来,把 --hidden 从 128 加到 256 再试。整个过程不超过十几分钟,但你会对「步数、训练量、网络容量」三者如何互相牵制建立起手感——这种手感是任何文字描述都替代不了的。
5.5 预期结果与常见失败
Section titled “5.5 预期结果与常见失败”预期:
- 100 步(或满 T):两团位置、方差大致对;
- 20 步:通常已经「能看」——呼应第 6 章的默认区段;
- 5 步:团块模糊、偏移、甚至两团合成一团。
常见失败现象对照表(请对照你的出图):
| 现象 | 可能原因 | 你该做什么 |
|---|---|---|
| 永远只有一个团 | 欠拟合 / 步数太少 / 模式崩 | 加长训练;加步数;检查数据是否真是双峰 |
| 点云爆炸到很大范围 | 采样公式实现或系数错误 | 用原版脚本对比;检查 系数 |
| loss 降、图仍差 | 正常!loss ≠ 观感 | 以散点为准;这正好引出实验 3 |
| 只记住几个点 | 过拟合 / 数据量不足 | 降 iterations;加数据量 |
注意倒数第二行——「loss 降了但图还是差」不是 bug,而是本系列反复强调的核心事实:训练损失下降只说明模型更贴合训练目标,不说明生成变好。 这也是实验 3 要放大演示的。
把三张步数图并排看,你要读出的是一条曲线:从 5 步到 20 步,质量往往有一次肉眼可见的跃升(跨过「悬崖」);从 20 步到 100 步,改善则小得多(进入「高原」)。这条「悬崖—甜点—高原」的形状,正是第 6 章讲的步数-质量关系在玩具上的缩影。记住:你在这里看到的不是「某个具体步数好」,而是这条曲线的形状本身——真实任务里拐点位置会变,但形状不变。所以调步数的正确做法永远是「往下压看什么时候崩,取悬崖上方一档」,而不是拍脑袋定一个数。另一个值得留意的细节:如果你换了 --data ring(环形分布),会发现同样的步数下环形比双高斯更难恢复——数据分布越复杂、模式越连续,需要的步数越多,这也解释了为什么真实的高分辨率生成往往比玩具需要更多步。
5.6 生物迁移
Section titled “5.6 生物迁移”| 玩具现象 | 真实生物可能对应 |
|---|---|
| 5 步两团粘连 | 少步采样导致亚型边界糊掉(病理亚型、细胞亚群) |
| 只覆盖一个高斯 | mode collapse → 稀有细胞类型消失;蛋白骨架只反复采到几个 fold |
| 20 步够用、100 步收益小 | 第 6 章:盲目加步数性价比低;可考虑 DPM-Solver 或换少步范式(第 5 章) |
5.7 §5 checklist
Section titled “5.7 §5 checklist”- 我亲眼看到步数不够时点云的样子
- 我理解 loss 下降和生成质量不是一回事
- 我能把「20 步够用」和第 6 章的甜点区对应起来
自测:如果你把 --steps 一路加到 500,生成质量会持续变好吗?为什么?(提示:边际收益递减,20–100 步之间往往已进入高原区,加步数只是烧算力。)
6. 实验三:迷你评估仪表盘——好看 ≠ 好用
Section titled “6. 实验三:迷你评估仪表盘——好看 ≠ 好用”6.1 为什么做这个实验
Section titled “6.1 为什么做这个实验”第 7 章的灵魂是:分布指标好 ≠ 下游任务好。这句话读起来像口号,但玩具里能亲手把它做出来——制造一个「L1 分布指标还凑合、但下游 TSTR 明显掉」的反例,你就再也不会只看 FID 下结论了。
6.2 四层框架在玩具里缩成两层
Section titled “6.2 四层框架在玩具里缩成两层”| 真实四层(第 7 章) | 玩具缩微 |
|---|---|
| L1 分布匹配(FID / MMD) | 2D 的 MMD + 均值 / 协方差比对 |
| L2 结构 | (玩具略) |
| L3 下游任务 | 简易 TSTR:合成数据训小分类器,真实数据上测 |
| L4 领域专家 | (玩具略) |
为什么玩具里只保留 L1 和 L3:L2 结构层(联合关系、空间一致性)和 L4 领域专家层(盲评、物理硬约束)都需要真实数据的结构或领域知识才能定义——2D 双高斯没有「基因-基因相关」可查,也没有「病理医生」可请。但 L1 和 L3 这一对已经足够演示本章最想让你看到的反差:L1(分布指标)可能还不错,L3(下游任务)却明显掉。真实任务里 L2/L4 是加上去的更硬防线(第 7 章讲全),玩具里先把 L1 vs L3 这个最基础的错配看透。
6.3 实验协议(务必遵守)
Section titled “6.3 实验协议(务必遵守)”flowchart LR
R["真实数据 train/test"] --> T1["用合成数据训练分类器"]
S["合成数据"] --> T1
T1 --> M["在真实 test 上测"]
M --> J{"TSTR 分数<br/>接近真实基线?"}
J -->|"是"| Good["合成有用"]
J -->|"否"| Bad["好看但没用"]
脚本会生成三种合成数据:good_syn(接近真实分布)、bad_noise(纯噪声)、bad_collapse(单峰崩溃),分别算 L1 统计(均值 L2 距离、方差比、RBF-MMD)和 TSTR 分数,让你对比看清「哪种坏法能被 L1 抓住、哪种只能被 L3 抓住」。
6.4 怎么跑
Section titled “6.4 怎么跑”python eval_dashboard_toy.py# 输出:# eval_dashboard_report.txt — 数值摘要# eval_dashboard_plots.png — 真 / 好生成 / 坏生成对比6.5 预期结果
Section titled “6.5 预期结果”- 好的合成(接近真实分布):TSTR 分数接近「真实训、真实测」的基线;
- 坏的合成(刻意加偏 / collapse):L1 也许还凑合,TSTR 明显掉;
- 这就是第 7 章的玩具级铁证:拿下游说话,不被分布指标忽悠。
怎么读那份报告:打开 eval_dashboard_report.txt,重点看两组对照。第一组是 bad_collapse(单峰崩溃)——它的均值可能和真实数据很接近(因为崩到了分布中心),所以均值 L2 距离这类 L1 指标不一定能抓到它,但方差比会明显偏小,TSTR 一定崩。第二组是 bad_noise(纯噪声)——它连 L1 都过不了,是最容易被识破的坏法。真正危险的是 bad_collapse 这种「L1 看着还行、L3 一测就露馅」的类型,它对应真实任务里最隐蔽的 mode collapse。把这两种坏法的数值并排看一遍,你就明白为什么第 7 章反复强调「L1 是入场券、L3 才是通行证」。
6.6 生物迁移
Section titled “6.6 生物迁移”| 玩具 | 真实 |
|---|---|
| TSTR 掉分 | scRNA 合成细胞训分类器、真实上崩 → 别用 |
| L1 好但 TSTR 差 | 病理 FID 好但分割不涨 → 生成没抓到判别特征 |
| 分类器太强看不出差 | 换更弱分类器或更难任务,放大差异 |
6.7 §6 checklist
Section titled “6.7 §6 checklist”- 我理解 TSTR 的思路(合成训、真实测)
- 我亲手看到了 L1 好但 L3 差的可能
- 我知道下游任务是评估的硬通货
自测:为什么「合成数据自己训、自己测」不能作为有效性证据?(提示:分布自洽 ≠ 对真实有用,自训自测只证明合成数据内部一致,绕过了真实分布这个裁判。)
7. 纸上实验:把四维度替换拆给自己看
Section titled “7. 纸上实验:把四维度替换拆给自己看”不写一行代码,也有一个值得做的思维练习——它对应第 5 章的四维度替换框架。拿两个你在论文或社群里见过的扩散变体(比如 Stable Diffusion 3、某个蛋白扩散模型),对每一个填这张表:
| 维度 | 这个模型选了什么 | 相比经典 DDPM 换了没有 |
|---|---|---|
| ① 建模空间 | 像素 / latent / 3D 结构 / 图 / 离散? | |
| ② 路径 | 随机 SDE / 直线 ODE(流匹配)? | |
| ③ 主干 | U-Net / DiT / 等变网络? | |
| ④ 步数 | 多步 / 少步 / 一步蒸馏? |
填完你会发现:任何一个「新模型」,都是在这四维里换了一两格。 例如 SD3 = 流匹配(②)+ latent(①)+ DiT(③),三格都换了;而一个普通的蛋白骨架扩散可能只换了①③(结构空间 + 等变主干)。这个练习能把「又一个要背的新名字」变成「哦,它在这两维上做了替换、代价是什么」——这才是读论文该有的姿势。
一个填好的示例(RFdiffusion) 帮你对照自己填得对不对:
| 维度 | RFdiffusion 的选择 | 相比经典 DDPM 换了没有 |
|---|---|---|
| ① 建模空间 | SE(3) 上的残基 frame(位置 + 朝向) | 换了:从像素换成 3D 结构流形 |
| ② 路径 | 高斯 / SO(3) 加噪的随机路径 | 基本没换(仍是加噪去噪) |
| ③ 主干 | RoseTTAFold 微调而来的等变网络 | 换了:从 U-Net 换成结构预测器改的等变主干 |
| ④ 步数 | 多步去噪采样 | 没换(仍多步) |
读这张填好的表,你能一眼看出 RFdiffusion 的创新集中在 ①③ 两维(把扩散搬到 3D 结构空间、用带物理先验的等变主干),而路径和步数沿用经典。这就解释了它的特点:物理合理性强(③带先验),但采样不算快(④没优化)——后者正是后续「蛋白流匹配」工作想改的那一格。四维度框架的威力就在这里:它让你不仅能拆解一个模型,还能预判「下一篇论文会去换哪一格」。
建议动作:找 2–3 篇你所在子领域的论文各填一遍,横向对比。你会很快看出这个方向「主流稳定在哪几格、前沿正在换哪一格」,这比读十篇综述都更快建立领域全局观。
8. Go/No-Go 清单:把选型纪律落成一页纸
Section titled “8. Go/No-Go 清单:把选型纪律落成一页纸”这是整个系列选型判断力的落地工具。开题前、换模型前、审稿自查时,对着你的真实课题填一遍。
8.1 总决策表
Section titled “8.1 总决策表”| # | 检查项 | Go 信号 | No-Go 信号 | 你的填写 |
|---|---|---|---|---|
| 1 | 任务类型 | 需要多样高维样本 | 纯预测 / 只要 Top-1 标量 | |
| 2 | 数据量与质量 | 足够支撑分布;标签 / 条件可靠 | n 极小;批次混乱不可校正 | |
| 3 | 成功定义 | 写得清 L1–L4 指标与及格线 | 只有「看起来像」 | |
| 4 | 基线 | 已有简单基线(检索 / AF / 对接 / 监督) | 无基线就直接上扩散 | |
| 5 | 算力与延迟 | 预算可承受,或可接受 LDM / LCM | 预算只够训一个小 MLP | |
| 6 | 评估可行性 | 能做下游 + 至少一种硬约束 / 专家 | 完全无法评 L3/L4 | |
| 7 | 风险 | 隐私 / 毒性 / 双用途已有对策 | 医学可识别风险无方案 | |
| 8 | 替代路线 | 已用四维度表比较过 FM / CM / DiT / LDM | 盲追开源明星名字 |
经验规则:2 个以上 No-Go 就先别训扩散,回去补问题定义或基线;全 Go 但仍犹豫,先用默认采样栈做最小可行实验,用 L3 下游指标说话。
脚本 diffusion_go_nogo_checklist.py 提供交互式版本:
python diffusion_go_nogo_checklist.py # 交互逐项问答python diffusion_go_nogo_checklist.py --blank # 导出空白 markdown 模板8.2 最小可行实验(1–2 周)协议
Section titled “8.2 最小可行实验(1–2 周)协议”清单过关后,别一上来就训大模型。先跑一个能证伪的最小实验:
- 冻结评估脚本:先写好 L1 子集 + 一个 L3 主指标,别边训边改评估。评估标准一旦随模型一起漂移,你就永远说不清「是模型变好了还是尺子变松了」——这是自欺的头号来源。
- 一个强非扩散基线:检索 / 监督学习 / AF 调用——给扩散一个要超越的对象。没有基线的「扩散能生成 X」是没有意义的陈述:能生成不等于比现有方法好。基线的存在把问题从「能不能做」变成「值不值得做」。
- 一个最简扩散 / LDM 基线:用第 6 章的默认采样栈(DPM++ 2M Karras + 20 步 + CFG 5),别一开始就调花活。先确认「最朴素的扩散」能不能打过非扩散基线,再谈优化。
- 多种子 × 分层报告:主结果取多种子均值 ± 标准差,按长度 / 类型 / 亚型分层看。单种子、单一汇总数容易掩盖「只在简单子集上好」的假象(第 7 章的 cherry-picking 陷阱)。
- 只有 L3 有正向信号,才进入流匹配 / 少步 / DiT 等替换实验。如果最简扩散基线连 L3 都打不过非扩散基线,换更花哨的范式通常也救不回来——先回去查数据、条件或问题定义。
这五步的顺序本身就是一种纪律:先把「能证伪的最小闭环」搭起来,再逐步加复杂度。 大多数失败的扩散项目,不是模型不够强,而是在没有基线、没有冻结评估的情况下就投入了几周训练,最后拿不出「比什么都强」的证据。
8.3 与强化学习清单的差异(勿混用)
Section titled “8.3 与强化学习清单的差异(勿混用)”学过强化学习系列的同学,注意两套开题清单的判断轴完全不同:RL 问「这个任务是不是序贯决策、有没有明确的奖励信号」;扩散问「这个任务要不要一整簇候选、有没有独立于生成模型的评估」。 如果你的任务本质是「最大化一个标量分数」,那多半该走 RL / 优化 / 贝叶斯优化,而不是扩散——第 7 章的决策树对此有详细展开。
9. 从玩具迁到真实生物任务
Section titled “9. 从玩具迁到真实生物任务”玩具实验最大的风险,是让你误以为 2D 双高斯上的结论能直接套到真实任务。这一节明确划出「可迁移」与「不可偷换」的边界。
9.1 可迁移的(方法论直觉)
Section titled “9.1 可迁移的(方法论直觉)”- 步数-质量权衡的形状:真实任务也有「悬崖—甜点—高原」的步数曲线,只是拐点位置不同。
- mode collapse 的样子:玩具里「两团变一团」,真实里「稀有细胞类型消失」「蛋白只出几个 fold」,本质是同一回事。
- loss ≠ 质量、L1 ≠ L3:这个因果在任何规模都成立,是本章最硬的可迁移结论。
- 先基线后扩散、先评估后换新的纪律:规模无关,永远适用。
9.2 不可偷换的(规模与结构)
Section titled “9.2 不可偷换的(规模与结构)”- 具体数值:玩具上「20 步够用」绝不能当成真实任务的定论——真实模型、真实数据的甜点区要重新扫。
- 数据结构:2D 连续点云没有离散约束、没有 3D 等变要求、没有高维稀疏性。蛋白、分子、单细胞各有各的硬约束(第 8 章),玩具一个都不覆盖。
- 评估工具:玩具用 MMD + 简易 TSTR,真实任务要用 path-FID、scTM、gene-gene 相关等领域工具(第 7 章),不能拿玩具指标交差。
一个真实会踩的坑:有人在玩具上验证了「20 步够用」,就把真实的蛋白骨架扩散也设成 20 步,结果生成的骨架 self-consistency 通过率极低。原因是——玩具是 2D 连续点云、肉眼一眼能看出崩没崩;蛋白骨架是 SE(3) 空间的高维结构,「拓扑错了」肉眼根本看不出来,必须靠 scTM 这种下游指标兜底(第 7、8 章)。越是「错了也不容易当场发现」的领域,越要保守选步数、越要靠硬评估——这恰恰是玩具无法替你验证的部分。玩具给你的是「步数曲线长什么形状」的直觉,不是「你的任务该用几步」的答案。
9.3 真实课题「第一周」动作清单
Section titled “9.3 真实课题「第一周」动作清单”- 用 §8 的 Go/No-Go 清单过一遍,确认 No-Go 信号 < 2
- 找到并跑通一个非扩散基线,记录它的 L3 指标
- 用第 8 章对应轨道的四要素模板,写清你的输入 / 输出 / 条件 / 评估
- 冻结评估脚本(至少一个 L3 主指标)
- 用第 6 章默认采样栈跑一个最简扩散基线,和非扩散基线比 L3
这份清单的顺序是刻意的:它把「训一个扩散模型」这件最诱人、最想立刻动手的事,排在了最后一步。 前四步没有一步在训扩散——它们在逼你回答「这事该不该用扩散、用了怎么算成功、有没有一个更简单的对手」。绝大多数失败的生成项目,不是模型训得不好,而是这四步里有一步从来没认真做过:没有基线所以不知道扩散到底有没有增量,没冻结评估所以指标可以随便挑好看的报,没写四要素所以做到一半才发现条件根本注入不进去。把动手训练排在最后,不是拖延,而是把最贵的算力留给一个已经想清楚的问题。 如果你能诚实地打勾前四项,第五步的扩散基线才有意义——否则你只是在用 GPU 掩盖一个没定义清楚的问题。
10. 全系列毕业要求
Section titled “10. 全系列毕业要求”跑完三个实验、填完 Go/No-Go,你就走完了整个系列。这里给一张「毕业 checklist」——如果每一项都能不看笔记做到,你已经具备独立开一个生物扩散课题的判断力。
10.1 概念闭环
Section titled “10.1 概念闭环”flowchart LR C1["1 为什么用扩散"] --> C2["2-3 加噪去噪机制"] C2 --> C4["4-5 家族与机制族"] C4 --> C6["6 训练采样旋钮"] C6 --> C7["7 评估与选型"] C7 --> C8["8 生物落地"] C8 --> C9["9 动手 + 选型清单"] C9 -.回看.-> C1
10.2 毕业 checklist
Section titled “10.2 毕业 checklist”- 我能判断一个生物问题是否「更像扩散场景」(第 1 章)
- 我能写出前向闭式、解释 ε / x0 / v 三种预测目标(第 2、3 章)
- 我能从目标函数、稳定性、算力、边界四维对比扩散 / GAN / VAE(第 4 章)
- 我能用四维度框架拆解任何一个新扩散变体(第 5 章)
- 我能对着现象定位该调哪个采样旋钮(第 6 章)
- 我能用四层评估框架 + Go/No-Go 给一个课题做选型(第 7 章)
- 我能给蛋白 / 分子 / 单细胞 / 病理任务各填出四要素、说清 RFdiffusion 三段式分工(第 8 章)
- 我亲手跑过三个玩具实验,见过步数不够、mode collapse、L1 好但 L3 差的样子(第 9 章)
这张清单也是一张「回看地图」:哪一项打不了勾,就回对应章节重读。它们不是孤立的知识点,而是一条环环相扣的推理链——判断该不该用扩散(第 1 章)依赖你理解扩散在做什么(第 2、3 章)和它相对其他家族的取舍(第 4 章);会调采样旋钮(第 6 章)依赖你知道机制族里换了什么(第 5 章);会做选型(第 7 章)又依赖你清楚生物落地的真实约束(第 8 章)。任何一环断了,下游的判断都会虚。所以打不了勾的那一项,往往不是”没记住”,而是”上一环没打通”——顺着链条往回找,通常能定位到真正的断点。
10.3 金句终章(建议记住)
Section titled “10.3 金句终章(建议记住)”- 扩散拟合数据分布,RL 优化期望奖励——别用同一张成绩单。
- 训练拟合分布,评估验证价值——分布好是必要条件,下游有用才是充分条件。
- 步数是质量与速度的主旋钮,但有悬崖和高原,不是越多越好。
- 任何新模型都是四维度里换了几格——先问换了什么、代价是什么。
- 先基线后扩散,先评估后换新——这条纪律比任何模型选择都重要。
- 生成是候选引擎,不是终点——化学有效性、可折叠性、湿实验才是真正的裁判。
10.4 自测总题(写在纸上)
Section titled “10.4 自测总题(写在纸上)”拿你真正在做或想做的一个课题,一次性回答:它是不是生成问题?属于第 8 章哪条轨道?该用哪个机制族(第 5 章)?采样起点怎么定(第 6 章)?四层评估怎么安排(第 7 章)?Go/No-Go 有几个 No-Go?答得越顺,说明这个系列你学通了。
11. 与其他章节的关系
Section titled “11. 与其他章节的关系”- 第 2 章 前向加噪与反向去噪:实验 1 是它的可视化;实验 2 的损失就是它的 。
- 第 6 章 训练与采样旋钮:实验 2 的步数对比是它的玩具版。
- 第 7 章 按数据结构选型:实验 3 是四层评估的缩微版,§8 的 Go/No-Go 是它选型决策的落地工具。
- 第 5 章 五大机制族:§7 的纸上练习是它四维度框架的应用。
- 第 8 章 生物读者轨道:§9 的「不可偷换」清单提醒你玩具结论别乱套到真实轨道。
12. 延伸阅读
Section titled “12. 延伸阅读”| 文献 / 资源 | 为什么看 | 阅读深度建议 |
|---|---|---|
| Ho et al., DDPM, 2020 | 实验 2 玩具 DDPM 的原始出处 | 对照玩具代码读方法节 |
| Nichol & Dhariwal, Improved DDPM, 2021 | 实验 1 cosine 调度的来源 | 读调度那一节 |
| lucidrains, denoising-diffusion-pytorch | 从玩具到可用实现的过渡参考 | 读最小实现,对照本章脚本 |
| Hugging Face diffusers 文档 | 跑完玩具后过渡到真实模型 | 按需查 API,重点看 scheduler |
说明:本章以动手验证与选型纪律为主;真实模型的加载、微调、消融可在跑通玩具后,用 diffusers 这类库继续实践。
主题色
字体
字号
视觉效果
即将离开本站
你将前往外部网站:
该网站与本站无关,本站不对其内容、安全性或可用性负责。确定后将在新标签页打开。