查看全课大纲(第 90 / 93 节)
  1. 1.计算机视觉概述
  2. 2.计算机视觉应用场景
  3. 3.困难与挑战
  4. 4.开源库介绍
  5. 5.图像显示与存储
  6. 6.CLAHE
  7. 7.腐蚀膨胀与开闭运算
  8. 8.滤波与边缘填充
  9. 9.各种滤波
  10. 10.图像金字塔
  11. 11.傅里叶变换
  12. 12.短时傅里叶变换与小波变换
  13. 13.颜色特征与颜色直方图
  14. 14.几何特征_边缘
  15. 15.几何特征-角点与斑点
  16. 16.局部特征-SIFT特征描述子
  17. 17.局部特征-SURF特征描述子
  18. 18.局部特征-ORB特征描述子
  19. 19.其他特征描述子
  20. 20.传统图像分割技术
  21. 21.GraphCut
  22. 22.GrabCut
  23. 23.人脸检测的传统方法
  24. 24.行人检测的传统方法HOG+SVM
  25. 25.行人检测DPM
  26. 26.人工神经网络的架构
  27. 27.目标函数与梯度下降
  28. 28.误差反向传播
  29. 29.可手算的神经网络
  30. 30.改进目标函数与克服梯度消散
  31. 31.神经网络之传统神经网络与深度网络的差异
  32. 32.各种梯度下降算法
  33. 33.如何选择合适的梯度下降算法
  34. 34.避免过适应
  35. 35.CNN的架构
  36. 36.CNN的误差反向传播_卷积层
  37. 37.CNN的误差反向传播_池化层
  38. 38.分类所用的数据集
  39. 39.Alexnet详解
  40. 40.VGG详解
  41. 41.GoogLeNet_v1
  42. 42.BatchNormalization
  43. 43.GoogLeNet_v3v4
  44. 44.ResNet
  45. 45.ResNeXt
  46. 46.CNN设计准则
  47. 47.图像检索与推土机距离
  48. 48.基于颜色相似性
  49. 49.基于形状相似性
  50. 50.基于纹理相似性
  51. 51.基于局部特征相似性
  52. 52.DL的二值哈希编码
  53. 53.高维空间中检索KDTree
  54. 54.高维空间中检索LSH
  55. 55.目标识别任务综述
  56. 56.RCNN
  57. 57.SPP-Net
  58. 58.Fast R-CNN
  59. 59.Faster R-CNN
  60. 60.R-CNN系列模型回顾
  61. 61.R-FCN的设计思路
  62. 62.R-FCN的实现
  63. 63.YOLOv1
  64. 64.YOLOv2_9000
  65. 65.YOLOv3
  66. 66.图像分割应用场景与数据集
  67. 67.上采样的实现方式
  68. 68.FCN网络架构的由来
  69. 69.FCN构建细节
  70. 70.DeepLabv1
  71. 71.CRF
  72. 72.DeepLabv2
  73. 73.DeepLabv3
  74. 74.特定的医学影像分割任务
  75. 75.U-Net
  76. 76.3D U-Net
  77. 77.V-Net
  78. 78.DenseNet
  79. 79.病理切片分析任务及数据集
  80. 80.病理切片分析
  81. 81.图说任务及其传统处理方法
  82. 82.深度语言模型与RNN
  83. 83.LSTM及其变种
  84. 84.NIC模型
  85. 85.SAT模型
  86. 86.图说的性能指标
  87. 87.判别模型与生成模型
  88. 88.KL散度与JS散度
  89. 89.VAE
  90. 90.GAN的基本原理
  91. 91.DCGAN与CGAN
  92. 92.Wasserstein GAN
  93. 93.SRGAN

GAN的基本原理

小象实战讲义 · 基于深度学习的计算机视觉

在上一节我们学习了变分自编码器(VAE),它是一种经典的生成模型。本节我们将介绍生成对抗网络(GAN)——图灵奖得主 Yann LeCun 曾把它称为近十年来最有意思的想法之一。GAN由Ian Goodfellow在2014年提出(他也是《深度学习》一书的第一作者,该书常被称为“花书”),通过让两个神经网络相互对抗、共同进化,最终让生成器能够创造出足以“以假乱真”的数据。学完本节,你将理解GAN的核心思想、训练机制以及其面临的挑战。

