第5章生成对抗网络 生成对抗网络(GenerativeAdversarialNetwork,GAN)在诸多领域都取得了较好的应 用效果,本章将以生成模型概述为切入点,介绍生成模型的基本概念和生成模型的意义及应 用,在此基础上详细叙述GAN,并分析GAN的延伸模型———SGAN模型、CGAN模型、 StackGAN模型、InfoGAN模型和AuxiliaryClasifierGAN模型的结构。 5.生成模型概述 1 深度神经网络的热门话题是分类问题,即给定一幅图像,神经网络可以告知你它是什么 内容,或者属于什么类别。近年来,生成模型成为深度神经网络新的热门话题,它想做的事 情恰恰相反,即给定一个类别,神经网络可以无穷无尽地自动生成真实而多变的此类别图 像,如图5.它可以包括各种角度, 1所示, 而且会在此过程中不断进步。 图5.生成模型示例 1 5.1 生成模型的基本概念 1. 在深度学习中,可以将其模型分为生成模型和判别模型两大类[1]。生成模型可以通过 观察数据,学习样本与标签的联合概率密度分布P(y),然后生成对应的条件概率分布P x, y| [ (x),从而得到所预测的模型Y=f(x)。判别模型强调直接从数据中学习决策函数2]。 生成模型的目标是给定训练数据,希望能获得与训练数据相同的新数据样本。判别模型的 目标是找到训练数据的分布函数。在深度学习中,监督学习和非监督学习都包含其对应的 生成模型,根据寻找分布函数的过程,可以把生成模型大致分为概率估计和样本生成。 概率估计是在不了解事件概率分布的情况下,通过假设随机分布,观察数据确定真正的 概率密度分布函数,此类模型也可定义为浅层生成模型,典型的模型有朴素贝叶斯、混合高 斯模型和隐马尔可夫模型等。 样本生成是在拥有训练样本数据的情况下,通过神经网络训练后的模型生成与训练集 类似的样本,此类模型也可以定义为深度生成模型,典型的模型有受限玻尔兹曼机、深度信 念网络、深度玻尔兹曼机和广义除噪自编码器等。 5.2 生成模型的意义及应用 1. 著名物理学家费曼说过一句话:“只要是我不能创造的,我就还没有理解。”生成模型恰 如其所描述的,其应用包括: (1)生成模型的训练和采样是对高维概率分布问题的表达和操作,高维概率分布问题 在数学和工程领域有很广泛的应用[3]。 (2)生成模型可以以多种方式应用到强化学习中。基于时间序列的生成模型可用来对 未来可能的行为进行模拟;基于假设环境的生成模型可用于指导探索者或实验者,即使发生 错误行为,也不会造成实际损失[4]。 (3)生成模型可以使用有缺失的数据进行训练,并且可以对缺失的数据进行预测。 (4)生成模型可以应用于多模态的输出问题,一个输入可能对应多个正确的输出,每一 个输出都是可接受的[2是预测视频的下一帧图像的多模态数据建模示例。 5]。图5. 神经网络的发展大致可以分为神经网络的兴起、神经网络的萧条与反思、神经网络的复 兴与再发展、神经网络的流行度降低和深度学习的崛起共5个阶段。 图5.多模态数据建模示例 2 2 GAN 概述 5. 2014年,自蒙特利尔大学的博士生IanGoodfelow提出GAN以来,对GAN的研究便 成了深度学习领域的一大热门问题,GAN甚至被称为过去十年深度学习领域最有趣的想 法[6]。GAN使用两个神经网络,将一个神经网络与另一个神经网络进行对抗,其潜力巨大, 因为它们能学习模仿任何数据分布,因此,GAN能在任何领域创造类似于图像、音乐、演讲、 散文等形式的数据。图5.在某种意义上, 它们 3是GAN的应用示例, 它们是机器人艺术家, 的输出令人印象深刻,甚至人们能够被它们的输出深刻打动。 56 第 5 章生成对抗网络 图5. 3 GAN 的应用示例 5.1 GAN 简介 2. GAN 对抗的两个网络分别为生成器 G 和鉴别器D,生成器 G 是一个生成图像的网络, 它接收一个随机的噪声z,通过这个噪声生成图像, z), [4]。鉴别器D 记为G(相当于编码器 是一个判别网络,判别一幅图像是不是“真实的”。它的输入参数是x,代表一幅图像,输出 D(x)代表 x 为真实图像的概率,D(x)为1时代表是真实的图像,D(x)为0时代表由生成 器生成的图像,相当于解码器。 在训练过程中,生成器的目标就是尽量生成真实的图像去欺骗鉴别器。而鉴别器的目 标是尽量把生成器生成的图像和真实的图像区分开。这样,生成器和鉴别器就构成了一个 动态的“博弈过程”。在最理想的状态下,生成器可以生成足以“以假乱真”的图像,而对于鉴 别器来说,它难以判定生成器生成的图像究竟是不是真实的,因此,理想情况下,当 D(G(=5时, 它可以用来生成所需的数据类型, 分辨。 z))0.得到一个生成式的模型G, 鉴别器无法 5.2 GAN 的损失函数 2. GAN 的损失函数以及背后具有的数学原理是其另一个难点[7]。GAN 的目标是让生成 器生成足以欺骗鉴别器的样本,从数学角度看,希望生成数据样本和真实数据样本拥有相同 的概率分布,也可以说,生成数据样本和真实数据样本拥有相同的概率密度函数,即PG (x)= t()。 GAN的损失函数源自二分类对数似然函数的交叉熵损失函数,有 Pdaax 1[lg1-yi)o1-pi)] (51)Ni 式中,yilogpi 的作用是使来自真实数据的预测样本结果为1,即当 x ~Pdata(x)时, D(x)=1, x 为真实样本数据,D(x)表示当数据为真实样本时鉴别器的输出结果。 yilogpi 可以表示为 (x)log(D(x)) (5-2) L=-yiopi+ (lg( Ex~Pdata 57 式中,(1yi)o1pi) 即当x~P(z)) -lg(-的作用是使来自生成器样本的预测结果为0, G( 时,D(z))=G(为来自生成器的生成样本数据。 (1G- ( lg0( , - z) 可以表示为 Ex~PG (z)log(1-D(G(z))) (5-3) yi)o1pi) 结合式(5-2)和式(5-3), 鉴别器的优化目标是最大化式(5-2)和式(5-3)之和,可以表 示为 D)x)lg(x))+Ex~PG (o1-D(z))) 54) 因此,在给定生成器的情况下,得到最优的鉴别器为 D* V(G,D) (5) V(G,=Ex~Pdata(oD(z)lg(G(( G=argmax 5 生成器的优化目标与鉴别器的优化目标相反,(D) 它需要鉴别器的结果尽可能地差,即当鉴 别器达到最优时,需要对生成器进行优化,目的是最小化式(5-5), 于是可以得到最优的生成 器表示为 G* V(D* (6) 综上所述,可以得到GAN 中生成器和鉴别(G) 器的极大、极小博弈的损失函数,有 mimaV(D)=Ex~Pdatax)lg(x))+Ex~PG (o1-D(z))) ( =argmin G, G )5 nx G,(oD(z)lg(G(57) GD 5.3 GAN 的算法流程 2. 以训练GAN 生成人脸图片为例,GAN 体系的核心结构如图5.其中包含以下4 4所示, 种类型。 图5. 4 GAN 体系的核心结构 (1)训练数据集:希望生成器以近乎完美的质量学习并模仿训练数据集,因此训练数据 集由人脸图像组成,并将该数据集用作鉴别器的输入。 (2)随机噪声矢量:作为生成器的原始输入z,这个输入是一个随机数向量,生成器使 用它作为合成假样本的起点。 58 第 5 章生成对抗网络 (3)生成器:生成器将随机数向量 z 作为输入并输出假样本 x *,它的目标是使生成的 假样本与训练数据集中的真实数据样本无法区分。 (4)鉴别器:鉴别器将来自训练数据集的真实数据样本 x 或生成器生成的假样本 x *作 为输入,对于每个样本,鉴别器将确定并输出样本为真实数据样本的概率。 GAN 的生成器和鉴别器通过博弈的手段对两个网络进行迭代优化,在训练过程中采用 交叉训练的方式进行,基本流程如下。 (1)初始化生成器的参数θG 和鉴别器的参数θD 。 (2)从分布为Pdatax) x(1)x(2)x(同时从 (的数据集中采样 m 个真实数据样本{,,…,m)}, 噪声先验分布PG (中采样 m 个噪声样本{(1)(2),…,(m)}, 并且使用生成器获得 m 个 z), zzz 生成数据样本{xx xm)}。 ~(1),~(2),…,~( (3)固定生成器,使用梯度上升策略训练鉴别器使其能够更好地判断样本是真实数据 样本还是生成数据样本,有 1 m [gD(xi)+lg(G(i)))] (8) θD Σloo1-D(z5 m i=1 (4)循环多次对鉴别器的训练后,使用较小的学习率对生成器进行优化,固定鉴别器, 生成器使用梯度下降策略进行优化,有 Δ θG (5)多次更新之后,理想状态是生成器生成一个鉴别器无法分辨的样本,即最终鉴别器 的分类准确率是0. 5。 Δ 图5.5是GAN 在训练过程中的鉴别器和生成器变化图,循环多次优化鉴别器,再优化 生成器,因为想先拥有一个有一定效果的鉴别器,它能够比较正确地区分真实数据样本和生 成数据样本,这样才能够根据鉴别器的反馈对生成器进行优化。 Σg(G(i))) (9) 1 m lo1-D(z5 m i=1 图5. 5 GAN 在训练过程中的鉴别器和生成器变化图 图5.圆点线代表真实数据样本分布, 5(a) 虚线代表鉴 5中, 实线代表生成的数据样本分布, 别器判别概率的分布情况, z 表示噪声。从图5.5中可以看出,图5.处于初始状态,此时 生成数据样本和真实数据样本的差距比较大,而且鉴别器也不能对它们很好地进行区分,因 此需要先对鉴别器进行优化。对鉴别器优化若干轮后,进入图5.b) 此时鉴别器 5(所示状态, 已能够很好地区分真实数据样本和生成数据样本,但生成数据样本和真实数据样本的分布 差异还是非常明显的,因此需要对生成器进行优化。经过训练后真实数据样本和生成数据 59 样本的差异缩小很多,也就是图5.c) 5(此时鉴别器无法再区分, 5(所示状态。经过若干轮对鉴别器和生成器的训练后, 生成数据样本和真实数据样本的分布已经完全一致(图5.d)), 已 达到预期的结果。 5.4 GAN 的算法分析 2. GAN 的训练过程都是无监督的,数据集是没有经过人工标注的,只知道这是真实的图 像,如全是人脸图像,系统中的鉴别器并不知道该图像的类型,它只需要分辨真假。生成器 也不知道自己生成的数据是什么类型,它只需要尽可能地学习真数据集欺骗鉴别器。 正由于GAN 的无监督,在生成过程中,生成器就会按照自己的意思天马行空地产生一 些诡异的图像,同时鉴别器可能给出一个很高的分数,如人脸极度扭曲的图像,这就是无监 督学习目的性不强所导致的。 在GAN 中,生成器和鉴别器两个网络有相互竞争的目标,即若一个网络变得更好,另一 个网络必将变得更差。博弈论可能会认为这是一种零和博弈,一方的收益等于另一方的损 失,所有的零和博弈都有一个纳什均衡点[8]。在纳什均衡点上,任何一方都不能通过改变自 己的行为改善自己的处境或获得回报。 GAN 到达纳什均衡点,满足如下条件时, (1)生成器生成的数据样本与训练数据的真实数据样本无法区分。集中(有) (2)鉴别器最多只能随机猜测一个特定的数据样本是真或是假。 从鉴别器的角度看,当每个假样本 x * 与来自训练数据集的真实数据样本 x 不可区分 时,鉴别器就不能用任何方法分辨它们,因为鉴别器收到的数据样本有一半是真的,一半是 假的,鉴别器能做的事情最好就是掷硬币,以50% 的概率将每个数据样本归类为真的或假 的。从生成器的角度看,生成器同样处于一个点上,它从进一步的调整中没有任何收益,因 为它产生的数据样本已经与真实的数据样本无法区分,所以,即使对它用来将随机噪声向量 z 转化为假数据样本 x *的过程进行微小的改变,也可能给鉴别器一个如何从真实数据样本 中辨别假数据样本的线索,从而使生成器变得更糟。 实际应用中,由于在非零博弈中达到收敛复杂性较大,因此几乎不可能找到GAN 的纳 什均衡。事实上,GAN 收敛仍然是GAN 研究中最重要的课题。 3 GAN 模型 5. GAN 常用于图像生成、人脸生成、图像转换、超分辨率和文本到图像的转换等领域,本 节主要介绍SGAN 模型、CGAN 模型、StackGAN 模型、InfoGAN 模型和AC-GAN 模型。 通过分析这些模型,读者可以充分体会它们在不同领域的应用。 5.1 SGAN 模型 3. 半监督生成对抗网络(Semi-SupervisedGAN,SGAN)模型作为GAN 的一种,其鉴别 器是多分类器,该鉴别器不只是区分两个类(真和假), 还要学会区分 N +1 类, N 是训练数 据集中的类数,生成器生成的伪样本增加一个类[9]。 60 第 5 章生成对抗网络 要将鉴别器变成半监督分类器,除了计算其输入是否为实数的概率外,鉴别器还需要学习 它所训练的每个原始数据集类的概率,通过该概率,鉴别器能够将一个信号发送回生成器, 而有可能提高生成器创造真实图像的能力。SGAN 模型的鉴别器须将其梯度发送回生成器,(从) 因为这是生成器在训练期间调整参数的唯一信息来源,然而,在真实图像的情况下,鉴别器还 必须为每个单独的数据集类输出单独的概率,为此,可以将Sigmoid激活函数输出转换为具有 oftma0~N N 个类输出的Sx函数,前N-1个类为数据集的单个类概率(2), 第 N 个类是来 自生成器的所有假图像,如果将第 N 类概率设置为0,那么 N -1个概率的和表示先前使用 Sigmoid激活函数计算的相同概率。图5. 6是SGAN 模型的结构示意图。 图5. 6 SGAN 模型的结构示意图 SGAN 模型生成器的目的与原始GAN 相同,接收一个随机数向量并生成假样本,力求 使假样本与训练数据集别无二致[10]。但是,SGAN 鉴别器与原始GAN 实现有很大不同,它 接收3种输入数据用于训练,具体情况如下。 (1)带有标签的真实图像X,与任何常规的监督分类问题相同,提供图像标签对。 (2)无标签真实图像 X ,分类器只知道这些图像是真实的。 (3)来自生成器的图像 X *,鉴别器会把它们归类为假的。 所有这些数据的组合使分类器能够从更广泛的角度进行学习,从而能够更精确地确定 正确的结果。 SGAN 模型的生成器和鉴别器通过两个目标设置损失函数,具体情况如下。 (1)为使得鉴别器能够帮助生成器产生真实的图像,可以通过学习区分真实和虚假的 数据样本。 (2)使用生成器的图像与标注后和未标注的训练图像对数据集精确分类。 对于SGAN 模型的损失函数,除计算鉴别器的损失值,还必须计算生成器中有监督训 练样本的损失D(x,)。所以,SGAN 模型有两种损失值,即有监督损失和无监督损失,具 体为 y L=Lsupervised+Lunsupervised (5-10) 61 Lsupervised =-Ex,y~Pdata(x,y)logpmodel(y|x,y