前面几章学习了使用JAX进行计算机视觉、自然语言处理等方面深度学习任务,可以看到基于JAX的深度学习框架能够较好地完成这些常见任务。本章讲学习一种较为特殊的网络,生成对抗网络(Generative Adverbial Network,GAN)。
生成对抗网络,是一种包含两个网络的神经网络结,将一个网络与另一个网络相互对立(因此称为“对抗”)。
从目前对GAN的研究和应用来看,GAN的潜力巨大,因为它能学习和模仿任何数据分布,因此,GAB能被教导在任何领域创造类似于真实世界的东西,比如图像、音乐、演讲、散文等。在某种意义上,GAN可以被视为一个机器人艺术家,它而“创作”出令人印象深刻,甚至打动人类的作品。
GAN工作原理
为了理解GAN,需要知道GAN是如何工作的。实际上GAN的组成和工作原理非常简单,
其中,
- 生成器。生成器学习如何生成看似合理的数据。对判别器来说,这些生成的实例会变成负面训练样本。
- 判别器。判别器学习如何通过真实数据的学习来辨别出生成器生成的假数据。判别器将惩罚生成器生成的“不可理(假)”的数据结果。
GAN训练的整个步骤如下,
- 当训练开始,生成器生成一个些很明显的假数据,判别器能快速地学习如何识别出是不是假数据,
- 随着训练稳步推进,生成器更接近于能生成蒙骗判别器的输出数据。
- 最终,如果生成器训练得当,在识别真实和虚假方面,判别器变得差强人意,而且将开始把假数据分类为真实数据,识别的准确率降低。
GAN是一种生成式的对抗网络。具体来说,就是通过对抗的方式去学习数据分布的生成式模型。所谓对抗,指的是生成网络和判别网络的互相对抗。生成网络尽可能生成逼真的样本,判别网络这尽可能地去判别该样本是真实的样本还是生成的假样本。
生成对抗网络整个架构如下所示,
生成器和判别器两者都是神经网络。生成器的输出直接连接到判别器的输入。通过反向传播,判别器的分类结果给提供了一个信号让生成器更新其权重。
生成器和判别器共同构成GAN
生成器(Generator)与判别器(Discriminator)共同构成一个GAN。再介绍GAN之前先对生成器和辨别器的作用做一个详细的解释。
判别器
对于判别器来说,给它一幅画,判别器中的判别算法能够判别这幅画是不是由真人完成的。画的真假是给予判别器的标签一致,而这幅画本身的向量特征就组成了输入的特征向量。
把上述语句用数学形式表示出来,标签被定义成为y,特征向量被定义成x,那么判别器的判定公式为,
也就是在输入的x特征向量的基础上定义出y的概率。在这个判别器的例子中,输入向量也就是画的特征被定义成x,而判别器对画的判定则是y,即判别器对这幅画判定真伪的概率。因此,判别算法将特征映射为概率,判别器只关心其中的特征是够满足概率生成的条件。
生成器
与判别器的做法正好相反,它不关心向量是什么形式和内容,它只关心标签信息,尝试由给定的标签内容去生成特征。同样以画为例,生成器需要考虑大的是,假定这个画是由真实画家完成的,那么这个画包含哪些画家的特征信息,这些信息又是什么样的,怎么将其展示出来让“别人(判别器)”认为这幅画是画家本人的真迹。这和人类思考的过程相类似。判别器关心的是由x‘判断出y,而生成器关心的是如何生成一个x去满足y的判定。用公式表示如下,
两者区别总结如下,
- 判别器,学习不同类别和标签之间的区分界限。
- 生成器,学习标签中的某一类的概率分布并进行建模。
GAN是如何工作的
判别器如何工作
判别器在生成对抗网络中,简单来说是一个分类器。该分类器尝试从生成器生成的假数据中识别真实数据。它可以使用任何适用于数据分类的网络架构。判别器在训练中使用误差反向传播机制来计算损失和更新权重参数,
从上图可以看到,判别器的训练数据有两处来源,
- 真实数据。真实数据实例,比如人的照片。在训练中,判别器把这些实例用作正面样本。
- 虚假数据。生成器生成的实例。在训练中,判别器把这些实例用作负面样本。
上图中两个Sample的框就是这两种输入到判别器的样本。注意,在判别器训练时,生成器不会训练,即在生成器为判别器生成示例数据时,生成器的权重保持恒定。
在训练判别器时,判别器连接到两个损失函数。在训练时,判别器忽略生成器的损失而只使用判别器损失。在训练过程中,
- 判别器对真实数据和来自生成器生成的假数据进行分类。
- 判别器的损失函数将惩罚由判别器产生的误判,比如把真实实例判定成假,或者把假的实例判定为真。
- 判别器通过对来自于判别器网损失函数计算的损失进行反向传播。如上图。
下面介绍为什么生成器的损失函数直接连接到判别器。
生成器如何工作
生成对抗网络里的生成器,通过接受来自于判别器的反馈来学习如何创建假数据。生成器学习如何让(欺骗)判别器把它的输出归类为真实数据。
相对于判别器的训练,生成器的训练要求生成器与判别器有更加紧密的集成。生成器训练包含,
随机输入。神经网络需要某种形式的输入。通常,为了达到某种目的而输入数据,比如一个输入的实例用来进行分类任务或者预测。但当希望输出一整个全新的数据实例,用什么样输入数据呢?
最常见基础形式里,GAN使用随机噪音作为它的输入。然后,生成器将把随机噪音转换成有意义的输出。通过引入噪音,可以从不同分布形式的不同空间采样,让GAN生成一个宽域的数据,
实验结果表明,不同噪音的分布不会产生太大影响。因此,可以选择相对较易的采样来源,比如,均匀分布。方便起见,噪音采样空间的维度一般小于输出空间的维度。
注意,有些GAN变种不使用随机输入来形成输出。
生成器网络,负责把随机输入转换成数据实例。
判别器网络,负责把上一步生成的数据归类。
判别器输出。
生成器的损失函数,负责惩罚企图蒙骗判别器失败的情况(即生成器生成的假数据,被识别器成功识破)。
使用判别器训练生成器
要训练神经网络,通过修改网络的权重来减少误差或者输出的损失。在GAN里却不同,生成器不直接连接到损失函数来试图影响损失,而是把生成的数据输出到判别器,而判别器会制造影响误差损失的输出。当生成器生成的数据被判别器成功识别成仿冒时,生成器损失函数会惩罚生成器。
另外,反向传播里也包含网络的额外处理。反向传播通过计算对输出的影响——更改后的权重在多大程度上影响输,来调整每个权重以使其在正确的方向上。但,生成器权重的影响取决于直接输出到判别器的权重的影响。因此,反向传播始于输出且穿过判别器回流到生成器。
在生成器训练时,不希望判别器更改,就像尝试击中一个移动目标,会让一个本身就麻烦的问题变得更加困难。所以,在训练生成器时使用如下流程,
- 随机噪音采样作为输入。
- 生成器从采样的随机噪音采样里生成输出。
- 让判断器判断上述输出是“真”或“假”,以此作为生成器的输出。
- 从判别器的分类输出计算误差损失。
- 穿过判别器和生成器的反向传播,从而获得梯度。
- 使用梯度来更新生成器的权重。
这个流程是生成器训练的一个迭代。下面会玩转整个生成器和判别器。
训练GAN
因为GAN包含两个单独经训练的网络,GAN的训练算法必须解决两个难题,
- GAN必须能胜任来个不同的训练(生成器和判别器)。
- GAN的趋同难以识别。
交替训练
生成器和判别器有不同的训练流程,那么如何才能作为一个整体来训练GAN呢?GAN的训练有交替阶段,
- 判别器训练一个或者多个迭代。
- 生成器训练一个或者多个迭代。
- 不断重复1和2步来训练生成器和判别器。
在判别器训练的阶段,保持生成器不变。因为判别器训练会尝试从仿冒数据里分辨出真实数据,判别器必须学习如何识别生成器的缺陷。这就是经过完整训练的生成器和只能生成随机输出的未训练生成器的不同之处。
类似地,在生成器训练的阶段,保持判别器不变。否则,生成器像尝试击中移动目标一样,可能永远无法收敛。
这种往复训练使得GAN能够处理另外一些棘手的数据生成问题。开始于相对较简单的分类任务问题,从而获得一个解决生成难题的立足点。相反地,如果不能训练一个分类器来识别真实数据和生成数据的区别,甚至无法识别与随机初始化输出的区别,那么GAN的训练根本无法开始。
收敛
随着训练进行,生成器不断改善,相对地,由于不能再轻易地识别出真实数据和假冒数据的,判别器的表现越来越差。当生成器完美地成功生成时,判别器的正确率只有50%。基本上和抛一枚硬币来预测正反一样的概率一样。
这种进度展现了作为整体GAN的一个问题,判别器的反馈随着时间的推移越来越不具有意义。过了这个节点之后,即判别器完全给出了随机反馈,如果继续训练GAN,那么生成器将使用判别器给出的无效反馈进行训练,那么生成器的质量可能会崩塌。
对于GAN来说,收敛往往是一个闪现的点,而不是牢固的、稳态的。
如何理解生成对抗网络
简单来来说,GAN的功罪哦原理就是使用生成器去生成新的恶具有一定特征的向量内容,并且将生成的向量内容输出入到判别器中去对去进行验证,评估这些向量内容为真或者假的概率。
比如假钞制造,以及假钞的识别,如下图,
另外,信用结构,比如银行的业务中,手写字作为交易的依据是最常见的一种存根方式,而往往有人就是通过模仿别人的手写数字进行诈骗,特别是在银行领域,毛领支票的事件层出不穷,
在上面两种场景中,生成器的作用就是根据标签的类别进行特征生成,最终生成具有真实特征,比如纸币或手写特征的一系列图片,即向量数据,而判别器的目标就是当其被展示一个纸币或者手写字是能识别出真或者假。
在这个过程中,GAN所采取的步骤如下,
- 生成器使用随机数生成一幅图。
- 这幅图和真实数据集的图片流一起被送到判别器。
- 判别器接收真是的和仿冒的图片,然后返回概率。
可以把GAN想象成猫鼠游戏里的伪造者和警察的角色,伪造者不断学习假冒票据,警察在学习如何检测它们。双方都是动态的,警察也在训练,并且双方在不断升级中学习对方的方法。
需要强调的是,在这个过程中生成器和判别器是一个循环过程,随着生成器和判别器能力的提升,其对应的生成和判别能力也越来越强。这样实际上就构成了一个反馈链:
- 判别器和图片标签构成一个反馈。
- 生成器和判别器构成一个反馈。
结论
本章介绍了生成对抗网络的原理和工作机制,特别是生成器和判别器的原理及训练过程。