像素炼金术:AI 图像生成的进化之路——从 GAN 的狂飙到 Diffusion 的崛起

在过去的一年里,你可能已经被各种令人惊叹的 AI 绘画作品刷屏:无论是 Midjourney 绘制的赛博朋克宏大城市,还是 Stable Diffusion 根据几句简单提示词生成的逼真人像,亦或是 DALL-E 3 对复杂语义的完美理解。

AI 仿佛在一夜之间掌握了“神笔马良”的魔法。然而,罗马不是一天建成的,AI 图像生成技术也并非凭空出现。从早期的像素拼凑,到如今能够生成连摄影师都难辨真假的照片,背后是一场长达十年的深度学习技术演进。

今天,我们将拨开魔法的迷雾,深入探讨 AI 图像生成的进化之路:从 GAN(生成对抗网络)的狂飙突进,到 VAE(变分自编码器)的隐秘支撑,再到如今 Diffusion Model(扩散模型)的全面霸权。


第一阶段:规则与概率的摸索(前深度学习时代)

在深度学习爆发之前,计算机生成图像主要依赖于传统的图形学和简单的概率模型。早期的尝试往往显得生硬且充满“机器味”。

  • 纹理合成与非真实感绘制(NPR): 依靠人工设计的规则和数学方程来生成特定纹理或画风。
  • 基于统计的模型: 例如使用马尔可夫链来预测像素的分布,尝试“猜”出下一个像素是什么。

这一时期的 AI 生成更像是“拼图游戏”,机器并不理解什么是“猫”、什么是“狗”,只是在进行像素级别的概率计算。生成的图像分辨率极低,且缺乏全局一致性。直到深度学习的出现,AI 才真正拥有了“理解”图像特征的能力。


第二阶段:双剑合璧的博弈传奇——GAN(生成对抗网络)

2014 年,Ian Goodfellow 提出了生成对抗网络(GAN),这是 AI 图像生成史上的一个里程碑。GAN 的核心思想极其优雅且充满哲学意味:左右互搏

1. GAN 的核心原理

GAN 由两个神经网络组成:

  • 生成器: 像一个极其努力的假钞制造者。它接收一个随机噪声,尝试生成一张逼真的图像。
  • 判别器: 像一个经验丰富的警察。它负责观察输入的图像,并判断它是真实的(来自训练集)还是虚假的(来自生成器)。

两者在训练过程中不断博弈:生成器竭力骗过判别器,判别器则竭力识破生成器。在这个“道高一尺,魔高一丈”的过程中,生成器的造假能力突飞猛进,最终能够生成极其逼真的图像。

在 GAN 的巅峰时期,诞生了 StyleGAN(能控制生成人脸的各种属性,如姿态、发型)、CycleGAN(实现画风转换,如将马变成斑马)等惊艳的模型。

2. GAN 的致命缺陷:模式崩溃

尽管 GAN 能够生成极其清晰、逼真的图像,但它在工业应用中却遇到了难以逾越的障碍。

  • 训练极度不稳定: 调参如同黑魔法,很容易出现判别器过强,导致生成器梯度消失,无法学习。
  • 多样性缺失(Mode Collapse): 这是最致命的问题。当生成器发现只要生成某一种特定的图像(比如一只特定的哈士奇)就能骗过判别器时,它就会停止探索,无论输入什么噪声,输出总是那张哈士奇。这导致 GAN 缺乏足够的“想象力”和泛化能力。

3. GAN 代码示例(PyTorch 极简架构)

为了直观感受 GAN,我们可以看一个生成一维数据的极简 GAN 架构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import torch
import torch.nn as nn

# 生成器
class Generator(nn.Module):
def __init__(self, latent_dim, output_dim):
super(Generator, self).__init__()
self.model = nn.Sequential(
nn.Linear(latent_dim, 128),
nn.LeakyReLU(0.2),
nn.Linear(128, output_dim),
nn.Tanh() # 将输出映射到 [-1, 1]
)

def forward(self, z):
return self.model(z)

# 判别器
class Discriminator(nn.Module):
def __init__(self, input_dim):
super(Discriminator, self).__init__()
self.model = nn.Sequential(
nn.Linear(input_dim, 128),
nn.LeakyReLU(0.2),
nn.Linear(128, 1),
nn.Sigmoid() # 输出概率 [0, 1]
)

