生成对抗网络(GAN)自2014年由Goodfellow等人提出以来,彻底改变了计算机视觉中的图像生成领域。你或许很难相信,那些令人惊叹、栩栩如生的图像,竟然完全是由机器生成的。事实上,传统上生成任务被认为几乎不可能,但GAN的力量让学界震惊——因为我们无法像分类任务那样直接比较生成的图像与“正确答案”。本文将从GAN背后的简单直觉讲起,逐步带你通过PyTorch实现一个卷积GAN,并完成完整的训练过程。
GAN 核心概念
GAN 背后的直觉
传统分类方法中,网络预测可以直接与事实的正确答案比较。但生成图像的“正确性”很难定义和衡量。Goodfellow等人在原创论文《生成对抗网络》中提出了一个巧妙的想法:使用一个经过训练的分类器来区分生成的图像和实际图像。如果存在这样的分类器,我们就可以创建并训练一个生成器网络,直到它输出的图像能完全骗过分类器。

图1:GAN管道
GAN就是这一过程的产物:它包含一个生成器(根据给定数据集生成图像)和一个判别器(分类器,区分图像是真实还是生成)。GAN的详细管道见图1。
损失函数
生成器和判别器的优化目标完全相反:生成器希望尽可能创造出真实的东西,而判别器则希望区分生成的材料。为了说明这一点,我们定义:
- D(x) = 判别器的输出,表示x是真实图像的概率
- G(z) = 生成器的输出(基于随机噪声z)
判别器类似二元分类器,其目标是最大化函数(本质上是二元交叉熵损失,没有开头的负号)。生成器的目标是使判别器做出正确判断的机会最小化。最终损失函数是两个分类器之间的极小极大博弈,具体公式如下:
理论上,这会收敛到判别器预测所有事件的概率为0.5。但在实践中,极小极大博弈往往导致网络无法收敛,因此仔细调整训练过程非常重要。像学习率这样的超参数对GAN训练尤其关键——一个微小的变化可能导致GAN输出与输入噪声无关。
