本篇主要介绍了DCGAN,BigGAN,WGAN,WGAN-GP。繁琐的公式推导并没有呈现,直接给出结论,简单易懂。
目录
DCGAN:
我们之前使用的实战代码实际上就是DCGAN。GAN基于全连接层实现生成器G和判别器D网络,图片维度高,因此网络参数量巨大,训练效果并不是特别好。而DCGAN提出使用转置卷积来将噪声放大,获取生成图片,因此使用转置卷积实现生成器G。判别器D的作用就是获取图像特征,进行二分类,因此使用卷积层实现判别网络D是较好的选择。
BigGAN:
将 GAN 的训练扩展到大规模上去,可以从大数据、大算力等方面受益,可以提高图片分辨率,使图片细节更加逼真。
除此之外还有许多变种,此处不再一一赘述,DCGAN我们已经应用过,下面要讲的WGAN是重点。
WGAN:
在讲WGAN之前先讲一下纳什均衡:首先有真实图片的正态分布和生成图片的正态分布(初始二者相距较远),没什么联系。并且有一条判定线,如果是真实图片就为1,生成图片就为0。
一开始判别器能将二者区分开就对应了判别器的训练过程。经过学习绿色的生成图片正态分布逐渐向蓝色的真实图片的正态分布拟合,最终难以区分。
经过一系列推导我们可以总结出生成网络G最终将收敛到真实分布。此时生成的样本与真实样本来自同一分布,真假难辨,在判别器中均有相同的概率判定为真或假。
实际上GAN是不易训练的,主要是因为对超参数比较敏感,超参数设定不好就容易出现模式崩塌。
模式崩塌(Mode Collapse):模型生成的样本单一,多样性很差。由于鉴别器的工作原理只能检测图片到底是不是和真实图片拟合,并不能判断图片的多样性。如此一来可能导致生成器只去拟合真实分布少量高质量区域,以此来在判别器中获得为真的评价,而不去拟合整个网络。最终可能生成的图片都是一模一样的。我们希望生成网络能够逼近真实的分布,而不是真实分布中的某部分。
JS散度:一种分布距离度量标准,是KL散度的组合,克服了KL散度不对称的缺陷。
导致GAN训练不稳定的原因是:利用JS散度在两个不重叠的分布上梯度或者说导数恒为0,这就表明了两个分布在不重叠时梯度弥散,参数无法更新。经过推导发现当两个分布完全不重叠时,散度为恒定值,梯度恒为0,当两个分布出现重叠时,JS散度才会有正常梯度,才可以更新;完全重合后JS散度取最小值为0。
因此引入了Wasserstein距离表示了从一个分布变换到另一个分布的最小代价。简称EM距离。大家知道EM距离总能产生有用的导数信息,适用于GAN网络的训练即可。
WGAN-GP:
实际就是WGAN引入了梯度惩罚项(Gradient Penalty)。
判别器的损失函数就是EM距离-惩罚项。训练使判别器的损失函数最大化,即需生成器分布和真实分布的EM距离大,GP惩罚项小即可。
生成器的损失函数就是EM距离。我们希望生成分布尽量接近真实分布,因此希望EM距离尽量小。
判别网络的输出不需要添加Sigmoid激活函数,本来是作为二分网络进行判别,Sigmoid激活函数最后可以输出判别情况的概率;而WGAN中判别器度量的是两个分布之间的EM距离,输出实际上是一个实数。