扩散模型 2

一、加速扩散模型采样:DDIM 与渐进蒸馏

DDPM和DDIM

问题:DDPM 太慢

DDPM 需要 T=1000 步去噪,生成50k张32×32图像需要20小时 ,而GAN只需不到1分钟

方法一:跳步采样(Nichol & Dhariwal)

最简单的加速方式:不每一步都走,而是每隔 ⌊T/S⌋步跳一次,从 1000 步压缩到 S 步。

但治标不治本,跳步会损失精度,因为 DDPM 本质上是马尔可夫链,每步依赖上一步。

方法二:DDIM------重新推导采样公式

DDIM 的核心思路是:不改变训练,只改变采样方式 。关键在于把采样公式重新参数化,引入一个控制随机性的超参数

1、把 写成**** 和噪声 ε 的形式,这是整个 DDIM 的基础。

表示当前噪声图其实是 原图+某个总噪声。其中:原图保留多少,:噪声占多少

DDPM中,模型学习,即当前里的总噪声是什么,有了,就可以反推**:**

同理,

作者把拆成

第一个:

是模型预测出的"方向"。表示:当前图里主要的噪声结构,是确定性的。

第二个:

是新加入的随机噪声。

即DDPM 里那种:每一步随机抖一下

公式分三部分:

  • 第一项:用当前 和预测噪声反推出 ​ 的估计 ,再按 缩放
    目标是构造出"t−1 时刻应该有多少原始信号",因为正向过程中

    t 时刻,原始信号 被缩放了 倍混入。类比地,在 t−1 时刻,原始信号应该被缩放 ​​ 倍。

  • 第二项:从估计的 方向走一步(确定性部分)

  • 第三项:加入随机噪声(可控)

η 参数:控制随机性

,通过调整 η 来控制采样的随机程度:

η 效果
η = 1 退化为原始 DDPM,完全随机
0 < η < 1 介于两者之间
η = 0 完全确定性,这就是 DDIM

当 η = 0 时,采样过程变成一个确定性的常微分方程(ODE) ,给定同一个初始噪声 必然生成同一张图像。

DDIM 的三大优势

1. 更少步数,更好质量

从表格可以看到,η=0(DDIM)在 S=10∼50步时 FID 远低于 η=1(DDPM)。DDPM 步数少时质量急剧下降,而 DDIM 用 20 步就能达到 DDPM 1000 步的近似效果。

2. 一致性(Consistency)

因为采样是确定性的,同一个初始噪声 ​ 总是生成同一张图 。这意味着 ​ 就是图像的"编码",可以把它当作潜在表示来使用。

3. 潜在空间插值

由于一致性,可以在两个 之间做插值,生成的图像也会在语义上平滑过渡------这是 DDPM 做不到的,因为 DDPM 每次采样都不同。

二、渐进蒸馏

变量含义

图中的 不是不同图片,而是同一张图在不同"噪声时间"下的状态,是 diffusion 论文里一种"连续时间写法"。

​ 表示t=1 时的状态,也就是最强噪声,接近纯高斯噪声。

(图里最终的 x)表示 t=0 时的状态。即:最终清晰图像。

:时间走到 0.75 时的图。噪声比 少一点。

:噪声更少,图像更清晰。

与普通diffusion的不同

普通 diffusion的target 是 x,真实图。

distillation的 target 不再是真实图,而是teacher model 的结果。

student 不再学习:"怎么恢复真实图"。而是学习:"如何一步模仿 teacher 的两步"。

背景与动机

DDPM 采样需要上千步,太慢。DDIM 虽然改善了,但步数仍然不少。渐进蒸馏通过知识蒸馏的方式,把步数指数级压缩

核心思想

用知识蒸馏的方式训练一个学生模型,让它一步实现教师模型两步的结果。每轮蒸馏步数减半,反复迭代:

1000步→500步→250步→⋯→1步

与普通蒸馏的区别

普通蒸馏是让学生模型模仿教师对原始数据 的预测。

Progressive Distillation 不一样:学生的训练目标不是 ,而是教师走两步之后的结果

