扩散模型(Diffusion Model)

一、 前言:从“毁灭”中创造

如果说 GAN 是在博弈中“伪造”数据,CycleGAN 是在循环中“翻译”风格,那么 扩散模型(Diffusion Model) 就是 2021 年之后图像生成领域的绝对霸主。它是 Stable Diffusion、Midjourney 和 OpenAI Sora 等顶尖 AI 的核心引擎。
扩散模型的灵感并非来自艺术,而是来自非平衡热力学。它的逻辑非常反直觉:

  • GAN 的目标是直接画出一张好图。
  • 扩散模型 的目标是学习如何将一堆杂乱无章的噪声,一步步还原成一张有意义的图像

想象你有一杯清水,滴入一滴墨水(数据),墨水会逐渐扩散直到整杯水变黑(噪声)。扩散模型的工作就是记录这个扩散过程,然后“倒放”录像,把墨黑的水变回清澈并提取出那一滴墨水。


二、 概述:两大核心过程

扩散模型主要由两个阶段组成:

1. 前向过程 (Forward Diffusion) —— “毁灭”

向原始图片中不断加入微小的高斯噪声。随着步骤 TT 的增加,图片最终会变成完全无法辨认的纯噪声。这个过程是固定的,不需要学习。

2. 反向过程 (Reverse Diffusion) —— “重建”

这是模型真正学习的地方。它尝试预测在每一步中被加入的噪声是多少,并将其“减去”。通过数千次的微小去噪,模型从纯噪声中“变”出了一张精美的图像。


三、 详细网络结构:DDPM 与 U-Net

最经典的扩散模型是 DDPM (Denoising Diffusion Probabilistic Models)

1. 预测器:U-Net

扩散模型的核心不是在预测图片,而是在预测“噪声”。它通常使用 U-Net 架构:

  • Encoder:压缩图像,提取深层语义。
  • Decoder:恢复尺寸,还原细节。
  • Skip Connections:保留原始位置信息,确保还原出的物体轮廓准确。

2. 引导者:时间步与条件 (Conditioning)

模型在去噪时需要知道当前是第几步(Time Embedding),如果是文生图(Text-to-Image),还需要加入文字特征(如 CLIP 提取的向量)来引导去噪的方向。


四、 PyTorch 代码示例:简易扩散模型骨架

import torch
import torch.nn as nn

class DenoisingUNet(nn.Module):
    def __init__(self, in_channels=3, out_channels=3):
        super().__init__()
        # 简化版 U-Net 结构
        self.encoder = nn.Sequential(
            nn.Conv2d(in_channels, 64, 3, padding=1),
            nn.ReLU(),
            nn.MaxPool2d(2)
        )
        self.bottleneck = nn.Sequential(
            nn.Conv2d(64, 128, 3, padding=1),
            nn.ReLU()
        )
        self.decoder = nn.Sequential(
            nn.ConvTranspose2d(128, 64, 2, stride=2),
            nn.ReLU(),
            nn.Conv2d(64, out_channels, 3, padding=1)
        )
        
    def forward(self, x, t):
        # x: 带噪声的图像
        # t: 当前时间步 (在实际模型中需要加入 Time Embedding)
        x1 = self.encoder(x)
        x2 = self.bottleneck(x1)
        # 预测这张图里包含的“噪声”
        predicted_noise = self.decoder(x2)
        return predicted_noise

# 训练逻辑简述
# 1. 取原图 x0,生成随机噪声 epsilon
# 2. 根据步数 t 生成带噪图 xt = sqrt(alpha)*x0 + sqrt(1-alpha)*epsilon
# 3. model(xt, t) 预测噪声,计算预测噪声与真实噪声 epsilon 的 MSELoss

五、 应用与工业突破

扩散模型之所以取代 GAN 成为主流,是因为它解决了 GAN 的几大痛点:

  • 训练极其稳定:不再有 GAN 那种 G 和 D 力量不平衡导致的崩溃问题。
  • 生成多样性极高:它能覆盖数据的全分布,不会出现“只会画一种猫”的情况。
  • 控制力强:通过 ControlNet 等插件,可以精确控制生成图像的姿态、线稿和深度。

代表产品:

  • Stable Diffusion:开源界的王者,支持本地部署。
  • DALL-E 3:理解复杂的逻辑描述。
  • Sora:将扩散模型应用到视频领域,实现时空连续的视频生成。