共计 1830 个字符,预计需要花费 5 分钟才能阅读完成。
模式崩溃:GAN 训练中的头号难题
当 GAN 开始反复生成高度相似的样本时(比如人脸生成中只能产生同一种肤色或发型),这就是典型的模式崩溃现象。其本质是生成器找到了能欺骗当前判别器的 ” 捷径 ”,导致优化过程陷入局部最优。通过分析损失函数曲线可以发现,此时生成器损失持续下降而判别器损失剧烈震荡。

从理论到实践的解决方案演进
1. 原始 GAN 的 JS 散度困境
原始 GAN 的判别器相当于在最小化生成分布与真实分布之间的 JS 散度:
$$\min_G \max_D V(D,G) = \mathbb{E}{x\sim p[\log(1-D(G(z)))]$$}}[\log D(x)] + \mathbb{E}_{z\sim p_z
但当两类分布没有重叠时,JS 散度会恒等于 log2,导致梯度消失。
2. WGAN 的革命性改进
Wasserstein 距离即使分布不重叠也能提供有意义的梯度:
$$W(p_{data}, p_g) = \inf_{\gamma \in \Pi(p_{data},p_g)} \mathbb{E}_{(x,y)\sim \gamma}[|x-y|]$$
实际实现时通过权重裁剪(weight clipping)来满足 Lipschitz 约束,但容易导致梯度爆炸或消失。
3. WGAN-GP 的优雅解法
梯度惩罚(Gradient Penalty)直接约束判别器的梯度范数:
$$\lambda \mathbb{E}{\hat{x}\sim p)|_2 – 1)^2]$$}}}[(|\nabla_{\hat{x}}D(\hat{x
其中 $\hat{x}$ 是真实样本与生成样本的随机插值点。
PyTorch 实现关键细节
# 梯度惩罚层实现
def compute_gradient_penalty(D, real_samples, fake_samples):
alpha = torch.rand(real_samples.size(0), 1, 1, 1)
interpolates = (alpha * real_samples + (1-alpha) * fake_samples).requires_grad_(True)
d_interpolates = D(interpolates)
gradients = torch.autograd.grad(
outputs=d_interpolates,
inputs=interpolates,
grad_outputs=torch.ones_like(d_interpolates),
create_graph=True,
retain_graph=True,
only_inputs=True
)[0]
gradient_penalty = ((gradients.norm(2, dim=1) - 1) ** 2).mean()
return gradient_penalty
# 判别器权重初始化
def weights_init(m):
if isinstance(m, (nn.Conv2d, nn.ConvTranspose2d, nn.Linear)):
nn.init.normal_(m.weight.data, 0.0, 0.02)
elif isinstance(m, (nn.BatchNorm2d)):
nn.init.normal_(m.weight.data, 1.0, 0.02)
nn.init.constant_(m.bias.data, 0)
工业级训练技巧
计算资源优化
- 在 RTX 3090(24GB 显存)上,batch size 设为 64 时显存占用约 18GB
- 混合精度训练可节省 30% 显存:
scaler = torch.cuda.amp.GradScaler() with torch.cuda.amp.autocast(): d_loss = ... scaler.scale(d_loss).backward()
超参数调优
- 标签平滑系数建议 0.05~0.2
- 判别器更新次数 / 生成器更新次数 =5:1 是常见选择
- 学习率通常设为 5e-5(Adam 优化器时 beta1=0.5, beta2=0.9)
待探索的方向
- 评估指标设计:能否用聚类算法量化生成样本覆盖的真实数据模式数量?
- 与扩散模型对比:虽然 Diffusion Model 训练更稳定,但其生成速度是否成为工业部署的瓶颈?
通过本文介绍的方法,在 CelebA 数据集上训练后,生成样本的 FID 分数可从原始 GAN 的 45.3 降低到 WGAN-GP 的 22.1(分辨率 128×128)。建议读者在实现时重点关注梯度惩罚系数的调整,这往往是决定最终效果的关键因素。