具体来说,给定当前

  1. 教师走第一步:
  2. 教师再走一步:
  3. 反推出等价的 作为目标
  4. 让学生一步 直接达到这个目标

关键设计:

"局部轨迹对齐"而不是"最终结果对齐"

如果只要求学生的最终生成质量和教师一样,约束太弱,学生需要在巨大的搜索空间里自己摸索,很难训练。

"每步对齐教师两步"的约束强得多------教师为学生规划了每一步具体应该走到哪里,学生只需要学会"抄近路",任务明确,训练稳定。

训练流程

每轮 K 次迭代:

初始化:学生从教师模型权重出发(θ←η)

两层循环:

外层(每轮产生新的师生关系):

  1. 用当前教师权重初始化学生(学生从一个已经很好的起点出发,只需微调)
  2. 内层训练学生收敛
  3. 学生成为下一轮教师,步数减半

内层(训练当前学生):

  1. 采样数据 x,构造带噪
  2. 教师从 两步 DDIM ,得到
  3. 反推目标
  4. 训练学生一步 预测这个目标,最小化

每轮结束

学生变成下一轮的教师(η←θ)、步数减半(N←N/2)

为什么学生从教师权重初始化

教师已经是能生成高质量图像的好模型,学生从它出发只需微调来适应步数减半的目标,比从随机初始化训练快得多也更稳定。

一句话总结

渐进蒸馏的本质是"接力压缩":每轮用局部轨迹对齐的方式训练学生抄教师的近路,步数指数级减少,最终实现极少步数的高质量生成。

三、Consistency Models:直接从任意噪声一步还原原图

核心思想

不再学习"下一步怎么走",而是学习"无论现在在哪,直接告诉你最终图像是什么",模型直接输出,即最终干净图( ϵ是一个很小的、接近0的正数**)**

扩散模型的采样轨迹上,每一个点 理论上都对应同一个原始图像

Consistency Model 就是学习这个映射:

对轨迹上任意 t 成立

这就是"自洽性"(self-consistency)的含义------同一条轨迹上所有点都映射到同一个

模型结构

不是让网络从0开始预测,而是保留输入的一部分+网络只负责修正

为了保证边界条件( t=ϵ 时模型应该是恒等映射,即 ),模型被设计成:

其中 ,保证在 t=ϵ 时退化为恒等函数。此时,意思是:图像几乎没有噪声时(t 接近0),模型应该直接返回输入本身,不做任何改变------这是最自然的约束。

此处的ϵ不代表噪声,而是一个很接近0的正数,如0.002,是时间起点

Consistency Model 的时间轴是从 ϵ 到 T、,而不是从 0 到 T。

原因是 t=0 时理论上图像完全无噪声,恒等映射是trivial的但在数值上不稳定,所以用一个很小的 ϵ作为起点来避免这个问题。

两种训练方式

1. Consistency Distillation(CD):从预训练扩散模型蒸馏

预训练的扩散模型已经知道如何逐步去噪,于是consistency model 学如何直接到终点

思路:同一条轨迹上相邻两点 应该映射到同一个 ​,所以让两者的模型输出尽量一致:

其中:

  • 是用预训练扩散模型(ODE solver)从 走一步得到的
  • 是 θ 的 EMA 版本,起到稳定训练的作用(类似 DQN 的目标网络)
  • d(⋅ , ⋅)是距离度量函数,实验发现 LPIPS 效果最好

ODE:Ordinary Differential Equation,常微分方程:本质是在描述一个状态如何连续变化,通常是

需要预训练的扩散模型,但蒸馏后采样极快。

2. Consistency Training(CT):独立训练,不依赖预训练模型

不需要预训练模型,用 score function 的无偏估计 ​ 来替代,损失函数类似:

完全从头训练,不依赖任何外部模型。

与渐进蒸馏的对比

渐进蒸馏 Consistency Distillation
目标 学生一步 = 教师两步 轨迹上任意两点映射到同一
约束范围 局部(相邻两步) 全局(整条轨迹)
自洽性 有,可以多步精炼

采样的灵活性

Consistency Model 支持两种采样模式:

一步生成 :直接 ​,极快但质量略低。

