63、生成对抗网络(GAN):从基础到前沿架构

生成对抗网络(GAN):从基础到前沿架构

1. 训练后生成图像

训练完成后,我们可以从高斯分布中随机采样一些编码,然后将它们输入到生成器中以生成新的图像。以下是实现这一过程的代码:

codings = tf.random.normal(shape=[batch_size, codings_size])
generated_images = generator.predict(codings)

在训练的第一个周期结束时,生成的图像已经开始看起来像(带有很多噪声的)Fashion MNIST图像。然而,这些图像后续并没有明显的改善,甚至在某些周期中,GAN似乎会忘记之前学到的内容。这是因为训练GAN是一项具有挑战性的任务。

2. 训练GAN的困难

2.1 纳什均衡

在训练过程中,生成器和判别器在零和博弈中不断试图胜过对方。随着训练的推进,博弈可能会达到博弈论中所说的纳什均衡。以道路行驶为例,当所有人都靠左行驶或都靠右行驶时,就达到了纳什均衡,因为在其他参与者策略不变的情况下,任何一方改变策略都不会变得更好。

对于GAN而言,只有当生成器生成完美逼真的图像,判别器只能随机猜测(50%真实,50%虚假)时,才会达到纳什均衡。但遗憾的是,没有任何保证能确保达到这个均衡。

2.2 模式崩溃

模式崩溃是训练GAN时面临的最大困难之一。当生成器的输出逐渐变得缺乏多样性时,就会发生模式崩溃。例如,若生成器在生成逼真的鞋子图像方面表现出色,它会用更多的鞋子图像欺骗判别器,从而促使自己生成更多的鞋子图像,逐渐忘记如何生成其他类别的图像。同时,判别器也只能看到鞋子的虚假图像,进而忘记如何区分其他类别的虚假图像。最终,当判别器能够区分出虚假鞋子和真实鞋子时,生成器又会被迫转向另一个类别,如此循环,GAN可能在几个类别之间徘徊,无法在任何一个类别上表现出色。

2.3 参数不稳定

由于生成器和判别器不断相互对抗,它们的参数可能会出现振荡并变得不稳定。训练可能一开始进展顺利,但突然就会毫无缘由地偏离正轨。而且,GAN对超参数非常敏感,需要花费大量精力进行微调。例如,在编译模型时使用Nadam优化器可能会导致严重的模式崩溃,因此作者选择了RMSProp优化器。

2.4 解决方法

为了解决这些问题,研究人员提出了许多方法:
- 经验回放 :将生成器在每次迭代中生成的图像存储在回放缓冲区中(逐渐丢弃较旧的生成图像),并使用真实图像和从缓冲区中抽取的虚假图像来训练判别器,从而降低判别器对最新生成器输出过拟合的可能性。
- 小批量判别 :测量批量中图像的相似度,并将这一统计信息提供给判别器,使判别器能够轻松拒绝缺乏多样性的整批虚假图像,鼓励生成器生成更多样化的图像,减少模式崩溃的风险。

3. 深度卷积GAN(DCGAN)

3.1 发展历程

最初的GAN论文作者尝试使用卷积层,但仅能生成小图像。后来,许多研究人员尝试基于更深的卷积网络构建用于生成大图像的GAN,但训练过程非常不稳定。直到2015年末,Alec Radford等人经过多次不同架构和超参数的实验,最终成功构建了深度卷积GAN(DCGAN)。

3.2 构建稳定卷积GAN的指南

  • 替换池化层 :在判别器中使用步幅卷积,在生成器中使用转置卷积来替换池化层。
  • 批量归一化 :在生成器和判别器中使用批量归一化,但生成器的输出层和判别器的输入层除外。
  • 移除全连接隐藏层 :对于更深的架构,移除全连接隐藏层。
  • 激活函数 :生成器除输出层使用tanh激活函数外,其他层使用ReLU激活函数;判别器所有层使用Leaky ReLU激活函数。

3.3 DCGAN示例代码

以下是一个在Fashion MNIST数据集上表现良好的小型DCGAN示例:

codings_size = 100
generator = tf.keras.Sequential([
    tf.keras.layers.Dense(7 * 7 * 128),
    tf.keras.layers.Reshape([7, 7, 128]),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.Conv2DTranspose(64, kernel_size=5, strides=2,
                                    padding="same", activation="relu"),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.Conv2DTranspose(1, kernel_size=5, strides=2,
                                    padding="same", activation="tanh"),
])
discriminator = tf.keras.Sequential([
    tf.keras.layers.Conv2D(64, kernel_size=5, strides=2, padding="same",
                           activation=tf.keras.layers.LeakyReLU(0.2)),
    tf.keras.layers.Dropout(0.4),
    tf.keras.layers.Conv2D(128, kernel_size=5, strides=2, padding="same",
                           activation=tf.keras.layers.LeakyReLU(0.2)),
    tf.keras.layers.Dropout(0.4),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(1, activation="sigmoid")
])
gan = tf.keras.Sequential([generator, discriminator])

