DDPM 扩散模型原理详解
发布时间:2026/10/2 6:58:40来源:尧图网络
DDPM 扩散模型原理详解正向加噪、反向去噪与 PyTorch 代码实战AIGC 扩散学习七集笔记一句话概览TL;DRDDPMDenoising Diffusion Probabilistic Models去噪扩散概率模型2020 年提出是现代扩散模型的奠基框架。它把一步生成图像这个神经网络学不动的难题拆解成 T 个预测并扣除一点噪声的简单回归题正向过程用一条固定的马尔可夫链把清晰图像逐步加噪成纯高斯噪声无需学习反向过程训练一个 UNet从纯噪声出发逐步预测并减去噪声、还原图像训练目标就是预测噪声与真实噪声之间的均方误差MSE。本文配套 AIGC 扩散学习七集P24–P30完整覆盖生成模型演进、正向加噪、一步采样公式、反向去噪、反直觉设计与 PyTorch 实战。适用读者已了解 Stable Diffusion 大致用法、想吃透扩散模型数学原理与代码实现的学习者。前置知识基础概率论高斯分布、条件概率、神经网络基础与 PyTorch 入门所有公式均配自然语言解读。最后更新2026 年 10 月。DDPM 原理与公式稳定代码以 PyTorch / HuggingFace Diffusers 当前版本为准。系列关系本文是《Stable Diffusion 原理详解》的内功篇——上篇讲工业系统如何组装本篇讲发动机的工作原理与制造工艺。 目录一、全局地图从为什么到怎么写二、第 1 集 · 生成模型四代演进扩散模型凭什么上位三、第 2 集 · 正向过程如何科学地把一张图毁掉四、第 3 集 · 一步加噪公式与重参数化技巧五、第 4 集 · 反向过程神经网络唯一要学的本事六、第 5 集 · 四个反直觉现象为什么绕远路反而最快七、第 6、7 集 · PyTorch 代码实战四块骨架八、七集串讲一条主线三次转化九、核心公式与概念速查表十、FAQ 高频问答十一、资料来源与延伸阅读 配套可交互原理图本文配有一张可交互的 AIGC 扩散学习全景图包含四块内容生成模型四代演进对比VAE / GAN / Flow / Diffusion 各自优缺点标签正向加噪模拟器拖动滑块 t观察一张清晰图像如何被噪声逐步淹没与 Stable Diffusion 篇的去噪滑块互为逆过程正向过程 / 反向过程 / 训练目标三栏对照第 5 集四个反直觉现象卡片与七集速览。在线体验可直接分享访问AIGC 扩散学习全景 · 在线版一、全局地图从为什么到怎么写如果说 Stable Diffusion 四集P20–P23讲的是一套工业系统怎么组装那么 AIGC 扩散学习七集P24–P30讲的就是这台发动机的工作原理和制造工艺前者带你认识汽车的发动机、变速箱、方向盘各在哪后者把发动机拆开讲清每个冲程的物理公式最后带你亲手装一台出来。七集的递进逻辑十分工整第 1 集回答为什么是扩散回顾 VAE、GAN、Flow 三代生成模型的短板论证扩散模型登场的必然性第 2、3 集讲正向过程纯数学、无需学习的部分把图像一步步加噪成纯噪声其中第 3 集的一步加噪公式是整个训练效率的命门第 4 集讲反向过程神经网络真正要学的部分从纯噪声逐步去噪回图像第 5 集清理反直觉点例如为什么让网络预测噪声而不是预测图像第 6、7 集代码实战把公式翻译成 PyTorch训练一个真正能从噪声生成图像的模型。学完应达到的状态看到 xtαˉt,x01−αˉt,ϵxtαˉt,x01−αˉt,ϵ 不再发怵并且知道代码里每一行对应哪个符号。二、第 1 集 · 生成模型四代演进扩散模型凭什么上位这一集本质是一堂生成模型断代史。要理解扩散模型为什么赢先要看清前辈们输在哪。2.1 VAE变分自编码器2013VAEVariational Autoencoder变分自编码器**的思路是先压缩、后重建编码器把图像压成潜空间里的一个概率分布均值 方差从该分布采样解码器再还原成图像。其训练目标是重建误差加KL 散度Kullback–Leibler Divergence衡量两个分布差异的正则项。这个目标天然鼓励安全答案面对不确定的细节模型倾向于输出所有可能答案的平均导致生成图像普遍偏模糊、细节发肉。好比让 VAE 画一只猫它画的是一万只猫的平均猫——轮廓对、神韵无。2.2 GAN生成对抗网络2014GANGenerative Adversarial Network生成对抗网络**走另一条路**生成器Generator**负责造假**判别器Discriminator**负责鉴伪二者对抗、共同进化。GAN 图像非常锐利因为判别器专门盯着模糊处打。代价是训练极其脆弱生成器与判别器的实力必须精确平衡任一方过强训练立刻崩溃更出名的是模式崩塌Mode Collapse——生成器找到骗过判别器的捷径后反复输出同一类安全样本要求生成一万种脸却得到一万张近乎复制的脸。调参体验近似在雷区里跳格子。2.3 Flow流模型FlowNormalizing Flow标准化流思路最优雅构造一串可逆变换把简单的高斯分布精确变换成复杂的数据分布。由于每一步可逆数据的似然likelihood可以精确计算——理论上是巨大优点。但可逆约束过于苛刻每一层都必须可逆、且**雅可比行列式Jacobian determinant**要便于计算这锁死了网络结构的设计空间导致表达能力受限、生成质量追不上同时代的 GAN。属于数学上很美工程上很憋屈。2.4 Diffusion扩散模型2020扩散模型以 DDPM 一战成名思路完全不同不再追求一步生成而是把生成拆成 T 步渐进式去噪。它借鉴热力学中的扩散现象——墨水在清水里扩散是不可逆的熵增过程但若把每一步的微小变化都建模出来就能近似倒放这个过程。扩散模型同时拿下三样东西训练稳定单一回归目标无需像 GAN 那样走平衡钢丝生成质量高逐步精修细节丰富多样性好每次从不同随机噪声出发不会模式崩塌。它唯一输掉的是速度GAN 一次前向即出图扩散要迭代几十上百步。但在质量为王的文生图战场这个代价完全值得后续的 **DDIM、LCMLatent Consistency Model潜一致性模型、Consistency Model一致性模型**等加速采样技术也在不断补齐短板。历史视角扩散模型并非天降银弹而是在质量、稳定性、多样性、速度这个不可能四角中用牺牲速度换取了其余三项的当时最优解。参考哔哩哔哩 · AIGC 扩散学习1三、第 2 集 · 正向过程如何科学地把一张图毁掉**正向过程Forward Process / Forward Diffusion**是扩散模型中唯一不需要学习的部分但其数学定义必须抠清楚因为反向过程完全照它反推。设定x0x0 是真实图片xTxT 是纯高斯噪声中间有 x1,x2,…,xT−1x1,x2,…,xT−1 共 T 个状态DDPM 原文 T1000。从 xt−1xt−1 到 xtxt 的转移定义为q(xt∣xt−1)N(xt; 1−βt,xt−1, βtI)q(xt∣xt−1)N(xt; 1−βt,xt−1, βtI)白话解读每一步把上一时刻图像乘以 1−βt1−βt轻微衰减再混入方差为 βtβt 的高斯噪声。βtβt 是预设的噪声强度从很小如 10−410−4线性增大到较大如 0.02——前期少加图像信息还多要温柔后期多加已面目全非。两个关键性质这是一条马尔可夫链Markov Chainxtxt 只依赖 xt−1xt−1与更早状态无关。该假设极大简化了推导整个 DDPM 概率框架都建立其上。整条链固定、无参数βtβt 是人工设定的超参数称为noise schedule噪声调度表正向过程没有任何可学习内容。它存在的唯一意义是为反向过程制造教材——精确知道图像怎样被一步步毁掉才能教网络一步步修回来。直觉要点每步只加一点点噪声是方案成立的前提。若一步就毁成噪声反向恢复就等于一步从噪声生成图像又绕回 GAN 的难题。正因为每步变化微小逆向条件分布 q(xt−1∣xt)q(xt−1∣xt) 在数学上才能用高斯分布很好地近似、神经网络才学得动。核心策略即用 T 次微小的、可逆近似的破坏替代一次不可逆的破坏。参考哔哩哔哩 · AIGC 扩散学习2四、第 3 集 · 一步加噪公式与重参数化技巧本集解决一个工程问题训练时要得到 xtxt难道要从 x0x0 开始循环加噪 t 次t 最大为 1000每个样本都如此训练将慢到不可行。答案来自高斯分布的优美性质两个独立高斯噪声叠加仍是高斯噪声且方差相加。由此从 x0x0 加噪两次等价于用合并后方差加噪一次递推 t 次即得著名的一步加噪公式xtαˉt,x01−αˉt,ϵ,ϵ∼N(0,I)xtαˉt,x01−αˉt,ϵ,ϵ∼N(0,I)其中 αt1−βtαt1−βtαˉ∗t∏∗s1tαsαˉ∗t∏∗s1tαs 是从第 1 步到第 t 步所有 αα 的连乘积。4.1 重参数化技巧公式中藏着关键的重参数化技巧Reparameterization Trick噪声 ϵϵ 从标准正态分布采样、与 t 无关t 的影响全部收敛到 αˉtαˉt 与 1−αˉt1−αˉt 两个标量系数中。于是采样任意时刻的加噪图 xtxt只需一次标准高斯采样 一次线性插值。训练流程因此极其高效全程 O(1)无需循环随机采一个时间步 t均匀分布随机采一团噪声 ϵϵ查表取出预计算好的 αˉtαˉt套公式得到 xtxt。4.2 信息留存率与噪声调度从信息论视角αˉtαˉt 就是原图信息留存率t0 时 αˉ01αˉ01xtxt 即原图t 增大时 αˉtαˉt 单调衰减tT 时 αˉT≈0αˉT≈0xTxT 几乎是纯噪声。这也解释了噪声调度表为何不能乱设βtβt 增长过快αˉtαˉt 会过早塌缩到 0中间时间步浪费在纯噪声上增长过慢则尾部图像毁不干净、生成初始分布对不上。线性 schedule、cosine schedule等经典方案都是在为 αˉtαˉt 设计一条体面衰减的曲线。一句话正向过程在数学上是马尔可夫链在工程上被压缩成一行公式——这行公式是训练阶段被调用最频繁的代码。参考哔哩哔哩 · AIGC 扩散学习3五、第 4 集 · 反向过程神经网络唯一要学的本事反向过程Reverse Process**把噪声修回图像从 xT∼N(0,I)xT∼N(0,I) 出发逐步由 xtxt 推出 xt−1xt−1直到 x0x0。理论目标是学习 pθ(xt−1∣xt)pθ(xt−1∣xt)。真实逆向分布 q(xt−1∣xt)q(xt−1∣xt) 依赖整个数据集、无法直接计算故用神经网络逼近。数学上可证明当每步加噪足够小时真实逆向分布也近似高斯分布问题遂简化为预测该高斯分布的均值和方差。DDPM 进一步简化方差固定为与时间步相关的常数网络只预测均值而预测均值又等价于预测噪声——这正是下一集的主角。5.1 训练目标严格推导需从**变分下界ELBOEvidence Lower Bound证据下界**出发但 DDPM 经一系列化简与加权后最终损失函数异常简洁LE∗t,,x0,,ϵ[∣ϵ−ϵ∗θ(αˉt,x01−αˉt,ϵ, t)∣2]LE∗t,,x0,,ϵ[ϵ−ϵ∗θ(αˉt,x01−αˉt,ϵ, t)2]拆开读ϵϵ 是加噪时真实混入的噪声训练时已知的标准答案ϵθ(xt,t)ϵθ(xt,t) 是网络看到加噪图 xtxt 与时间步 t 后预测的噪声损失即二者的均方误差MSEMean Squared Error。没有判别器、没有对抗、没有花哨正则项——一个教科书级别的回归问题。5.2 采样推理迭代从纯噪声 xTxT 开始每一步执行xt−11αt(xt−1−αt(1−αˉ∗t),ϵ∗θ(xt,t))σtzxt−1αt1(xt−(1−αˉ∗t1−αt),ϵ∗θ(xt,t))σtz读法用当前 xtxt 减去按系数缩放后的预测噪声得到去噪一步后的均值σtzσtz 项在 t1 时额外补一点随机噪声保证过程是随机采样而非确定性输出有助于多样性。将此操作从 tT 迭代到 t1即得生成图 x0x0。5.3 为什么扩散模型慢反向过程每一步都要完整跑一遍 UNet 前向传播。T1000 意味着生成一张图要跑 1000 次网络——这就是扩散模型慢的物理本质也是所有加速技术DDIM 跳步采样、蒸馏、Consistency Model要解决的对象。工程上常用 DDIM 等采样器把 1000 步压缩到 2050 步画质损失可控、速度提升数十倍。一句话正向过程是已知答案的出题反向过程是照着答案学解题训练与采样都围绕预测噪声这一件事展开。参考哔哩哔哩 · AIGC 扩散学习4六、第 5 集 · 四个反直觉现象为什么绕远路反而最快6.1 反直觉一预测噪声比预测图像更好最直观的思路是让网络从 xtxt 直接预测 xt−1xt−1甚至 x0x0为何要绕一圈预测噪声 ϵϵ三个原因目标难度xtxt 与 xt−1xt−1 差异极小预测一张和输入几乎一样的图梯度微弱、目标模糊而噪声 ϵϵ 是从图像中剥离出的独立成分预测它等价于回答边界清晰的问题——“这张混合物里哪些成分是噪声”优化稳定性预测噪声的参数化在 ELBO 化简后恰好消去复杂加权系数得到各时间步权重均衡的简单 MSE直接预测 x0x0 则在不同时间步误差尺度差异巨大、优化困难。实测效果相同网络容量下预测噪声的生成质量明显更好。当一个问题太难时把它改述成等价的简单问题是深度学习里最值钱的工程智慧。6.2 反直觉二毁掉的东西居然能算回来直觉上加 1000 步噪声后信息应彻底丢失、不可逆。关键仍在每步只加一点点每步破坏微小且局部逆向分布可被高斯逼近。这类似热力学的准静态过程——变化足够缓慢系统始终处于可近似的平衡态。信息不是被删除而是被打散进噪声里且打散方式完全已知noise schedule故逆向工程有据可依。6.3 反直觉三慢竟然是优点的一部分逐步生成带来两个 GAN 不具备的东西质量上限更高每步小幅精修构图先成形、细节后补全类似画家起稿再层层深入而非一笔定生死可控性强去噪每一步都可注入条件文本、布局、边缘图为ControlNet、Inpainting局部重绘、图生图等可控生成玩法打开大门——GAN 的一步生成架构里没有这些插手位置。慢换来的不只是画质还有整个可控生成的生态位。6.4 反直觉四随机性不是缺陷是特性采样时每步注入的 σtzσtz 随机噪声、以及初始纯噪声 xTxT保证同一模型每次生成结果不同。扩散模型的多样性被写进算法定义相比之下GAN 的模式崩塌恰恰是把多样性卷没了。参考哔哩哔哩 · AIGC 扩散学习5七、第 6、7 集 · PyTorch 代码实战四块骨架最后两集手写一个最小可用 DDPM。代码骨架与公式一一对应主要分四块。7.1 噪声调度表Noise Schedule用几行代码定义 βtβt 序列线性从 10−410−4 增长到 0.02长度 T1000再预计算 αt1−βtαt1−βt、αˉtcumprod(α)αˉtcumprod(α)以及采样公式所需的 αˉtαˉt、1−αˉt1−αˉt、1αtαt1 等系数——全部提前算好存成 tensor buffer训练/采样时按 t 索引查表。所谓采样技巧落到代码里就是一张预计算查找表。7.2 加噪函数给定 x0x0、时间步 t、噪声 ϵϵ一行实现 xtαˉt,x01−αˉt,ϵxtαˉt,x01−αˉt,ϵ。需注意张量广播系数是[batch]维、图像是[batch, C, H, W]要 reshape 对齐。此处一旦出错往往是静默的维度广播 bug——画面全是雪花却难定位。7.3 UNet 模型与训练循环网络采用带时间嵌入的 UNet即 Stable Diffusion 篇讲过的结构时间步 t 经正弦位置编码 MLP 注入每个残差块。训练循环是教科书式五步从数据加载器取一批真实图 x0x0为每张图随机采一个时间步 t随机采高斯噪声 ϵϵ用加噪函数造出 xtxt把 (xt,t)(xt,t) 喂给 UNet 得到预测噪声 ϵ^ϵ^与真实 ϵϵ 算 MSE 损失反向传播更新参数。去掉注释后核心逻辑不足十行——数学全部前置到第 24 集代码只是忠实执行。这正是扩散代码的普遍观感推导三天实现三十行。7.4 采样生成函数先采 xT∼N(0,I)xT∼N(0,I)再写 t 从 T 到 1 的循环每步调 UNet 预测 ϵθ(xt,t)ϵθ(xt,t)代入采样公式算出 xt−1xt−1 的均值t1 时补 σtzσtz 随机项循环结束x0x0 即生成结果反归一化后存图。工程细节用torch.no_grad()包裹采样循环避免显存爆炸先用小数据集如MNIST手写数字或小型花卉数据集验证收敛观察损失曲线与定期采样的中间效果图。扩散模型的损失通常不会降得很低判断训练成败的黄金标准是看采样出的图而非 loss 数字——这与多数判别式任务经验相反新手常在此误判训练失败。两集代码课的价值是把正向加噪 → 预测噪声 → 反向采样的抽象链条变成可单步调试的张量流。调通一遍后再读 DDIM、Stable Diffusion、**DiTDiffusion Transformer**等源码看到的都只是这套骨架的精装修版本。参考哔哩哔哩 · AIGC 扩散学习6 7八、七集串讲一条主线三次转化七集内容可压缩为三次问题转化这也是扩散模型方法论的精髓。图 1 扩散模型方法论的三次转化从一步生成的原始难题出发依次转化为T 步去噪“每步预测噪声”“几十行 PyTorch”分别换来了稳定性、可优化性与工程速度。flowchart LR A[原始难题一步生成图像br/GAN 在此翻车] -- B[转化为T 步渐进去噪br/第1-2集 · 马尔可夫加噪链] B -- C[转化为每步预测噪声br/第3-5集 · 一步加噪公式 MSE] C -- D[转化为几十行 PyTorchbr/第6-7集 · 训练循环 采样循环] style A stroke:#E65C53,stroke-width:1.5px style D stroke:#40B43E,stroke-width:1.5px第一次转化用分步换稳定第二次转化用改述目标换可优化性第三次转化用预计算换工程速度。生成模型还会继续换代但把难题拆成一串小题的思维方式不会过时。九、核心公式与概念速查表概念英文 / 全称符号 / 公式作用集数噪声强度beta / noise scheduleβtβt每步加多少噪声人工设定2噪声留存系数alpha barαˉ∗t∏∗s1tαsαˉ∗t∏∗s1tαs原图在 t 时刻的信息留存率2、3一步加噪forward samplingxtαˉtx01−αˉtϵxtαˉtx01−αˉtϵ训练提速的命门、O(1) 采样3重参数化Reparameterization随机性只放在 ϵϵt 只影响系数让采样可一步完成、可反向传播3训练损失denoising lossMSEL∣ϵ−ϵθ(xt,t)∣2L∣ϵ−ϵθ(xt,t)∣2让网络预测噪声4、5采样迭代reverse stepxt−11αt(xt−1−αt(1−αˉt)ϵ^)σtzxt−1αt1(xt−(1−αˉt1−αt)ϵ^)σtz反向去噪一步4证据下界ELBO训练损失的概率推导起点化简后得到简单 MSE4工程实现PyTorch DDPM预计算系数表 UNet 训练/采样两循环公式落地6、7十、FAQ 高频问答Q1DDPM 和 Stable Diffusion 是什么关系DDPM 是 2020 年确立扩散范式的开山之作在像素空间去噪Stable Diffusion 属于潜扩散模型Latent Diffusion把去噪搬进 VAE 压缩后的潜空间并加入 CLIP 文本条件。可把 DDPM 理解为发动机原理样机Stable Diffusion 是量产车型——本文七集讲的正是那台原理样机。Q2训练时为什么要随机采样时间步 t而不是按顺序学每个时间步对应一个独立的去噪难度等级晚期步是起稿、早期步是精修网络需同时胜任所有难度。随机采样等价于在每个 batch 里随机抽考一个难度保证各难度均匀训练按顺序学反而容易造成灾难性遗忘catastrophic forgetting。Q3noise schedule 用线性还是 cosine差别大吗有差别。线性 schedule 在小分辨率如 32×32上表现好但在大图上信息毁得过快cosine schedule让 αˉtαˉt 衰减更平缓、首尾更精细大分辨率质量更好。复现时建议先严格跟随原论文设置调优阶段再动 schedule。Q4为什么采样时 t1 要加随机噪声 σtzσtz最后一步却不加中间步的随机注入保证反向过程的马尔可夫性质与样本多样性最后一步 t1 的目标是输出确定性的干净图像 x0x0此时再加噪声等于往成品上撒雪花点。Q5只看 loss 能判断扩散模型训练好了吗不能。扩散模型的 loss 是各时间步噪声预测误差的混合收敛后仍维持在看起来不低的水平这是正常现象。真正的验收标准是定期跑采样、肉眼看生成图——loss 平滑下降 样本逐渐清晰才是健康训练的双重信号。Q6VAE、GAN、Flow、Diffusion 四代模型的核心差别一句话怎么记VAE 学压缩—重建快但糊GAN 学造假—鉴伪对抗锐利但训练易崩、会模式崩塌Flow 学可逆变换似然精确但结构受限Diffusion 学逐步去噪用速度换来了稳定、高质量与多样性三者兼得。Q7重参数化技巧到底解决了什么问题它把随机采样这个不可求导的操作改写为从固定分布采样 ϵϵ 确定性线性变换使随机性与待学参数解耦梯度可以正常回传在 DDPM 中更进一步让任意时刻 xtxt 都能 O(1) 直接算出无需迭代加噪。它也是 VAE 等模型的标准技巧。Q8DDPM 要跑上千步太慢实际怎么加速主流三条路线①更快的采样器如 DDIM 用非马尔可夫跳步把 1000 步压到 2050 步②蒸馏让少步学生网络模仿多步教师如 LCM潜一致性模型③一致性模型Consistency Model单步或少步即可出图。此外在潜空间去噪Stable Diffusion 路线、fp16 半精度也能显著降低单步成本。十一、资料来源与延伸阅读课程视频本文整理依据AIGC 扩散学习1· 生成模型发展AIGC 扩散学习2· 正向过程AIGC 扩散学习3· 正向采样技巧AIGC 扩散学习4· 反向过程AIGC 扩散学习5· 反直觉现象AIGC 扩散学习6· 代码实战上AIGC 扩散学习7· 代码实战下权威一手论文延伸阅读扩散模型奠基论文Denoising Diffusion Probabilistic Models (DDPM), arXiv:2006.11239经典加速采样器Denoising Diffusion Implicit Models (DDIM), arXiv:2010.02502少步加速Consistency Models, arXiv:2303.01469VAE 原始论文Auto-Encoding Variational Bayes, arXiv:1312.6114GAN 原始论文Generative Adversarial Networks, arXiv:1406.2661代码实践HuggingFace Diffusers 官方文档内容说明本文撰写时 B 站分 P 字幕接口暂不可用两轮抓取均仅返回页面骨架故内容依据课程选集标题与 DDPM 标准技术体系DDPM / DDIM 原始论文及 PyTorch 官方实现口径整理核心概念、公式与课程讲解一致可作为学习笔记使用。这七集与前面的 Stable Diffusion 四集合在一起构成完整的扩散模型从原理到工业落地闭环AIGC 七集把 DDPM 的数学与代码讲透SD 四集展示工业界如何在这台发动机上加装 CLIP 条件、潜空间压缩与 UNet 精装修。建议配合可交互全景图的加噪滑块多拖几遍——把图像如何被噪声淹没看顺眼反向去噪自然就成了镜像直觉。
网站建设高端定制企业官网