多步精炼 :生成 ​ 后,加少量噪声再还原,反复迭代,用更多计算换更好质量------这是渐进蒸馏做不到的灵活性。


实验结论
  • ODE solver 用 Heun(二阶)比 Euler(一阶)好,估计误差更小
  • 距离度量用 LPIPS 好(更符合人类感知)
  • N 较小收敛快但质量差,N 较大收敛慢但质量好;自适应 N 是较好的折中

总结

Consistency Model 通过强制同一条去噪轨迹上所有点都映射到同一个原图,学会了"从任意噪声程度一步直达原图"的能力,同时保留了多步精炼的灵活性。

四、提升生成分辨率与质量

1、级联扩散模型(Cascaded Diffusion Models)

直接生成大图,因为像素太多,使用diffusion容易结构混乱、细节崩、算力爆炸,所以作者想到"先画草图,再逐步细化",设计了多阶段diffusion pipeline。

核心思路: 用多个扩散模型串联,逐步提升图像分辨率。

如图15所示,流程为:

复制代码
类别ID → 32×32(模型1)→ 64×64(模型2)→ 256×256(模型3)

后面的模型不是重新生成图像,而是条件生成高分辨率细节

低分辨率负责构图、姿态、大结构,高分辨率负责毛发、纹理、眼睛等细节。

因为super-resolution 模型很容易"过拟合完美低清输入",所以给低分辨率图加高斯噪声、模糊、

corruption,让模型学会面对不完美输入也能修复。

噪声条件增强(Noise Conditioning Augmentation)

  • 对每个超分辨率模型的条件输入 z 施加强数据增强
  • 目的是减少级联过程中的误差累积
  • 常用 U-Net 作为模型架构

两种增强策略:

策略 说明
截断式 在步骤 t > 0 时提前停止扩散过程(低分辨率用)
非截断式 跑完完整的低分辨率逆过程,再对结果加噪后送入超分模型

2、unCLIP:用 CLIP 做图像生成

CLIP 是什么?

CLIP 是 OpenAI 训练的模型,将文字和图像映射到同一个向量空间,使得"一只猫"的文字嵌入和猫的图片嵌入在空间上非常接近。

unCLIP

第一阶段:文本 → 图像嵌入(Prior)

  • 输入文字 y,CLIP 文本编码器对齐文本和图像embedding 生成文本嵌入
  • Prior 模型(扩散模型或自回归模型)以文本嵌入为条件,输出图像嵌入 其训练目标来自 冻结的 CLIP Image Encoder:对于训练数据中的每一对 (x,y),用 CLIP Image Encoder 提取真实图片的图像嵌入 作为 GT,监督 Prior 的输出

第二阶段:图像嵌入 → 真实图像(Decoder)

  • Decoder 以图像嵌入为条件,从噪声图像(训练阶段是对CLIP中输入的真实图像随机加噪得到的,推理阶段是随机采样的纯高斯噪声)出发,逐步去噪生成最终像素图像
  • 也可以输入一张真实图片的嵌入,生成风格/语义相似的变体图
为什么叫"unCLIP"?

CLIP 是将图像→嵌入(编码),unCLIP 是将嵌入→图像(解码),方向相反,故名。

3、ControlNet:给扩散模型加条件控制

背景

原始扩散模型只能接受文字作为条件,但很多时候需要更精确的空间控制:

复制代码
"帮我生成一张人物图" ← 文字控制,结果随机性很大

更精确的需求:
    给定人体骨骼姿态图 → 生成对应姿态的人物
    给定边缘检测图    → 生成对应结构的场景
    给定深度图        → 生成对应空间关系的图像

ControlNet 就是为了解决这个问题------在不破坏原模型的前提下,注入额外的空间条件控制。

ControlNet 的四步操作

对照图18(b),逐步解释:

Step 1:冻结原始模型

复制代码
原始 U-Net 的参数 θ 全部冻结
保证原有的生成能力不被破坏

Step 2:克隆一个可训练副本

将原始 U-Net 的每个编码器块完整复制一份

副本参数 可以被训练更新

额外接收条件输入 c(如骨骼图、边缘图)