在训练GAN之前,需要将训练集重新缩放至与生成器输出相同的范围(-1到1),并添加通道维度:

X_train_dcgan = X_train.reshape(-1, 28, 28, 1) * 2. - 1. # reshape and rescale

经过50个周期的训练,生成器生成的图像虽然还不完美,但已经相当逼真。

3.4 DCGAN的局限性

当使用DCGAN生成非常大的图像时,常常会出现局部特征逼真但整体不一致的问题,例如衬衫的一只袖子比另一只长得多、耳环不同或眼睛看向相反方向等。

3.5 条件GAN(CGAN)

为了解决DCGAN的局限性,可以将每个图像的类别作为额外输入添加到生成器和判别器中,这样它们就能学习到每个类别的外观,从而可以控制生成器生成的图像类别,这就是条件GAN(CGAN)。

4. 渐进式增长GAN

4.1 基本思想

2018年,Nvidia的研究人员Tero Kerras等人提出了一种重要的技术:在训练开始时生成小图像,然后逐渐向生成器和判别器添加卷积层,以生成越来越大的图像(4×4、8×8、16×16等)。这种方法类似于堆叠自编码器的贪婪逐层训练。

4.2 具体实现

以生成器输出从4×4增长到8×8为例,会在现有的卷积层(“Conv 1”)上添加一个上采样层(使用最近邻滤波)以生成8×8的特征图。这些特征图会被输入到新的卷积层(“Conv 2”),然后再输入到新的输出卷积层。为了避免破坏“Conv 1”的训练权重,会逐渐引入两个新的卷积层,并逐渐减少原始输出层的影响。最终输出是新输出(权重为α)和原始输出(权重为1 - α)的加权和,α从0逐渐增加到1。在判别器中添加新的卷积层时,也会采用类似的渐入渐出技术。

4.3 其他技术

  • 小批量标准差层 :添加在判别器的末尾,计算输入中每个位置在所有通道和所有实例上的标准差,并将其平均得到一个单一值,然后在每个实例中添加一个额外的特征图并填充该值。这有助于判别器检测生成器输出的多样性,鼓励生成器生成更多样化的图像,减少模式崩溃的风险。
  • 均衡学习率 :使用均值为0、标准差为1的高斯分布初始化所有权重,但在运行时将权重按He初始化中的相同因子进行缩放。这样可以确保所有参数在训练过程中的动态范围相同,从而加快训练速度并提高稳定性。
  • 逐像素归一化层 :添加在生成器的每个卷积层之后,基于同一图像中相同位置但不同通道的所有激活对每个激活进行归一化。这可以避免由于生成器和判别器之间的过度竞争而导致的激活爆炸。

通过这些技术的结合,研究人员能够生成极其逼真的高分辨率人脸图像。但评估GAN生成图像的质量是一项具有挑战性的任务,虽然可以自动评估生成图像的多样性,但判断其质量是一个更加棘手和主观的任务。

5. StyleGAN

5.1 架构创新

2018年,同一Nvidia团队提出了流行的StyleGAN架构,进一步推动了高分辨率图像生成的技术发展。StyleGAN主要对生成器进行了改进,使用风格迁移技术确保生成的图像在每个尺度上都具有与训练图像相同的局部结构,从而大大提高了生成图像的质量。

5.2 生成器架构

StyleGAN的生成器由两个网络组成:
- 映射网络 :一个八层的多层感知机(MLP),将潜在表示z(即编码)映射到向量w。这个向量会经过多个仿射变换(即没有激活函数的全连接层),生成多个向量,这些向量控制着生成图像在不同层次上的风格,从细粒度的纹理(如头发颜色)到高层次的特征(如成人或儿童)。
- 合成网络 :负责生成图像。它有一个经过学习的常量输入,在训练过程中通过反向传播不断调整。合成网络通过多个卷积层和上采样层处理输入,但有两个独特之处。首先,在输入和所有卷积层的输出(在激活函数之前)添加噪声。其次,每个噪声层后面都跟着一个自适应实例归一化(AdaIN)层,该层先对每个特征图进行独立标准化,然后使用风格向量来确定每个特征图的尺度和偏移。

5.3 添加噪声的重要性

在图像中,有些部分是相当随机的,如雀斑或头发的具体位置。在早期的GAN中,这种随机性要么来自编码,要么由生成器自身产生伪随机噪声。如果来自编码,会浪费编码的表示能力;如果由生成器自身产生,噪声可能不够逼真,还会浪费生成器的权重。而在StyleGAN中,通过独立于编码添加额外的噪声输入,避免了这些问题。

