type
status
date
slug
summary
tags
category
icon
password
在人工智能的迅速发展中,生成对抗网络(GANs)已成为一项引人注目的技术突破。通过将两个神经网络相互对抗,GANs 能够生成极为逼真的图像、音乐、文本,甚至是用于训练其他 AI 模型的合成数据。让我们一起探索 GANs 的神秘世界,并深入了解它们的训练机制。
 

理解 GAN 架构

一个 GAN 包括两个部分:生成器(Generator)和鉴别器(Discriminator)。生成器的目标是创造出与真实数据无法区分的数据,而鉴别器的任务是评估数据以确定其是真实的还是由生成器产生的。这两个网络之间的竞争驱动它们不断地提高自己的能力,就像艺术家与艺术评论家一样,不断磨练各自的技艺。下面这张图片展示了GAN的基本工作原理。
notion image
这个过程从左至右可以描述为如下步骤:
  1. 随机噪声:生成器接收一个随机噪声信号作为输入。
  1. 生成器:这个随机噪声被生成器转换成数据,例如图片。在这个过程中,生成器试图创建看起来像是从真实数据集中取样的数据。
  1. 假图像:生成器输出的结果是一个假图像,意图模仿训练集中的真实图像。
  1. 训练集:真实的数据集,生成器试图模仿的数据。
  1. 鉴别器:它的任务是区分输入图像是来自训练集的真实图像还是生成器生成的假图像。
  1. 真/假输出:鉴别器输出一个标签,表明输入图像是“真实”的还是“假”的。
GAN的训练过程涉及到生成器和鉴别器的对抗。生成器试图产生越来越逼真的图像,而鉴别器则试图变得更擅长于区分真假图像。通过这种对抗过程,生成器学习生成越来越高质量的假图像,最终目标是让假图像无法被鉴别器区分出来。
 

训练过程

训练 GAN 就像是在生成器和鉴别器之间进行一场微妙的舞蹈。训练过程包括以下几个步骤:
  1. 鉴别器训练:鉴别器更新其权重,以更好地区分真实数据和生成器产生的假数据。
  1. 生成器训练:生成器更新其权重,以更好地生产出鉴别器将分类为真实的数据。
从优化目标来看:
notion image
首先,对于固定的生成器G,我们想要最大化鉴别器D的效能(即使其尽可能准确地识别真实和生成的数据)。然后,我们想要最小化生成器G的效能,使得生成的数据尽可能地让鉴别器难以识别,即鉴别器不能区分真实数据与生成数据。
第一项,其中x是从真实数据分布中抽取的样本。鉴别器D的目标是最大化识别真实样本的概率的对数。
第二项,其中z是从生成数据的先验分布中抽取的样本。生成器G的目标是通过其生成的假数据来欺骗鉴别器,使得鉴别器给出的“真实”概率尽可能接近0,即最大化的对数。
这个优化目标反映了一个极小极大问题,生成器G试图产生足够真实的数据以“欺骗”鉴别器D,而鉴别器D试图区分真实数据和生成器生成的假数据。通过这种方式,GAN框架可以学习生成高质量的假数据。
 

伪代码

这个特定的伪代码描述了一种使用小批量随机梯度下降(minibatch stochastic gradient descent)的方法来训练GAN。以下是该伪代码的解释:
  1. 训练迭代:整个训练过程分多次迭代,每次迭代都包含更新鉴别器(Discriminator)和生成器(Generator)的步骤。
  1. 鉴别器更新:在每次迭代中,首先进行k步鉴别器的更新。k是一个超参数,决定了在每次更新生成器之前要更新鉴别器的次数。
      • 从先验噪声分布pg(z)中抽取m个噪声样本。
      • 从数据生成分布pdata(x)中抽取m个实例样本。
      • 使用这些样本来计算鉴别器的梯度,并更新鉴别器。梯度计算公式是对数损失函数,目的是最大化鉴别器识别真实数据的能力,以及识别生成器生成的假数据的能力。
  1. 生成器更新:在每次迭代的最后,更新一次生成器。
      • 同样地,从先验噪声分布pg(z)中抽取m个噪声样本。
      • 使用这些噪声样本,通过生成器生成假数据,然后计算生成器的梯度,并更新生成器。这里的目标是最大化鉴别器错误地将假数据判断为真实数据的概率。
这个过程会不断重复,直到GAN训练完成。每次迭代,鉴别器和生成器都会通过对抗来改进,生成器生成的假数据会越来越逼真,鉴别器的判断能力也会越来越强。

📎 参考文章

 
(转载)如何为开源项目做贡献用高级搜索玩转GitHub