当机器开始「做梦」:生成式AI入门
第1章:当机器开始「做梦」:生成式AI入门
1.1 从你身边的AI说起
清晨,你被手机闹钟唤醒。解锁屏幕时,手机可能已经识别出你的面容——这是一个会“判断”的AI;打开音乐App,首页推荐了几首你可能喜欢的歌曲——这是另一个会“猜测”你喜好的AI;当你对着语音助手说“今天天气怎么样”,它不仅能听懂你的话,还能用自然流畅的声音回答你——这又是一个会“说话”的AI。
这些场景中的AI技术,你可能已经习以为常。但你是否想过,它们背后有着怎样的区别?
让我们来做一个小测试。仔细观察下面两幅图像,其中一幅是真实拍摄的照片,另一幅是由AI生成的。你能分辨出来吗?
这个问题看似简单,却揭示了当代AI技术最令人惊叹的能力之一——创造。在过去的认知中,创造似乎是人类独有的能力,是人类区别于机器的关键特征。然而,随着生成式AI(Generative AI)技术的飞速发展,机器不仅能够“感知”和“判断”,更开始具备“创造”的能力。
本章将带领你走进生成式AI的世界,从最基本的概念开始,一步步揭开机器“做梦”的奥秘。我们将探讨什么是生成式AI,它与判别式AI有何本质区别,以及这项技术是如何从实验室走向我们的日常生活。更重要的是,你将了解本书的学习路径,为后续深入学习GAN和扩散模型打下坚实基础。
1.2 判别式AI vs 生成式AI:两种截然不同的智能
1.2.1 一道选择题的两种解法
想象一下期末考试的场景。语文试卷上有一道选择题,要求你判断一幅图片是真实的摄影作品还是AI生成的假图。你的大脑会如何处理这个任务?
你可能会仔细观察图片的细节:人物的发丝是否自然、背景的光影是否合理、纹理是否有违和感。然后,你将这些特征与记忆中真实照片的特征进行比对,最终给出一个判断。
这个过程,本质上是一个分类(Classification)过程。你在学习“从输入到输出的映射”:给定一个输入(图片),输出一个类别标签(真/假)。这种类型的AI,我们称之为判别式AI(Discriminative AI)。
现在,换一种考题。假设考试要求你根据一段描述,创作一幅图片:“画一幅黄昏时分的小镇,炊烟袅袅,远处的风车缓缓转动。”这一次,你需要做的不再是判断,而是创造。
你的大脑会调动记忆中的各种元素:黄昏的光线是什么颜色?小镇通常有什么样的建筑?炊烟是如何升起的?风车有哪些特征?然后,你将这些元素重新组合,创造出一幅全新的画面。
这个过程,本质上是一个生成(Generation)过程。你在学习“从分布中采样”:从一个复杂的概率分布中抽取样本,这个样本是你从未见过、却符合描述的全新创造。这种类型的AI,我们称之为生成式AI。
1.2.2 数学视角下的两种模型
从数学的角度来看,判别式AI和生成式AI的区别更加清晰。
判别式模型学习的是条件概率分布 $P(y|x)$,即在给定输入 $x$ 的情况下,输出类别 $y$ 的概率。比如,给定一张图片 $x$,模型输出“这是一只猫”的概率是0.95。
数学表达式为:
$$f(x) = P(y|x)$$
常见的判别式模型包括:逻辑回归(Logistic Regression)、支持向量机(Support Vector Machine, SVM)、决策树(Decision Tree)、卷积神经网络(CNN)等。
生成式模型学习的则是联合概率分布 $P(x, y)$,或者更准确地说,是学习数据的生成分布 $P(x)$。模型不仅要判断“这个东西像什么”,更要理解“这个东西是怎么构成的”。
数学表达式为:
$$P(x) = \sum_{y} P(x|y) P(y)$$
或者更一般地,模型学习如何从隐变量 $z$ 生成数据 $x$:
$$x = G(z)$$
其中,$z$ 是从某个简单分布(如高斯分布)中采样的隐变量,$G$ 是生成器函数。
这两种方法的核心差异可以用一个经典的比喻来说明:
> 判别式模型就像一个经验丰富的鉴宝专家。他见过无数的文物,练就了一双火眼金睛,能够准确判断一件古董是真品还是赝品。但他并不理解这件文物是如何被制造出来的。 > > 生成式模型则像一位身怀绝技的工匠大师。他不仅见过各种精美的艺术品,更精通各种工艺技法,能够亲手制作出以假乱真的作品。他理解艺术的内在规律,能够从无到有地创造新事物。
1.2.3 能力边界的对比
为了更直观地理解两者的差异,让我们用一张对比表来展示它们在各个维度上的区别:
| 维度 | 判别式AI | 生成式AI | |------|----------|----------| | 核心任务 | 分类、回归、检测 | 生成、创造、合成 | | 学习目标 | $P(y|x)$:条件概率 | $P(x)$:数据分布 | | 输入输出 | 输入→类别 | 随机噪声→数据 | | 代表任务 | 图像分类、语音识别、文本分类 | 图像生成、文本创作、音乐作曲 | | 模型视角 | 决策边界 | 数据分布 | | 典型算法 | CNN、RNN、Transformer | GAN、VAE、Diffusion Model | | 类比 | 考试中的“选择题高手” | 考试中的“创意写作大师” |
这个对比揭示了一个重要的事实:虽然判别式AI和生成式AI都是AI领域的重要组成部分,但它们解决的是完全不同类型的问题。判别式AI擅长“认识世界”,而生成式AI擅长“创造世界”。
1.3 生成式AI的简短历史
1.3.1 梦想的萌芽(1950s-1980s)
生成式AI的梦想,可以追溯到计算机科学的黎明时期。
1953年,著名数学家克劳德·香农(Claude Shannon)提出了一种基于马尔可夫链(Markov Chain)的文本生成方法。这种方法的核心思想很简单:下一个词的出现概率,只与当前词有关。基于这个假设,可以通过随机采样来生成文本。
马尔可夫链的核心公式是:
$$P(w_{n+1}|w_1, w_2, ..., w_n) = P(w_{n+1}|w_n)$$
虽然这种模型生成的文本往往缺乏连贯性,但它证明了机器“创造”文本的可能性。
到了1980年代,变分自编码器(Variational Autoencoder, VAE)的前身——自编码器(Autoencoder)被提出。自编码器通过编码器-解码器结构,学习将数据压缩到一个低维的隐空间,然后再重建出来。这种“压缩-重建”的思想,为后来的生成模型奠定了基础。
1.3.2 深度生成模型的兴起(2000s-2010s)
2013年,一个重要的里程碑出现了:变分自编码器(VAE)被正式提出。VAE通过引入变分推断(Variational Inference)的技术,使得模型可以在隐空间中采样,生成与训练数据相似但不相同的新样本。
VAE的核心思想是学习数据的隐变量表示 $z$,然后通过解码器 $G$ 从 $z$ 生成数据 $x$:
$$z \sim N(0, I), \quad x = G(z)$$
VAE的训练目标是最小化重构误差,同时约束隐变量的分布接近标准正态分布。这种设计使得模型具有了真正的“生成”能力,而不仅仅是“重建”能力。
```python
VAE的核心结构示意
class VAE(nn.Module): def __init__(self, input_dim, latent_dim): super().__init__()
编码器:将输入映射到隐分布的参数
self.encoder = nn.Sequential( nn.Linear(input_dim, 256), nn.ReLU(), nn.Linear(256, latent_dim * 2) # 均值和方差 )
解码器:从隐变量重建数据
self.decoder = nn.Sequential( nn.Linear(latent_dim, 256), nn.ReLU(), nn.Linear(256, input_dim), nn.Sigmoid() )
def encode(self, x): params = self.encoder(x) mu, log_var = params.chunk(2, dim=-1) return mu, log_var
def reparameterize(self, mu, log_var): std = torch.exp(0.5 * log_var) eps = torch.randn_like(std) return mu + eps * std
def decode(self, z): return self.decoder(z) ```
1.3.3 GAN时代(2014年至今)
2014年,一个革命性的想法横空出世。Ian Goodfellow等人发表了开创性论文《Generative Adversarial Networks》,提出了生成对抗网络(Generative Adversarial Networks, GAN)。
GAN的创新在于引入了一个博弈论框架:两个神经网络——生成器(Generator)和判别器(Discriminator)——相互对抗、相互学习。生成器的目标是生成越来越逼真的假样本,而判别器的目标是越来越准确地区分真假样本。
这个过程可以用一个极简的比喻来理解:
> 生成器像是一个不断进步的伪造者,努力制作越来越逼真的名画赝品。 > > 判别器像是一个不断提升的鉴定师,努力识别出越来越多的赝品。 > > 两者在对抗中共同进化,最终,伪造者能够制作出鉴定师无法区分的“以假乱真”的作品。
GAN的数学框架简洁优美:
$$\min_G \max_D V(D, G) = \mathbb{E}_{x \sim P_{data}(x)}[\log D(x)] + \mathbb{E}_{z \sim P_z(z)}[\log(1 - D(G(z)))]$$
其中,$D(x)$ 是判别器判断真实样本为真的概率,$D(G(z))$ 是判别器判断生成样本为真的概率。
GAN的出现,标志着生成式AI进入了一个全新的时代。它生成的图像质量,远远超越了此前所有的方法。从2014年到2020年代,成千上万的GAN变体被提出,在图像生成、风格迁移、数据增强等领域取得了惊人的成果。
1.3.4 扩散模型的时代(2020年至今)
然而,GAN并非完美无缺。GAN的训练过程 notoriously 不稳定,经常出现模式崩溃(Mode Collapse)问题——生成器学会了“作弊”,只生成少数几种样本,而无法捕捉数据的全部多样性。
2020年,一系列重要论文的发表,标志着扩散模型(Diffusion Models)开始引领生成式AI的新潮流。
扩散模型的核心思想源自物理学中的扩散过程:想象一滴墨水滴入清水,墨水分子会逐渐扩散,最终均匀分布在整个水体中。这个过程是单向的、渐进的、确定的。
扩散模型将这个过程反过来:
- **正向过程(Forward Process)**:对真实数据逐步添加噪声,直到它变成纯噪声
- **反向过程(Reverse Process)**:学习如何从噪声逐步去噪,最终恢复出清晰的数据
数学上,正向过程可以表示为:
$$q(x_{1:T}|x_0) = \prod_{t=1}^{T} q(x_t|x_{t-1})$$
其中,$q(x_t|x_{t-1}) = \mathcal{N}(x_t; \sqrt{1-\beta_t}x_{t-1}, \beta_t I)$
反向过程则由神经网络 $p_\theta$ 来近似:
$$p_\theta(x_{0:T}) = p(x_T) \prod_{t=1}^{T} p_\theta(x_{t-1}|x_t)$$
扩散模型的最大优势在于训练稳定性和生成质量。2022年,Stable Diffusion的发布更是将扩散模型推向了公众视野,让更多人体验到了AI“创造”的魅力。
```mermaid graph LR A[真实数据 x₀] --> B[添加噪声] B --> C[x₁] C --> D[添加噪声] D --> E[x₂] E --> F[...] F --> G[纯噪声 xₜ]
H[纯噪声 xₜ] --> I[去噪] I --> J[xₜ₋₁] J --> K[去噪] K --> L[xₜ₋₂] L --> M[...] M --> N[生成数据 x₀']
B -.->|正向过程| B I -.->|反向过程| I ```
这张图展示了扩散模型的核心思想:正向过程是将数据逐步变成噪声,反向过程是学习如何从噪声恢复出数据。
1.4 生成式AI的核心技术家族
1.4.1 变分自编码器(VAE):概率的艺术家
变分自编码器是生成式AI家族中最具“概率思维”的成员。它的核心创新在于将变分推断与深度学习结合,实现了真正意义上的概率生成模型。
VAE的工作原理可以分为三个步骤:
第一步:编码。输入数据 $x$ 通过编码器网络,得到隐变量的分布参数(均值 $\mu$ 和方差 $\sigma^2$)。这个分布是对隐空间的一种近似表示。
第二步:采样。从学到的分布中采样一个隐变量 $z$。为了使采样过程可微,VAE使用了重参数化技巧(Reparameterization Trick):
$$z = \mu + \sigma \cdot \epsilon, \quad \epsilon \sim \mathcal{N}(0, I)$$
第三步:解码。隐变量 $z$ 通过解码器网络,生成与输入相似的新数据 $\hat{x}$。
VAE的损失函数由两部分组成:
$$\mathcal{L} = \mathcal{L}_{reconstruction} + \mathcal{L}_{KL}$$
- **重构损失** $\mathcal{L}_{reconstruction}$:衡量生成数据与原始数据的相似度
- **KL散度损失** $\mathcal{L}_{KL}$:约束隐变量分布接近标准正态分布
VAE的一个独特优势是,它的隐空间是连续的且结构化的。这意味着你可以在隐空间中任意插值,生成平滑过渡的样本。这种特性使得VAE在图像插值、风格混合等任务中表现出色。
1.4.2 生成对抗网络(GAN):对抗中成长
生成对抗网络是生成式AI家族中最具“对抗精神”的成员。它的核心创新在于引入了博弈论的思想,通过生成器和判别器的对抗训练,实现高质量的样本生成。
GAN的训练过程可以类比为一对冤家的发展史:
> 在一个古老的小镇上,住着一个技艺高超的画师(生成器)和一个眼光敏锐的鉴赏家(判别器)。画师最初是个新手,画出的画总是破绽百出。鉴赏家一眼就能看出问题所在。 > > 画师并没有气馁,他仔细研究鉴赏家的反馈,不断改进自己的画技。他的作品越来越逼真,连鉴赏家也开始犹豫不决。 > > 鉴赏家同样不敢懈怠,他研究画师的新技巧,寻找新的破绽。两人在对抗中不断进步,最终,画师能够画出连鉴赏家都无法辨认真伪的杰作。 > > 更神奇的是,由于画师深刻理解了真实画作的精髓,他不仅能够模仿已有的风格,还能够创造出全新的、前所未见的作品。
GAN的训练过程可以用以下伪代码来描述:
```python
GAN训练循环
for epoch in range(num_epochs):
第一步:训练判别器(多步迭代)
for _ in range(d_steps):
采样真实数据和噪声
real_data = sample_real_data(batch_size) noise = sample_noise(batch_size, noise_dim)
生成假数据
fake_data = generator(noise)
计算判别器损失
d_loss = -torch.mean(torch.log(discriminator(real_data)) + torch.log(1 - discriminator(fake_data)))
更新判别器
d_optimizer.zero_grad() d_loss.backward() d_optimizer.step()
第二步:训练生成器(单步迭代)
noise = sample_noise(batch_size, noise_dim) fake_data = generator(noise)
计算生成器损失(注意:这里要让判别器认为假数据是真的)
g_loss = -torch.mean(torch.log(discriminator(fake_data)))
更新生成器
g_optimizer.zero_grad() g_loss.backward() g_optimizer.step() ```
GAN的自诞生以来,衍生出了数百种变体:
- **DCGAN**(Deep Convolutional GAN):将卷积网络引入GAN,大幅提升图像质量
- **WGAN**(Wasserstein GAN):使用Wasserstein距离替代JS散度,解决训练不稳定问题
- **StyleGAN**:实现了对生成图像风格的精细控制,生成的肖像照片几乎无法与真实照片区分
- **BigGAN**:利用大规模训练和类别条件生成,在ImageNet上实现了惊人的FID分数
- **CycleGAN**:实现了无配对图像到图像的转换,如将马变成斑马