1. GAN的本质与核心思想
生成对抗网络(GAN)之所以能在短短几年内成为深度学习领域最具革命性的技术之一,关键在于它颠覆了传统生成模型的范式。我第一次接触GAN是在2016年,当时被它生成的假人脸图像震撼得说不出话——那些根本不存在的人脸,连皮肤纹理和发丝都栩栩如生。
1.1 对抗训练:一场精妙的博弈
GAN的核心在于"对抗"二字。想象一个艺术品伪造者(生成器)和一个鉴定专家(判别器)之间的较量:
- 伪造者刚开始技术拙劣,制作的赝品很容易被识破
- 鉴定专家通过观察真迹和赝品,不断提高鉴别能力
- 伪造者被迫改进技术,制作更逼真的赝品
- 这个过程循环往复,直到赝品达到以假乱真的程度
在技术实现上,这个博弈过程通过两个神经网络的对抗来实现:
python复制# 生成器网络结构示例(PyTorch)
class Generator(nn.Module):
def __init__(self, latent_dim=100):
super().__init__()
self.main = nn.Sequential(
nn.Linear(latent_dim, 256),
nn.LeakyReLU(0.2),
nn.Linear(256, 512),
nn.LeakyReLU(0.2),
nn.Linear(512, 784), # MNIST图像28x28=784像素
nn.Tanh()
)
def forward(self, z):
return self.main(z).view(-1,1,28,28)
1.2 数学本质:最小化分布差异
从数学角度看,GAN实际上是在最小化真实数据分布和生成数据分布之间的差异。这个差异通过JS散度(Jensen-Shannon divergence)来衡量:
min_G max_D V(D,G) = 𝔼_{x∼p_data}[logD(x)] + 𝔼_{z∼p_z}[log(1-D(G(z)))]
其中:
- p_data是真实数据分布
- p_z是噪声分布(通常是高斯分布)
- G(z)是生成器生成的样本
- D(x)是判别器判断x来自真实数据的概率
这个目标函数看似简单,却蕴含深刻洞见:当判别器达到最优时,生成器的优化目标等价于最小化真实分布与生成分布的JS散度。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. GAN的完整实现解析
2.1 数据准备与预处理
以MNIST手写数字数据集为例,我们需要进行适当的预处理:
python复制transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.5,), (0.5,)) # 将像素值归一化到[-1,1]
])
trainset = torchvision.datasets.MNIST(root='./data', train=True,
download=Tr
