GAN 的谱归一化(Spectral Norm)和矩阵的奇异值分解(Singular Value Decompostion)

Posted on
GAN Deep Learning SVD

WGAN 和 Wasserstein distance

在文献 [2] 中作者分析了 GAN [1] 难以训练的原因在于原生 GAN 的目标函数等价于优化生成数据的分布 $p_g$ 和真实数据的分布 $p_r$ 之间的 J-S 散度 (Jensen–Shannon Divergence)。

接着作者提出 WGAN [3],使用性质优良的 Wasserstein distance 代替原生 GAN 中的 J-S 散度。 然后利用KR对偶原理将 Wasserstein distance的求解问题转换为求解最优的利普希茨连续函数的问题。 为了使得判别器 D 满足利普希茨连续性,作者使用“梯度裁剪”将过大的参数直接裁剪到一个阈值以下。

本文要介绍的这篇文章 “Spectral normalization for generative adversarial network” (以下简称 Spectral Norm) 使用一种更优雅的方式使得判别器 D 满足 利普希茨连续性。

为了说明 Spectral Norm背后的动机,我们从 Wasserstein distance (以下简称 W distance)开始说起。 W distance的定义为:

\begin{equation} \begin{split} \text{Was}(p_r, p_g) &= \inf_{\gamma \in \prod(p_r, p_g)} \int_{x, y} \gamma(x, y) \cdot \lVert x-y \rVert \\ &= \inf_{\gamma \in \prod(p_r, p_g)} \mathbb{E} [\lVert x - y\rVert] \end{split} \label{eq:wasserstein} \end{equation}

$\ref{eq:wasserstein}$ 的定义看起来比较难懂。 其中 $\inf$ 可以简单地理解为 取最小值, $\gamma \in \prod_{p_r, p_g}$ 表示边缘分布分别为为 $p_r$ 和 $p_g$ 的一个联合分布。

当然这样解释仍然让很多人难以理解,这里举一个简单的例子:

假设有五个工厂生产食品,产量分别为 $A_1, …, A_5$, 另外有五个城市消费食品,所需的食品量分别是 $B_1, …, B_5$,假设 $\sum_i A_i = \sum_j B_j$。 现在制定了供应方案:从 $A_i$ 运输到 $B_j$ 的食品量为 $\gamma_{i, j}$, 显然有:

\begin{equation} \begin{cases} \sum_j \gamma_{i, j} = A_i \\ \sum_i \gamma_{i, j} = B_j \end{cases} \end{equation}

这也就是所谓的“$\gamma$ 是边缘分布分别为 $A$ 和 $B$ 的联合分布”。 假设从 $i$ 地每运输一份食品到 $j$ 地的成本是 $\lVert i-j \rVert$, 那么运输方案的总成本即为:

\begin{equation} \begin{split} & \sum \gamma(i, j) \lVert i-j \rVert \\ &= \mathbb{E} \lVert i-j \rVert \end{split}\label{eq:total-cost} \end{equation}

求解 $\ref{eq:total-cost}$ 式的最小运输成本,其实就是求解离散情况下的 Wasserstein Distance,而最小运输成本所对应的 $\gamma$,就是最优传输。 这类问题被称为最优传输问题 (optimal transport)。

然而 Wasserstein distance 的求解并不那么直接。 式 $\ref{eq:total-cost}$ 所描述的问题一般可以通过线性规划 (Linear programming) 求解,因为问题中的求解目标以及约束条件均为线性。 即便如此,在每一次训练的迭代去求解一个线性问题仍然是非常耗时的,而且我们并不需要得到最优传输,我们只需要得到最优传输对应的 最小传输代价,以及该代价的导数。 在文献 [3] 中作者使用了 K-R 对偶将 wasserstein distance 求解的问题转换为求解最优函数的问题。 K-R 对偶指出,当测度 $\lVert i-j \rVert = (i-j)^2$ 的时候,$\ref{eq:total-cost}$ 式所对应的问题可以转换为寻找一个满足利普希茨连续的函数 $f(x)$, 使得下式取得最大值:

\begin{equation} \text{Was}(p_r, p_g) = \sup\_{\lVert f \rVert\_{L \leq 1}} \mathbb{E}\_{x \sim p_r} f(x) - \mathbb{E}\_{x \sim p_g} f(x) \label{eq:dual-problem} \end{equation}

至于 $\ref{eq:dual-problem}$ 式的结论为什么成立可以参考这篇文章。 本文关注另外一个问题,就是如何让函数 $f$ 满足“利普希茨连续性” (Lipschitz continuity)。


