人工智能之核心技术 深度学习 第七章 扩散模型(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》

相关推荐
github.com/starRTC2 小时前
Claude Code中英文系列教程25:非交互式运行 Claude Code
人工智能·ai编程
逄逄不是胖胖2 小时前
《动手学深度学习》-60translate实现
人工智能·python·深度学习
loui robot2 小时前
规划与控制之局部路径规划算法local_planner
人工智能·算法·自动驾驶
玄同7652 小时前
Llama.cpp 全实战指南:跨平台部署本地大模型的零门槛方案
人工智能·语言模型·自然语言处理·langchain·交互·llama·ollama
格林威2 小时前
Baumer相机金属焊缝缺陷识别:提升焊接质量检测可靠性的 7 个关键技术,附 OpenCV+Halcon 实战代码!
人工智能·数码相机·opencv·算法·计算机视觉·视觉检测·堡盟相机
独处东汉3 小时前
freertos开发空气检测仪之按键输入事件管理系统设计与实现
人工智能·stm32·单片机·嵌入式硬件·unity
你大爷的,这都没注册了3 小时前
AI提示词,zero-shot,few-shot 概念
人工智能
AC赳赳老秦3 小时前
DeepSeek 辅助科研项目申报:可行性报告与经费预算框架的智能化撰写指南
数据库·人工智能·科技·mongodb·ui·rabbitmq·deepseek
瑞华丽PLM3 小时前
国产PLM软件源头厂家的AI技术应用与智能化升级
人工智能·plm·国产plm·瑞华丽plm·瑞华丽