生成对抗网络(GAN)

生成对抗网络(GAN)

引言

生成对抗网络(GAN)是深度学习领域的一个革命性概念,为数据生成提供了一种全新的方式。其名称中的“对抗”体现了核心思想:通过两个神经网络之间的相互竞争来生成数据。这两个网络分别是:生成器 (Generator) 和判别器 (Discriminator)。

想象一个例子,生成对抗网络如同一场精心编排的双人舞。舞台上有两位主要的舞者:生成器和判别器。生成器充满创意和魔法,从无中创造,如同一个艺术家挥动画笔,尝试制作最美的画作。它从一个随机的灵感(噪声向量)出发,试图创作令人信服的作品。而在舞台的另一侧,判别器则扮演着批评家的角色,目光锐利,不放过任何瑕疵。当它面前展示的作品来源于真实世界时,它欣然点头;但当作品出自生成器之手,它便细细审查,决定这是真品还是赝品。这个判别过程不断地反馈给生成器,告诉它在哪里做得不够好,需要改进。

这场舞蹈是一个持续的迭代过程,双方互相挑战,共同成长。随着时间的流逝,生成器的技巧变得越来越纯熟,而判别器的鉴赏能力也日益提高。最终,我们希望在这场舞蹈中,生成器能够创作出如此高质量的作品,以至于即使是最尖锐的批评家——判别器,也无法区分其真伪。

GAN模型简介

在深度学习领域,数据生成是一个长期存在的问题。传统的生成模型,如受限玻尔兹曼机(Restricted Boltzmann Machine, RBM)和变分自编码器(Variational Autoencoder, VAE),虽然取得了一些进展,但仍然存在诸如训练困难、生成样本的质量不高等问题。

Ian Goodfellow和他的同事于2014年首次提出生成对抗网络(Generative Adversarial Network, GAN),初衷是寻找一种更直接、更稳定的方法来生成数据。他们在论文“Generative Adversarial Nets”中描述了这种新颖的模型结构。这个方法的基本思想是使用两个网络:一个生成器和一个判别器,在一个框架中进行对抗训练,通过模拟对抗的过程驱动生成器产生更高质量的数据。

GAN的成功和受欢迎有以下几个原因:

(1)高质量的生成数据:与其它生成模型相比,GAN可以生成质量更高、更真实的图像。

(2)直观的结构:GAN的对抗结构十分直观,训练方式十分新颖巧妙。

(3)灵活性:GAN可以与各种网络结构和数据类型相结合,应用范围非常广泛。

自2014年以来,GAN经历了快速的发展。研究人员提出了许多GAN的变体,如DCGAN、WGAN、CycleGAN等,以解决原始GAN的问题,并扩展其应用范围。此外,GAN还催生了一系列的新技术和应用,如BigGAN(用于生成高分辨率图像)、StyleGAN(可以控制生成图像的多种风格)等。GAN是深度学习领域的一项重要创新。自其提出以来,已经吸引了大量的研究和商业关注。GAN不仅推动了生成模型的发展,还为计算机视觉、自然语言处理等领域带来了新的可能性。

GAN的模型结构

GAN模型的结构如图1所示,继续舞台的例子。在生成对抗网络的舞台上,生成器扮演着一个充满创意的艺术家角色。这位“艺术家”从一个随机向量中汲取灵感,通过一系列神经网络层(如卷积或全连接层)将其转化为有形的作品。与真实世界的艺术家(真实的数据)不断练习和修正技巧以完善作品的过程相似,生成器也不断地调整自己的参数,以使其产生的作品更加逼真。其目标是创作出令人信服的数据,以至于判别器——这位严格的艺术评论家,难以区分其真伪。因此,生成器不仅是一个创作者,更是一个终身学习者,不断地通过判别器的反馈来完善自己的“艺术技巧”。

而判别器是那位批判眼光犀利的艺术评论家。它对每一件作品都进行严格的审查,通过其内部由多个神经网络层(例如卷积层或全连接层)组成的复杂机制,判定这件作品是否为真实世界的佳作,还是生成器所创作的模仿品。判别器在接收到数据后,通过其网络结构输出一个评分,表示这份数据的真实性概率。其核心任务是正确地识别出真实数据和生成数据,并通过其判断为生成器提供宝贵的反馈,使其有机会更进一步地完善自己的创作技能。因此,判别器既是一个严苛的评审,也是生成器成长道路上的关键引导者。