利普希茨连续性 (Lipschitz Continuity)

利普希茨连续性 (Lipschitz continuity) 的定义很简单,他要求函数 $f(x)$ 满足对任意 $x, y$ 都有:

\begin{equation} \frac{f(x) - f(y)}{x - y} \leq K \label{eq:lipschitz} \end{equation}

实际上式 $\ref{eq:lipschitz}$ 甚至都没有要求函数 $f(x)$ 可导。 在 K-R 对偶中,要求 $k=1$,也即:

$$ \frac{f(x) - f(y)}{x - y} \leq 1 $$

在 WGAN[3] 中作者使用一个神经网络来逼近函数 $f(x)$,并且使用一个简单的 trick 使得函数 $f(x)$ 满足利普希茨连续性: 在每一次更新网络参数之后,如果参数大于某个阈值,则强行将参数剪裁到这个阈值。 这样这个神经网络的每一层的梯度都不会大于这个阈值,总体上这个神经网络的就一定满足利普希茨连续性。

但这样的做法似乎有些暴力,因为这样强行更改网络参数可能会影响到网络的收敛。 于是在文献[4]中作者提出了 Spectral Norm,对网络参数进行谱归一化使得网络满足利普希茨连续条件。


矩阵的奇异值分解 (Singular Value Decomposition)

为了方便大家理解 Spectral Norm ,我们先介绍一下 SVD 分解。

假设有 $m\times n$ 的方阵 $A$,对矩阵 $A$ 存在这样一种分解:

\begin{equation} \mathbf{A} = \mathbf{U} \mathbf{\Sigma} \mathbf{V^T} \label{eq:svd} \end{equation}

当矩阵 $W$ 是一个实数阵的时候,

  • $\mathbf{U}$ 是一个 $m \times m$ 的正交矩阵 (orthogonal matrix);
  • $\mathbf{\Sigma}$ 是一个 $m \times n$ 的对角阵,对角线上的元素为非负实数,这些数称为矩阵 $A$ 的“奇异值”;
  • $\mathbf{V}$ 是一个 $n \times n$ 的正交矩阵 (orthogonal matrix)。

矩阵 $A$ 的奇异值计算起来也不麻烦,只需要求得 $n\times n$ 的方阵 $A^TA$ 的特征值,然后把特征值开平方根,即为矩阵 $A$ 的奇异值,因为:

\begin{equation*} \begin{split} \mathbf{A}^T \mathbf{A} &= (\mathbf{U} \mathbf{\Sigma} \mathbf{V^T})^T \cdot (\mathbf{U} \mathbf{\Sigma} \mathbf{V^T}) \\ &= (\mathbf{V} \mathbf{\Sigma}^T \mathbf{U}^T)(\mathbf{U} \mathbf{\Sigma} \mathbf{V}^T) \\ &= \mathbf{V} (\mathbf{\Sigma}^T \mathbf{\Sigma}) \mathbf{V}^T。 \end{split} \end{equation*}

关于奇异值的计算并不是本文的重点,我们仔细研究一下式 $\ref{eq:svd}$ 所表达的几何意义。 我们知道,每一个矩阵对应着一个线性变换。而正交矩阵对应的线性变换很特殊,叫旋转变换 (rotation)。 而对角阵对应的变换,叫做拉伸变换 (scale)。 也就是说式 $\ref{eq:svd}$ 把矩阵 $A$ 分解为三个变换:

  1. 旋转;
  2. 拉伸;
  3. 旋转。

这里就很有意思了。假设神经网络的某一层权重 $W$ 为一个 $m \times n$ 的矩阵,对于输入的特征 $x$,输出为:

\begin{equation} \begin{split} y &= W \cdot x \\ &= \mathbf{U} \cdot \mathbf{\Sigma} \cdot \mathbf{V^*} \cdot x \end{split} \label{eq:layer} \end{equation}

也相当于对输入做了三次变换。 如果将输入视为一个向量的话,之后 $\Sigma$ 对应的拉伸变换才会改变输入的长度;其他两次旋转变换都不会。

矩阵的谱系数

矩阵 $W$ 的谱系数 (spectral norm) $\sigma(W)$ 定义为其矩阵 $W$ 最大的奇异值, 其物理含义是对于任意的输入向量 $x$,经过 $W$ 的线性变换能对 $x$ 向量可能的最大的拉伸系数

想象当一神经网络的参数矩阵的谱系数被限制小于1的时候,它对于任意的输入都不会有放大作用,因此自然也就满足利普希茨连续了。 这里引入拉伸这个概念只是为了直观上容易理解,关于限制谱系数和函数导数的关系,在[4]有证明,这里不再赘述。


