GAN入門

cute_Learner發表於2022-01-30

1 GAN基本概念

1.1 什麼是生成對抗網路?

  生成對抗網路(GAN, Generative adversarial network) 在 2014 年被 Ian Goodfellow 提出。

  GAN 由 生成器 判別器 組成,生成器負責生成樣本判別器負責判斷生成器生成的樣本是否為真。生成器要儘可能迷惑判別器,而判別器要儘可能區分生成器生成的樣本和真實樣本。

  在 GAN 的原作 《Generative Adversarial Networks》 中,作者將生成器比喻為印假抄票的犯罪分子,判別器則類比為警察。犯罪分子努力讓鈔票看起來逼真。警察則不斷提升對於假仯的辨識能 力。二者互相博弈,隨著時間的進行,都會越來越強。那麼類比於影像生成任務,生成器不斷生成儘可能逼真的假影像。判別器則判斷影像是否是真實的影像還是生成的影像,二者不斷博弈優化。最終生成器生成的影像使得判別器完全無法判別真假。

  舉例:

    

  上述模型左邊是生成器  $\mathrm{G}$ , 其輸入是 $z$ , 對於原始的 $GAN$,$z$ 是由高斯分佈隨機取樣得到的噪聲。噪聲 $z$ 通過生成器得到了生成的假樣本。
  生成的假樣本與真實樣本放到一起,被隨機抽取送入到判別器 $D$,由判別器去區分輸入的樣本是生成的假樣本還是真實的樣本。整個過程簡單明瞭, 生成對抗網路中的 “生成對抗” 主要體現在生成器和判別器之間的對抗。

