【学习清单】最近比较重要的GAN进展论文
By 苏剑林 | 2018-12-26 | 65867位读者 |这篇文章简单列举一下我认为最近这段时间中比较重要的GAN进展论文,这基本也是我在学习GAN的过程中主要去研究的论文清单。
生成模型之味 #
GAN是一个大坑,尤其像我这样的业余玩家,一头扎进去很久也很难有什么产出,尤其是各个大公司拼算力搞出来一个个大模型,个人几乎都没法玩了。但我总觉得,真的去碰了生成模型,才觉得自己碰到了真正的机器学习。这一点,不管在图像中还是文本中都是如此。所以,我还是愿意去关注生成模型。
当然,GAN不是生成模型的唯一选择,却是一个非常有趣的选择。在图像中至少有GAN、flow、pixelrnn/pixelcnn这几种选择,但要说潜力,我还是觉得GAN才是最具前景的,不单是因为效果,主要是因为它那对抗的思想。而在文本中,事实上seq2seq机制就是一个概率生成模型了,而pixelrnn这类模型,实际上就是模仿着seq2seq来做的,当然也有用GAN做文本生成的研究(不过基本上都涉及到了强化学习)。也就是说,其实在NLP中,生成模型也有很多成果,哪怕你主要是研究NLP的,也终将碰到生成模型。
好了,话不多说,还是赶紧把清单列一列,供大家参考,也作为自己的备忘。
拿效果来说话 #
话在前头 #
不严谨地说,目前在GAN中,基本上都是效果说话。不管你多么完美的理论,只要你实验不能生成高清图,都很难被人接受;你再丑陋的结果,只要你实验效果够好,能生成高清大图,大家都得围着你转。
GAN模型的一个标志性事件,是NVIDIA去年搞出来的Progressive Growing GANs,它首次实现了1024*1024的高清人脸生成。要知道,一般的GAN在生成128*128人脸时就会有困难,所以1024分辨率的生成称得上是一个突破。而下面列举的一些论文,都是在自己的实验中做到了1024的人脸生成。单是这个实验结果,就值得我们去关注一下这些论文。
当然,生成1024图除了需要模型的进步,还需要很大的算力,因此一般人/实验室都很难做到。关注这些论文,并不是要我们去复现这么大的图生成,而是因为这些模型能生成这么大的图,必然有它值得我们借鉴的地方,甚至我们可以从中明白到GAN的瓶颈所在,从而让我们在自己的研究中少走弯路。
论文清单 #
《Progressive Growing of GANs for Improved Quality, Stability, and Variation》
论文地址:https://papers.cool/arxiv/1710.10196
参考实现:https://github.com/tkarras/progressive_growing_of_gans
简单介绍:这篇文章就是前面说的首次实现了1024人脸生成的Progressive Growing GANs,简称PGGAN,来自NVIDIA。顾名思义,PGGAN通过一种渐进式的结构,实现了从低分辨率到高分辨率的过渡,从而能平滑地训练出高清模型出来。论文还提出了自己对正则化、归一化的一些理解和技巧,值得思考。当然,由于是渐进式的,所以相当于要串联地训练很多个模型,所以PGGAN很慢...
《Which Training Methods for GANs do actually Converge?》
论文地址:https://papers.cool/arxiv/1801.04406
参考实现:https://github.com/LMescheder/GAN_stability
简单介绍:这篇文章有很多对GAN训练稳定性的数学推导,最终得到了比WGAN-GP更简单的梯度惩罚项,关注GAN训练稳定性的同学可以参考。除了1024人脸,这篇文章也做了很多其他数据集的实验,效果都挺不错,而且都是直接端到端训练,不需要渐进式结构。我唯一困惑的是,这个惩罚项,不就是WGAN-div中的一个特例吗?为什么论文没有提到这一点?
《IntroVAE: Introspective Variational Autoencoders for Photographic Image Synthesis》
论文地址:https://papers.cool/arxiv/1807.06358
参考实现:(目前还没有看到效果好的开源/复现)
简单介绍:这是个会“反省”的VAE,通过对抗来改进了VAE,从而能生成高清图片,并且能同时得到编码器和生成器。除了能生成1024的高清图,更值得一提的是,这篇文章在构思上非常精妙。因为能同时得到编码器和生成器的模型不算独特,比如BiGAN就能做到,但是IntroVAE独特之处在于它能直接利用了encoder作为判别器,不需要额外的判别器,也就是直接省去了1/3的参数量。这背后更深层次的原因,值得我们去细细分析和回味。
《Large Scale GAN Training for High Fidelity Natural Image Synthesis》
论文地址:https://papers.cool/arxiv/1809.11096
参考实现:https://github.com/AaronLeong/BigGAN-pytorch
简单介绍:这就是大名鼎鼎的BigGAN。这篇文章虽然没有提供1024的人脸生成结果,但是它提供了128、256、512的自然场景图片的生成结果。要知道自然场景图片的生成可是比CelebA的人脸生成要难上很多倍,既然它连512的自然场景图片都可以生成了,我们自然不怀疑它能轻松生成1024的人脸。BigGAN在网上已经有很多科普介绍了,不再重复。论文还提出了自己的一些正则化技巧,并分享了大量的调参经验(调整哪些参数会有好的/坏的改变),非常值得参考。
《Variational Discriminator Bottleneck: Improving Imitation Learning, Inverse RL, and GANs by Constraining Information Flow》
论文地址:https://papers.cool/arxiv/1810.00821
参考实现:https://github.com/akanimax/Variational_Discriminator_Bottleneck
简单介绍:这篇文章通过信息瓶颈来控制判别器的拟合能力,从而起到正则作用,稳定了GAN的训练。信息瓶颈的简介可以参考我的这篇文章。总的来说,在普通有监督训练中一切防止过拟合的手段,理论上都可以用在判别器中,而信息瓶颈也算是防止过拟合的一种手段。当然,从标题就可以知道,论文也不满足于只用在GAN中,除了1024的人脸图生成实验,论文还做了仿真学习、强化学习等实验。
《A Style-Based Generator Architecture for Generative Adversarial Networks》
论文地址:https://papers.cool/arxiv/1812.04948
参考实现:https://github.com/NVlabs/stylegan
简单介绍:这就是前几天发出来的新GAN生成器架构,被很多文章称之为GAN 2.0,依旧是NVIDIA,依旧是PGGAN的作者,依旧是PGGAN的模式,只不过生成器的架构换了,人家在一年前就已经生成了1024图,这次肯定也不例外了。这个新的生成器架构,据说是借鉴了风格迁移的模型,所以叫Style-Based Generator。我读了一下,其实它差不多就是条件GAN(CGAN)的架构,但是把条件和噪声互换了。简单来说,就是把噪声当作条件,把条件当作噪声,然后代入到CGAN中。看论文的效果图,这种思维上的转换的效果还是很不错的,我自己也试着实现了一下,能work,但是有点mode collapse,大家还是等开源吧。顺便一提的是,一年前也是PGGAN的作者给我们带来了CelebA HQ数据集,现在还是他们给我们带来了新数据集FFHQ。据说数据集和代码都将在明年一月开源,让我们拭目以待。
稳住训练再说 #
话在前头 #
与有监督学习的任务不同,有监督学习中,一般只要设计好模型,然后有足够多的数据,足够的算力,就可以得到足够好的模型;但GAN从来都不是设计模型就完事了,它是一个理论、模型、优化一体的事情。从框架的角度来看,发展到WGAN后GAN的理论框架基本也就完备了,后面都只是不痛不痒的修补(包括我的GAN-QP);从模型架构来看,DCGAN奠定了基础,后来发展的ResNet + Upsampling也成为了标准框架之一,至于刚出来的Style-Based Generator就不说了,所以说模型架构基本上也成熟了。那剩下的是什么呢?
是优化,也就是训练过程。我觉得,要想真正掌握GAN,就得仔细研究它的优化过程,也许得从动力学角度来仔细分析它的训练轨迹。这可能涉及到微分方程解的存在性、唯一性、稳定性等性质,也可能涉及到随机优化过程的知识。总而言之,需要把优化过程也纳入到GAN的分析中,GAN才可能真正完备起来。
下面的这些论文,从不同的角度分析了GAN的训练问题,并给出了自己的解决方案,值得一读。
论文清单 #
《Stabilizing Training of Generative Adversarial Networks through Regularization》
论文地址:https://papers.cool/arxiv/1705.09367
简单介绍:通过加噪声的方式推导出了GAN的正则项,推导过程理论上适用于一切f-GAN。从论文效果图看,结果还是不错的。
《GANs Trained by a Two Time-Scale Update Rule Converge to a Local Nash Equilibrium》
论文地址:https://papers.cool/arxiv/1706.08500
简单介绍:提出了TTUR的训练策略,大概意思就是:原来我们每次迭代都是用相同的学习率将判别器和生成器交替训练不同的次数,现在可以考虑用不同的学习率将各自训练一次,这样显然训练起来会更省时。不过我粗略看了一下,尽管论文理论多,但是它理论基础却是另外一篇现成的文章《stochastic approximation with two time scales》,可以说论文只是反复在用这个现成的理论基础,略微单调。
《Which Training Methods for GANs do actually Converge?》
论文地址:https://papers.cool/arxiv/1801.04406
简单介绍:在前面已经介绍过这篇文章了,但这里还是再放一次,因为实在是太经典~感觉是研究GAN训练稳定性必看的文章,从微分方程角度来理解GAN的训练问题。在稳定性分析的过程中,这篇文章主要还引用了两篇文章,一篇是它的“前传”(同一作者),叫做《The Numerics of GANs》,另一篇是《Gradient descent GAN optimization is locally stable》,都是经典之作。
《Spectral Normalization for Generative Adversarial Networks》
论文地址:https://papers.cool/arxiv/1802.05957
简单介绍:通过谱归一化给判别器实现L约束,应该说是目前实现L约束最漂亮的方法了,目前谱归一化也用得很广,所以值得一提。相关介绍也可以参考我之前的文章。
《Improving the Improved Training of Wasserstein GANs: A Consistency Term and Its Dual Effect》
论文地址:https://papers.cool/arxiv/1803.01541
简单介绍:往WGAN-GP中添加了一个新的正则项,这个正则项的想法很朴素,就是直接把L约束(差分形式)作为正则项,跟GAN-QP的判别器多出来的二次项差不多。看论文的曲线图,训练比纯WGAN-GP要稳定些。
欢迎继续补充 #
这次的论文清单就这么多了,刚好凑够了十篇。限于笔者阅读量,不排除有疏漏之处,如果还有其他推荐的,欢迎在评论中提出。
PS:只关心NLP的读者也不用无奈,很快就会有一些NLP的博文出来了(^_^)
转载到请包括本文地址:https://kexue.fm/archives/6240
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
如果您需要引用本文,请参考:
苏剑林. (Dec. 26, 2018). 《【学习清单】最近比较重要的GAN进展论文 》[Blog post]. Retrieved from https://kexue.fm/archives/6240
@online{kexuefm-6240,
title={【学习清单】最近比较重要的GAN进展论文},
author={苏剑林},
year={2018},
month={Dec},
url={\url{https://kexue.fm/archives/6240}},
}
December 26th, 2018
哇,看到实验室学长的论文了,就是introVAE那篇。
我感觉还可以列一下关于mode collapse的文章,最近这方面论文也很多啊,比如nips的pacGAN
pacGAN类似minibatch GAN,连同RSGAN,包括我自己写的T-GAN,我觉得这些都不算真正意义上的突破了。如果这些都列举出来,那就很多啦。
另外在我看来,mode collapse其实是GAN的固有问题,目前的纯GAN体系下很难解决,倒是IntroVAE、BiGAN这些路会有希望。
对了,如果你能联系你的学长,跟他说一声他论文的$(9)$式KL散度的结果少了个负号~
December 31st, 2018
博主你好,我想问个关于introvae的问题,就introvae而言,其中的discriminator是不是一个散度呢?感觉不知道怎么分析。。。
是,以原来VAE的KL loss为discriminator。很遗憾,我没能复现introvae,所以我不好进一步提出自己的想法。
January 5th, 2019
NLP的博文等不及了
总会有的,不着急。
May 5th, 2019
[...]https://spaces.ac.cn/archives/6240 http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS18.html https://arxiv.org/pdf/1511.06434.pdf https://arxiv.org/abs/1406.2661 https://github.com/eriklindernoren/Keras[...]
March 6th, 2023
苏神您好,问个比较务虚的问题。我们学神经网络的时候,有时候我想根据自己的想法去coding一个模型,然后发现模型有各种各样的问题,调参或者调结构总是靠经验或者直觉,说白了就是靠猜。我就是不知道一些经典的模型结构别人是怎么想到的,比如是不是能够有什么通用的方法,一开始我们可能搭出了一个比较差的网络,然后通过看看每一层学到的权重分布,梯度什么的,然后根据这些信息,猜测到底效果差的原因是因为样本烂、样本少、还是少了bn,少了谱归一化,需要dropout。这方面有没有一些经验和总结呢?请指教!
之前和你差不多的想法,后来看了苏神的博客,尤其是对于优化目标的启发式探索(基于数学理论),让我感受到,关键点还是数学分析,而不是猜测。一个实践中很work的方案可能是你的一时灵感,但是仔细探究,总会找到其理论基础。我的感觉是从理论出发找到work的方案,比靠猜测或者灵感来验证ieda work的策略要务实得多,当然也难得多。
最后再次感谢苏神!
想系统地理一下思路,比如就你说的优化目标的启发式搜索什么的,因为我不是从数学系出身的,可能相对基础差些。比如做数学分析之类的工作,自己自学了一些矩阵分析、随机过程、泛函分析的课程(当然可能没有特别系统),发现最难的工作其实不是数学推导,而是合理的数学建模,往往只要直观上想清楚一件事情来龙去脉,能有一个数学模型描述它,后面就是翻书找工具,背不出公式也没关系,可以把能想到的所有可能的方法的书摊在地上,然后憋一下午就可能脑子里推通了。问题是有时候找不到一个合适的数学工具去描述我想要证明的结论或者想法。
“尤其是对于优化目标的启发式探索”,这些东西有没有系统性的教一些思维方法类的书,很多教材,感觉是直接给结论的,看懂了,但又似乎只是看懂了,并不能灵活转化。。。
深度学习发展史,很多都是先得到了有效的实验结果,然后才去想办法解释,而且很多之前看上去合理的解释,后面也有被推翻的例子。
所以,开始阶段我们基本就只能接受,尤其是没有人引导的情况下,只能多读多接受。当你接受得足够多了,超出你的承受范围了,你就自然不会停留在纯粹接受的范围内,而是开始融会贯通,拥有自己的思路。之前我们数学分析的老师说过一句话,学习是从一个从薄到厚、再从厚到薄的过程,便是这个意思。
在这个过程中,自律且不自欺。
自律容易理解,坚持、毅力;不自欺的意思是,不要为了读论文的数量或者完成任务,自己骗自己说弄懂了,然后就去读下一篇。什么是弄懂,首先咬文嚼字理解论文的每一行字、每一个概念,然后能够复述甚至再创造就是弄懂了。这个过程看上去很难很费时间,但对于某个专业领域而言,只要你坚持几篇做到这个程度,后面就会逐渐加快了。