图片[1]-生成对抗网络(GAN)-点头深度学习网站

图1 GAN模型的结构

当谈论传统的 GAN 时, 它的目标函数是一个两人联合博孪, 其中生成器 ( (G) ) 和判别器 ((D)) 有对立的目标。博栾过程可以表示为:

\(\min _G \max _D \mathcal{L}(D, G)=\mathbb{E}_{x \sim p_{\text {data }}(x)}[\log D(x)]+\mathbb{E}_{z \sim p_z(z)}[\log (1-D(G(z)))]\)

其中外部的最小化 (min)代表生成器 G 的目标。生成器希望最小化判别器对其生成的样本产生的正确分类概率。换句话说,生成器试图骗过判别器,让其认为生成的样本是真实的。而内部的最大化 (max)代表判别器 D 的目标。判别器希望最大化其对真实和生成样本的分类能力。

生成对抗网络的核心思想是在生成器(Generator)和判别器(Discriminator)之间建立一个竞争关系。为了使这种竞争有效,需要为这两个网络定义适当的损失函数。在最基本的GAN中,生成器的任务是生成能够欺骗判别器的数据。因此,生成器的损失函数通常基于判别器对生成数据的评估。

假设 \(G\) 是生成器, \(D\) 是判别器。当给定一个随机噪声向量 \(z\) 时, 生成器 \(G\) 生成一个数据 \(G(z)\) 。判别器 \(D\) 评估这个数据并给出一个概率 \(D(G(z))\), 表示它认为 \(G(z)\) 是真实数据的概率。生成器希望 \(D(G(z))\) 尽可能地接近 1 , 即判别器被欺骗并认为生成数据是真实的。如果只考虑从生成器产生的图片, 而忽略真实数据的影响 \(\left(\mathbb{E}_{x \sim p_{\text {dat }}(x)}[\log D(x)]=0\right)\), 损失将是:
$$
L_G=\mathbb{E}_{z \sim p_z(z)}[\log (1-D(G(z)))]
$$

上述损失函数表示: 当 \(D(G(z))\) 接近 1 时, 意味着判别器几乎完全确信生成的数据是真实的。此时, \(1-D(G(z))\) 接近 0 , 而 \(\log (1-D(G(z)))\) 的值会是一个很大的负数。这正是我们所期望的最小化生成器损失。当 \(D(G(z))\) 接近 0 时, 意味着判别器认为生成的数据是假的。在这种情况下, \(1-D(G(z))\) 接近 1 , 因此 \(\log (1-D(G(z)))\) 接近 0 。生成器会尽量避免这种情况, 因为生成器的目标是最小化 \(\log (1-D(G(z)))\), 这实际上是鼓励生成器产生能够欺骗判别器的数据。

下面分析一下为什么损失公式中会存在一个log。一方面,GAN中涉及到的损失函数常常与概率有关,这些概率因为层级结构的原因经常需要进行乘法操作。当处理很小的概率值时,它们的乘积可能会变得非常小,接近于机器的数值下限,这可能导致数值不稳定,即所谓的“下溢”问题。下溢会导致这些非常小的值被四舍五入为零。通过采用对数,可以将乘法操作转化为加法操作,这有助于提高数值稳定性。另一方面,log有放大罚分的效应。

具体来说, 当 \(D(G(z))\) 很小 (表示判别器几乎确定生成的样本是假的) 时, \(1-D(G(z))\) 仍然接近 1。此时, \(\log (1-D(G(z)))\) 的值接近于 0 。然而, 随着 \(D(G(z))\) 的增加, 即生成的样本开始获得某种程度的逼真度, 但仍然可以被判别器区分出来, \(1-D(G(z))\) 开始迅速减小。对数函数对这些值的放大效应明显。例如, \(\log (1-0.5)=-0.693\) 和 \(\log (1-0.9)=-2.302\), 可以看到, 当由生成器生成的样本从被判别器评估为 \(50 \%\) 真实到 \(90 \%\) 真实时, 损失值有了显著的下降。这种放大效应确保了, 当生成器稍微提高其生成样本的逼真度时, 它会受到一个大的罚分, 鼓励它更进一步地改进。这种放大罚分效应确保生成器不满足于仅仅产生稍好的样本; 相反, 它被激励要产生尽可能逼真的样本, 以降低其损失。

