对抗生成网络的谱标准化
摘要:
生成对抗网络研究中的一个挑战就是它训练的不稳定性。在本篇文章中,我们提出了一种新的称为谱标准化的权重标准化技术来稳定分辨器的训练。我们的新的标准化技术计算量少,并且很容易并入现有的实现中。我们在CIFAR10,STL-10和ILSVRC2012数据集上测试了谱标准化的功效,然后我们在实验上证实了谱标准化的GANs(SN-GANs)能够产生相较之前的训练稳定技术更高质量或者质量相当的图片。用Chainer实现的代码,生成的图片以及预训练的模型都可以在https://github.com/pfnet-research/sngan_projection上获得。
GAN很久以来都有训练不稳定的问题,因此很多的研究都着手解决这个问题。多篇论文认为训练分辨器D相当于训练一个好的估计器来估计建模分布(也就是生成的数据分布)和目标分布之间的密度比率。而训练GANs一直存在的挑战是控制分辨器的表现。因为在目标分布和建模分布是分开的情况下,可以存在一个分辨器能完美的将生成的数据和真实的数据完全区分开(这个现象很常见,一开始来写GAN代码的,会有人经常忘记将输入的真实图片归一化到[-1,1]区间,而生成的数据都是在[-1,1]区间,这个时候去训练,很容易发现G的loss很快就达到0的最优化,接下去训练G,生成的图片质量很难提升,这就是因为这两个分布差异很大,D很容易就区分,然后达到了最优化)。
标准的GAN的分辨器D的最优的形式是下列式(3),它的导数是下列式(4),它们都可能没有边界或者说无法计算,因而需要一定的机制来限定f(x)的导数,
在正式介绍文章中提出的谱标准化之前,必须得强调一个概念,就是矩阵的范数(matrix norm)和向量的范数(vector norm)是存在区别的,具体的两者分别的概念,可以先去维基百科上了解下:
矩阵范数:https://en.wikipedia.org/wiki/Matrix_norm
范数:https://en.wikipedia.org/wiki/Norm_(mathematics)
接下来提出的谱标准化,其实用到的就是矩阵的2-范式,对于矩阵W的谱标准化如下式:
其中,σ(W)表示的是W的二范式,如果对于分辨器D的每层权重W都做如上所示的谱标准化,那么将分辨器D看做一个函数隐射f,即可将其Lipschitz范数约束在1以下,下面试文章中给出的简单证明过程,f为D的函数表示,第L层的映射为hL-> W(L+1)hL。对于矩阵范数,有如下重要的两个性质:
1.一致性||AB||<=||A|| ||B||
2.线性性:对于任意系数α有,||αA||=|α| ||A||
省略D的各个层的加上的biase,那么对于分辨器D的f函数利用一致性有下列不等式:
然后在上述式7中的不等式中,对于每个W代入式(8),对于σ(W)看做一个常数,利用性质2线性性,那么可以得出f的上界为1:
||f||Lip <= 1
这样就达到了限制分辨器D的Lipschitz范数的效果。
在文章2.3小结的梯度分析中可以看出,相对常规的GAN,谱标准化后的GAN引入了新的正则项,该正则项防止W的列空间在训练中只关心一个特定的方向,与此同时其防止D中每层的转换对某一个方向敏感。
其实谱标准化很简单的表述就是,每层的权重W,在更新后,都除以W的最大的奇异值,但是奇异值的分解计算是很耗时的,因而文中采用的是一个被称作power iteration的方式,来获得近似的最大奇异值的解。
实验部分
作者设计了多个实验来验证谱标准化的有效性。首先进行的实验,是采用多组训练的设置参数,来观察在谱标准化对于模型鲁棒性的影响。采用的评价指标分别是Inception Score和Fréchet inception distance(FID),使用的数据集分别是CIFAR-10和STL-10,其对比的实验结果如下图所示
除此之外,作者在CIFAR-10和STL-10上对比了多个正则化的算法的表现能力,同时也发现采用谱标准化的GAN,在迭代多次后,仍未达到收敛,其中Inception Score一直在上升。
为了证实SN-GAN可以使得权重不只关心一个方向(前面梯度分析中提到的),于是其分析了,在不同的标准化情况下得到的最优化的GAN中,分辨器D中权重的分布情况,实验结果图中,所有的权重都被归一化到了[0,1]区间中,从图中可以清晰的看出,采用谱标准化优化产生的D,其中的权重的数值分布较为广泛,并且具有多样性。
由于与正交标准化同样使用了谱范数,文章不仅从理论上分析了两种方法的不同,同时从实验上,测试了两者的区别,实验是在STL-10数据集上,增加最后一层特征图的维度,用Inception Score来度量两者的性能差别,结果如图:
谱标准化在GAN上的应用,最引人关注的最大的一个原因就是文中最后一个大的实验,用谱标准化的GAN在ImageNet上生成1000类的图片。这个实验,首先将ImageNet的图片缩放到了128*128的规模,采用的GAN的架构是conditional GAN结构,而GAN的loss采用的是被称作hinge loss的损失函数,如下:
在面对产生高维度的数据集的情况下,其他的标准化方法都无法产生有意义的图片,只有谱标准化方法的GAN和正交标准化的GAN产生了有意义的结果,并且SN-GAN生成的图片的Inception Score一直在上升:
总结:
这篇文章提出了一种简单有效的标准化方法来限制GAN中分辨器D的优化过程,从而达到整个模型能学习到更好的生成器G的结果。本文采用单个的G和D的模型,在ImageNet上产生了较高质量的图片,因而值得关注。与此同时,文中多处的实验表明,采用了谱标准化的GAN,依然存在收敛缓慢的问题,这个收敛缓慢是相较于自身而言的,因为作者多次提及迭代次数的增加,Inception Score一直处于提升的状况,所以近一步改进,是提高其收敛的速度。从另外一个侧面看,现在的GAN的问题,大家一致认为是在于D,而不是在于G,因而有多篇文章在解决D上发生的问题,同时通过不同的角度阐释这些问题发生的原因。
最后,除了作者提供的实现代码之外,一份tensorflow的简洁清楚的实现如下:
https://github.com/taki0112/Spectral_Normalization-Tensorflow