GAN
生成器造假、判别器打假——两个网络相互博弈,最终让机器学会"无中生有"
✦ 先看效果:生成图像随训练逐步清晰
点「开始训练」,观察右侧生成图像从随机噪声逐渐逼近左侧真实图像——这就是生成器在和判别器博弈中不断进化的过程。
训练损失曲线
生成器 Loss 下降 = 越来越会骗;判别器 Loss 趋于稳定 = 博弈接近平衡
01 大白话讲 GAN
一个造假币的故事
想象两个人:
一开始什么都不会,造出来的"假币"一眼就能看出来。但每次被识破之后,就研究自己哪里做得不像,下次改进——越造越逼真。
手里有一堆真币,专门鉴别真假。造假者水平越来越高,警察也被迫练得越来越厉害,否则就会被骗过去。
两者就这样你追我赶、相互提升。训练结束时,造假者造出的东西连警察都分不清真假——这就是 GAN 的目标。
GAN 不需要"标准答案"
普通神经网络需要大量带标注的数据(每张图配一个正确答案)。GAN 只需要一堆真实数据,判别器本身就充当了动态的"评分标准",无需人工标注。
这让 GAN 能学会生成图像、音频、文字——几乎任何东西。
训练的三步循环
给判别器看真图和假图,让它学会区分——像教警察认识真币
生成器的目标是让判别器误判自己的输出为"真"——像造假者研究如何骗过警察
理想终态:生成器造出的东西,判别器只能靠猜(50% 准确率)——警察完全分不清了
GAN 能做什么?
凭空生成不存在的人脸、风景、艺术画(StyleGAN)
把照片变成梵高画风,或把白天转换成夜景(CycleGAN)
根据残缺图像补全缺失部分,比填充纯色自然得多
医疗影像等稀缺数据场景,生成更多训练样本
GAN 的难点
生成器和判别器需要同步成长。如果一方太强,另一方就没办法学习——就像小学生和世界冠军对弈,弱的那方根本得不到有效反馈
生成器发现只要反复生成某一种样本就能骗过判别器,于是"偷懒",生成的内容缺乏多样性
一步步构建 GAN
从数据采样到对抗训练,逐步搭建。
用 Box-Muller 方法采样高斯分布,这是我们要让 G 学会模仿的目标分布。
G:噪声 → 数据;D:数据 → 真假概率。两者结构对称,共同训练。
真实数据标签 1、生成数据标签 0,让 D 学会分辨真假。
固定 D,让 G 生成能骗过 D 的样本——G 的梯度来自 D 的判断。
02 代码
03 学术性讲解
GAN(生成对抗网络)是一种生成模型,由生成器和判别器组成,通过对抗训练相互提升。生成器学习生成假数据,判别器学习区分真假数据。
对抗训练
生成器和判别器相互对抗,如同警察和造假币者:
目标函数
GAN 的训练目标是一个 minimax 博弈:
判别器 D 希望最大化该目标(真图输出 1,假图输出 0);生成器 G 希望最小化(让假图被判为真)。
训练过程
让判别器学会区分真实图像和生成图像
让生成器学会骗过判别器,生成更真实的图像
生成器生成的图像足够真实,判别器无法区分
纳什均衡与全局最优
理论上,GAN 的最优解是生成器完美复现真实数据分布 p_data,此时判别器对任何输入只能输出 0.5(无法区分)。这对应博弈论中的纳什均衡——任何一方单独改变策略都无法获得更好的结果。
训练不稳定性与常见问题
判别器过强时,D(G(z)) → 0,log(1-D(G(z))) 梯度几乎为零,生成器无法获得有效学习信号
生成器发现某一类样本能稳定欺骗判别器,于是只生成该类样本,多样性丧失
G 和 D 的损失反复振荡,难以收敛到均衡点
改进方向
用 Wasserstein 距离替代 JS 散度,从根本上解决梯度消失问题
引入卷积结构,大幅提升图像生成质量和训练稳定性
无需配对数据的风格迁移,增加循环一致性损失
可控风格的高分辨率人脸生成,分离高层语义与低层纹理
总结
生成器 vs 判别器
从噪声生成图像
纳什均衡点
图像生成、风格迁移