GAN原理总结以及对比

本文对GAN原理介绍,以及与其他几种改进的GAN,主要介绍两种改进GAN(为什么只有两种呢,因为最近只详细的看了这两个,来做点笔记(错了就帮忙指出一哈----我是一个小白))

目录

一、GAN

二、WGAN-GP

三、SRGAN


一、GAN

GAN(Generative Adversarial Network)是生成式对抗网络,是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的方法之一。GAN主要由两个网络构成,生成网络G和判别网络D。其中生成网络G的思想就是将一个生成的随机噪声包装成一个逼真的样本,判别网络D就需要判断送入的样本是真实还是虚假的样本,以此来达到共同进步的的过程。在判别网络D对样本的识别能力不断上升的过程中,生成网络造假能力也不断提升,直到判别网络无法识别真实的图片和虚假的图片,那么这个网络就拟合了。

GAN原理总结以及对比_第1张图片

上图中,q(x)是真实图片的数据分布,z是一个随机噪声,通过生成网络G生成一张虚假的图片G(z) 去欺骗判别网络D,而判别网络D的目的就是将真实图片和虚假图片区分开来,这样G、D就构成了一个动态博弈的过程。

下面是论文中提到的GAN的损失函数:

  1.  D(x)表示判别网络D判断真实图片是否真实的概率(因为x就是真实的,所以这个值越接近1越好),D(G(z))表示判别网络D判断生成网络G生成图片G(z)是真实图片的概率
  2. 生成网络G的目的是让自己生成的图片尽可能的接近真实的图片,即D(G(z))的值越大越好,此时V(D,G)会变小,所以式子中G是取最小
  3. 判别网络D的目的是尽可能的分别真实和虚假的图片,此时D(x)应该越大,D(G(z))应该越小,此时V(D,G)会变大,所以式子中D是取最大

其中GAN也有明显的缺点,就是不适合处理离散的数据,当图片较大时,简单的GAN的方法就不可控了,训练不稳定,容易产生梯度消失或者梯度爆炸的情况。

二、WGAN-GP

说到WGAN-GP就先说说WGAN,WGAN(Wasserstein GAN)是GAN的改进版,相比GAN来说:

  1. 判别器最后一层去掉sigmoid
  2. 生成器和判别器的loss不取log
  3. 每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定的常数c
  4. 不要用基于动量的算法,推荐RMSProp,SGD也可

在WGAN中使用Wasserteion距离需要满足很强的连续性条件--lipschitz连续性,为了满足这个条件,采用强行将权重限制到一个范围的方式强行满足lipschitz连续性。在剪切之后,WGAN-GP论文中指出了这个方法的问题,如下图左边所示(从论文中截取下来的图片,有点不清晰):

GAN原理总结以及对比_第2张图片

在强行限制权重之后,导致WGAN存在很大的问题,判别器的loss希望尽可能的拉大真假样本之间的分数差,最后发现权重基本集中在限制的的两端,减少了参数的多样性,使判别器的神经网络学习到一个简单的映射函数,是一种巨大的浪费,再者就是这样很容易导致梯度消失或者梯度爆炸的情况,如果把阈值(就是clipping threshold)设置的小一点,每经过一个网络,梯度就会小很多,多层之后就会指数衰减;如果把阈值设置的大一点,每经过一层网络,梯度就会变大一点,多层之后就会形成梯度爆炸的情况。因此在WGAN之后,作者很快就提出了解决方案,即gradient penalty(梯度惩罚)。lipschitz限制是要求梯度不超过k值,而gradient penalty就是设置一个额外的loss项来实现梯度和k之间的联系,这就是梯度惩罚的核心。下面给出WGAN-GP论文中提到的损失函数:

GAN原理总结以及对比_第3张图片

 损失函数的前面一项就是服从生成图片分布的期望和服从真实分布的期望,并在此过程中,希望尽可能的拉大真实图片的分数,尽可能的降低生成图片的分数。这里主要是后面一项的梯度惩罚,第三个期望的采样的样本空间是x^,但是这会产生维度灾难的问题,所以在论文中就提出了x^的样本空间的范围,以及一个取值在[0,1]之间的随机数(电脑上没有mathtype,公式就都是在论文上截取的):

其中x和x~是在真实图片和生成图片的分布,ε是一个在[0,1]之间的随机数,这样x^就取的是x和x~连线上的随机插值采样,这样就不会造成维度灾难。 λ 在论文中指出是一个常数,并且作者使 λ 固定在某一常数使得效果最佳。然后中括号里面的就是加惩罚,里面是一个非负数,如果非负数太大会导致L太大,所以在最小化L的时候(||啥啥啥||2)这一项不会太大,会在1的附近(这里提出的lispchitz限制指的是1-Lispchitz),这就稳住了梯度,保证了在判断生成图片是真实图片的概率值不会超过D(x)。

三、SRGAN

SRGAN(Super-Resolution GAN)是超分辨率生成式对抗网络,将低分辨率转化为高分辨率的过程就叫做超分辨率。SRGAN是一种基于GAN的网络,针对新的感知损失进行了优化,这里主要讲一哈损失部分。

GAN原理总结以及对比_第4张图片

这里作者就balabala说了一堆,总而言之就是说GAN比MSE要好,为自己后面感知损失的优化做一下铺垫。

这里是文中提到的方法,下面是给出的式子:

在训练的时候需要提供高分辨率图,这里作者采用先将HR图先降采样成LR,然后用LR取训练生成器,得到对应的HR,其中训练生成器的过程和训练前馈卷积神经网络一样,都是对其中的一些参数进行优化。

然后再来说一哈对抗网络结构,这里是采用交替优化D、G的方式,论文中给出的公式如下:

下面是网络的结构图:

GAN原理总结以及对比_第5张图片

生成网络(G网络):核心是中间的残差网络,k3n64s1是指卷积核为3*3,特征通道为64,步长为1。

GAN原理总结以及对比_第6张图片

判别网络(D网络):这里使用LeakyReLU作为激活函数。

接下来就是SRGAN的创新点了,感知损失函数,文中给出的公式如下:

GAN原理总结以及对比_第7张图片

这里的感知损失有两部分组成:内容损失和对抗损失。采用加权的方式得到感知损失。

首先是内容损失,文中介绍了像素方式计算的MSE损失,说大部分做图像超分辨率的都用MSE作为损失函数来进行优化,这样虽然能够得到较高的PSNR(即信噪比),但是以这种方式生成的图片存在高频细节的缺失问题。因此作者根据其他人用预训练19层VGG网络的ReLU激活层来定义VGG loss的描述,并指出在激活后的第 i 个最大池化层之前的第 j 个卷积获得的特征图是给定的,然后将生成图像和参考高分图像特征表示之间的欧氏距离定义为VGG loss,下面是文中给出的公式:

GAN原理总结以及对比_第8张图片

第二个是对抗损失,作者将GAN中生成器对感知损失的影响通过对抗损失(adversarial loss)体现出来。这一部分损失函数使网络通过“欺骗”判别网络从而偏向生成更接近自然图像的输出。 下面是文中给出的式子:

GAN原理总结以及对比_第9张图片

大致就是这么多了,剩下的有待继续学习。。。

你可能感兴趣的:(神经网络,GAN,WGAN-GP,SRGAN)