自从OpenAI的Ian J.Goodfellow大神发的开创性文章GAN以后,GAN的发展是膨胀式的,工业界的各个大牛也随之加入GAN蓬勃发展的大军中。除了OpenAI之外,工业界好多公司都参与到了GAN的研究中,包括了Facebook、Google、Apple等公司。其中一个发表比较的多的就是Facebook的Soumith Chintala,他参与发表了DCGAN、LPGAN、WGAN以及SSGAN,其中WGAN也是得到了大量的关注,该文详细的对GAN的缺陷进行了深入解析,然后提出了具有里程碑式的改进,个人认为这对后续GAN的发展起到了很关键的作用;另外Google也是在GAN相关方向上发表了4篇以上的论文,G家的工程能力再一次凸显出来,一上来就结合adboost、unrolled、autoencoder等方向发表了几篇文章;除此之外就连Apple也将自己对外发表的第一篇AI论文SUGAN献给了GAN领域,该SUGAN文章讲述如何利用合成图像而不是随机向量作为输入结合GAN对合成图像的质量进行无监督的改善提升然后用于训练。
随着GAN在目标优化上的不断持续改进,目前应用方向也得到了一些扩展,涉及的方向包括但不限于如下:图像生成,文本生成图像,根据场景生成视频,骨架图检索,图像超分辨率,通讯保护等。由于GAN的生成对抗特性,它特别适用于不同域上的特征映射,这个想象空间就会非常大,结合之前DL的一些常见应用可以展望如下结合域上的一些应用:图像文本结合,图像语音结合,图像视频结合等。另外它可以天然的去做无监督学习、半监督学习等。
在观察了工业界以及应用上的一些动向后,需要来看下到底GAN的目标函数是怎样的?在调研中发现,生成对抗式网络的目标函数也是经过了很多轮的改进。首先GAN文章提出了生成对抗式网络,其基本公式如下:
其中D函数代表判别网络,G代表生成网络,整个优化目标需要最大化判别网络D判别正确的概率(公式第一项)同时需要最小化G生成的样本被判别出来的概率(公式第二项)。在实际的训练过程中:1)早期G网络很弱,D网络总是能判别出来G生成的样本,这时候公式第二项的梯度会很弱,所以早期的时候会采用最大化log D(G(z))的方式来获取更强的梯度;2)训练过程中会训练k步D网络,然后再训练一步G网络,总是让D网络足够强。论文中提到的实际训练中的第一个技巧也预示着在后续的训练中只要D网络特别强,那么论文公式一中的第二项会让G网络的梯度变很弱,这时候训练过程就进行不下去了,所以在训练GAN的时候别把D网络训练得太强。WGAN文章提出在训练集样本概率密度函数与生成样本概率密度函数两者分布的可重叠部分很少时,GAN中优化公式一的损失函数就会变为一个常数,从而梯度就会消失,网络也就训练不下去了。除此之外,WGAN基于GAN文章中的内容将目标函数转化了下,从拉进生成样本的概率密度分布与训练集样本的概率密度分布为目标提出了如下损失函数用来度量两个概率密度分布的距离(WGAN公式一):
接着文章将其转化成了WGAN公式二:
再接着转化成WGAN公式三:
由于公式三中的f函数必须满足论文中提出的K-Lipschitz条件,所以在实际训练WGAN网络的时候,可以通过限制网络参数在某一固定取值空间内即,然后每次更新完网络参数w,都将其裁剪到上述的固定取值空间。在WGAN解决了原始GAN的梯度消失问题后,接着在实践中,大家又发现了其他的问题那就是LSGAN文章中提出的modecollapse现象,在WGAN的公式三中,可能会出现生成的样本和一部分真实样本已经非常相近,但该公式三还会一直在这部分真实样本上持续不断的产生梯度,当这部分样本占很大多数时,网络就会一直陷入这批真实样本上的持续优化中,另一部分少数真实样本的概率分布可能就会学不到。基于上述观察LSGAN提出了LSGAN公式六:
在实际训练中文章显示LSGAN方法在生成网络梯度方面具有更加鲁棒的特性,另外
部分采用像素级别的L1距离。MRGAN论文观察到之前GAN的方法大多采用将随机向量z映射到一个样本空间,这样可能会增加GANs网络的学习难度,文中提出让 z 从一个样本空间先映射过来,也就是有一个 z = encoder(X) 的过程,从而再,G(encoder(X))。这样可以让生成样本尽可能靠谱点,也就是让G生成网络能力尽可能强些,这样整个训练也会更加平稳,并且这里也同时可以更好的解决mode collapse问题,因为通过让z = encoder(X),该方法RGAN已经显示的让生成网络能覆盖所有的样本空间。MRGAN的目标函数如下:
在实际训练中,会迭代地去训练MRGAN公式二与RGAN公式一。