💡 核心导读

  • GAN是什么:由生成器(Generator)和判别器(Discriminator)组成的对抗性生成模型,目标是让生成器学会从随机噪声中生成逼真的数据。
  • 对抗训练机制:理解“警察与伪币制造者”的比喻,以及生成器如何在不“见过”真实数据的情况下,仅凭判别器的反馈进行进化。
  • 目标函数与优化:掌握GAN的Minimax博弈目标函数,以及生成器和判别器交替优化的训练过程。
  • GAN的挑战:了解原始GAN在训练中面临的困难,如训练难以收敛、模式崩溃等问题。

从VAE到GAN:生成思想的演进

在上一节介绍的变分自编码器(VAE)中,模型先把输入数据 X 编码成潜在变量 z,再解码得到重构结果 X_hat,训练目标是让 X_hat 尽可能接近原始输入 X。其核心在于对潜在变量 z 施加一个先验分布(如均值 0、标准差 1 的标准正态分布),从而让整个潜在空间变得连续、平滑,便于采样生成新数据。

生成对抗网络(GAN)的出发点与VAE不同。2014 年 Goodfellow 等人提出 GAN,初衷是构建一种无需显式写出似然函数、而是通过两个网络的对抗博弈来估计数据分布的生成模型框架——让网络自己“造”出与原始数据有所区别、却又足够逼真、以至于难以被识别为“假货”的新样本。(用生成样本来扩充训练集,是这一框架后来常见的用途之一,而非原论文的出发点。)

GAN巧妙地将这个过程设计成一场两个神经网络之间的“博弈”:

  • 生成器(Generator, G):像一个“伪币制造者”,目标是接收一个随机噪声(如高斯白噪声),并生成一张足以“以假乱真”的图片。
  • 判别器(Discriminator, D):像一个“警察”,目标是准确判断一张图片是来自真实数据集(真币)还是生成器(伪币)。

GAN最精妙之处在于:生成器从未见过真实的图片。它仅凭判别器给出的“这个假货被识破了”或“这个假货骗过我了”这样的反馈信号,来不断调整自己,最终闭门造车地造出逼真的图片。

GAN的基本架构

一个标准的GAN由两个可微分的深度神经网络构成,通常可以是全连接网络或卷积神经网络(CNN)。

生成器网络(Generator Network)

  • 职责:负责生成伪造的样本数据。
  • 输入:一个从先验分布(如标准正态分布)中采样得到的高斯白噪声向量 z。
  • 输出:一个样本数据向量 x = G(z),在图像任务中就是一张生成的图片。
  • 关键特性:必须是一个可微分的函数,以便通过梯度下降进行训练。对于图像生成,常采用深度卷积网络(如DCGAN)作为生成器。

判别器网络(Discriminator Network)

  • 职责:负责检测输入的样本数据是真实的还是生成的。
  • 输入:一张图片,可能是真实的 x(来自数据集),也可能是生成的 G(z)。
  • 输出:一个标量概率值 D(x),表示判别器认为输入图片是真实图片的概率。通常,对于真实图片,我们希望输出接近1;对于生成图片,希望输出接近0。
  • 关键特性:同样必须可微分,通常也采用深度神经网络。

下图清晰地展示了GAN的数据流:

高斯白噪声 z
    ↓
生成器 G
    ↓
生成的假图片 G(z) -----------\
                                ↓
                            判别器 D ---> 输出概率 D(·)
                                ↑
真实图片 x (来自数据集) --------/

对抗训练:一场迭代的“军备竞赛”