def forward(self, img):
validity = self.model(img)
return validity

# 损失函数与优化器
adversarial_loss = nn.BCELoss() # 二元交叉熵损失
generator = Generator(latent_dim=100, output_dim=784) # 假设生成28x28的图像展平
discriminator = Discriminator(input_dim=784)
optimizer_G = torch.optim.Adam(generator.parameters(), lr=0.0002)
optimizer_D = torch.optim.Adam(discriminator.parameters(), lr=0.0002)

# 伪代码:训练循环
for epoch in range(epochs):
for real_imgs, _ in dataloader:
# ---------------------
# 训练判别器
# ---------------------
z = torch.randn(batch_size, 100)
fake_imgs = generator(z).detach() # 生成假图像,不计算G的梯度
loss_D = adversarial_loss(discriminator(real_imgs), torch.ones(batch_size, 1)) + \
adversarial_loss(discriminator(fake_imgs), torch.zeros(batch_size, 1))

optimizer_D.zero_grad()
loss_D.backward()
optimizer_D.step()

# ---------------------
# 训练生成器
# ---------------------
z = torch.randn(batch_size, 100)
gen_imgs = generator(z)
loss_G = adversarial_loss(discriminator(gen_imgs), torch.ones(batch_size, 1)) # 希望判别器把假图像判定为真

optimizer_G.zero_grad()
loss_G.backward()
optimizer_G.step()

第三阶段:被低估的桥梁——VAE(变分自编码器)

在 GAN 大放异彩的同时,2013 年由 Diederik P. Kingma 提出的变分自编码器(VAE)也在默默发展。虽然它生成的图像往往比 GAN 模糊,但 VAE 的核心思想为后来的 Diffusion Model 埋下了至关重要的伏笔。

1. VAE 的核心原理:向连续空间映射

传统的自编码器将图像压缩成一个离散的“隐向量”,但这会导致隐空间不连续,无法用于随机生成。VAE 则改变了规则:它不再将图像压缩为固定的向量,而是压缩为一个“概率分布”(通常由均值 μ\mu 和方差 σ\sigma 表示)。

通过引入重参数化技巧和 KL 散度正则化,VAE 强制将隐空间规整为一个标准的正态分布。这意味着我们可以从这个隐空间中随机抽取一个点,它解码出来的图像通常是平滑且有意义的。

  • 优势: 训练非常稳定,生成的图像多样性极高,隐空间连续可解释。
  • 劣势: 为了保证隐空间的连续性,VAE 使用了均方误差(MSE)和 KL 散度作为损失函数,这导致它倾向于生成“求平均”的图像,使得结果看起来模糊。

尽管 VAE 没有成为最终的高清图像生成方案,但它**“将图像映射到连续隐空间,再从隐空间重建”**的思想,成为了如今控制图像生成(如 Stable Diffusion 的隐空间架构)的基石。


第四阶段:破坏与重生的艺术——Diffusion Model(扩散模型)

就在人们以为 GAN 及其变体将一统天下时,2020 年,Jonathan Ho 等人提出了去噪扩散概率模型。Diffusion Model 借鉴了物理学中的非平衡热力学,以一种看似反直觉却极其优雅的方式,彻底颠覆了图像生成领域。

1. 物理启发:正向扩散

想象一滴墨水滴入一杯清水中。随着时间的推移,墨水分子的布朗运动会导致其逐渐扩散,最终完全破坏了原本清晰的墨滴形态,变成一杯浑浊的水。这就是正向扩散过程

在 Diffusion Model 中,我们给一张清晰的图片不断添加高斯噪声。经过 TT 步之后,这张图片变成了一张纯高斯噪声图。这个过程是一个马尔可夫链,由于每一步添加的噪声我们是预定义的(通常是一个线性的方差表),因此这个过程是确定且可微的

2. 神奇魔法:逆向去噪

既然我们知道图像是如何被毁掉的,那么能否训练一个神经网络,让它学会“时光倒流”,把噪声还原成图像?这就是逆向去噪过程

