人工智能之核心技术 深度学习 第七章 扩散模型(Diffusion Models)

人工智能之核心技术 深度学习

第七章 扩散模型(Diffusion Models)


文章目录

  • [人工智能之核心技术 深度学习](#人工智能之核心技术 深度学习)
  • [前言:扩散模型(Diffusion Models)------ 生成式 AI 的新王者](#前言:扩散模型(Diffusion Models)—— 生成式 AI 的新王者)
    • 一、扩散模型核心原理
      • [1.1 直观类比:从"墨水滴入清水"说起](#1.1 直观类比:从“墨水滴入清水”说起)
      • [1.2 前向扩散过程(Fixed, Non-Learnable)](#1.2 前向扩散过程(Fixed, Non-Learnable))
      • [1.3 反向扩散过程(Learnable)](#1.3 反向扩散过程(Learnable))
      • [1.4 马尔可夫链建模](#1.4 马尔可夫链建模)
    • 二、扩散模型关键技术
      • [2.1 噪声预测网络:UNet 架构](#2.1 噪声预测网络:UNet 架构)
      • [2.2 损失函数:简单而强大](#2.2 损失函数:简单而强大)
      • [2.3 采样加速策略](#2.3 采样加速策略)
    • 三、经典扩散模型变体
      • [3.1 DDPM(Denoising Diffusion Probabilistic Models, 2020)](#3.1 DDPM(Denoising Diffusion Probabilistic Models, 2020))
      • [3.2 Stable Diffusion(2022)](#3.2 Stable Diffusion(2022))
      • [3.3 DALL·E 3(2023)](#3.3 DALL·E 3(2023))
    • 四、扩散模型应用场景
    • [五、配套代码实现(简化 DDPM)](#五、配套代码实现(简化 DDPM))
    • [六、扩散模型 vs GAN](#六、扩散模型 vs GAN)
    • 七、总结
  • 资料关注

前言:扩散模型(Diffusion Models)------ 生成式 AI 的新王者

如果说 GAN 是生成模型的"艺术家",那么扩散模型(Diffusion Models) 就是"科学家"------它通过模拟物理中的热力学扩散过程 ,以极其稳定、高质量的方式生成图像、音频、3D 等复杂数据。自 2020 年 DDPM 提出以来,扩散模型迅速超越 GAN,成为生成式 AI 的主流架构,并催生了 Stable Diffusion、DALL·E 2/3、Midjourney 等现象级应用。


一、扩散模型核心原理

1.1 直观类比:从"墨水滴入清水"说起

想象一滴墨水滴入清水中:

  • 前向过程(Forward Process) :墨水逐渐扩散,最终整杯水变均匀灰色(加噪
  • 反向过程(Reverse Process) :如果知道扩散规律,理论上可以逆向操作,让墨水重新聚集成一滴(去噪

扩散模型正是模拟这一过程:

  • 训练阶段:学习如何从噪声中一步步还原原始数据
  • 生成阶段:从纯噪声开始,逐步"去噪"生成新样本

1.2 前向扩散过程(Fixed, Non-Learnable)

给定真实图像 x 0 x_0 x0,通过 T T T 步逐步添加高斯噪声:

q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) q(x_t | x_{t-1}) = \mathcal{N}(x_t; \sqrt{1 - \beta_t} x_{t-1}, \beta_t \mathbf{I}) q(xt∣xt−1)=N(xt;1−βt xt−1,βtI)

其中:

  • β t \beta_t βt 是预设的小噪声方差(如线性增长:0.0001 → 0.02)
  • t = 1 , 2 , . . . , T t = 1, 2, ..., T t=1,2,...,T(通常 T = 1000 T = 1000 T=1000)
  • 经过足够多步后, x T ∼ N ( 0 , I ) x_T \sim \mathcal{N}(0, \mathbf{I}) xT∼N(0,I)(纯噪声)

关键性质 :任意时刻 x t x_t xt 可直接由 x 0 x_0 x0 计算(重参数化技巧):

x t = α ˉ t x 0 + 1 − α ˉ t ϵ , ϵ ∼ N ( 0 , I ) x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon, \quad \epsilon \sim \mathcal{N}(0, \mathbf{I}) xt=αˉt x0+1−αˉt ϵ,ϵ∼N(0,I)

其中 α ˉ t = ∏ s = 1 t ( 1 − β s ) \bar{\alpha}t = \prod{s=1}^t (1 - \beta_s) αˉt=∏s=1t(1−βs)


1.3 反向扩散过程(Learnable)

目标:学习一个神经网络 ϵ θ \epsilon_\theta ϵθ,预测每一步添加的噪声 ϵ \epsilon ϵ,从而逆向还原图像。

反向过程定义为:

p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ θ ( x t , t ) , Σ θ ( x t , t ) ) p_\theta(x_{t-1} | x_t) = \mathcal{N}(x_{t-1}; \mu_\theta(x_t, t), \Sigma_\theta(x_t, t)) pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),Σθ(xt,t))

在 DDPM 中,方差 Σ θ \Sigma_\theta Σθ 固定为 β t \beta_t βt ,只需学习均值 μ θ \mu_\theta μθ。而更巧妙的是:直接预测噪声 ϵ \epsilon ϵ


1.4 马尔可夫链建模

整个扩散过程构成一个马尔可夫链

  • 每一步只依赖前一状态
  • 前向链固定,反向链由神经网络参数化

+噪声 β₁
+噪声 β₂
去噪 θ
去噪 θ
真实图像 x₀
x₁
x₂
...
纯噪声 x_T ~ N(0,I)
x_{T-1}
x_{T-2}
生成图像 x̂₀

💡 优势:训练稳定、不易模式崩溃、生成质量高!


二、扩散模型关键技术

2.1 噪声预测网络:UNet 架构

扩散模型的核心是一个时间条件 UNet

结构特点:
  • 编码器-解码器:下采样提取特征,上采样重建图像
  • 残差连接(Skip Connections):保留细节信息
  • 时间嵌入(Time Embedding) :将时间步 t t t 编码为向量,注入每一层(通过 AdaGN 或 Attention)
  • 自注意力机制:增强全局建模能力(尤其在高分辨率)

UNet
x_t
Conv + TimeEmb
Downsample + TimeEmb
Attention + ResBlock
Upsample + Skip + TimeEmb
Conv + Skip + TimeEmb
ε̂_θ(x_t, t)
t
Time Embedding


2.2 损失函数:简单而强大

DDPM 使用简化版变分下界(ELBO),最终等价于:

L simple = E x 0 , t , ϵ [ ∥ ϵ − ϵ θ ( x t , t ) ∥ 2 ] \mathcal{L}\text{simple} = \mathbb{E}{x_0, t, \epsilon} \left[ \| \epsilon - \epsilon_\theta(x_t, t) \|^2 \right] Lsimple=Ex0,t,ϵ[∥ϵ−ϵθ(xt,t)∥2]

  • 输入 :带噪图像 x t x_t xt + 时间步 t t t
  • 目标 :预测原始噪声 ϵ \epsilon ϵ
  • 损失:均方误差(MSE)

优点:无需对抗训练,梯度稳定,易于优化!


2.3 采样加速策略

原始 DDPM 需 1000 步采样 → 太慢!改进方法:

方法 原理 加速倍数
DDIM(2021) 非马尔可夫反向过程,允许跳步采样 10~50×
知识蒸馏 训练小模型模仿大模型的 1000 步 → 用 10 步生成 100×
剪枝与量化 移除冗余参数,降低计算量 2~4×
Latent Diffusion(Stable Diffusion) 在低维潜在空间扩散 10×+

🚀 Stable Diffusion 关键

先用 VAE 将图像压缩到 latent space(如 64×64),再在此空间进行扩散 → 大幅降低计算成本!


三、经典扩散模型变体

3.1 DDPM(Denoising Diffusion Probabilistic Models, 2020)

  • 开山之作,证明扩散模型可生成高质量图像
  • 使用 UNet + 时间嵌入
  • 采样慢(1000 步),但训练稳定

3.2 Stable Diffusion(2022)

  • 文本到图像生成的里程碑

  • 三大组件

    1. VAE:图像 ↔ 潜在表示
    2. UNet 扩散模型:在 latent space 去噪
    3. CLIP Text Encoder:将文本编码为条件向量
  • 条件生成:UNet 输入 = latent + text embedding + time

文本提示
CLIP Text Encoder
文本条件 c
随机噪声 z_T
UNet
时间步 t
z_{t-1}
...
z_0
VAE Decoder
生成图像

优势:开源、高效、支持 fine-tuning(LoRA、Textual Inversion)


3.3 DALL·E 3(2023)

  • 结合 Transformer 与扩散模型

  • 两阶段生成

    1. Prompt 改写:用大语言模型(LLM)将用户输入改写为更详细的描述
    2. 扩散生成:用改进的 GLIDE 模型生成图像
  • 多模态对齐:确保图像细节与文本严格一致


四、扩散模型应用场景

应用 说明 代表模型
文生图(Text-to-Image) 根据文本生成图像 Stable Diffusion, DALL·E 3
图生图(Image-to-Image) 草图 → 真实图、风格迁移 ControlNet + SD
图像修复/编辑 填补缺失区域、换背景 LaMa, InstructPix2Pix
图像超分辨率 低清 → 高清 SR3, Real-ESRGAN + Diffusion
3D 生成 从单图生成 3D 模型 DreamFusion, Shap-E
语音合成 生成自然语音 DiffWave, WaveGrad
视频生成 生成连贯视频 Make-A-Video, Sora(基于 diffusion-like 架构)

🔮 趋势 :扩散模型正成为多模态生成的统一框架!


五、配套代码实现(简化 DDPM)

python 复制代码
import torch
import torch.nn as nn
import math

# 1. 时间嵌入(Sinusoidal)
def timestep_embedding(timesteps, dim, max_period=10000):
    half = dim // 2
    freqs = torch.exp(
        -math.log(max_period) * torch.arange(start=0, end=half, dtype=torch.float32) / half
    ).to(timesteps.device)
    args = timesteps[:, None].float() * freqs[None]
    embedding = torch.cat([torch.cos(args), torch.sin(args)], dim=-1)
    if dim % 2:
        embedding = torch.cat([embedding, torch.zeros_like(embedding[:, :1])], dim=-1)
    return embedding

# 2. 简化 UNet 块
class UNetBlock(nn.Module):
    def __init__(self, in_ch, out_ch, time_emb_dim):
        super().__init__()
        self.conv = nn.Conv2d(in_ch, out_ch, 3, padding=1)
        self.time_proj = nn.Linear(time_emb_dim, out_ch)
        self.norm = nn.GroupNorm(8, out_ch)
        self.act = nn.SiLU()

    def forward(self, x, time_emb):
        x = self.conv(x)
        time_bias = self.time_proj(time_emb)[:, :, None, None]
        x = x + time_bias
        x = self.norm(x)
        return self.act(x)

# 3. 极简 UNet(仅示意)
class SimpleUNet(nn.Module):
    def __init__(self, img_channels=3, time_emb_dim=128):
        super().__init__()
        self.time_mlp = nn.Sequential(
            nn.Linear(1, time_emb_dim),
            nn.SiLU(),
            nn.Linear(time_emb_dim, time_emb_dim)
        )
        self.enc1 = UNetBlock(img_channels, 64, time_emb_dim)
        self.enc2 = UNetBlock(64, 128, time_emb_dim)
        self.dec2 = UNetBlock(128, 64, time_emb_dim)
        self.final = nn.Conv2d(64, img_channels, 1)

    def forward(self, x, t):
        # t: [batch_size]
        t = t.unsqueeze(-1).float()
        time_emb = self.time_mlp(t)  # [B, time_emb_dim]

        x1 = self.enc1(x, time_emb)
        x2 = self.enc2(x1, time_emb)
        x = self.dec2(x2, time_emb)
        return self.final(x)

# 4. 训练步骤(核心)
def train_step(model, x0, t, noise):
    # x0: [B, C, H, W], t: [B], noise: [B, C, H, W]
    alpha_bar = get_alpha_bar(t)  # 预计算 ᾱ_t
    xt = torch.sqrt(alpha_bar) * x0 + torch.sqrt(1 - alpha_bar) * noise
    pred_noise = model(xt, t)
    loss = nn.functional.mse_loss(pred_noise, noise)
    return loss

# 使用示例
model = SimpleUNet()
x0 = torch.randn(4, 3, 32, 32)
t = torch.randint(0, 1000, (4,))
noise = torch.randn_like(x0)
loss = train_step(model, x0, t, noise)
print("Loss:", loss.item())

📌 说明:此为教学简化版,实际 UNet 包含下采样、上采样、注意力等模块。


六、扩散模型 vs GAN

特性 GAN Diffusion Model
训练稳定性 不稳定,易崩溃 非常稳定
生成多样性 易模式崩溃 高多样性
生成质量 高(但可能有 artifacts) 极高(细节丰富)
采样速度 快(单次前向) 慢(需多步,但可加速)
理论基础 博弈论 概率生成模型
当前地位 逐渐被取代 生成式 AI 主流

七、总结

DDPM 2020
Improved Sampling

(DDIM, etc.)
Latent Diffusion

(Stable Diffusion)
ControlNet

(可控生成)
Text-to-3D

(DreamFusion)
Audio Diffusion

(DiffWave)
多模态生成统一框架

未来方向

  • 更快采样(1 步生成?)
  • 更强语义控制(结合 LLM)
  • 3D/视频/科学生成

深度学习核心架构的系统学习:
CNN → RNN → Transformer → GAN → Diffusion

共同构成了现代 AI 的技术基石。

资料关注

公众号:咚咚王

gitee:https://gitee.com/wy18585051844/ai_learning

《Python编程:从入门到实践》

《利用Python进行数据分析》

《算法导论中文第三版》

《概率论与数理统计(第四版) (盛骤) 》

《程序员的数学》

《线性代数应该这样学第3版》

《微积分和数学分析引论》

《(西瓜书)周志华-机器学习》

《TensorFlow机器学习实战指南》

《Sklearn与TensorFlow机器学习实用指南》

《模式识别(第四版)》

《深度学习 deep learning》伊恩·古德费洛著 花书

《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》

《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen)》

《自然语言处理综论 第2版》

《Natural-Language-Processing-with-PyTorch》

《计算机视觉-算法与应用(中文版)》

《Learning OpenCV 4》

《AIGC:智能创作时代》杜雨+&+张孜铭

《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》

《从零构建大语言模型(中文版)》

《实战AI大模型》

《AI 3.0》

相关推荐
珹洺几秒前
C++AI多模型聊天系统(四)SSH反向隧道/虚拟局域网(VLAN)调用本地Ollama大模型
c++·人工智能·ssh
直奔標竿1 分钟前
Java开发者AI转型第十三课!知识库终局方案:Spring AI Vector Store架构演进与ETL全链路入库实战
java·人工智能·后端·spring
研究点啥好呢3 分钟前
Momenta算法工程师面试题精选:10道高频考题+答案解析
人工智能·算法·求职招聘·面试笔试
羊羊小栈6 分钟前
基于「YOLO目标检测 + 多模态AI分析」的人员摔倒智能检测分析预警系统
人工智能·yolo·目标检测·计算机视觉·毕业设计·大作业
JackieZhengChina6 分钟前
阿里开源项目Pixelle-Video 详解:开源AI全自动短视频引擎,零门槛一键生成成片
人工智能·开源项目·视频制作
aLTttY9 分钟前
Spring Boot 3.x 集成 AI 大模型实战指南
人工智能·spring boot·后端
@insist12310 分钟前
信息安全工程师-密码学专题(中):对称加密、RSA 与哈希算法
人工智能·密码学·哈希算法·软考·信息安全工程师·软件水平考试
新知图书10 分钟前
基于ReAct模式的智能体系统示例
人工智能·agent·智能体
guslegend11 分钟前
第16节:如何科学调节切片长度与滑动窗口,结合倒排索引与向量锁引对比优化
人工智能·大模型·rag
深度学习lover12 分钟前
<数据集>yolo 家庭垃圾识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·家庭垃圾识别