2020年7月1日 星期三

WGAN-GP 及 SNGAN(生成對抗網路 Generative Adversarial Network 簡介)

本篇文章要談的是兩種改良版的 WGAN:WGAN-GP 以及 Spectral Normalization GAN (SNGAN),如果對於 WGAN 不熟悉的讀者請先閱讀前文

WGAN-GP

還記得在 WGAN 中我們提到了要讓 discriminator 是個 1-Lipschitz 的函數,這樣 loss function 就會是 Wasserstein 距離的形式。WGAN-GP 論文中用了另一個方式來讓 discriminator 滿足 1-Lipschitz 的條件。

WGAN-GP 用到的是以下性質:
  • 函數 D 滿足 1-Lipschitz 的條件 \(\Leftrightarrow \) \(\left \| \bigtriangledown_xD(x) \right \| \leq 1\)。

因此在演算法中更新 discriminator 的參數時就加入以下 penalty(或著也可以看成 regularization): \[ \lambda (\left \| \bigtriangledown_xD(x) \right \|_2 - 1)^2 \] 以上為 WGAN-GP 的中心思想,關於性質證明或演算法的實作細節請參考原文。

Spectral Normalization GAN (SNGAN)

SNGAN 也用到了一些比較的數學性質,本文把原理大概介紹一下:
  1. Lipschitz norm 等價於 spectral norm \(\sigma(W)\)
  2. 當函數為 1-Lipschitz 時,以下不等式成立:\(\left \| g_1 \circ  g_2 \right \|_{Lip} \leq \left \| g_1 \right \|_{Lip}\left \| g_2 \right \|_{Lip} \)
  3. 因此 discriminator 由類神經網路 W 組成時,\(\left \| f \right \|_{Lip} \leq \prod \sigma(W)\)
從以上三點性質,作者們提出的方法是只要在類神經網路每一層都對於其 spectral norm 做 normalize,那麼那一層會滿足 1-Lipschitz 性質,因此整個 discriminator 就會滿足 1-Lipschitz 的性質。

下一個問題是該怎麼求 spectral norm \(\sigma(W)\)。Spectral norm 對於一個方陣 W 來說就是其最大特徵值 \(\lambda_1\),若 W 不是方陣則用最大的奇異值(singular value)代替,而本篇作者使用了 Power Method 來很快速地取得最大的奇異值。首先我們來簡介一下 Power Method 怎麼解方陣的最大特徵值:

用 Power Method 來解矩陣的最大特徵值

Power Method 是一種找出矩陣最大特徵值的數值方法,先簡單地描述演算法:
  1. 任意給定一個初始向量 \(u_0\)
  2. 用一個迴圈 i = 1 ... k 計算以下式子,直到 \(\lambda_k\) 收斂:
  3. \(u_{k+1} = A u_{k}/\left \| A u_{k} \right \|\)
  4. \(\lambda(k+1) = u_{k+1}^TAu_{k+1}\)
接著大概談一下為什麼這個方法能夠逼近最大的特徵值。我們假設 A 是 \(n \times n\) 的矩陣,特徵值為 \(\lambda_1, \lambda_2, ... \lambda_n\),而特徵向量為 \(x_1, x_2, ..., x_n\)。因為所有的特徵向量為線性獨立(linearly independent),我們可以把 \(u_0\) 寫成: \[ u_0 = c_1 x_1 + c_2 x_2 + ... + c_n x_n \] 兩邊乘以 A 可得: \[ A u_0 = A(c_1 x_1 + c_2 x_2 + ... + c_n x_n) = c_1(Ax_1) + c_2(Ax_2) + ... + c_n(Ax_n) \\ = c_1 \lambda_1 x_1 + c_2 \lambda_2 x_2 + ... + c_n \lambda_n x_n \] 因此可以算出 \(A^k u_0\): \[ A^k u_0 = c_1 \lambda_1^k x_1 + c_2 \lambda_2^k x_2 + ... + c_n \lambda_n^k x_n \\ = \lambda_1^k(c_1 x_1 + c_2 (\frac{\lambda_2}{\lambda_1})^k x_2 + ... + c_n (\frac{\lambda_n}{\lambda_1})^k x_n) \] 而我們知道 \(\lambda_1\) 是最大的特徵值,因此當 k 很大時,\(A^k u_0\) 會趨近於 \(\lambda_1^k c_1 x_1\)。在不失一般性的情況下所有的特徵向量都是單位向量,因此可以得到以下式子: \[ u_{k+1} = \frac{A u_{k}}{\left \| A u_{k} \right \|} \approx \frac{\lambda_1^k c_1 x_1}{\left \| \lambda_1^k c_1 x_1 \right \|} = \pm x_1 \\ \lambda_{k+1} = u_{k+1}^TAu_{k+1} \approx x_1^T A x_1 = \lambda_1 \] 以上大略說明了 Power Method 為什麼能求得最大的特徵值。

原文中求最大奇異值的方法

SNGAN 用以下方法來求最大奇異值:
  1. 任意給定一個初始向量 \(u_0\)
  2. 用一個迴圈 i = 1 ... k 計算以下式子:
  3. \(v_{k+1} = W^T u_{k}/\left \|  W^T u_{k} \right \|\)
  4. \(u_{k+1} = W v_{k+1}/\left \| W v_{k+1} \right \|\)
  5. \(W_{SN} = W / u_{k+1}^T W v_{k+1}\)
以上簡單介紹了 SNGAN 的中心思想,關於性質證明或演算法的實作細節也請參考原文。

沒有留言:

張貼留言