GAN的训练过程不是一步到位的,而是一个生成器和判别器交替训练、共同进化的迭代过程。我们可以通过“代际”的比喻来理解:

  1. 第一代:

    • 生成器G₁:权重随机初始化,输入噪声z,输出一些完全不像样的、类似噪声的图片 G₁(z)。
    • 判别器D₁:任务很简单。我们将真实的图片x(标签为1)和G₁生成的糟糕图片G₁(z)(标签为0)一起喂给D₁进行训练。由于两者差异巨大,D₁能轻松学会区分。
  2. 第二代:

    • 生成器G₂:关键步骤。G₂的目标是“骗过”已经训练好的第一代判别器D₁。如何训练?我们将G₂和冻结了权重的D₁连接起来,形成一个新网络。输入噪声z,希望这个串联网络的最终输出 D₁(G₂(z)) 尽可能接近1(即让D₁认为G₂生成的是真图)。通过反向传播,只更新G₂的权重,G₂就学会了生成更能迷惑D₁的图片。
    • 判别器D₂:在D₁的基础上继续训练,用真实的图片x(标签1)和G₂生成的改进版假图G₂(z)(标签0),使D₂能重新准确区分。
  3. 迭代: 重复上述过程:训练G₃去骗D₂,训练D₃去区分G₃的假图和真图……如此反复。

最终,理想情况下,双方会达到一个纳什均衡点:生成器生成的图片分布 p_g 与真实数据分布 p_data 完全一致。此时,判别器对于任何输入,判断其为真的概率都是50%,相当于完全“瞎猜”,因为它再也无法区分真假。

目标函数:Minimax博弈的数学表达

GAN的训练目标可以用一个价值函数(Value Function)来形式化,这是一个极小极大博弈(Minimax Game):

min⁡Gmax⁡DV(D,G)=Ex∼pdata(x)[log⁡D(x)]+Ez∼pz(z)[log⁡(1−D(G(z)))]\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)))]

让我们拆解这个公式:

  • x ~ p_data(x):表示从真实数据分布中采样图片x。
  • z ~ p_z(z):表示从先验噪声分布(如高斯分布)中采样噪声z。
  • D(x):判别器认为真实图片x为真的概率,理想情况是1。
  • G(z):生成器根据噪声z生成的假图片。
  • D(G(z)):判别器认为生成图片G(z)为真的概率。判别器希望它接近0,生成器希望它接近1。
  • log D(x):当D(x)接近1时,此项接近0(因为log1=0)。
  • log(1 - D(G(z))):当D(G(z))接近0时,此项也接近0(因为log1=0)。

判别器D的目标(内层max):最大化V(D,G)。

  • 它希望D(x)尽可能大(接近1),使第一项log D(x)变大。
  • 同时希望D(G(z))尽可能小(接近0):log(1 - D(G(z)))在D(G(z))=0时取到最大值0,D(G(z))越大这一项越负,所以D要极力把它压到0附近。
  • 当D完美判别时,D(x)=1, D(G(z))=0,则V(D,G) = log1 + log1 = 0。这是D能达到的最大值。

生成器G的目标(外层min):最小化V(D,G)。

  • 它无法影响第一项(与真实数据x无关),只能影响第二项。
  • 它希望D(G(z))尽可能大(接近1),这样log(1 - D(G(z)))就会变成一个很大的负数(因为log(一个接近0的正数)趋向于负无穷),从而拉低整个V(D,G)的值。
  • 当G完美生成、使D(G(z))→1时,第二项log(1 - D(G(z))) → -∞。这是G在判别器固定时能取到的最小值(理论下界)。

需要区分“单方最优”与“双方均衡”:上面D(x)=1, D(G(z))=0和D(G(z))=1都是固定对手时的单方最优。当双方同时达到最优、即p_g = p_data时,最优判别器对任何输入都输出D(x)=0.5,此时V(D,G) = log0.5 + log0.5 = -log4 ≈ -1.386,这才是博弈的均衡值。

这个均衡点既不是普通的极小值也不是极大值,而是价值函数的鞍点(Saddle Point):沿判别器参数方向它是极大,沿生成器参数方向它是极小,在该点梯度为零。一般神经网络的训练要尽量避开鞍点,GAN却要主动找到并停在这个鞍点上。理论上可以证明,在最优判别器下最小化V等价于最小化p_data与p_g之间的Jensen-Shannon散度(JSD),这一点在后续讲WGAN时会展开。

因此,训练过程就是交替执行以下两步:

D-step(判别器更新,k通常取1):

  1. 从噪声分布采样m个噪声 {z⁽¹⁾, ..., z⁽ᵐ⁾}。
  2. 从真实数据分布采样m个样本 {x⁽¹⁾, ..., x⁽ᵐ⁾}。
  3. 通过梯度上升更新判别器参数,以最大化目标函数: ∇θd1m∑i=1m[log⁡D(x(i))+log⁡(1−D(G(z(i))))]\nabla_{\theta_d} \frac{1}{m} \sum_{i=1}^{m} \left[ \log D(x^{(i)}) + \log(1 - D(G(z^{(i)}))) \right]

G-step(生成器更新):

  1. 从噪声分布采样m个噪声 {z⁽¹⁾, ..., z⁽ᵐ⁾}。
  2. 通过梯度下降更新生成器参数,以最小化目标函数: ∇θg1m∑i=1mlog⁡(1−D(G(z(i))))\nabla_{\theta_g} \frac{1}{m} \sum_{i=1}^{m} \log(1 - D(G(z^{(i)}))) 在实际实现中,常改用非饱和目标——最大化 Ez∼pz(z)[log⁡D(G(z))]\mathbb{E}_{z \sim p_z(z)}[\log D(G(z))] 。两者最优解相同,但梯度动态不同:训练初期 D 很容易把生成样本判假,后者的梯度更强,因此并非严格等价。

下图直观展示了训练过程中数据分布的变化:

初始状态:
真实分布 p_data (黑线) 与生成分布 p_g (绿线) 相差甚远。
判别器D (蓝线) 能清晰地将两者分开(高概率判真,低概率判假)。

训练中:
生成器G在判别器D的反馈下不断调整,p_g 逐渐向 p_data 靠拢。
判别器D的判别边界逐渐变得模糊,准确率下降。

理想均衡:
p_g 与 p_data 完全重合。
判别器D对于所有输入,输出概率均为0.5(完全随机猜测)。

GAN的挑战与问题

尽管思想巧妙,但原始GAN在训练中面临着诸多挑战:

  1. 训练困难,难以收敛:

    • 需要精心平衡生成器和判别器的训练强度。如果判别器训练得太强(太快达到最优),生成器的梯度会消失或变得不稳定,导致无法继续学习。
    • 没有一个像传统损失函数那样单调下降的指标来监控训练进程,何时停止训练多凭经验。
  2. 模式崩溃(Mode Collapse,也常译作“模型崩溃”):

    • 典型诱因是判别器训练得过快、过强(很快接近最优),生成器被压制得几乎没有可用的梯度,只能退而求其次:找到判别器最认可的那几个点,反复输出。
    • 于是生成器不再覆盖整个真实数据分布,只生成极少数几类样本。例如生成人脸时,只输出同一张脸或寥寥几张脸,输出的多样性极低。
    • 需要强调:GAN的目标是学到与真实数据同分布的新样本(看上去是人脸,但是各不相同的人脸),而不是复制某张真实图片;模式崩溃恰恰违背了这一点。
  3. 不适用于离散输出:

    • GAN的训练依赖于通过判别器向生成器传递可微分的梯度。如果生成器的输出是离散的(如自然语言文本中的one-hot编码词),梯度将无法有效回传,导致训练失败。这使得原始GAN在文本生成等任务上应用困难。

📝 动手练一练

  1. 概念辨析:在GAN的“警察与伪币制造者”比喻中,为什么说生成器“从未见过真币”是这个模型精妙的关键?如果让生成器也能看到真实数据,训练过程会变成什么样?
👉 点击查看参考答案

关键点:生成器不见真实数据,迫使它只能通过判别器这个“中介”来理解什么是“真实”。这创造了一个纯粹的对抗环境。生成器的唯一目标就是让判别器犯错,而不是去直接模仿某一张具体图片。这有助于学习到真实数据的分布,而不是记忆单个样本。

如果生成器能见真实数据:训练可能会退化为一种简单的模仿或重建任务,生成器可能会倾向于直接复制或过度拟合某些真实样本,从而失去创造多样新样本的能力,也更容易导致模式崩溃。对抗博弈的本质会被削弱。

  1. 目标函数理解:假设在一个训练步骤中,对于一批生成图片,判别器给出的平均概率 D(G(z)) = 0.9。请计算此时生成器目标函数 E[log(1 - D(G(z)))] 这一项的近似值,并说明这个值对生成器训练意味着什么?
