详解 GAN 的谱归一化(Spectral Normalization)
本文主要介绍谱归一化这项技术,详细论文参考 Spectral Normalization for Generative Adversarial Networks。
本文主要对论文中的基础知识和遗漏的细节做出补充,以便于更好地理解谱归一化。部分内容参考并整合了如下两篇博客。
http://kaiz.xyz/blog/posts/spectral-norm/
https://christiancosgrove.com/blog/2018/01/04/spectral-normalization-explained.html
Lipschitz Continuity
在 GAN 中,假设我们有一个判别器 D: I→R,其中 I 是图像空间。如果判别器是 K-Lipschitz continuous 的,那么对图像空间中的任意 x 和 y,有:
其中 || · || 为 L2 norm,如果 K 取到最小值,那么 K 被称为 Lipschitz constant。
直观地来说,Lipschitz 条件限制了函数变化的剧烈程度,即函数的梯度。在一维空间中,很容易看出 y=sin(x) 是 1-Lipschitz 的,它的最大斜率是 1。
那么,为什么要使判别器函数具有 Lipschitz continuity 呢?Wasserstein GAN 提出了用 wasserstein 距离取代之前的 KL 散度或者 JS 散度,作为 GAN 判别器的损失函数:
其中 Pr 和 Pg 分别为真实数据和生成数据的分布函数,Wasserstein 距离衡量了这两个分布函数的差异性。
直观地理解,就是根据这两个分布函数分别生成一堆数据 x1, x2, … , xn 和另一堆数据 y1, y2, … , yn,然后计算这两堆数据之间的距离。距离的算法是找到一种一一对应的配对方案 γ~∏(Pr, Pg),把 xi 移动到 yj,求总移动距离的最小值。
由于在 GAN 中, Pr 和 Pg 都没有显式的表达式,只能是从里面不停地采样,所以不可能找到这样的 γ,无法直接优化公式 (2) 。W-GAN 的做法是根据 Kantorovich-Rubinstein duality,将公式 (2) 转化成公式 (3),过程详见以下链接:
https://vincentherrmann.github.io/blog/wasserstein/
其中 f 即为判别器函数。只有当判别器函数满足 1-Lipschitz 约束时,(2) 才能转化为 (3)。除此之外,正如上文所说,Lipschitz continuous 的函数的梯度上界被限制,因此函数更平滑,在神经网络的优化过程中,参数变化也会更稳定,不容易出现梯度爆炸,因此 Lipschitz continuity 是一个很好的性质。
为了让判别器函数满足 1-Lipschitz continuity,W-GAN 和之后的 W-GAN GP 分别采用了 weight-clipping 和 gradient penalty 来约束判别器参数。这里的谱归一化,则是另一种让函数满足 1-Lipschitz continuity 的方式。
矩阵的 Lipschitz Continuity
众所周知,矩阵的乘法是线性映射。对线性映射来说,如果它在零点处是 K-Lipschitz 的,那么它在整个定义域上都是 K-Lipschitz 的。
想象一条过零点的直线,它的斜率是固定的,只要它上面任何一点是 K-Lipschitz 的,那么它上面所有点都是 K-Lipschitz 的。因此,对矩阵来说,它满足 K-Lipschitz 的充要条件是:
对其做如下变换:
其中 <·> 表示两个向量的内积。由于矩阵是半正定矩阵,它的所有特征值均为非负。我们假设它的特征向量构成的基底为 v1, v2,…, vn,对应的特征值为 λ1, λ2,…, λn,令 x=x1·v1+x2·v2+ … +xn·vn。那么,公式 (5) 的左半部分可以转化为:
要使公式 (6) 对任意 xi 恒成立,且 λi 非负,则必有。若 λ1 为最大的特征值,只需要满足,这里即为矩阵 A 的 spectral norm。
综上所述,映射满足 K-Lipschitz 连续,K 的最小值为。那么,要想让矩阵 A 满足 1-Lipschitz 连续,只需要在 A 的所有元素上同时除以即可(观察公式 (4) 左侧是线性映射)。
通过上面的讨论,我们得出了这样的结论:矩阵 A 除以它的 spectral norm(最大特征值的开根号)可以使其具有 1-Lipschitz continuity。
矩阵的奇异值分解
上文提到的矩阵的 spectral norm 的另一个称呼是矩阵的最大奇异值。回顾矩阵的 SVD 分解:
矩阵存在这样的一种分解:
其中:
-
U 是一个 m × m 的单位正交基矩阵
-
Σ 是一个 m × n 的对角阵,对角线上的元素为奇异值,非对角线上的元素为 0
-
V 是一个 n × n 的单位正交基矩阵
▲SVD 分解
由于 U 和 V 都是单位正交基,因此可以把矩阵乘以向量分成三步:旋转,拉伸,旋转。一前一后的两步旋转不改变向量的模长,唯一改变向量模长的是中间的拉伸,即与 Σ 相乘的那一步。而矩阵的 Lipschitz continuity 关心的正是矩阵对向量模长的改变,不关心旋转。
因此,只需要研究中间的 Σ 即可。而 Σ 又是一个对角矩阵,因此,它对向量的模长拉长的最大值,就是对角线上的元素的最大值。也就是说,矩阵的最大奇异值即为它的 spectral norm。
根据公式 (7) ,以及 SVD 分解中 U 和 V 都是单位正交基,单位正交基的转置乘以它本身为单位矩阵,有:
因此,只需要求出 **** 的最大特征值,再开根号,就求出了矩阵的最大奇异值,也就是矩阵的 spectral norm,和上一小节的推导殊途同归。
神经网络的 Spectral Norm
对于复合函数,我们有这样的定理:
而多层神经网络,正是多个复合函数嵌套的操作。最常见的嵌套是:一层卷积,一层激活函数,再一层卷积,再一层激活函数,这样层层包裹起来。
激活函数通常选取的 ReLU,Leaky ReLU 都是 1-Lipschitz 的,带入到 (9) 中相乘不影响总体的 Lipschitz constant,我们只需要保证卷积的部分是 1-Lipschitz continuous 的,就可以保证整个神经网络都是 1-Lipschitz continuous 的。
而在图像上每个位置的卷积操作,正好可以看成是一个矩阵乘法。因此,我们只需要约束各层卷积核的参数 W,使它是 1-Lipschitz continuous 的,就可以满足整个神经网络的 1-Lipschitz continuity。
我们已经知道,想让矩阵满足 1-Lipschitz continuous,只需要让它所有元素同时除以它的最大奇异值,或者说是它的 spectural norm。因此,下一步的问题是如何计算 W 的最大奇异值。
对大矩阵做 SVD 分解运算量很大,我们不希望在优化神经网络的过程中,每步都对卷积核矩阵做一次 SVD 分解。一个近似的解决方案是 power iteration 算法。
Power Iteration
Power iteration 是用来近似计算矩阵最大的特征值(dominant eigenvalue 主特征值)和其对应的特征向量(主特征向量)的。
假设矩阵 A 是一个 n × n 的满秩的方阵,它的单位特征向量为 v1, v2,…, vn,对应的特征值为λ1, λ2,…, λn。那么对任意向量 x=x1·v1+x2·v2+ … +xn·vn,有:
我们经过 k 次迭代:
由于 λ1, λ2,…, λn(不考虑两个特征值相等的情况,因为太少见了)。可知,经过 k 次迭代后。因此:
也就是说,经过 k 次迭代后,我们将得到矩阵主特征向量的线性放缩,只要把这个向量归一化,就得到了该矩阵的单位主特征向量,进而可以解出矩阵的主特征值。
而我们在神经网络中,想求的是权重矩阵 W 的最大奇异值,根据上面几节的推导,知道这个奇异值正是最大特征值的开方。因此,我们可以采用 power iteration 的方式求解的单位主特征向量,进而求出最大特征值 λ1。论文中给出的算法是这样的:
如果单纯看分子,我们发现这两步合起来就是,反复迭代 (13) 中上下两个式子 ,即可得到矩阵的单位主特征向量。只不过 (13) 的每算“半”步都归一化一次。
其实这种归一化并不影响向量的方向收敛到主特征向量的方向,而只影响特征向量前面的系数。而每步归一化一次的好处是,每步都可以得到单位主特征向量的近似解。
那么,知道的单位主特征向量后,如何求出最大特征值 λ1 呢?
而将公式 (13) 的第二个式子两边同时左乘:
最终,(15) 即为论文中提出的权重矩阵 W 的 spectral norm 公式。
而在具体的代码实现过程中,可以随机初始化一个噪声向量代入公式 (13) 。由于每次更新参数的 step size 很小,矩阵 W 的参数变化都很小,矩阵可以长时间维持不变。
因此,可以把参数更新的 step 和求矩阵最大奇异值的 step 融合在一起,即每更新一次权重 W ,更新一次和,并将矩阵归一化一次(除以公式 (15) 近似算出来的 spectral norm)。
具体代码见:
https://github.com/christiancosgrove/pytorch-spectral-normalization-gan
时间:2019-02-16 22:35 来源: 转发量:次
声明:本站部分作品是由网友自主投稿和发布、编辑整理上传,对此类作品本站仅提供交流平台,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,不为其版权负责。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。
相关文章:
- [机器学习]人工智能十年回顾:CNN、AlphaGo、GAN……它们曾这
- [机器学习]机器学习基础图表:概念、原理、历史、趋势和算法
- [机器学习]人工智能十年回顾:CNN、AlphaGo、GAN……它们曾这
- [机器学习]ResNet、Faster RCNN、Mask RCNN是专利算法吗?盘点何恺
- [机器学习]YOLO算法最全综述:从YOLOv1到YOLOv5
- [机器学习]推荐系统架构与算法流程详解
- [机器学习]YOLO算法最全综述:从YOLOv1到YOLOv5
- [机器学习]贝尔实验室和周公“掰手腕”:AI算法解梦成为现
- [机器学习]性能超越GPU、FPGA,华人学者提出软件算法架构加
- [机器学习]GPT-3的威力,算法平台的阴谋
相关推荐:
网友评论: