生成对抗网络GAN 初步学习

生成对抗网络GAN,是当今的一大热门研究方向,在2014年被Goodfellow提出来。
学习GAN,首先应该了解GAN是是干什么的,为什么要学GAN
GAN的初衷就是生成不存在于真实世界的数据,类似于使得AI具有创造力或者想象力。应用场景如下:
1.AI作家,AI音乐,可以生成相似风格的曲目,AI 画家等需要创造力的AI体
2.将模糊的图像变清晰(去雨,去雾,去抖动,去马赛克等),这需要AI具有所谓的想像力,能脑补情节,
3.进行数据增强,根据已有数据生成更多新数据供以feed,可以减缓模型过拟合现象。

GAN的原理介绍

这里介绍的是原生的GAN算法,虽然有一些不足,但提供了一种生成对抗性的新思路。
理解GAN的两大护法G和D
G是generator,生成器:负责凭空捏造数据出来
D是discriminator,判别器:负责判断数据是不是真的
这样可以简单的看作是两个网络的博弈过程。在最原始的GAN 论文里面,G 和D都是两个多层感知机网络。首先,注意一点,GAN操作的数据不一定非得是图像数据,不过为了更方便解释,我们在这里用图像数据为例子解释以下GAN:

稍微解释下上图,z是随机噪声(就是随机生成的一些数据,也就是GAN生成图像的源头)D通过真图和假图的数据(相当于天然的label)进行一个二分类神经网络训练。G根据一串随机数就可以捏造一个“假图像”出来,用这些假图去欺骗D,D负责辨别这是真图还是假图,会给出一个score,比如G生成了一张图像,在D这里得分很高,那证明G 是很成功的;如果D能有效区分真假图,则G的效果还不太好,需要调整参数。GAN 就是这么一个博弈的过程。
那么GAN是怎么训练的呢
根据GAN的训练算法
下面有一张图


GAN 的训练在同一轮梯度反转的过程中可以细分为2步,先训练D再训练G;注意不是等所有的D训练好以后,才开始训练G,因为D的训练也需要上一轮梯度反转中G的输出值作为输入。
当训练D的时候上一轮G产生的图片,和真是的图片,直接拼接在一起,作为x,然后根据,按顺序摆放0和1,假图对应0,真图对应1.然后就可以通过,x输入生成一个score(从0到1之间),通过score和y组成的损失函数,就可以进行梯度反转了。
当训练G的时候需要把G和D当作一个整体,这个整体的输出仍然是score,输入一组随机向量,就可以在G生成一张图,通过D对生成的这张图进行打分,这就是DG系统的前向过程,score=1就是DG系统需要优化的目标,score和y=1之间的差异就可以组成损失函数,然后可以反向传播梯度,注意,这里的DG的参数是不可训练的,这样就能保证G的训练是符合D的打分标准的,这就好比:如果你参加考试,你就别指望能改变老师的评分标准,
需要注意的是整个GAN的整个过程都是无监督的
就是指 给出的真图是没有经过人工标注的,你只知道这是真实的图片,比如全是人脸,而系统里的D并不知道来的图片是什么东西,他只需要分辨真假。G也不知道自己生成的是什么东西,反正就是学真图片的样子骗D
也正是由于GAN的无监督,在生成过程中,G就会按照自己的意思天马行空生成一些诡异 的图片,可怕的是D还能给出一个很高的分数。比如,生成人脸扭曲的图片。这就是无监督目的性不强所导致的,所以在同年的NIPS大会上,有一篇论文CONDITIONAL GAN就把监督性加进去,将可控性增强,表现效果也很好。

猜你喜欢

转载自blog.csdn.net/code_Joe123/article/details/89380172