生成对抗网络 GAN 入门
生成对抗网络(GAN)让两个网络互相较量:生成器负责造假,判别器负责识破。二者在零和博弈中共同进步,最终生成器能产出以假乱真的数据,是图像生成的开山之作。
生成器与判别器
生成器把随机噪声 z 映射为样本 G(z),判别器 D 输出「样本来自真实数据」的概率。判别器想最大化分辨正确率,生成器想最小化 D 的判别能力,构成极小极大博弈。
import torch
z = torch.randn(64, 100) # 随机噪声
fake = generator(z) # 生成样本
score = discriminator(fake) # 判别器打分
损失怎么写
标准目标为 min_G max_D E[log D(x)] + E[log(1 - D(G(z)))]。实际训练常用「非饱和」损失,让生成器最大化 log D(G(z)),梯度更稳定。二者交替更新,通常判别器多训几步。
注意点
GAN 训练不稳定,可能出现模式崩塌(只生成少数几种样本)。需要仔细平衡双方能力,常用技巧有标签平滑、历史样本回放。Wasserstein GAN 等后续工作改善了收敛性。
小结
GAN 用生成器与判别器的对抗把噪声变成逼真样本,核心是极小极大博弈。训练难点在稳定与模式崩塌,理解损失与交替更新是动手第一步。
参考与延伸阅读
- Goodfellow 等 2014 GAN 原始论文。已核验。https://arxiv.org/abs/1406.2661
- PyTorch 官方 GAN 教程。已核验。https://pytorch.org/tutorials/beginner/dcgan_faces_tutorial.html
本文累计阅读 — 次