Step 3:用零卷积层连接两个分支

零卷积(Zero Convolution)是 1×1 卷积,初始化时权重和偏置全为 0

复制代码
为什么要用零卷积?

训练刚开始时:
    零卷积输出 = 0
    ControlNet 分支对原模型的影响 = 0
    → 原模型行为完全不变,生成质量有保证

随着训练进行:
    零卷积的权重从 0 开始慢慢学习
    ControlNet 分支逐渐发挥作用
    → 平滑地引入条件控制,不会引入噪声梯度破坏训练

两个零卷积的位置:

第一个 :在条件 c 进入可训练副本之前

作用:对条件信号做尺度调整

第二个 :在可训练副本输出之后

作用:对副本输出做尺度调整,再加回原模型

Step 4:最终输出公式

拆解来看:

← 原始冻结模型的输出(不变)

← 条件 c 经第一个零卷积处理

← 原始输入 与 处理后的条件 相加

(把条件信息融入输入)

← 可训练副本处理融合后的输入

← 副本输出经第二个零卷积缩放

最终输出 = 原模型输出 + 副本输出 ← 残差式融合

ControlNet 支持的条件类型

条件类型 输入形式 控制效果
Canny 边缘 边缘检测二值图 控制物体轮廓和结构
Hough 线条 直线检测图 控制建筑、几何结构
人体骨骼 关键点连线图 控制人物姿态
深度图 灰度深度图 控制三维空间关系
分割图 语义分割标注 控制各区域内容
用户涂鸦 手绘草图 按草图生成图像

设计精妙之处总结

复制代码
原始模型(冻结)          ControlNet 分支(可训练)
      ↓                           ↓
  保留生成能力              学习理解条件输入
      ↓                           ↓
      └──────────── + ────────────┘
                   ↓
           受控的生成结果

ControlNet 最聪明的地方在于:

  1. 零卷积初始化 → 训练初期完全不干扰原模型,避免灾难性遗忘
  2. 残差式融合 → 条件控制以"增量"形式加入,原能力完整保留
  3. 克隆而非修改 → 原模型权重永远不变,可以随时插拔 ControlNet

五、Diffusion Transformer (DiT)

之前讲的扩散模型都用 U-Net 作为骨干网络,但 U-Net 有一个明显的局限:

复制代码
U-Net 的问题:
    规模扩展性差------增大模型很麻烦,需要手动设计每一层
    卷积结构天然是局部感受野,捕捉全局关系能力弱

Transformer 的优势:
    规模扩展性极好------只需堆叠更多 Block
    Self-Attention 天然是全局感受野
    在语言、视觉领域已被反复证明"越大越好"

DiT 的核心思想就是:把扩散模型的 U-Net 骨干换成 Transformer,同时在隐空间(Latent Space)操作,也就是 LDM(Latent Diffusion Model)的设计。

流程

DiT Block 的改动:adaLN-Zero

普通 Layer Norm 的归一化参数(scale γ 和 shift β)是固定的可学习参数,与输入无关。

Adaptive Layer Norm(adaLN) 的关键改进:

复制代码
条件向量 c_embed(由 t 和 y 的嵌入相加得到)
    ↓ MLP 回归
    ↓
γ₁, β₁  → 控制 Self-Attention 前的 Layer Norm
γ₂, β₂  → 控制 Feedforward 前的 Layer Norm
α₁      → 控制 Self-Attention 输出的缩放
α₂      → 控制 Feedforward 输出的缩放

具体计算:

复制代码
adaLN 的归一化过程:

普通 LN:  output = γ · normalize(x) + β
              (γ、β 是固定参数)

adaLN:    output = γ(c) · normalize(x) + β(c)
              (γ、β 由条件 c 动态生成)

Zero 的含义: 初始化时,所有 α(缩放参数)初始化为 0

复制代码
训练初始:
    α₁ = 0 → Self-Attention 输出 × 0 = 0
    α₂ = 0 → Feedforward 输出 × 0 = 0
    整个 DiT Block 输出 = 输入(恒等映射)

训练过程中:
    α 从 0 开始慢慢学习
    Block 逐渐发挥作用