模型在每个时间步 tt 接收一个充满噪声的图像 xtx_t,任务是预测出上一步添加的噪声 ϵ\epsilon。通过从 xtx_t 中减去预测出的噪声,我们就能得到稍微清晰的图像 xt1x_{t-1}

最终,从一张纯粹的高斯噪声图开始,经过 TT 次去噪,AI 就能凭空创造出一张无比逼真的清晰图像!

3. 为什么 Diffusion 会击败 GAN?

  • 极度稳定: Diffusion 模型本质上是在做回归任务(预测噪声),不需要像 GAN 那样维护对抗平衡,不存在梯度消失和模式崩溃的问题。
  • 无与伦比的多样性: 由于生成过程从纯随机噪声开始,且没有强对抗约束,Diffusion 能够覆盖训练数据分布的每一个角落,生成的样本多样性远超 GAN。
  • 极其适合引入文本条件: 这点最为致命。Diffusion 的逐步去噪过程非常容易与外部引导(如 CLIP 提取的文本特征)结合,实现“按图索骥”。

4. 核心数学与代码示例

在经典的 DDPM 中,模型预测的实际上是噪声 ϵ\epsilon。损失函数通常简化为在某个随机时间步 tt 上的均方误差:

Lsimple(θ)=Et,x0,ϵ[ϵϵθ(xt,t)2]L_{simple}(\theta) = \mathbb{E}_{t, x_0, \epsilon} \left[ \| \epsilon - \epsilon_\theta(x_t, t) \|^2 \right]

下面是一个基于 PyTorch 的极简 Diffusion 逆向过程(去噪单步)的伪代码实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import torch
import torch.nn as nn

class DiffusionModel(nn.Module):
def __init__(self, network, timesteps=1000):
super().__init__()
self.network = network # 通常是 U-Net
self.timesteps = timesteps

# 定义 beta schedule(控制加噪的速度)
self.betas = torch.linspace(0.0001, 0.02, timesteps)
self.alphas = 1.0 - self.betas
self.alphas_cumprod = torch.cumprod(self.alphas, axis=0)

def forward_diffusion(self, x_0, t, noise=None):
"""正向过程:根据 x_0 和时间步 t 生成加噪图像 x_t"""
if noise is None:
noise = torch.randn_like(x_0)

sqrt_alpha_t = torch.sqrt(self.alphas_cumprod[t])
sqrt_one_minus_alpha_t = torch.sqrt(1.0 - self.alphas_cumprod[t])

# 重参数化技巧直接计算任意时间步的 x_t
x_t = sqrt_alpha_t * x_0 + sqrt_one_minus_alpha_t * noise
return x_t

def p_sample(self, x_t, t):
"""逆向过程单步:给定 x_t,预测并减去噪声,得到 x_{t-1}"""
# 1. 使用 U-Net 预测当前步的噪声
predicted_noise = self.network(x_t, t) # 网络同时接收加噪图像和时间步嵌入

# 2. 计算去噪后的均值
beta_t = self.betas[t]
sqrt_one_minus_alpha_t = torch.sqrt(1.0 - self.alphas_cumprod[t])
sqrt_recip_alpha_t = torch.sqrt(1.0 / self.alphas[t])

model_mean = sqrt_recip_alpha_t * (x_t - beta_t / sqrt_one_minus_alpha_t * predicted_noise)

if t == 0:
return model_mean
else:
# 3. 加入方差项(保持生成的随机性)
posterior_variance = beta_t * (1.0 - self.alphas_cumprod[t-1]) / (1.0 - self.alphas_cumprod[t])
noise = torch.randn_like(x_t)
return model_mean + torch.sqrt(posterior_variance) * noise

@torch.no_grad()
def sample(self, shape):
"""完整生成过程:从纯噪声生成图像"""
device = next(self.network.parameters()).device
# 从标准正态分布采样初始纯噪声
x_t = torch.randn(shape).to(device)

# 逐步去噪,从 T 到 0
for t in reversed(range(self.timesteps)):
x_t = self.p_sample(x_t, t)

return x_t # 最终生成的清晰图像

第五阶段:降维打击——Latent Diffusion 与 Stable Diffusion 的降生

原始的 Diffusion Model(如 DDPM)虽然效果惊艳,但它有一个致命的工程问题:计算量太大

