GAN模型初步总结
对之前学习的TFGAN库中的各种GAN做一个理论上的总结。
GAN
论文地址是Generative Adversarial Nets,提出了GAN模型的基本结构和优化目标。基本结构包括两个网络结构——生成模型Generator和判别模型Discriminator。G网络尽可能生成满足正样本分布的假样本,而D网络则尽可能辨别出真假样本,在这个博弈过程中2种网络的性能都越来越好。GAN模型结构如下:
![](https://img.haomeiwen.com/i13223816/36656aadc4259250.jpg)
![](https://img.haomeiwen.com/i13223816/8e1650cdac91adab.png)
InfoGAN
论文地址是InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets,论文出发点和CGAN相似,InfoGAN也提出了加入新信息(论文中称为latent code)来控制G网络的具体输出。不过在训练方式上InfoGAN和CGAN不一样,CGAN只是将条件信息直接拼接在输入噪音信息和真实信息上,而InfoGAN则是额外创建了一个网络用来保证G网络的输出和真实样本之间的互信息最大化。InfoGAN的优化目标是
其中,
就是G网络输出和相应类别之间的互信息损失(代码)。
难以优化,因为我们不知道后验概率
(x是G网络的输出,我们是没法知道训练过程中G网络输出与
之间的概率关系),所以InfoGAN采用变分推断的思想,用一个可调的已知分布去尽可能靠近未知的后验概率分布
。简单的说就是保证新加入的模型的输出向量和c对应的向量的交叉熵尽可能小。
LSGAN
论文地址是Least Squares Generative Adversarial Networks,LSGAN指出初代GAN模型的损失函数很可能导致梯度消失问题,所以LSGAN提出将GAN模型的损失函数由sigmoid cross entropy loss改为least square loss。LSGAN中D网络(代码)和G网络(代码)的优化目标是其中,
是G网络输出对应的label,
是真实样本对应的label,
是G网络希望D网络对虚假样本的判别值。比如我们可以按照原始GAN中那样将
设置为0,
设置为1,
设置为1。论文指出,least square loss有2个优势,一是对于那些被判定为真实样本,但是距离分界线较远的虚假样本依然会贡献损失,二是训练过程更加稳定,loss出现NaN的概率比较少。同时论文还指出当满足
时,LSGAN的优化目标其实就相当于皮尔逊卡方检验,从而在理论上证明了least square loss对于拉近
和
的有效性。一般的LSGAN模型结构如下:
![](https://img.haomeiwen.com/i13223816/2d5a4c26b1fe4aac.png)
![](https://img.haomeiwen.com/i13223816/ce27d93d25e3ff07.png)
WGAN(WGAN-GP)
WGAN论文地址是Wasserstein GAN,WGAN-GP论文地址是Improved Training of Wasserstein GANs。WGAN的主要工作是从理论上证明了传统GAN模型的loss给训练带来的弊端,并提出新的基于wasserstein distance(也称为推土机距离)的loss函数,而WGAN-GP则是对WGAN提出的一点改进再次进行了改进。具体如下:
- WGAN提出了4点改进:
- 判别器最后一层去掉sigmoid
- 生成器和判别器的loss不取log
- 每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数c
- 不要用基于动量的优化算法(包括momentum和Adam),推荐RMSProp,SGD也行
- WGAN-GP则是对上面的第3点提出改进,提出用梯度惩罚来代替梯度裁剪
WAGN中D网络(代码)和G网络(代码)的优化目标是而WGAN-GP的优化目标是
其中Gradient penalty的实现可看代码。如果想更加详细的了解WGAN和WGAN-GP,可以看下面这两篇博客:
ACGAN
论文地址是Conditional Image Synthesis with Auxiliary Classifier GANs,从模型结构上看,ACGAN做的工作就是将CGAN和InfoGAN结合起来。ACGAN中G网络的输入是将噪音和label拼接起来(CGAN),有,同时设计了一个辅助分类网络对真假样本进行分类(InfoGAN),可见ACGAN是将辅助信息使用到了极致。ACGAN模型的优化目标如下:
其中,通过最大化
来训练D网络,最大化
来训练G网络。ACGAN的实现可看代码。ACGAN并没有多少理论上的创新性改进,但是它在ImageNet上做了大量的实验,如下:
- 合成不同分辨率的图像并计算其可判别性,发现当合成图像分辨率越高时质量也越高(将合成图像传入到Inception网络中,高分辨率合成图像其对应的准确率越高,从而反映了图片质量越高)。
- 使用MS-SSIM来衡量生成图像的多样性。结构相似性(structure similarity)原本是衡量两张图片相似性的指标,这里作者将其用来衡量生成图像的多样性,MS-SSIM值越低说明生成的图像多样性越高。
- 对合成图片的Inception模型输出准确性和相应的MS-SSIM值进行了分析,发现如果GAN模型输出的合成图片多样性越高,那么这些图片的Inception模型的准确率也要高一些。
- 探索了模型是否过拟合(是学会了相关图片的分布还是只是“记住了”训练图片)。最简单的方法就是从训练集中找到“距离”合成图片最近的真实图片,发现这些真实图片并不能代表合成图片,说明了模型不是只是“记住了”真实图片的分布。作者还提出了其他验证方法,一种是对模型的潜在空间进行线性插值,看是否会出现discrete transition(个人理解就是插值后的图片很不连贯),另外一种就是保持输入的额外信息
不变,看合成图片对应的Inception模型输出的类别(大部分类别都不一样说明模型没有过拟合)。
- 探索了类别数量对模型性能的影响,如果训练集中真实图片所属类别越多,那么最后模型的MS-SSIM值也相对越高,也就是合成图片更加单调,但是论文中指出增加模型参数可以改善这个影响。(个人意见)我认为这说明了要想合成更多不同种类且多样化的图片,还是需要更大的模型才行。
CycleGAN
论文地址是Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks,CycleGAN在结构上做了很大的改进,CycleGAN是将两个普通GAN模型结合起来进行训练,两个GAN模型的G网络输入都是真实图片(不再是噪音)。CycleGAN所做的工作就是对两类真实图片进行图像风格迁移,将G网络输入的真实图片的风格转换成另外一种图片的风格。此时模型优化目标是其中,
和
是两类不同风格的图片,模型
是将输入图片X的风格转换成图片Y的风格,模型
是将输入图片Y转换成图片X的风格。上式中一、二项都是GAN模型的损失,而第三项是论文的关键——循环一致性损失。首先看下该损失对应的公式:
单看第一项,数据
输入到
的生成网络中,并将输出结果输入到
的生成网络中,最后计算输出结果与原始数据x的距离。第二项做的工作也是一样的。对这一项进行优化就是要保证图片经过两次转换后发生的变化尽可能小,其实就是为了保证生成网络能更好的拟合风格X到风格Y之间和风格Y到风格X之间的映射关系,防止GAN模型的合成图片太单调(mode collapse)。Cycle loss的实现可见代码 。CycleGAN的模型表示如下:
![](https://img.haomeiwen.com/i13223816/8155f8212501381e.png)
StarGAN
论文地址是StarGAN: Unified Generative Adversarial Networks for Multi-Domain Image-to-Image Translation,从论文名就可以看出,StarGAN的任务是多领域的图到图的翻译(multi-domain image-to-image translation),改进是将多个GAN模型统一为一个(unified generative adversarial networks)。具体改进如下图:
![](https://img.haomeiwen.com/i13223816/b070a780c6ca1bd4.png)
![](https://img.haomeiwen.com/i13223816/a3aeb8cbe77d5027.png)