Spectral Normalization

介绍完 SVD 以及几何意义之后,Spectral Normalization的做法就很简单了: 将神经网络的每一层的参数 $W$ 作 SVD 分解,然后将其最大的奇异值限定为1, 具体地,在每一次更新 $W$ 之后都除以 $W$ 最大的奇异值。 这样,每一层对输入$x$最大的拉伸系数不会超过 1。

经过 Spectral Norm 之后,神经网络的每一层 $g_l(x)$,都满足

$$ \frac{g_l(x) - g_l(y)}{x - y} \leq 1。 $$

对于整个神经网络 $f(x) = g_N(g_{N-1}(…g_1(x)…))$ 自然也就满足利普希茨连续性了。

然而,在每一次训练迭代中都对神经网络的每一层作 SVD 分解也是很不现实的,特别是当网络权重维度很大的时候。 因此作者采用了一种叫做 power iteration[5] 的方法去迭代得到奇异值的近似解。

Power iteration 首先初始化一个随机的 $\hat{u}$ 然后根据以下公式迭代 $\hat{u}$ 和 $\hat{v}$:

\begin{equation} \hat{v} \leftarrow \frac{W^T\hat{u}}{\lVert W^T\hat{u} \rVert_2}, \ \\ \hat{u} \leftarrow \frac{W^T\hat{v}}{\lVert W^T\hat{v} \rVert_2}。 \label{eq:power-iter} \end{equation}

最后矩阵 $W$ 的最大奇异值 $\sigma(W)$ 可以根据 $\hat{u}$ 和 $\hat{v}$ 求得:

\begin{equation} \sigma(W) \approx \hat{u}W^T\hat{v}。 \label{eq:sigma_w} \end{equation}

在得到 $\sigma(W)$ 之后,网络每更新一次参数,都对参数 $W$ 进行谱归一化:

\begin{equation} W \leftarrow \frac{W}{\sigma(W)}。 \end{equation}

值得注意的是,$\ref{eq:power-iter}$ 式的迭代算法通常需要迭代多次才能比较好的逼近 $\sigma(W)$,但是Spectral Normal[4] 在神经网络的每一次更新过程中只进行一次 power iteration 迭代,仍然能取得不错的效果。 这是因为神经网络的每次迭代中参数 $W$ 是在缓慢更新的,因此每两次迭代过程中可以认为 $W$ 的奇异值是近似相等的。 因此虽然在网络的每一次迭代中,只进行一次power iteration,但是随着网络的训练,power iteration 对奇异值的估计会越来越准。 这种做法其实十分巧妙,因为神经网络的优化本身也是个迭代的过程,因此对 $\sigma(W)$ 的逼近就可以利用神经网络的迭代逐渐来逼近,在网络参数的每一次更新过程中对 $\sigma(W)$ 的迭代不必太准确。

最后需要注意的一点是,判别器 D 使用了 Spectral norm 之后,就不能使用 BatchNorm (或者其它 Norm) 了。 原因也很简单,因为 Batch norm 的“除方差”和“乘以缩放因子”这两个操作很明显会破坏判别器的 Lipschitz 连续性。


参考文献

[1] Goodfellow, Ian, Jean Pouget-Abadie, Mehdi Mirza, Bing Xu, David Warde-Farley, Sherjil Ozair, Aaron Courville, and Yoshua Bengio. “Generative adversarial nets.” In Advances in neural information processing systems, pp. 2672-2680. 2014. [PDF]

[2] Arjovsky, Martin, and Léon Bottou. “Towards principled methods for training generative adversarial networks.” arXiv preprint arXiv:1701.04862 (2017). [PDF]

[3] Arjovsky, Martin, Soumith Chintala, and Léon Bottou. “Wasserstein generative adversarial networks.” In International Conference on Machine Learning, pp. 214-223. 2017. [PDF]

[4] Miyato, Takeru, Toshiki Kataoka, Masanori Koyama, and Yuichi Yoshida. “Spectral normalization for generative adversarial networks.” arXiv preprint arXiv:1802.05957 (2018). [PDF]

[5] Gulrajani, Ishaan, Faruk Ahmed, Martin Arjovsky, Vincent Dumoulin, and Aaron C. Courville. “Improved training of wasserstein gans.” In Advances in Neural Information Processing Systems, pp. 5767-5777. 2017. [PDF]

[6] Yoshida, Yuichi, and Takeru Miyato. “Spectral Norm Regularization for Improving the Generalizability of Deep Learning.” arXiv preprint arXiv:1705.10941 (2017).