综上所述,GAN领域仍然是一个非常活跃的研究领域,虽然已经取得了很大的进展,但GAN的动态特性仍未被完全理解。随着技术的不断发展,我们有理由相信未来会有更多创新的架构和方法出现,为图像生成领域带来更多惊喜。

6. 不同GAN架构的对比

架构名称 主要特点 优势 局限性
DCGAN 用步幅卷积和转置卷积替换池化层,使用批量归一化,特定的激活函数 能学习有意义的潜在表示,可进行语义插值 生成大图像时存在整体不一致问题
渐进式增长GAN 训练从生成小图像开始,逐渐添加卷积层 能生成高分辨率逼真图像,增加输出多样性,训练更稳定 架构和训练过程相对复杂
StyleGAN 生成器使用风格迁移技术,有映射网络和合成网络,添加噪声输入 生成图像质量高,解决随机部分生成问题 架构复杂,对计算资源要求高

7. GAN未来发展展望

7.1 技术改进方向

  • 稳定性提升 :尽管目前已经有一些方法来解决训练不稳定的问题,但仍需要更有效的技术来确保GAN在各种数据集和任务上都能稳定训练。例如,进一步优化超参数调整的方法,或者开发新的训练策略。
  • 多样性增强 :虽然有一些技术可以减少模式崩溃,但生成图像的多样性仍有提升空间。可以探索新的损失函数或正则化方法,以鼓励生成器生成更丰富多样的图像。
  • 可解释性增强 :目前GAN的工作原理还不是完全清晰,尤其是在潜在空间中如何进行特征表示和操作。提高GAN的可解释性有助于更好地理解和控制生成过程,例如通过可视化潜在空间中的特征和操作。

7.2 应用拓展

  • 艺术创作 :GAN可以生成独特的艺术作品,为艺术家提供新的创作灵感和工具。例如,生成具有特定风格或主题的绘画、音乐等。
  • 虚拟现实和增强现实 :在VR和AR场景中,GAN可以用于实时生成逼真的场景和物体,提高用户的沉浸感。例如,根据用户的位置和动作生成动态的虚拟环境。
  • 医疗领域 :GAN可以用于生成医学图像,如X光、MRI等,帮助医生进行疾病诊断和治疗规划。此外,还可以用于药物研发中的分子结构生成。

7.3 面临的挑战

  • 伦理问题 :随着GAN生成图像的质量越来越高,可能会被用于虚假信息传播、伪造证据等不良行为。需要建立相应的伦理准则和监管机制来规范GAN的使用。
  • 计算资源需求 :一些先进的GAN架构,如StyleGAN,对计算资源的要求非常高,这限制了它们的广泛应用。需要开发更高效的算法和硬件来降低计算成本。

8. 总结

8.1 核心要点回顾

  • 训练困难 :GAN训练过程中存在纳什均衡难以达到、模式崩溃、参数不稳定等问题,需要通过经验回放、小批量判别等方法来解决。
  • 架构发展 :从DCGAN到渐进式增长GAN再到StyleGAN,GAN的架构不断改进,生成图像的质量和多样性逐渐提高。
  • 应用前景 :GAN在图像生成、艺术创作、医疗等领域具有广阔的应用前景,但也面临着伦理和计算资源等挑战。

8.2 对读者的建议

  • 实践探索 :建议读者亲自尝试实现不同的GAN架构,通过实践加深对GAN的理解和掌握。可以从简单的DCGAN开始,逐步尝试更复杂的架构。
  • 关注研究动态 :GAN是一个快速发展的领域,新的研究成果不断涌现。读者可以关注相关的学术会议和论文,了解最新的技术和方法。
  • 思考伦理问题 :在使用GAN时,要充分考虑其可能带来的伦理问题,遵守相关的法律法规和伦理准则。

通过对GAN的深入了解和不断探索,我们有望在图像生成和其他相关领域取得更多的突破和创新。

graph LR
    A[GAN训练困难] --> B[纳什均衡难达]
    A --> C[模式崩溃]
    A --> D[参数不稳定]
    B --> E[无保证达均衡]
    C --> F[输出缺乏多样性]
    D --> G[训练易偏离]
    H[GAN架构发展] --> I[DCGAN]
    H --> J[渐进式增长GAN]
    H --> K[StyleGAN]
    I --> L[生成大图像有问题]
    J --> M[架构训练复杂]
    K --> N[计算资源要求高]
    O[GAN应用前景] --> P[艺术创作]
    O --> Q[虚拟现实和增强现实]
    O --> R[医疗领域]
    P --> S[提供创作灵感]
    Q --> T[提高沉浸感]
    R --> U[辅助疾病诊断]
    V[GAN面临挑战] --> W[伦理问题]
    V --> X[计算资源需求高]
    W --> Y[虚假信息传播]
    X --> Z[限制广泛应用]

以上流程图展示了GAN在训练、架构、应用和面临挑战等方面的关系,帮助读者更直观地理解GAN的整体情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值