👉 点击查看参考答案

计算:log(1 - 0.9) = log(0.1) ≈ -2.3026。

含义:这个值是一个较大的负数(远离负无穷)。对于生成器来说,其目标是最小化这个值(即让它变得更负,趋向负无穷)。当前值-2.3表明生成器做得“还不错”,因为判别器以高达0.9的概率误判生成为真。但生成器仍需继续优化,目标是让 D(G(z)) 尽量接近1,使得 log(1 - D(G(z))) 趋向负无穷,从而最小化目标函数(注意这是判别器固定时的单方最优;双方均衡时 D(G(z)) 只能到0.5)。不过在实际中,我们常用 -E[log(D(G(z)))] 作为替代损失,此时该值为 -log(0.9) ≈ 0.1054,是一个需要被推向0的较小正数。

本章小结

本节我们深入探讨了生成对抗网络(GAN)的基本原理。GAN通过构建生成器与判别器这两个相互对抗的神经网络,以一种新颖的对抗博弈方式学习数据分布。我们理解了其Minimax目标函数的数学内涵,以及交替训练的动态过程。同时,我们也认识到原始GAN在训练稳定性和模式崩溃等方面的固有挑战,这些挑战也催生了DCGAN(2015)、WGAN(2017)、StyleGAN(2019)等一系列重要的改进工作。站在今天回看,GAN是2014年提出的开创性工作,图像生成的主流已转向扩散模型与多模态大模型,但它的“对抗训练”思想仍被广泛沿用。

📋 行动清单

  • 复述核心思想:尝试用自己的话向他人解释GAN中生成器和判别器是如何通过对抗实现共同进化的。
  • 推导目标函数:在纸上写出GAN的Minimax目标函数,并分别说明生成器和判别器在优化时各自关注哪一部分,以及理想的优化终点是什么。
  • 思考改进方向:基于GAN的“训练困难”和“模式崩溃”问题,思考一下,如果让你来设计,可能会从哪些角度对原始GAN进行改进?(提示:损失函数、网络结构、训练策略)

2026视角

自2014年GAN被提出以来,生成式AI领域经历了爆炸式的发展。站在2026年的视角回看,GAN依然是深度学习史上最具影响力的思想之一,但其技术生态位已发生显著变化。

  1. 扩散模型成为主流:当前,基于扩散过程(Diffusion Models)的生成模型(如DALL-E 2/3、Stable Diffusion、Imagen)已在图像生成质量、多样性和稳定性上全面超越传统GAN,成为文本到图像、图像编辑等领域的绝对主流。它们从一个随机噪声出发,通过逐步去噪的迭代采样过程生成图像,避免了GAN训练中的模式崩溃和不稳定问题。

  2. GAN的特定优势领域:尽管如此,GAN并未被淘汰,而是在特定场景中凭借其实时性和高效性坚守阵地。例如,在实时图像超分辨率、实时视频增强、风格迁移等对推理速度要求极高的任务中,经过良好训练的GAN模型(如ESRGAN、StyleGAN系列)因其单次前向传播即可生成结果,相比需要多步迭代的扩散模型,仍有不可替代的优势。

  3. 技术与思想遗产:GAN最重要的遗产是其“对抗训练”的思想。这一思想被广泛嵌入到其他模型中,用于提升生成质量或实现特定功能,例如在扩散模型中用判别器来增强细节(对抗性损失),或用于训练更鲁棒的分类器。此外,StyleGAN等工作的“隐空间解耦”研究,对理解深度生成模型的表征学习产生了深远影响。

  4. 统一于多模态大模型:如今的趋势是把生成能力整合进更大的多模态大模型——图像生成不再是一个独立的GAN/VAE/扩散模型,而是与视觉理解、推理一起出现在统一接口中(如GPT-4o、Gemini的图像生成)。生成任务不再是孤立的存在,而是与视觉理解、推理等能力紧密结合。

因此,学习GAN的原理,不仅是掌握一项重要的历史技术,更是理解现代生成式AI核心思想演进的基石。其对抗博弈的哲学,将持续启发新的算法设计。

—— 小象教研组