如果只考虑判别器的角度, GAN 的损失函数主要关注于判别器如何区分真实数据和生成的数据。对于判别器 \(D\), 损失函数为:
$$
L_D=\mathbb{E}_{x \sim p_{\text {dta }}(x)}[\log D(x)]+\mathbb{E}_{z \sim p_z(z)}[\log (1-D(G(z)))]
$$

上述损失函数由两部分组成:

  • \(\mathbb{E}_{x \sim p_{\text {data }}(x)}[\log D(x)]\) : 这部分是关于真实数据的。判别器 \(D\) 试图最大化对真实数据样本 \(x\) 的正确分类概率。换句话说, 它希望对于来自真实数据分布的样本 \(x\), 输出尽可能接近 1 。
  • \(\mathbb{E}_{z \sim p_z(z)}[\log (1-D(G(z)))]\) : 这部分是关于生成的数据的。判别器 \(D\) 试图最大化其对生成数据的正确分类概率, 即将其分类为假的。这意味着, 对于从先验噪声分布 \(p_z\) 中采样然后通过生成器 \(G\) 生成的假样本, 判别器的输出应该尽可能接近 0 。

判别器 \(D\) 的目标是最大化损失函数。这意味着, 为了达到最佳效果, 判别器希望能够准确地区分真实数据和生成的数据。在最理想的情况下, 对于真实数据, \(D(x)=1\); 而对于生成的数据, \(D(G(z))=0\) 。但在实际训练中, 这种理想情况很少达到, 因为生成器也在尝试改进自己,生成更逼真的样本来欺骗判别器。

GAN模型训练

GAN模型在开始训练之前,首先需要选择一个合适的神经网络结构。例如,对于图像生成,一般基于卷积的结构偏多。初始化生成 G 和判别器 D 的权重,通常使用小的随机值。

GAN包括两个网络:生成器和判别器,它们需要交替或同时训练。GAN的循环训练大致如下:

(1)开始一个新的训练周期,通常涉及处理一个批次的数据。

(2)首先训练判别器,使用当前的生成器生成假数据和真实数据训练判别器,判别器的目标是正确地区分真实数据和假数据。具体来说,一方面从真实数据分布中抽取一个批量的数据 \(x\), 计算判别器 \(D\) 在真实数据上的输出 \(D(x)\), 计算损失 \(\mathbb{E}_{x \sim p_{\text {data }}(x)}[\log D(x)]\) 。另一方面从随机噪声分布中抽取一个批量的噪声 \(z\) 。使用生成器 \(G\) 生成一个批量的假数据 \(G(z)\) 。

计算判别器 \(D\) 在假数据上的输出 \(D(G(z))\), 计算损失 \(\mathbb{E}_{z \sim p_z(z)}[\log (1-D(G(z)))]\) 。合并真实数据和生成数据的损失, 使用这个总损失来更新判别器 \(D\) 的权重, 通常使用优化器如 Adam 或 RMSProp。然后训练生成器, 试图欺骗判别器, 使其认为生成的数据是真实的, 生成器的目标是生成能够被判别器误判为真实数据的数据。具体来说, 从随机噪声分布中再次抽取一个批量的噪声 \(z\), 通过判别器 \(D\) 评估生成器 \(G\) 产生的假数据, 计算损失 \(\mathbb{E}_{z \sim p_z(z)}[\log (1-D(G(z)))]\),使用该损失更新生成器 \(G\) 的权重。

每隔几个轮次,可以使用一些指标来评估生成器的输出。重复上述训练步骤直到满足终止条件,这可以是预定的训练轮数、模型性能达到某个阈值或其它条件。如果未满足条件,返回并开始新的训练循环。在循环训练过程中,生成器和判别器都会逐渐改进,争取更好地执行其任务。最终的目标是找到一个平衡点,生成器生成的数据与真实数据几乎无法区分。这种逐步的、反复的训练方法允许模型从数据中学习和适应,这是许多机器学习算法成功的关键。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容