共计 1411 个字符,预计需要花费 4 分钟才能阅读完成。
GAN 的革命性意义
生成对抗网络(GAN)彻底改变了图像生成领域,它通过两个神经网络的对抗训练,能够生成以假乱真的图片。不同于传统方法依赖手工特征,GAN 直接从数据中学习分布规律。最重要的是,它开启了无监督生成的新范式,为 AI 创造力提供了无限可能。

DCGAN 架构设计详解
DCGAN(Deep Convolutional GAN)是 GAN 的经典改进版本,特别适合图像生成任务。其核心思想是用卷积神经网络代替原始 GAN 中的全连接层。
生成器结构
生成器接收随机噪声向量(通常 100 维),通过反卷积层逐步上采样:
- 全连接层将噪声映射到 4x4x1024 特征图
- 4 层反卷积,每层后接 BatchNorm 和 ReLU
- 最终层使用 tanh 激活输出 64x64x3 的 RGB 图像
判别器结构
判别器是标准的卷积分类网络:
- 输入 64x64x3 的图片
- 4 层卷积,每层后接 LeakyReLU(0.2) 和 Dropout
- 最终通过 sigmoid 输出真假概率
关键超参数
- 学习率:0.0002(Adam 优化器的经典设置)
- 批量大小:128(平衡训练速度和显存占用)
- 潜在空间维度:100(足够表达复杂特征)
PyTorch 完整实现
# 数据预处理
transform = transforms.Compose([transforms.Resize(64),
transforms.CenterCrop(64),
transforms.ToTensor(),
transforms.Normalize((0.5,0.5,0.5), (0.5,0.5,0.5))
])
dataset = CelebA(root='data', transform=transform)
dataloader = DataLoader(dataset, batch_size=128, shuffle=True)
# 生成器定义
class Generator(nn.Module):
def __init__(self):
super().__init__()
self.main = nn.Sequential(
# 反卷积层 1:输入 100 维噪声
nn.ConvTranspose2d(100, 512, 4, 1, 0, bias=False),
nn.BatchNorm2d(512),
nn.ReLU(True),
# 逐步上采样至 64x64
... # 完整结构见 Colab notebook
)
训练效果评估
FID 分数计算
Fréchet Inception Distance 通过比较生成图像与真实图像在 Inceptionv3 特征空间的分布距离:
- 用预训练 Inceptionv3 提取 2048 维特征
- 计算两个特征分布的均值和协方差
- 使用 Wasserstein- 2 距离公式得出分数
生成样本对比
- 初期:噪声斑点(epoch 0-10)
- 中期:模糊人脸轮廓(epoch 50)
- 后期:清晰五官细节(epoch 200)
避坑指南
模式崩溃解决方案
- 添加 mini-batch 判别
- 使用 Wasserstein GAN 损失
- 适度增加噪声输入维度
学习率设置
- 初始值建议 0.0001-0.0005
- 判别器学习率可略高于生成器
- 使用学习率衰减策略
显存优化
- 降低批量大小
- 使用梯度累积
- 尝试混合精度训练
思考题
- 如何将生成分辨率从 64×64 提升到 256×256 而不出现模式崩溃?
- 能否通过修改潜在空间实现控制生成人脸的特定属性(如发型、笑容)?
完整代码和训练日志已分享在 Colab:https://colab.research.google.com/drive/xxxx
正文完