想象一下,在 DDIM/DDPM 中,模型是在像素级别进行去噪的。如果我们要生成一张 1024×10241024 \times 1024 的 RGB 图像,那就是在处理一个 300 万维的向量,并且要重复计算几百次(通常 T=1000T=1000)。这种计算资源消耗连工业级服务器都难以承受,更别提个人电脑了。

潜空间扩散模型(Latent Diffusion Models, LDM)

2021 年,CompVis 团队(Stable Diffusion 的核心团队)提出了 LDM,完成了 AI 绘画历史上的最后一次关键进化。

他们巧妙地结合了 VAEDiffusion 的优势:

  1. 感知压缩: 首先训练一个强大的 VAE。它的编码器不再仅仅学习怎么还原图像,而是学习如何将高分辨率的图像(例如 512×512×3512 \times 512 \times 3)压缩到一个极小的、感知意义丰富的潜空间中(例如 64×64×464 \times 64 \times 4)。
  2. 潜空间扩散: Diffusion 过程不再高分辨率像素空间进行,而是在这个极小的潜空间中进行。在这个空间里,数据维度被压缩了近 48 倍,但重要的语义特征和纹理信息被保留了下来。
  3. 条件控制: 在 U-Net 去噪的过程中,通过交叉注意力机制注入文本特征(例如由 CLIP 或 T5 提取的 Prompt 向量)。

这就是 Stable Diffusion 的核心架构!通过将扩散过程转移到隐空间,SD 极大地降低了计算复杂度,使得原本需要集群计算的扩散模型,可以在消费级显卡(甚至是 8GB 显存的 RTX 3060)上流畅运行。这也直接导致了 AI 绘画技术在 2022 年的彻底爆发。


第六阶段:修仙大成——ControlNet 与 LoRA 的控制力

如果说基础的 Latent Diffusion 是一匹脱缰的野马,拥有无限的创造力但难以驾驭,那么 ControlNet 和 LoRA 则是为这匹野马套上了缰绳。

在文本到图像(T2I)的任务中,仅仅通过文字很难精确描述出我们想要的具体姿态、构图或特定的艺术风格。

1. ControlNet:结构级控制

2023 年,Lvmin Zhang 提出了 ControlNet。它的原理是冻结强大的预训练 Stable Diffusion 模型,然后复制一份 U-Net 的编码器结构作为可训练的旁路。

ControlNet 允许用户输入额外的条件图像(例如人体姿态的火柴人图、建筑草图的边缘检测图、深度图),将这些空间结构与文本提示词结合,实现对生成图像精确的几何和空间控制

2. LoRA:风格级微调

LoRA(Low-Rank Adaptation)原本用于大语言模型微调,被移植到 Stable Diffusion 后彻底改变了 AI 模型的定制方式。

它通过冻结原有庞大的几十 GB 的模型参数,仅仅训练几百 MB 甚至几 MB 的“补丁”(旁路矩阵)。这意味着普通创作者只需用几十张特定画风或特定人物的照片,就能训练出一个专属的风格模型。


总结:未来将走向何方?

从 GAN 的对抗博弈,到 VAE 的隐空间探索,再到 Diffusion 的物理灵感与 Latent Diffusion 的降维打击。AI 图像生成的进化史,本质上是数学、物理学与计算机工程的完美交响乐

目前,GAN 由于生成速度快(单次前向传播),在实时图像生成(如视频会议虚拟背景、实时换脸)中仍有用武之地;而 Diffusion 凭借其无与伦比的质量和可控性,统治了高质量内容生成的领域。

那么,下一步是什么?

  1. 视频生成: 将 Diffusion 从 2D 空间扩展到时空维度(如 OpenAI 的 Sora),解决长期的时间一致性问题。
  2. 3D 生成: 结合 NeRF 与 Diffusion,直接通过文本生成高精度的 3D 模型(如 DreamFusion、Tripo3D)。
  3. 架构融合: 例如最新的 Adversarial Diffusion 模型,试图将 GAN 的快速度与 Diffusion 的高质量结合起来。

从“像素炼金术”到“造物主之杖”,AI 已经从单纯的数据分析工具,进化为了人类想象力的完美外脑。对于开发者和创作者而言,这不仅是技术的狂欢,更是一个充满无限可能的新纪元的开端。