GAN (Generative Adversarial Networks,生成对抗网络)
1. 前言
如果说传统的卷积神经网络(CNN)是让计算机“看懂”图像,那么 GAN 就是让计算机“学会创造”图像。GAN 的核心思想源于博弈论中的纳什均衡。
想象一个场景:
- 生成器 (Generator):一个伪造钞票的罪犯,目标是做出让警察看不出真假的假币。
- 判别器 (Discriminator):一名警察,目标是准确分辨出哪些是真币,哪些是假币。
在这个博弈过程中,罪犯(生成器)的伪造技术越来越精湛,警察(判别器)的鉴别能力也越来越敏锐。最终,生成器制造出的假币达到了“以假乱真”的程度,连警察也无法分辨。这就是 GAN 训练的终极目标。
2. 网络概述
GAN 由两个互相对抗的网络组成:
2.1 生成器 (G)
- 输入:一个随机噪声向量 (通常服从高斯分布)。
- 输出:一张伪造的图像 。
- 目标:尽可能提高图像质量,让判别器判定其为“真”。
2.2 判别器 (D)
- 输入:一张真实的图像 或生成器生成的图像 。
- 输出:一个概率值(0到1之间),表示输入图像是“真”的概率。
- 目标:最大化分辨真假的能力。
2.3 目标函数(Loss Function)
GAN 的训练是一个 Min-Max 极大极小博弈问题,其公式如下:
- 对于 D 来说:希望 趋近于 1, 趋近于 0(最大化公式)。
- 对于 G 来说:希望 趋近于 1,即让 趋近于 0(最小化公式)。
3. 详细网络结构:PyTorch 实现
我们以最基础的 DCGAN (Deep Convolutional GAN) 架构为例,使用 PyTorch 实现一个简单的头像生成逻辑。
3.1 生成器 (Generator) 结构
生成器使用 转置卷积 (ConvTranspose2d) 将低维噪声矢量“放大”成高维图像。
3.2 判别器 (Discriminator) 结构
判别器本质上是一个二分类器,使用步长卷积逐渐降低空间维度。
4. 训练核心逻辑
GAN 的训练与普通网络不同,需要在一个循环内交替更新 D 和 G。
5. 总结与建议
GAN 的训练痛点:
- 模式崩溃 (Mode Collapse):生成器只学会生成一种非常像真钱的假币(例如只生成一种人脸),失去了多样性。
- 不收敛:D 和 G 的力量不平衡导致梯度消失或爆炸。

