GAN 训练稳定性:Improved Techniques for Training GANs 笔记

这篇论文提出了若干针对 GAN 模型结构与训练过程的改进方法,主要在两个任务上进行验证:半监督学习(利用额外的无监督样本来提升有监督任务的性能)和图像生成。

为什么 GAN 难以训练

GAN 的训练本质上是在高维连续空间里寻找非凸博弈的纳什均衡。问题在于,我们通常用梯度下降来优化损失函数,而梯度下降并不是为寻找纳什均衡设计的,因此很难收敛。

目前虽然有一些算法可以在特定场景下找到纳什均衡,但还没有针对 GAN 这种高维非凸情况的通用解法。

一个直观的例子:对损失函数 xy,一方优化 x 使 xy 最小,另一方优化 y 使 -xy 最小,两者交替用梯度下降更新,很可能陷入循环而无法收敛到 xy=0。这正是 GAN 训练不稳定的根源。

Feature Matching

Feature matching 给生成器增加一个额外的目标项——让生成图像满足真实图像的某些统计特性。具体实现上,让生成器去匹配判别器中间层的特征表示,因为判别器在训练过程中学到的中间层特征,正是用于将真实图像与生成图像区分开来的关键信息。

设 f(x) 为判别器某一中间层的激活值,feature matching 给生成器增加如下损失:

这个方法不能从理论上保证收敛,但经验表明效果相当不错,尤其在半监督学习任务中表现较好。

Minibatch Discrimination

Minibatch discrimination 让判别器在评估图像时,能综合考虑整个 mini-batch 内的信息,而不是孤立地对每张图片打分。这样做的动机在于:如果生成器产生了完全相同的图像,判别器对每张图独立评分时仍可能给出不错的分数,这种梯度信号会导致生成器训练发散(即模式崩塌)。通过让判别器感知 batch 内的整体多样性,可以缓解这一问题。

具体做法是在判别器中插入一个特殊层,对真实图像和生成图像都使用这一层:

在图像生成任务上,minibatch discrimination 的视觉效果优于 feature matching;但在半监督分类任务上,效果反而不如 feature matching。

Historical Averaging

这一技巧同样是加入额外的损失项,将当前参数值与历史参数均值拉近:

这个方法来自博弈论中虚拟博弈(fictitious play)的思想,在低维、连续、非凸的博弈中可以找到纳什均衡。下图展示了它的示意效果:

One-sided Label Smoothing

普通的 label smoothing 同时对正负样本做平滑,例如将原本的标签 1 和 0 替换为 0.9 和 0.1。

这里的做法只对正样本(真实图像)做平滑,负样本的 beta 值仍然保持为 0:

原因在于:如果对负样本也做平滑,当生成分布 p_model 很大而真实分布 p_data 很小的时候,反而会在假数据区域产生额外的正反馈,不会帮助生成器更好地逼近真实数据分布。

Virtual Batch Normalization

标准 BN 对当前 mini-batch 的统计量做归一化,这意味着每个样本的激活值都依赖于同 batch 内的其他样本。虚拟 BN 的做法是:在训练开始时固定一个参考 batch,之后对所有 batch 的归一化都使用这个固定参考 batch 的统计量,从而消除样本间的依赖。

代价是计算量较大——每个 batch 需要两次前向-反向传播——因此只在生成器上使用,不用于判别器。

Inception Score:图像质量评估

论文还提出了一种评估生成图像质量的指标:Inception Score。

其中 p(y|x) 由预训练的 Inception 模型给出。Inception Score 衡量的是观测到生成图像后能带来多少信息量,即条件分布与边缘分布之间的 KL 散度。需要注意的是,直接以 Inception Score 为目标来训练生成器,并不一定能得到好的结果。

半监督学习

半监督学习部分的做法是给判别器增加一个额外的类别标签,用于表示”假图像”这一类,让判别器同时承担区分真假图像和有标签分类两个任务。

在这个设定下,feature matching 效果较好,而 minibatch discrimination 效果不理想——这与图像生成任务上的结论相反。

另一个有意思的观察是:引入半监督任务(即加入分类标签信息)可以改善生成图像的视觉质量(从人工标注者的评估结果来看)。一个可能的解释是,人类视觉系统本身更擅长处理分类这类语义信息,而不是局部统计纹理,因此与分类任务联合训练的生成器,能学到更符合人类视觉感知的特征。人工评分结果与 Inception Score 的高度一致也印证了这一点——Inception 本身是用于分类的,它可能与人类视觉系统学到了相似的特征表示。

从人类视觉感知的角度来理解和评估生成图像,确实是一个很有趣的切入点。