这和 ControlNet 的零卷积思路完全一致------训练初期保持稳定,避免随机初始化带来的噪声梯度

完整 DiT Block 数据流

复制代码
输入 token x
    │
    ├─ Layer Norm
    │      ↓ 用 γ₁,β₁ 做自适应归一化(由条件c控制)
    │  Multi-Head Self-Attention
    │      ↓ 输出 × α₁(初始为0)
    └──────⊕ 残差连接
    │
    ├─ Layer Norm
    │      ↓ 用 γ₂,β₂ 做自适应归一化(由条件c控制)
    │  Pointwise Feedforward(MLP)
    │      ↓ 输出 × α₂(初始为0)
    └──────⊕ 残差连接
    │
输出 token x'

三种条件注入方式的对比

论文探索了三种把时间步 t 和类别 c 注入 Transformer 的方式:

方式 做法 问题
In-context conditioning 把 t、c 的嵌入作为额外 token 加入序列 条件信息与图像 token 混在一起,影响有限
Cross-Attention Block 图像 token 通过 cross-attention 查询条件信息 增加计算量,效果提升有限
adaLN-Zero 条件动态控制每层的归一化参数 无(效果最好)

adaLN-Zero 效果最好的直觉理解:

复制代码
归一化层控制着每一层"信息流的尺度和偏移"
让条件 c 直接控制这个尺度 → 条件信息渗透进每一层的特征处理
比"加几个 token"或"偶尔做 cross-attention"影响更深入、更全面

DiT 相比 U-Net 的核心优势

复制代码
U-Net                          DiT
─────────────────────────────────────────
像素/特征空间操作              隐空间操作(更高效)
卷积(局部感受野)             Self-Attention(全局感受野)
手动设计各层结构               统一堆叠 Block,扩展简单
扩展性一般                     扩展性极好(更大=更好)

DiT 的实验结论:模型越大、计算量越多,生成质量持续提升,这正是 Transformer 架构在语言模型领域已经反复验证过的规律,现在被成功迁移到图像生成领域。这也是 Sora 等视频生成模型采用 DiT 架构的根本原因。

六、扩散模型的优缺点

优点:兼顾可解析性与灵活性

生成模型面临一个根本矛盾:

复制代码
可解析模型(如高斯分布):
    ✓ 数学上易于分析和训练
    ✗ 无法描述复杂数据的丰富结构

灵活模型(如 GAN):
    ✓ 能拟合任意复杂分布
    ✗ 训练不稳定,评估困难

扩散模型:
    ✓ 可解析------前向加噪过程有闭合形式,训练目标简单(预测噪声)
    ✓ 灵活------能生成极其复杂、高质量的图像
    两者兼得!
缺点:采样速度慢
复制代码
GAN 生成一张图:
    随机噪声 → [一次前向传播] → 图像
    速度极快

扩散模型生成一张图:
    x_T → x_{T-1} → ... → x_0
    需要 T 步(通常 50~1000 步)前向传播
    速度慢很多

目前有 DDIM、DPM-Solver 等加速采样方法,但仍比 GAN 慢。

参考:What are Diffusion Models?

相关推荐
沪漂阿龙1 小时前
面试题:集成学习是什么?Boosting、Bagging、AdaBoost、随机森林为什么有效,一文讲透
人工智能·机器学习·集成学习
财经资讯数据_灵砚智能1 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年5月12日
人工智能·python·信息可视化·自然语言处理·ai编程
DTAS尺寸公差分析软件1 小时前
国产三维公差分析软件 DTAS 3D 核心技术解析:AI+FEA 融合,解决柔性零件公差难题
人工智能·尺寸公差分析·三维公差分析·公差仿真软件·公差计算软件
淡漠的蓝精灵1 小时前
mem0aimem0,给AI加记忆层的开源方案
人工智能·其他
精益数智小屋1 小时前
什么是进销存库存表?进销存库存表包含哪些内容?
大数据·运维·数据库·人工智能·安全
新加坡内哥谈技术1 小时前
推理架构的转变
人工智能
零梦ing1 小时前
解决claude下载问题
人工智能