GAN生成对抗网络入门介绍
GAN(Generative Adversarial Network)生成对抗网络,由Ian Goodfellow在2014年提出。
论文:GAN: Goodfellow, Ian, et al. "Generative adversarial nets." Advances in Neural Information Processing Systems. 2014.
论文地址:https://arxiv.org/pdf/1406.2661.pdf。 一、基本概念:
GAN的思想来自零和博弈理论,由两个部分组成,一个是生成器Generator,随机接收一个随机噪声来生成图像。一个是鉴别器Discriminator,判断一张图像是不是“真实的”,输入是一张图像,输出是该图像为真实图像的概率,介于0-1之间,概率值越小认为生成图像不真实的可能性越大。 1、原理 生成器的目标是通过生成接近真实的图像来欺骗判别器,而判别器的目标是尽量辨别出生成器生成的假图像和真实图像的区别。生成器希望假图像更逼真判别概率高而判别器希望假图像再逼真也可以判别概率低,通过这样的动态博弈过程,最终达到纳什均衡点,通过深度神经网络训练完成之后,生成器可以从一段随机数中生成逼真的图像。
大自然里就存在很多生成对抗的例子,如下图,在生物进化的过程中,被捕食者会慢慢演化自己的特征,从而达到欺骗捕食者的目的,而捕食者也会根据情况调整自己对被捕食者的识别,共同进化,上图中的啵啵鸟和枯叶蝶就是这样的一种关系。生成器代表的是枯叶蝶,鉴别器代表的是啵啵鸟。它们的对抗思想与GAN类似,但GAN却有所不同。
下图就是基于卡通头像的生成器与判别器之间的对抗示意图。生成器通过学习尽可能生成接近真实的卡通头像来骗过判别器,而判别器通过学习尽可能识别出哪个是真实图像哪个是生成器生成的假图像。
我们所熟知的自编码器(Auto-Encoder)以及变分自编码器(Variational Auto-Encoder)都是典型的生成器。输入通过Encoder编码成code,然后code通过Decoder重建原图,其中自编码器中的Decoder就是生成器,code可随机取值,产生不同的输出。 自编码器是一种能够通过无监督学习,对输入数据进行特征提取,学习到数据的抽象表示,称为编码过程,编码结果往往维度远小于输入数据,自编码器可以用于降维和特征提取,结构如下,
变分自编码器(Variational auto-encoder,VAE)是一类重要的生成模型(generative model),它于2013年由Diederik P.Kingma和Max Welling提出,是自动编码器的升级版,结构如下
生成器和判别器都可以自我训练,但生成器自我训练产生的图像是模糊的,无法产生逼近真实图像的假图像,如下:
而判别器也可以自我训练,给定一个输入图像,输出一个概率置信度,介于0-1之间,如下:
2、目标函数 GAN的目标函数是:
Data是真实数据(groundtruth),Pdata是真实数据的分布,z是随机噪音(输入数据),Pz是原始噪音的分布,Pg是经过生成器生成数据的数据分布,G()是生成映射函数,D()是判别映射函数。从判别器 D的角度看,它希望自己能尽可能区分原始真实样本和生成的假样本,因此希望 D(x) 尽可能大,D(G(z)) 尽可能小, 即 V(D,G) 尽可能大。从生成器 G 的角度看,它希望生成的假数据尽可能骗过判别器D,也就是希望D(G(z)) 尽可能大,即 V(D,G)尽可能小。两个模型相对抗,最后达到全局最优。 对于原始数据来说,判别输入样本是否来自原始数据的损失函数为
最大化这一项相当于令判别器D在输入服从原始数据data时概率值为1。 对于生成数据来说,判别输入样本是否来自生成器的损失函数为
对于判别器D而言,判别器要更强大,识别能力更强,而对于生成器G来说,又希望生成的数据很逼真,使得判别器D很小,即在给定 G 的情况下先最大化 V(D,G) 而取 D,然后固定 D,并最小化 V(D,G)而得到 G。其中,给定 G,最大化 V(D,G) 评估了 Pg 和 Pdata之间的差异或距离。
上图中黑色曲线为真实样本,绿色曲线为生成的假样本,蓝色曲线为判别器的输出,面对真实样本判别器的输出较大,面对虚假样本判别器的输出较小。
二、GAN的训练过程 GAN的训练流程如下: 1、 初始化参数 2、开始迭代: 1)先固定生成器的参数,训练判别器,使得判别器学会给真实图像高概率值,给生成的假图像低概率值; 2)固定判别器的参数,训练生成器,使得生成器学会生成逼近真实的假图像,使得判别器尽量得到高概率值; 3、重复迭代过程
更详细的实践过程如下:
GAN最大的缺点是作为一种隐变量模型,它难以被解释,结果也难以被量化(生成结果的好不好往往要靠人类去直观感受),而且GAN的训练也难于其他神经网络。 下图展示了生成器和判别器的优缺点
可以看出生成器和判别器的优缺点是可以互补的,GAN通过生成器和判别器联合训练,利用生成器生成样本求解最大化问题,又通过判别器得到全局性,这使得GAN产生了很大的优势。 训练GAN的一些技巧:
参考: https://www.cnblogs.com/fydeblog/p/9439024.html https://zhuanlan.zhihu.com/p/61453233 https://blog.csdn.net/stalbo/article/details/79283399