菜单

生成对抗网络

相关源文件

目的与范围

本文档介绍了 labml_nn 仓库中生成对抗网络(GAN)的实现。GAN 是一类深度学习框架,其中两个神经网络——生成器和判别器——在一个最小最大博弈中相互竞争。本页面提供了 GAN 架构的技术概述,以及仓库中各种 GAN 实现,包括原始 GAN、DCGAN、Cycle GAN、Wasserstein GAN、带梯度惩罚的 Wasserstein GAN 和 StyleGAN 2。

有关扩散模型等其他生成模型的信息,请参阅扩散模型,有关 SketchRNN 的信息,请参阅SketchRNN

GAN 架构概述

基本 GAN 架构

来源: docs/gan/index.html

训练过程

来源: docs/gan/index.html

仓库中的 GAN 实现

该仓库包含几种关键 GAN 变体的实现,每种变体都解决了原始 GAN 公式中的不同挑战

来源: docs/gan/index.html

GAN 变体

原始 GAN

原始 GAN 实现采用对抗训练范式,其中生成器和判别器同时进行训练。生成器试图生成逼真的样本以欺骗判别器,而判别器则试图区分真实样本和生成样本。

主要功能

  • 二元交叉熵损失
  • 两个网络均采用 MLP 架构
  • 最小最大优化目标

DCGAN(深度卷积 GAN)

DCGAN 通过为生成器和判别器使用深度卷积神经网络来扩展原始 GAN,使其更适用于图像生成任务。

主要功能

  • 卷积架构
  • 批归一化
  • Leaky ReLU 激活函数
  • 稳定训练的架构指南

Cycle GAN

Cycle GAN 实现了跨域的非配对图像到图像转换(例如,马到斑马),无需配对训练样本。

主要功能

  • 两个生成器-判别器对(G_A→B, D_B 和 G_B→A, D_A)
  • 循环一致性损失
  • 恒等映射损失
  • 每个生成器的对抗损失

Wasserstein GAN

Wasserstein GAN (WGAN) 通过使用 Wasserstein 距离(地球移动距离)而非原始 GAN 中使用的 Jensen-Shannon 散度来提高训练稳定性。

主要功能

  • Wasserstein 损失函数
  • 用于 Lipschitz 约束的权重裁剪
  • 评论家(判别器)输出实数值,而非概率
  • 更稳定的训练动态

带梯度惩罚的 Wasserstein GAN

带梯度惩罚的 WGAN (WGAN-GP) 通过用梯度惩罚代替权重裁剪来进一步改进 WGAN,以强制执行 Lipschitz 约束。

主要功能

  • 梯度惩罚项
  • 改进的训练稳定性
  • 评论家中无批归一化
  • 更好的样本质量

StyleGAN 2

StyleGAN 2 是一种先进的 GAN 架构,用于生成具有可控风格的高质量图像。

主要功能

  • 基于风格的生成器架构
  • 渐进式增长
  • 路径长度正则化
  • 自适应实例归一化 (AdaIN)
  • 从潜在空间到风格空间的映射网络

代码结构

来源: docs/gan/index.html

各实现中的通用组件

仓库中的所有 GAN 实现都共享某些通用元素

组件目的常见实现
生成器 (Generator)从噪声中创建样本带上采样层的神经网络
判别器区分真实与伪造带下采样层的神经网络
损失函数指导对抗训练交叉熵或 Wasserstein 距离
训练循环交替训练步骤先 D,后 G,使用不同的损失函数
样本可视化监控生成质量训练期间生成的样本网格

实现细节

每个 GAN 实现都对标准架构有特定的修改

原始 GAN

  • 生成器和判别器使用简单的 MLP
  • 实现原始的最小最大损失函数
  • 基本实现,不含稳定化技术

DCGAN

  • 用卷积层代替 MLP
  • 使用步幅卷积进行下采样
  • 使用转置卷积进行上采样
  • 在两个网络中实现批归一化

Cycle GAN

  • 实现两个域转换器(G_A→B 和 G_B→A)
  • 使用循环一致性损失强制执行双射映射
  • 包含恒等损失以保留颜色和内容
  • 专门用于非配对图像域转换

Wasserstein GAN

  • 修改判别器为评论家(无 Sigmoid)
  • 实现权重裁剪以强制执行 Lipschitz 约束
  • 使用不同的更新调度(每个生成器更新的评论家更新次数更多)
  • 在训练期间跟踪 Wasserstein 估计

带梯度惩罚的 WGAN

  • 在评论家损失中添加梯度惩罚项
  • 从评论家中移除批归一化
  • 实现真实样本和生成样本之间的插值
  • 计算惩罚的梯度范数

StyleGAN 2

  • 实现从 z 空间到 w 空间的映射网络
  • 使用 AdaIN 进行风格调制
  • 实现多层次的风格注入
  • 包括路径长度正则化和 R1 正则化

仓库中的 GAN 可以与其他模块结合使用

来源: docs/gan/index.html

总结

本仓库中的 GAN 实现提供了来自研究文献的关键 GAN 架构的带注释、可读的实现。这些实现可作为教育资源,帮助理解 GAN 的工作原理以及它们如何随时间演变,以解决训练稳定性、样本质量和特定应用(如非配对图像转换)中的挑战。