GAN主要由两个网络组成,一个是生成网络G(Generator),另一个是判别网络D(Discriminator)。
以图片生成为例:
在训练过程中,G的目标就是尽量生成真实的图片去欺骗判别网络D。而D的目标就是尽量把G生成的图片和真实的图片分别开来。这样,G和D构成了一个动态的“博弈过程”。
最后博弈的结果是什么?
在最理想的状态下,G可以生成“以假乱真”的图片G(z)。对于D来说,它难以判定G生成的图片究竟是不是真实的,因此D(G(z)) = 0.5。
这样我们的目的就达成了:我们得到了一个生成式的模型G,它可以用来生成图片。
定义一个模型来作为生成器G(图中蓝色部分Generator),能够输入一个向量,输出手写数字大小的像素图像。
定义一个分类器来作为判别器D(图中红色部分Discriminator)用来判别图片是真的还是假的(或者说是来自数据集中的还是生成器中生成的),输入为手写图片,输出为判别图片的标签。
(1)模型坍塌(Model collapse)
(2)梯度消失
(3)训练不稳定,训练缓慢
全称:Deep Convolutional GAN
使用CNN的方式来实现GAN,在经典CNN中通常是使用卷积逐层实现信息提取,用pooling实现信息筛减。但是在GAN中使用CNN时,需要使用到转置卷积,生成器G将输入的噪声z
通过一层层的转置卷积将信息扩充,生成与目标相似的信息。
1)生成质量不高
2)当需要生成的图片太大的时候,训练的稳定性有问题
3)模型坍塌
4)梯度消失
全称:Least Squares GAN
LSGAN是为了解决梯度消失和模型坍塌这一系列问题而提出的一种方法。
它通过修改训练中的Loss来改进模型。使用Least Squares
来作为Loss,让梯度更有效的传递回去。
上面的经典GAN和DCGAN使用的是sigmoid cross entropy
,但是sigmoid
的梯度范围非常有限,如果梯度无法有效的传递给网络,那么会导致1)网络的参数更新缓慢;2)网络趋向于停止学习
从上面两幅图可以看出,sigmoid
的梯度值是最小的。
LSGAN通过修改loss,将sigmoid
替换为least squares
。
sigmoid
MeanSquaredError
1)新的loss实现方式知识优化了梯度传递中的问题,但是仍然存在模型坍塌的问题。
2)在训练过程中,生成器和判别器是在一种对抗的状态,但是任何一方太强,就会碾压对方,对抗的平衡被打破,从而导致训练失败。
全称:Wasserstein GAN
WGAN使用了一种更好的方式来测量生成数据与真实数据的差距,并用这种方式来拉近他们的距离。
1)梯度上的问题
在经典GAN中,它使用的是一种叫做JS散度的数据分布测量方法。知乎上的这篇文章从数学的角度分析了经典GAN中JS散度的缺陷——当两个分布没有重叠部分,或重叠部分比较小的话,其可以用来更新模型的梯度就是0,或忽略不计。
2)模型坍塌的问题
经典GAN中还存在模型塌陷的问题,导致生成器G生成的模式固定,生成多样性非常少。
WGAN中,使用Wasserstein
距离来替换经典GAN中loss使用的JS散度
上面公式的详细理解可以参考知乎中的这篇文章
WGAN从GAN的理论上深度剖析了经典GAN中loss的劣势,并提出了释放GAN学习能力的方法,用Wasserstein (W) distance
释放GAN的学习力。不过由于里面用了一个clip
截断网络参数的做法,让GAN的学习力还没有完全的发挥出来。
全称:WGAN with gradient penalty
WGAN-gp是对上面提出的WGAN的一种改良:用一种梯度惩罚的方法替换 clip weights。
WGAN在为了保证1-Lipschitz
这种约束条件时,使用了clip weights
的方法,局限住判别器的能力,但是这种一刀切肯定是不好的。WGAN-gp为了解决这种一刀切,提出了一种更柔和的方式,也就是使用gradient penalty
来约束。
全称:Wasserstein Divergence for GANs
在WGAN-gp中,为了满足1-Lipschitz
约束,训练出好效果,作者采用了真假数据的插值方法,来模拟全空间的均匀分布。WGAN-div的作者认为,这种做法是一种机械性的,很难靠有限的采样,模拟出这种全空间分布。
全称:Self-Attention GAN
SAGAN中引入了注意力机制,让模型可以有重点的观察、分析,从而生成效果更好的图像。简单的来说就是:围绕着重点画画,画出来的画更有神
。
全称:Progressive Growing GAN
GAN 在小尺寸上图片(<60px)的生成任务已经可以达到相对比较好的效果了,但是继续扩大尺寸,比如到到1024px,生成的难度是指数型增加的, 因为可以尝试的排列组合数是指数型增高。
训练难度的提高,将会出现几个问题:
PGGAN 从训练方法上革新,实现分阶段,从易到难,从简单的小任务到大任务过度型学习
。
[1] GAN学习指南:从原理入门到制作生成Demo
[2] 通俗理解生成对抗网络GAN
[3] 你的GAN训练得如何–GAN 的召回率(多样性)和精确率(图像质量)方法评估
[4] 生成对抗网络——GAN(一)
[5] GAN生成对抗网络——莫烦
[6] 通俗理解GAN(一):把GAN给你讲得明明白白