生成对抗网络 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 用生成器与判别器的对抗把噪声变成逼真样本,核心是极小极大博弈。训练难点在稳定与模式崩塌,理解损失与交替更新是动手第一步。

参考与延伸阅读

本文累计阅读