1.2 GAN的目標函式是什麼?  

  對於上述神經網路模型,如果想要學習其引數,首先需要一個目標函式。

  GAN 的目標函式定義如下

    $\underset{G}{min}\; \underset{D}{max}\;  V(D, G)=\mathrm{E}_{x \sim p_{\text {data }}(x)}[\log D(x)]+\mathrm{E}_{z \sim p_{z}(z)}[\log (1-D(G(z)))] $

  這個目標函式可以分為兩個部分來理解:

  判別器的優化通過  $\max _{D} V(D, G) $ 實現,$ V(D, G) $ 為判別器的目標函式

    • 第一項  $\mathrm{E}_{x \sim p_{\text {data }}(x)}[\log D(x)]$  表示對於從真實資料分佈中採用的樣本,其被判別器判定為真實樣本概率的數學期望。對於真實資料分佈中取樣的樣本,其預測為正樣本的概率當然是越接近 $1$ 越好。因此希望最大化這一項。
    • 第二項 $\mathrm{E}_{z \sim p_{z}(z)}[\log (1-D(G(z)))] $  表示:對於從噪聲 $P_{ \mathrm{z}}(\mathrm{z})$  分佈當中取樣得到的樣本經過生成器生成之後得到的生成圖片, 然後送入判別器,判別器希望儘可能將生成樣本都判別為生成樣本($D(G(z))$ 值越接近  $0$ 。從而相當於最大化  $\log (1-D(G(z)))$ 的期望  $\mathrm{E}_{z \sim p_{z}(z)}[\log (1-D(G(z)))]$  。

  生成器的優化通過  $ \underset{G}{min}\left( \underset{D}{max}  V(D, G)\right) $  實現

    • 注意,生成器的目標不是  $\underset{G}{min} \;V(D, G)$ ,即生成器不是最小化判別器的目標函式,生成器最小化的是判別器目標函式的最大值。判別器目標函式的最大值代表的是真實資料分佈與生成資料分佈的JS散度,JS散度可以度量分佈的相似性,兩個分佈越接近,JS散度越小。

1.3 GAN的目標函式和交叉熵有什麼區別?

  回顧交叉熵:《損失函式|交叉熵損失函式

    $H(p, q)=-\sum\limits _{x} p(x) \log q(x)$

  因為其中表示資訊量的項來自於非真實分佈 $q(x) $,而對其期望值的計算採用的是真實分佈 $p(x)$ ,所以稱其為交叉熵。 

  (1) 二分類交叉熵
  在二分的情況下,模型最後需要預測的結果只有兩種情況,對於每個類別我們的預測得到的概率為 $p$ 和 $1-p$ ,此時表示式為:
    $L=\frac{1}{N} \sum \limits _{i} L_{i}=\frac{1}{N} \sum \limits_{i}-\left[y_{i} \cdot \log \left( \ p_{i}\right)+\left(1-y_{i}\right) \cdot \log \left(1-p_{i}\right)\right]$
  其中:

    • $y_{i}$ 表示樣本 $i$ 的 $label$, 正類為 $1$ , 負類為 $0$。
    • $p_{i} $ 表示樣本 $i $ 預測為正類的概率。

  (2) 多分類交叉熵

  多分類的情況實際上就是對二分類的擴充套件:
    $L=\frac{1}{N} \sum \limits _{i} L_{i}=\frac{1}{N} \sum \limits _{i}-\sum \limits _{c=1}^{M} y_{i c} \log \left(p_{i c}\right)$
  其中:

    • $M $ 一一 類別的數量
    • $y_{i c}$ 一一符號函式 $ (0\   或 \ 1 )$,如果樣本 $ i $ 的真實類別等於 $c $ 取 $1$ , 否則取 $0$。
    • $p_{i c} $ 一一觀測樣本 $i$ 屬於類別 $c$ 的預測概率

  言歸正傳:

  判別器目標函式寫成離散形式即為:

    $V(D, G)=-\frac{1}{m} \sum\limits_{i=1}^{i=m} \log D\left(x^{i}\right)-\frac{1}{m} \sum\limits _{i=1}^{i=m} \log \left(1-D\left(\tilde{x}^{i}\right)\right)$

  可以看出,這個目標函式和交叉熵是一致的,即判別器的目標是最小化交叉樀損失,生成器的目標是最小化生成資料分佈和真實資料分佈的JS散度。

1.4  GAN的LOSS 為什麼降不下去?

  對於很多 GAN 的初學者在實踐過程中可能會納悶,為什麼GAN 的 Loss 一直降不下去。GAN到底什麼時候才算收斂? 其實,作為一個訓練良好的 GAN,其 Loss  就是降不下去的。衡量 GAN 是否訓練好了, 只能由人肉眼去看生成的圖片質量是否好。不過,對於沒有一個很好的評價是否收斂指標的問,也有許多學者做了 一些研究,後文提及的 WGAN 就提出了一種新的 Loss 設計方式,較好的解決了難以判斷收斂性的問題。

  下面我們分析一下 GAN 的 Loss為什麼降不下去?

  對於判別器而言,GAN 的 Loss 如下:

    $\underset{G}{min}\; \underset{D}{max}\;  V(D, G)=\mathrm{E}_{x \sim p_{\text {data }}(x)}[\log D(x)]+\mathrm{E}_{z \sim p_{z}(z)}[\log (1-D(G(z)))] $

  從  $\underset{G}{min}\; \underset{D}{max}\;  V(D, G) $ 可以看出,生成器和判別器的目的相反,即生成器網路和判別器網路互為對抗,此消彼長。不可能Loss一直降到一個收斂的狀態。

  • 對於生成器,其 Loss 下降快,很有可能是判別器太弱,導致生成器很輕易的就"愚弄"了判別器。
  • 對於判別器,其 Loss 下降快,意味著判別器很強,判別器很強則說明生成器生成的影像不夠逼真,才使得判別器輕易判別,導致 Loss 下降很快。

  也就是說,無論是判別器,還是生成器。Loss  的高低不能代表生成器的好壞。一 個好的 GAN 網路,其  Loss  往往是不斷波動的。看到這裡可能有點讓人絕 望,似乎判斷模型是否收斂就只能看生成的影像質量了。實際上,後文探討的 WGAN,提出了一種新的  Loss  度量方式,讓我們可以通過一定的手段來判斷模型是否收斂。

2 生成式模型、判別式模型的區別?

  對於機器學習模型,我們可以根據模型對資料的建模方式將模型分為兩大類,生成式模型判別式模型

  • 如果我們要訓練一個關於貓狗分類的模型, 對於判別式模型,只需要學習二者差異即可,比如說貓的體型會比狗小一點。
  • 而生成式模型則不一樣,需要學習貓是什麼樣,狗是什麼樣。有了二者的長相以後,再根據長相去區分。

  具體而言:

  • 生成式模型:由資料學習聯合概率分佈  $\mathrm{P}(\mathrm{X}, \mathrm{Y}) $,然後由  $\mathrm{P}(\mathrm{Y} \mid \mathrm{X})=\mathrm{P}(\mathrm{X}, \mathrm{Y}) / \mathrm{P}(\mathrm{X})$  求出概率分佈  $\mathrm{P}(\mathrm{Y} \mid \mathrm{X})$  作為預測的模型。該方法表示 了給定輸入  $X$  與產生輸出  $Y$  的生成關係
  • 判別式模型:由資料直接學習決策函式 $Y=f(X)$  或條件概率分佈 $P(Y \mid X) $  作為預測模型,即判別模型。判別方法關心的是對於給定的輸入  $X$,應該預測什麼樣的輸出  $Y$。

  對於上述兩種模型,從文字上理解起來似乎不太直觀。我們舉個例子來闡述一 下:

  • 假如我有以下獨立同分布的若干樣本  $(x, y)$ ,其中  $x$  為特徵,$y$  為標註, $y \in \{-1 ,1 \} $,  這裡有 $ (x, y) \in\{(2,-1),(2,-1),(3,-1),(3,1),(3,1)\}$  則:
    • 生成模型:

      $\begin{array}{|c|r|l|}\hline p(x, y) & y=-1 & y=1 \\\hline x=2 & 2 / 5 & 0 \\\hline x=3 & 1 / 5 & 2 / 5 \\\hline\end{array}$

    • 判別模型:

      $\begin{array}{|c|r|l|}\hline p(y \mid x) & y=-1 & y=1 \\\hline x=2 & 1 & 0 \\\hline x=3 & 1 / 3 & 2 / 3 \\\hline\end{array}$

3 什麼是 mode collapsing?

  即:某個模式(mode)出現大量重複樣本, 例如: 

     

  上圖左側的藍色五角星表示真實樣本空間,黃色的是生成的。生成樣本缺乏多樣性,存在大量重複。比如上圖右側中,紅框裡面人物反覆出現。

3.1 如何解決mode collapsing?

  • 針對目標函式的改進方法

  為了避免前面提到的由於優化  max  min  導致  mode  跳來跳去的問題。

  • UnrolledGAN  採用修改生成器  Loss  來解決。具體而言,UnrolledGAN  在更新生成器時更新 $k$  次生成器,參考的  Loss  不是某一次的Loss,是判別器後面  $k$  次迭代的 Loss。注意,判別器後面   $\mathrm{k}$  次迭代不更新自己的引數,只計算  Loss  用於更新生成器。這種方式使得生成器考慮到了後面  $k$  次判別器的變化情況,避免在不同  mode  之間切換導致的模式崩潰問題。此處務必和迭代 $k$  次生成器,然後迭代 $1$ 次判別器區分開。
  • DRAGAN  則引入博亦論中的無後悔演算法, 改造其  Loss  以解決  mode collapse  問題。
  • EBGAN  則是加入  VAE  的重構誤差以解決  mode collapse。
  • 針對網路結構的改進方法
  • Multi agent diverse GAN(MAD-GAN)採用多個生成器,一個判別器以保障樣本生成的多樣性。具體結構如下:

      

    相比於普通GAN,多了幾個生成器,且在 Loss 設計的時候,加入一個正則項。正則項使用餘弦距離懲罰三個生成器生成樣本的一致性。

  • MRGAN  則新增了一個判別器來懲罰生成樣本的  mode collapse  問題。具體結構如 下:

      

  輸入樣本  $x$  通過一個  Encoder  編碼為隱變數  $E(x) $,然後隱變數被  Generator  重構,訓練時,  Loss  有三個。  $D_{M}$  和  $R$  (重構誤差) 用於指導生成  real-like  的樣本。而  $D_{D} $   則對  $E(x)$  和  $z$  生成的樣本進行判別,顯然二者生成樣本都是  fake samples,所以這個判別器主要用於判斷生成的樣本是否具有多樣性,即是否出現  mode collapse。

  • Mini-batch Discrimination

  Mini-batch discrimination  在判別器的中間層建立一個  mini-batch layer  用於計算基於  L1  距離的樣本統計量,通過建立該統計量,實現了一個  batch  內某個樣本與其他樣本有多接近。這個資訊可以被判別器利用到,從而甄別出哪些缺乏多樣性的樣本。對生成器而言,則要試圖生成具有多樣性的樣本。

4 如何客觀評價GAN的生成能力?

  最常見評價 GAN 的方法就是主觀評價。主觀評價需要花費大量人力物力,且存在以下問題:

    • 評價帶有主管色彩,有些 bad case 沒看到很容易造成誤判
    • 如果一個GAN過擬合了,那麼生成的樣本會非常真實,人類主觀評價得分會非常高,可是這並不是一個好的GAN。

  因此,就有許多學者提出了  GAN  的客觀評價方法。

4.1 Inception Score

  對於一個在  ImageNet  訓練良好的  GAN,其生成的樣本丟給  Inception  網路進行測試的時候,得到的判別概率應該具有如下特性:

  • 對於同一個類別的圖片, 其輸出的概率分佈應該趨向於一個脈衝分佈。可以保證生成樣本的準確性。
  • 對於所有類別,其輸出的概率分佈應該趨向於一個均勻分佈,這樣才 不會出現 mode dropping 等,可以保證生成樣本的多樣性。

  因此,可以設計如下指標: $I S\left(P_{g}\right)=e^{E_{x \sim P_{g}}\left[K L\left(p_{M}(y \mid x) \| p_{M}(y)\right)\right]} $ 根據前面分析,如果是一個訓練良好的 GAN,$p_{M}(y \mid x)$ 趨近於脈衝分佈,$ p_{M}(y) $ 趨近於均勻分佈。 二者  KL  散度會很大。Inception Score  自然就高。實際實驗表明,Inception Score  和人的主觀判別趨向一致。IS  的計算沒有用到真實資料,具體值取決於模型  M 的選擇。

  特點: 可以一定程度上衡量生成樣本的多樣性和準確性,但是無法檢測過擬合。 Mode Score也是如此。不推薦在和  ImageNet  資料集差別比較大的資料上使 用。

4.2 Mode Score

  Mode Score 作為  Inception Score  的改進版本,新增了關於生成樣本和真實樣本預測的概率分佈相似性度量一項。

  具體公式如下:

    $M S\left(P_{g}\right)=e^{E_{x \sim P_{g}}\left[K L\left(p_{M}(y \mid x) \| p_{M}(y)\right)-K L\left(p_{M}(y) \| p_{M}\left(y^{*}\right)\right)\right]}$

4.3 Kernel MMD (Maximum Mean Discrepancy)

  計算公式如下:  

    $M M D^{2}\left(P_{r}, P_{g}\right)=E_{x_{r} \sim P_{r}, x_{g} \sim P_{g}}\left[\left\|\sum_{i=1}^{n 1} k\left(x_{r}\right)-\sum_{i=1}^{n 2} k\left(x_{g}\right)\right\|\right] $

   對於  Kernel MMD  值的計算,首先需要選擇一個核函式  $k$ ,這個核函式把樣本對映到再生希爾伯特空間(Reproducing Kernel Hilbert Space, RKHS), RKHS相比歐幾里得空間有許多優點,對於函式內積的計算是完備的。將上述公式展開即可得到下面的計算公式:

    $M M D^{2}\left(P_{r}, P_{g}\right)=E_{x_{r}, x_{r}^{\prime} \sim P_{r}, x_{g}, x_{g^{\prime}} \sim P_{g}}\left[k\left(x_{r}, x_{r}{ }^{\prime}\right)-2 k\left(x_{r}, x_{g}\right)+k\left(x_{g}, x_{g}{ }^{\prime}\right)\right] $

  MMD值越小,兩個分佈越接近。

  特點: 可以一定程度上衡量模型生成影像的優劣性,計算代價小。

4.4 Wasserstein distance

  Wasserstein distance 在最優傳輸問題中通常也叫做推土機距離。這個距離的介紹在 WGAN 中有詳細討論。

  公式如下:

    $\begin{array}{c} &W D\left(P_{r}, P_{g}\right)=\underset{\omega \in \mathbb{R}^{m \times n}}{min} \sum\limits _{i=1}^{n} \sum\limits_{i=1}^{m} \omega_{i j} d\left(x_{i}^{r}, x_{j}^{g}\right) \\s.t. &\Sigma_{i=1}^{m} w_{i, j}=p_{r}\left(x_{i}^{r}\right), \forall i ;\\&\Sigma_{j=1}^{n} w_{i, j}=p_{g}\left(x_{j}^{g}\right), \forall j\end{array}$

  Wasserstein distance 可以衡 量兩個分佈之間的相似性。距離越小, 分佈越相似。
  特點: 如果特徵空間選擇合適,會有一定的效果。但是計算複雜度為 $O\left(n^{3}\right)$  太高。

4.5 Fréchet Inception Distance (FID)

  FID 距離計算真實樣本,生成樣本在特徵空間之間的距離。首先利用 Inception 網路來提取特徵,然後使用高斯模型對特徵空間進行建模。根據高斯模型的均值和協方差來進行距離計算。

  具體公式如下:

    $F I D\left(\mathbb{P}_{r}, \mathbb{P}_{g}\right)=\left\|\mu_{r}-\mu_{g}\right\|+\operatorname{Tr}\left(C_{r}+C_{g}-2\left(C_{r} C_{g}\right)^{1 / 2}\right) $

  $\mu$,$C$ 分別代表協方差和均值。

  特點:儘管只計算了特徵空間的前兩階矩,但是魯棒,且計算高效。

4.6 1-Nearest Neighbor classifier

  使用留一法,結合1-NN分類器 (別的也行) 計算真實圖片,生成影像的精度。 如果二者接近,則精度接近 50 % ,否則接近 0% 。對於 GAN的評價問題,作者分別用正樣本的分類精度,生成樣本的分類精度去衡量生成樣本的真實性,多樣性。

  • 對於真實樣本  $  x_{r}$,進行 1-NN 分類的時候,如果生成的樣本越真實。則 真實樣本空間  $  \mathbb{R}$  將被生成的樣本 $x_{g}$  包圍。那麼 $x_{r}$  的精度會很低。
  • 對於生成的樣本 $x_{g}$,進行 1-NN 分類的時候,如果生成的樣本多樣性 不足。由於生成的樣本聚在幾個mode,則  $  x_{g}$  很容易就和  $x_{r}$  區分,導致精度會很高。

  特點: 理想的度量指標, 且可以檢測過擬合。

4.7 其他評價方法

  AIS,KDE方法也可以用於評價GAN,但這些方法不是  model agnostic metrics。 也就是說,這些評價指標的計算無法只利用: 生成的樣本,真實樣本來計算。

 

 

 

參考

1  機器學習--判別式模型與生成式模型

GAN生成對抗網路

3  生成對抗網路(GAN)

相關文章