-
Notifications
You must be signed in to change notification settings - Fork 5
SPECTRAL NORMALIZATION——提高多种类GAN的生成质量
DingfengShi edited this page Apr 12, 2018
·
4 revisions
- GAN目前只在单类别的训练中有良好的结果,但是对于像ImageNet这种有1000种种类的数据集,GAN的生成能力就不太好了,主要原因是判别器无法学习到良好的高维特征,使得生成器无法学到较好的生成图像方式
- 这种归一化实际上只需要一个参数,Lipschitz常数,而且不需要很精确的调参运行结果也挺不错
- 计算量小
- 范数的定义参考向量范数、矩阵范数
- Lipschitz限制
一般最常用的距离度量函数||.||是绝对值(L1范数),直观上的表示就是限制导数的范围,具体可以参考这篇文章
- 在本文里,作者选取的度量方式为L2范数(对于矩阵来说,也叫谱范数)
可以证明,所有范数都满足M=1的Lipschitz限制,M又叫Lipschitz常数
对于网络中某一个层g(可以理解成一个函数g(h),h是输入),而根据上面的定义,神经网络中某个权重的Lipschitz常数为
- 函数σ表示矩阵的谱范数,它在数值上等于该矩阵的最大奇异值
对于一般的线性函数g(h)=Wh,由于g(h)对h求导的结果是W,所以又等价于
而且,由于矩阵范数的相容性,存在如下不等式
因此,于网络任意一层,能通过之前所有层的Lipschitz常数连乘,从而得到该层的Lipschitz常数
其中a表示的是激活函数的Lipschitz常数,像一些ReLU,leaky ReLU这类的激活函数,我们可以发现,他们的导数最大值就是1!所以上式能把它们省略!
而谱归一化,实际上就是把每层的权重矩阵除以它的Lipschitz常数
这样会发现,整个网络中所有权重的Lipschitz常数都被限制成了1
直接计算奇异值计算量很大,而论文里写出了一种非常简单的最大奇异值近似计算方法,大大减少了运算量,具体如下
- 随机初始化一个向量u,这个向量不能垂直于矩阵最大奇异值的左奇异向量。但是放心,由于维数很高,我么能很放心随机出来的结果不会垂直
- 然后按如下方式计算两个向量
- 最大奇异值就能用如下的式子去近似了
- 每次SGD更新了W,由于Lipschitz限制,W的变化很小,我们可以认为它的最大奇异值没有发生变化,而且在计算时,u还能用上一次得到的结果去计算,即只需要初始化一次,实验的效果也足够好了