在对 GAN 的学习和思考过程中,我发现我不仅学习到了一种有效的生成模型,而且它全面地促进了我对各种模型各方面的理解,比如模型的优化和理解视角、正则项的意义、损失函数与概率分布的联系、概率推断等等。GAN不单单是一个“造假的玩具”,而是具有深刻意义的概率模型和推断方法。
作为事后的总结,我觉得对 GAN 的理解可以粗糙地分为三个阶段:
1. 样本阶段:在这个阶段中,我们了解了 GAN 的“鉴别者-造假者”诠释,懂得从这个原理出发来写出基本的 GAN 公式(如原始 GAN、LSGAN),比如判别器和生成器的 loss,并且完成简单 GAN 的训练;同时,我们知道 GAN 有能力让图片更“真”,利用这个特性可以把 GAN 嵌入到一些综合模型中。
2. 分布阶段:在这个阶段中,我们会从概率分布及其散度的视角来分析 GAN,典型的例子是 WGAN 和 f-GAN,同时能基本理解 GAN 的训练困难问题,比如梯度消失和 mode collapse 等,甚至能基本地了解变分推断,懂得自己写出一些概率散度,继而构造一些新的 GAN 形式。
3. 动力学阶段:在这个阶段中,我们开始结合优化器来分析 GAN 的收敛过程,试图了解 GAN 是否能真的达到理论的均衡点,进而理解 GAN 的 loss 和正则项等因素如何影响的收敛过程,由此可以针对性地提出一些训练策略,引导 GAN 模型到达理论均衡点,从而提高 GAN 的效果。
其中 L(θ) 是模型的 loss,而 θ 是模型的参数。如果考虑随机性,那么则需要加上一个噪声项,变成一个随机微分方程,但本文我们不考虑随机性,这不影响我们对局部收敛性的分析。假定读者已经熟悉了这种转换,下面就来讨论 GAN 对应的过程。
GAN 是一个 min-max 的过程,换句话说,一边是梯度下降,另一边是梯度上升,假设 φ 是判别器的参数,θ 是判别器的参数,那么 GAN 对应的动力系统是:
当然,对于更一般的 GAN,有时候两个 L 会稍微不一样:
不管是哪一种,右端两项都是一正一负,而就是因为这一正一负的差异,导致了 GAN 训练上的困难。我们下面就逐步认识到这一点。
相关工作
将 GAN 的优化过程视为一个(随机)动力系统,基于这个观点进行研究分析的文献已有不少,我读到的包括 The Numerics of GANs [2]、GANs Trained by a Two Time-Scale Update Rule Converge to a Local Nash Equilibrium [3]、Gradient descent GAN optimization is locally stable [4]、Which Training Methods for GANs do actually Converge? [5],而本文只不过是前辈大牛们的工作的一个学习总结。
在这几篇文献中,大家可能比较熟悉的是第二篇,因为就是第二篇提出了 TTUR 的 GAN 训练策略以及提出了 FID 作为 GAN 的性能指标,而这篇论文的理论基础也是将 GAN 的优化看成前述的随机动力系统,然后引用了随机优化中的一个定理,得出可以给生成器和判别器分别使用不同的学习率(TTUR)。
而其余几篇,都是直接将 GAN 的优化看成确定性的动力系统(ODEs),然后用分析 ODEs 的方法来分析 GAN。由于 ODEs 的理论分析/数值求解都说得上相当成熟,因此可以直接将很多 ODEs 的结论用到 GAN 中。
Dirac GAN
本文的思路和结果主要参考 Which Training Methods for GANs do actually Converge?[5],这篇论文的主要贡献如下:
事实上,从优化角度看,前面所说的 WGAN 和 WGAN-GP 是两类不一样的模型。前面的 WGAN 是指事先在判别器上加上 L 约束(比如谱归一化),然后进行对抗学习;这里的 WGAN-GP 指的是判别器不加 L 约束,而是通过梯度惩罚项(Gradient Penalty)来迫使判别器具有 L 约束。
这里讨论的梯度惩罚有两种,第一种是 Improved Training of Wasserstein GANs [6] 提出来的“以1为中心的梯度惩罚”,第二种是 Wasserstein Divergence for GANs [7]、Which Training Methods for GANs do actually Converge? [5] 等文章提倡的“以 0 为中心的梯度惩罚”。下面我们会对比这两种梯度惩罚的不同表现。
通过上面的分析,我们得到的结论是:目前零中心的 WGAN-GP(或者称为 WGAN-div)的理论性质最好,只有它是局部收敛的,其余的 GAN 变体都一定的振荡性,无法真正做到渐近收敛。当然,实际情况可能复杂得多,Dirac GAN 的结论只能一定程度上说明问题,带来一个直观感知。
那么,如果 Dirac GAN 的结论具有代表性的话(即多数 GAN 实际情况下都难以真正收敛,而是在均衡点附近振荡),我们应该如何缓解这个问题呢?
L2正则项
第一个方案是考虑往(任意 GAN 的)判别器的权重加入 L2 正则项。综上所述,零中心的梯度惩罚确实很好,但无奈梯度惩罚太慢,如果不愿意加梯度惩罚,那么可以考虑加入 L2 正则项。
直观上看,GAN 在均衡点附近陷入振荡,达到一种动态平衡(周期解,而不是静态解),而 L2 正则项会迫使判别器的权重向零移动,从而有可能打破这种平衡,如上图中的第二个图像。在我自己的 GAN 实验中,往判别器加入一个轻微的 L2 正则项,能使得模型收敛更稳定,效果也有轻微提升。(当然,正则项的权重需要根据模型来调整好。)
权重滑动平均
事实上,缓解这个问题最有力的技巧,当属权重滑动平均(EMA)。
权重滑动平均的基本概念,我们在“让Keras更酷一些!”:中间变量、权重滑动和安全生成器已经介绍过。对于 GAN 上的应用,其实不难理解,因为可以观察到,尽管多数 GAN 最终都是在振荡,但它们振荡中心就是均衡点!所以解决方法很简单,直接将振荡的轨迹上的点平均一下,得到近似的振荡中心,然后就得到了一个更接近均衡点(也就是更高质量)的解!
权重滑动平均带来的提升是非常可观的,如下图比较了有无权重滑动平均时,O-GAN 的生成效果图:
可以看到,权重滑动平均几乎给生成效果带来了质的提升。衰减率越大,所得到的生成结果越平滑,但同时会丧失一些细节;衰减率越小,保留的细节越多,但自然也可能保留了额外的噪声。现在主流的 GAN 都使用了权重滑动平均,衰减率一般为 0.999。
顺便说一下,在普通的监督训练模型中,权重滑动平均一般也能带来收敛速度的提升,比如下图是有/无权重滑动平均时,ResNet20 模型在 cifar10 上的训练曲线,全程采用 Adam 优化器训练,学习率恒为 0.001,权重滑动平均的衰减率为 0.9999:
可以看到,加上权重滑动平均之后,模型以一种非常平稳、快速的姿态收敛到 90%+ 的准确率,而不加的话模型准确率一直在 86% 左右振荡。这说明类似 GAN 的振荡现象在深度学习训练时是普遍存在的,通过权重平均可以得到质量更好的模型。
文章小结
本文主要从动力学角度探讨了 GAN 的优化问题。跟本系列的其他文章一样,将优化过程视为常微分方程组的求解,对于 GAN 的优化,这个常微分方程组稍微复杂一些。
分析的过程采用了 Dirac GAN 的思路,利用单点分布的极简情形对 GAN 的收敛过程形成快速认识,得到的结论是大多数 GAN 都无法真正收敛到均衡点,而只是在均衡点附近振荡。而为了缓解这个问题,最有力的方法是权重滑动平均,它对 GAN 和普通模型训练都有一定帮助。
[2] Lars Mescheder and Sebastian Nowozin and Andreas Geiger. "The Numerics of GANs". Advances in Neural Information Processing Systems. 2017.
[3] Martin Heusel, Hubert Ramsauer, Thomas Unterthiner, Bernhard Nessler and Sepp Hochreiter. "GANs Trained by a Two Time-Scale Update Rule Converge to a Local Nash Equilibrium". Advances in Neural Information Processing Systems. 2017.
[4] Vaishnavh Nagarajan, J. Zico Kolter. "Gradient descent GAN optimization is locally stable". Advances in Neural Information Processing Systems. 2017.
[5] Lars Mescheder, Andreas Geiger and Sebastian Nowozin. "Which Training Methods for GANs do actually Converge?". International Conference on Machine Learning 2018.
[6] Ishaan Gulrajani, Faruk Ahmed, Martin Arjovsky, Vincent Dumoulin and Aaron Courville. "Improved Training of Wasserstein GANs". Advances in Neural Information Processing Systems. 2017.
[7] Jiqing Wu, Zhiwu Huang, Janine Thoma, Dinesh Acharya and Luc Van Gool. "Wasserstein Divergence for GANs". The European Conference on Computer Vision (ECCV). 2018.