GAN - 架构
生成对抗网络:架构与关键变体
Section titled “生成对抗网络:架构与关键变体”生成对抗网络(Generative Adversarial Network, GAN)采用一种独特的架构,通常由两个神经网络组成:生成器(Generator)和判别器(Discriminator)。这些网络在对抗性(adversarial)环境中进行训练,其中生成器努力创建逼真的数据,而判别器旨在区分真实数据和生成数据。对于图像生成等任务,通常在两个组件中都使用卷积神经网络(Convolutional Neural Networks, CNNs)。本章将深入探讨 GAN 的架构、其核心组件的角色、它们的目标函数,并介绍几种推动该领域发展的重要 GAN 类型。
GAN 架构中的生成器网络
Section titled “GAN 架构中的生成器网络”GAN 架构的第一个主要组成部分是生成器(Generator, G)。其功能是学习训练数据的底层分布,并从该学习到的分布中合成新的数据样本。
生成器:功能与结构
Section titled “生成器:功能与结构”生成器的主要目标是生成合成数据样本,这些样本旨在与从目标数据集中提取的真实数据样本难以区分。它通常从一个随机噪声向量(通常称为潜在向量,latent vector, ‘z’)开始,这个向量通常从简单的分布(如高斯分布或均匀分布)中采样。然后,生成器通过一系列神经网络层将这个低维潜在向量转换为高维数据样本(例如,图像)。
生成器:常用层和组件
Section titled “生成器:常用层和组件”生成器中的特定层取决于生成的数据类型。对于图像生成,常见组件包括:
- 输入层(Input Layer):接收随机噪声向量 ‘z’ 作为输入。
- 全连接层(Fully Connected Layers),也称密集层(Dense Layers):通常用于初始阶段,将噪声向量投影和重塑为适合后续卷积层的高维表示。
- 转置卷积层(Transposed Convolutional Layers),也称反卷积层(Deconvolutional Layers):它们是上采样(upsampling)的关键。它们增加特征图(feature maps)的空间维度,逐渐将紧凑的潜在表示转换为完整尺寸的图像。
- 批归一化层(Batch Normalization Layers):用于通过归一化中间层的激活来稳定训练,这有助于梯度流动并允许使用更高的学习率(learning rates)。
- 激活函数(Activation Functions):隐藏层常用 ReLU(Rectified Linear Unit)和 LeakyReLU 以引入非线性。输出层通常使用适合数据范围的激活函数,例如 Tanh(用于归一化到 [-1, 1] 的数据)或 Sigmoid(用于归一化到 [0, 1] 的数据)。
生成器:目标函数
Section titled “生成器:目标函数”生成器的目标是生成判别器 D 判定为真实的数据 G(z)。在原始 GAN 的公式中,这通常是通过训练 G 来最大化 D 在生成样本上犯错的概率来实现的,即最大化 log(D(G(z)))。一个常见的替代方案,生成器的非饱和损失(non-saturating loss),是最小化 -log(D(G(z))),这等同于最大化 log(D(G(z))),但在训练早期可以具有更好的梯度特性。当生成器尝试使 D(G(z)) 接近 1(真实)时,简化理解生成器损失 L_G 的方式通常与以下内容相关:
L_G aims to minimize something like: E_{zp_z(z)} [log(1 - D(G(z)))] (original minimax formulation) or, more commonly in practice, E_{zp_z(z)} [-log(D(G(z)))] (non-saturating heuristic).
这里,G(z) 是从噪声 z 生成的数据,D(G(z)) 是判别器对 G(z) 为真实数据的概率估计。
GAN 架构中的判别器网络
Section titled “GAN 架构中的判别器网络”GAN 架构的第二个主要组成部分是判别器(Discriminator, D)。其功能是充当二分类器(binary classifier)。
判别器:功能与结构
Section titled “判别器:功能与结构”判别器的主要目标是区分真实数据样本(来自训练数据集)和生成器产生的虚假(合成)数据样本。它接收一个数据样本(可以是真实的 ‘x’ 或虚假的 G(z))作为输入,并输出一个标量值,表示输入样本为真实样本的概率。
判别器:常用层和组件
Section titled “判别器:常用层和组件”对于图像数据,判别器通常是用于分类的标准卷积神经网络(CNN):
- 输入层(Input Layer):接收来自真实数据集或生成器的数据样本(例如,图像)。
- 卷积层(Convolutional Layers):用于从输入图像中提取特征。这些层通常通过使用步长(strides)或池化(pooling)来对输入进行下采样(downsample),逐渐减小空间维度同时增加特征深度。
- 激活函数(Activation Functions):隐藏层通常使用 LeakyReLU 来防止“dying ReLU”问题,并允许即使对于负输入值也有梯度流动。它引入了非线性。
- 全连接层(Fully Connected Layers),也称密集层(Dense Layers):在多个卷积层之后,特征图通常会被展平(flattened)并通过一个或多个密集层来进行最终分类。
- 输出层(Output Layer):产生单个标量输出。在原始 GAN 中,这通常通过 Sigmoid 激活函数来表示一个概率(0 表示虚假,1 表示真实)。然而,在一些现代 GAN 变体(如 WGAN)中,省略了最终的激活函数,并使用原始的 logit。
判别器:目标函数
Section titled “判别器:目标函数”判别器的目标是将真实数据正确分类为真实,将虚假数据正确分类为虚假。它被训练来最大化为真实样本和生成样本分配正确标签的概率。其损失函数 L_D 鼓励 D(x) 接近 1(对于真实 x)和 D(G(z)) 接近 0(对于虚假 G(z))。这通常表示为最大化:
L_D_maximize = E_{xp_data(x)} [log D(x)] + E_{zp_z(z)} [log(1 - D(G(z)))]
为了使用梯度下降(gradient descent),判别器最小化它的负值,即 -L_D_maximize。这里,x 是一个真实数据样本。
生成对抗网络的重要类型
Section titled “生成对抗网络的重要类型”自原始 GAN 概念以来,已经发展出无数变体,以提高训练稳定性、样本质量和对生成过程的控制。以下是一些 notable 类型:
Vanilla GAN
Section titled “Vanilla GAN”这指的是 Ian Goodfellow 等人在 2014 年提出的原始 GAN 架构。它为生成器和判别器都使用了全连接层,并建立了基本的对抗性训练框架。虽然是基础性的,但稳定训练它可能具有挑战性。
深度卷积 GANs (DCGANs)
Section titled “深度卷积 GANs (DCGANs)”由 Radford 等人引入的 DCGANs 提供了关键的架构指导方针,显著稳定了 GAN 的训练,特别是对于图像生成。这些指导方针包括:用步长卷积(strided convolutions)(在判别器中)和分数步长卷积(fractional-strided convolutions)(在生成器中)取代池化层,在两个网络中都使用批归一化(Batch Normalization)(除了生成器输出和判别器输入),移除全连接隐藏层以构建更深层的架构,在生成器中除了输出层(使用 Tanh)外所有层都使用 ReLU 激活函数,以及在判别器所有层中使用 LeakyReLU 激活函数。
条件 GANs (cGANs)
Section titled “条件 GANs (cGANs)”cGANs 由 Mirza 和 Osindero 提出,通过将生成器和判别器都条件化(conditioning)于额外信息 ‘y’(例如,类别标签、属性,甚至其他图像)来扩展 GAN 框架。这允许控制生成输出的特性。例如,如果 ‘y’ 是数字的标签,cGAN 可以被训练来生成特定数字的图像。
CycleGANs
Section titled “CycleGANs”由 Zhu 等人开发的 CycleGANs 专为非配对图像到图像翻译任务而设计,其中源域和目标域中的图像没有直接对应关系(例如,将马的照片转换为斑马)。它们使用循环一致性损失(cycle consistency loss),确保将图像从域 A 转换到域 B 再转换回域 A 后,结果应与原始图像相似。这通过使用两个生成器和两个判别器来实现。
渐进式增长 GANs (ProGANs)
Section titled “渐进式增长 GANs (ProGANs)”由 Karras 等人(NVIDIA)提出的 ProGANs 通过在训练过程中渐进地增长生成器和判别器网络来实现高分辨率图像生成。训练从低分辨率图像开始,逐渐添加新的层以增加分辨率,使模型能够首先学习粗略特征,然后再学习更精细的细节。这种方法提高了高分辨率合成的训练稳定性和速度。
StyleGANs(以及 StyleGAN2、StyleGAN3)
Section titled “StyleGANs(以及 StyleGAN2、StyleGAN3)”同样来自 NVIDIA(Karras 等人),StyleGANs 在 ProGANs 的基础上构建,并引入了新的技术,以提高图像合成质量,并在不同尺度(例如,姿势、发型、脸型)上对特定视觉属性(样式,styles)实现前所未有的控制。关键创新包括用于潜在代码的映射网络(mapping network),用于样式调制(style modulation)的自适应实例归一化(adaptive instance normalization, AdaIN),以及全局特征与随机变化的解耦(separation)。StyleGAN2 和 StyleGAN3 进一步改进了架构,以获得更好的质量并解决伪影(artifacts)。
拉普拉斯金字塔 GAN (LAPGAN)
Section titled “拉普拉斯金字塔 GAN (LAPGAN)”LAPGANs 由 Denton 等人引入,使用基于拉普拉斯金字塔(Laplacian pyramid)框架的多分辨率方法来生成高质量图像。训练了一系列级联(cascade)的 GAN,其中金字塔中的每个 GAN 负责在特定尺度上生成细节(拉普拉斯残差,Laplacian residuals),并以前一级别图像的较低分辨率版本为条件。这是一种较早的方法,通过分解问题来生成更高分辨率的图像。
生成对抗网络架构,及其相互竞争的生成器和判别器,为学习生成逼真数据提供了一个强大的范式(paradigm)。理解这些组件的角色及其目标函数是掌握 GAN 工作原理的关键。从 Vanilla GANs 到 DCGANs、cGANs、StyleGANs 等复杂变体的演变,显著提高了生成样本的质量、稳定性和可控性,在各个领域开辟了广泛的应用。GANs 的研究持续活跃,新的架构和训练技术不断涌现。