Diffusion 模型训练机制深度解析:多步去噪、噪声监督与“防作弊”原理
在理解 Diffusion 模型时很多人都会产生几个典型疑问训练时只监督噪声 epsilon为什么模型能学到图像结构推理需要多步 denoise训练为什么只训练一步噪声是我们自己生成的模型会不会“作弊”直接学习噪声生成方式这篇文章系统解释这些问题并给出 Diffusion 训练机制的直觉理解。一、训练时并不会逐步 denoise很多人第一次接触 Diffusion 时会误以为训练过程是x_T → model → x_{T-1} x_{T-1} → model → x_{T-2} ...也就是说逐步去噪每一步都有监督。实际上并不是这样。Diffusion 训练时只做单步训练x0 → 加噪 → x_t ↓ 预测噪声训练流程从真实数据采样 x0随机采样 timestep t生成噪声 epsilon构造 noisy sample x_t让模型预测 epsilon核心公式可以用普通表达写为x_t sqrt(alpha_bar_t) * x0 sqrt(1 - alpha_bar_t) * epsilon训练 lossloss || epsilon - epsilon_theta(x_t, t) ||^2二、为什么训练只需要一步原因是 Forward Diffusion 可以直接采样任意 timestep。Forward diffusion 的逐步定义是x_{t1} sqrt(alpha_t) * x_t sqrt(1 - alpha_t) * epsilon_t如果逐步展开x0 --ε1-- x1 --ε2-- x2 --ε3-- ... --εt-- x_t但由于高斯分布叠加仍然是高斯分布可以得到一个闭式表达x_t sqrt(alpha_bar_t) * x0 sqrt(1 - alpha_bar_t) * epsilon因此不需要真的生成 ε1 ε2 ... εt 只需要采样一个 ε这就是 Diffusion 训练可以一步完成的原因。三、模型到底预测的是什么噪声一个常见误解是模型预测的是每一步新增的噪声 epsilon_t其实不是。模型预测的是x_t 中的总噪声也就是epsilon cumulative noise换句话说x_t signal noise其中signal sqrt(alpha_bar_t) * x0 noise sqrt(1 - alpha_bar_t) * epsilon模型学习的任务是从 noisy image 中估计 noise四、为什么模型不会“作弊”学习噪声生成方式一个自然的问题是噪声是我们自己生成的模型会不会直接学习噪声生成方式答案是不会原因有三个。1 噪声是独立随机变量训练数据(x_t , t) → epsilon其中epsilon ~ Normal(0, 1)而且epsilon 与 x0 完全独立模型无法从图像结构中推断出噪声。2 每次训练噪声都不同训练流程sample x0 sample t sample epsilon所以同一张图iteration1: x_t cat ε1 iteration2: x_t cat ε2 iteration3: x_t cat ε3因此x_t 每次都不同模型无法记忆噪声。3 MSE Loss 的最优解MSE Loss 的最优解是epsilon_theta(x_t, t) E[ epsilon | x_t ]也就是给定 noisy image 时 噪声的最佳估计而要得到这个估计模型必须识别哪些是图像结构 哪些是噪声五、推理时为什么可以逐步 denoise训练完成后模型已经学会任意噪声等级的去噪也就是函数epsilon_theta(x_t , t)因此推理时可以x_T ~ Normal(0,1) ↓ predict epsilon ↓ compute x_{T-1} ↓ predict epsilon ↓ compute x_{T-2} ...这个过程叫iterative denoising六、Diffusion 训练的直觉理解训练过程其实可以理解为给模型各种噪声等级的图像 让它学会去噪例如timestep噪声程度模型任务t 50轻微噪声去掉少量噪声t 300中等噪声恢复图像结构t 900几乎纯噪声从噪声中恢复形状模型通过timestep embedding知道当前噪声强度。七、为什么 Diffusion 能生成图像Diffusion 模型最终学到的是哪些模式像真实数据 哪些模式像噪声所以推理时纯噪声 ↓ 逐步去除噪声 ↓ 留下真实数据结构最终生成图像。八、更深层的理论Score Matching从理论角度看Diffusion 实际学习的是gradient_x log p(x)也就是数据分布的梯度这个理论来自Score Matching。而预测噪声 epsilon 与学习 score function 是数学等价的。因此 Diffusion、Score-based model 本质上属于同一类生成模型。九、总结Diffusion 模型训练机制可以总结为1️⃣ 训练时随机采样 timestep2️⃣ 构造 noisy samplex_t sqrt(alpha_bar_t) * x0 sqrt(1 - alpha_bar_t) * epsilon3️⃣ 模型预测累计噪声 epsilon4️⃣ 使用 MSE Loss 训练loss || epsilon - epsilon_theta(x_t, t) ||^25️⃣ 推理时通过多步去噪生成数据noise → image一句话总结 Diffusion训练学习如何从 noisy data 中识别噪声 推理从纯噪声逐步去掉噪声这就是 Diffusion 模型能够生成高质量数据的核心机制。