菜单

生成对抗网络 (GAN)

相关源文件

目的与范围

本文档提供了生成对抗网络(GANs)的技术概述,涵盖了它们的架构、工作原理、训练方法、变体和应用。GANs 是一类通过对抗过程进行生成式建模的深度学习框架。本页面重点介绍 GANs 的基本概念和技术方面,作为网络架构系列的一部分,补充了卷积神经网络循环神经网络的介绍。

来源: README.md

基本架构

GANs 由两个神经网络组成,它们在一个零和博弈框架中相互竞争

生成器网络:将随机噪声转换为类似于训练数据的合成数据样本。

判别器网络:尝试区分来自训练数据的真实样本和由生成器产生的虚假样本。

GAN 的基本组成部分可以用数学方式表示为

组件数学表示目的
生成器 (Generator)G(z; θg)将噪声向量映射到数据空间
判别器D(x; θd)输出 x 来自真实数据的概率
损失函数minG maxD V(D, G) = Ex∼pdata[log D(x)] + Ez∼pz[log(1 - D(G(z)))]最小最大目标函数

来源: README.md

训练过程

GAN 训练涉及一个对抗过程,其中生成器和判别器相互竞争

训练过程可以分解为以下技术步骤

  1. 判别器训练:

    • 从噪声先验 p_g(z) 中采样 m 个噪声样本 {z^(1), ..., z^(m)} 的小批量
    • 从数据分布 p_data(x) 中采样 m 个实例 {x^(1), ..., x^(m)} 的小批量
    • 通过上升其随机梯度来更新判别器:∇_θd [1/m Σ_i=1^m log D(x^(i)) + 1/m Σ_i=1^m log(1 - D(G(z^(i))))]
  2. 生成器训练:

    • 从噪声先验 p_g(z) 中采样 m 个噪声样本 {z^(1), ..., z^(m)} 的小批量

    • 通过下降其随机梯度来更新生成器:∇_θg [1/m Σ_i=1^m log(1 - D(G(z^(i))))]

      或者,为避免梯度饱和:∇_θg [1/m Σ_i=1^m -log(D(G(z^(i))))]

来源: README.md

常见的 GAN 变体

已经开发了多种 GAN 架构来解决特定的挑战或应用

GAN 变体关键创新主要应用
DCGAN具有架构约束的卷积架构图像生成
CGANG 和 D 的条件信息受控生成
WGANWasserstein 距离作为损失度量提高稳定性
CycleGAN非配对图像到图像转换域迁移
ACGAN判别器中的辅助分类器类别条件生成
StyleGAN基于风格的生成器,具有渐进式增长高质量图像合成
InfoGAN互信息最大化解耦表示
BEGANWasserstein 自编码器判别器平衡训练
LSGAN最小二乘损失函数稳定性改进

来源: README.md

GANs 的应用

GANs 已成功应用于众多领域

值得注意的应用实例包括

  1. 图像生成:从随机噪声创建逼真图像
  2. 图像到图像转换:将图像从一个域转换为另一个域(例如,草图到照片)
  3. 超分辨率:将低分辨率图像增强为更高分辨率
  4. 风格迁移:将艺术风格应用于照片
  5. 数据增强:为数据受限场景生成额外的训练样本
  6. 异常检测:识别异常值或异常样本
  7. 文本到图像合成:根据文本描述创建图像

来源: README.md

挑战与解决方案

GANs 在训练过程中面临一些技术挑战

模式崩溃

问题:生成器产生有限种类的样本,未能捕获完整的数据分布。

解决方案

  • 小批量判别
  • 特征匹配
  • 展开式 GAN
  • Wasserstein 距离(WGAN)

训练不稳定

问题:训练过程中出现振荡和不收敛。

解决方案

  • 谱归一化
  • 梯度惩罚
  • 双时间尺度更新规则(TTUR)
  • 历史平均

评估指标

GAN 性能的定量评估

指标描述度量
Inception Score (IS)使用预训练分类器来衡量质量和多样性生成样本的质量和多样性
Fréchet Inception Distance (FID)真实样本和生成样本的特征表示之间的距离分布相似性
精确率和召回率分别评估保真度和多样性质量和多样性之间的权衡
感知路径长度衡量潜在空间的平滑度解耦质量

来源: README.md

实施最佳实践

实现有效 GANs 的技术考量

  1. 架构设计:

    • 在生成器中使用转置卷积
    • 在判别器中使用步幅卷积
    • 避免池化层(改为使用步幅卷积)
    • 在两个网络中都使用 BatchNorm(生成器输出和判别器输入除外)
    • 在判别器中使用 LeakyReLU 激活函数
  2. 训练稳定性:

    • 使用标签平滑(真实标签使用 0.9 而非 1.0)
    • 向判别器输入添加噪声
    • 使用软标签和噪声标签
    • 确保 G 和 D 的平衡训练(通常训练 D 比训练 G 更多)
    • 对判别器实现梯度裁剪或惩罚
  3. 超参数设置:

    • 学习率:0.0002(通常使用 Adam 优化器)
    • Beta1(用于 Adam):0.5 而非默认的 0.9
    • 批量大小:通常 64-128
    • 潜在维度:通常 100-200
    • LeakyReLU 的泄露因子:0.2
  4. 训练期间评估:

    • 对生成样本进行视觉检查
    • 监控两个网络的损失值
    • 定期跟踪 FID 或 Inception Score

来源: README.md

数学基础

GAN 框架对应于一个具有价值函数 V(G, D) 的最小最大双人博弈

$$\min_G \max_D V(D, G) = \mathbb{E}{x \sim p{data}(x)}[\log D(x)] + \mathbb{E}_{z \sim p_z(z)}[\log(1 - D(G(z)))]$$

其中

  • G 是生成器网络
  • D 是判别器网络
  • p_data 是真实数据分布
  • p_z 是噪声分布(通常是均匀分布或正态分布)
  • G(z) 是当给定噪声 z 时的生成器输出
  • D(x) 是判别器对 x 为真实的概率的估计

为了获得最佳训练,判别器旨在最大化 V(D, G),而生成器旨在最小化它。

来源: README.md