歡迎光臨
每天分享高質量文章

萬字綜述之生成對抗網路(GAN)

  作者丨郭曉鋒 

單位丨愛奇藝 

研究方向丨影象生成

前陣子學習 GAN 的過程發現現在的 GAN 綜述文章大都是 2016 年 Ian Goodfellow 或者自動化所王飛躍老師那篇。可是在深度學習,GAN 領域,其進展都是以月來計算的,感覺那兩篇綜述有些老了。

 

最近發現有一篇最新的 GAN 綜述論文,四十餘頁,介紹了 GAN 的各個方面,於是就學習並整理筆記如下。文中許多內容大都根據自己所學總結,有不當之處歡迎指出。

 

 

此外,本文參考了許多部落格資料,已給出參考連結。如有侵權,請私信刪除。文章目錄如下:

 

GAN的基本介紹

生成對抗網路(GAN,Generative Adversarial Networks)作為一種優秀的生成式模型,引爆了許多影象生成的有趣應用。GAN 相比於其他生成式模型,有兩大特點: 

 

1. 不依賴任何先驗假設。傳統的許多方法會假設資料服從某一分佈,然後使用極大似然去估計資料分佈。 

 

2. 生成 real-like 樣本的方式非常簡單。GAN 生成 real-like 樣本的方式透過生成器(Generator)的前向傳播,而傳統方法的取樣方式非常複雜,有興趣的同學可以參考下週志華老師的《機器學習》一書中對各種取樣方式的介紹。 

 

下麵,我們圍繞上述兩點展開介紹。

 

GAN的基本概念

GAN(Generative Adversarial Networks)從其名字可以看出,是一種生成式的,對抗網路。再具體一點,就是透過對抗的方式,去學習資料分佈的生成式模型。

 

所謂的對抗,指的是生成網路和判別網路的互相對抗。生成網路盡可能生成逼真樣本,判別網路則盡可能去判別該樣本是真實樣本,還是生成的假樣本。示意圖如下:

 

 

隱變數 z (通常為服從高斯分佈的隨機噪聲)透過 Generator 生成 Xfake, 判別器負責判別輸入的 data 是生成的樣本 Xfake 還是真實樣本 Xreal。最佳化的標的函式如下:

 

 

對於判別器 D 來說,這是一個二分類問題,V(D,G) 為二分類問題中常見的交叉熵損失。對於生成器 G 來說,為了盡可能欺騙 D,所以需要最大化生成樣本的判別機率 D(G(z)),即最小化 log(1-D(G(z))),註意:log(D(x)) 一項與生成器 G 無關,所以可以忽略。

 

實際訓練時,生成器和判別器採取交替訓練,即先訓練 D,然後訓練 G,不斷往複。值得註意的是,對於生成器,其最小化的是,即最小化 V(D,G) 的最大值。

 

為了保證 V(D,G) 取得最大值,所以我們通常會訓練迭代k次判別器,然後再迭代1次生成器(不過在實踐當中發現,k 通常取 1 即可)。當生成器 G 固定時,我們可以對 V(D,G) 求導,求出最優判別器 D*(x):

 

 

把最優判別器代入上述標的函式,可以進一步求出在最優判別器下,生成器的標的函式等價於最佳化 Pdata(x) , Pg(x) 的 JS 散度(JSD, Jenson Shannon Divergence)。 

 

可以證明,當 G,D 二者的 capacity 足夠時,模型會收斂,二者將達到納什均衡。此時, Pdata(x)=Pg(x),判別器不論是對於 Pdata(x) 還是 Pg(x) 中取樣的樣本,其預測機率均為 1/2,即生成樣本與真實樣本達到了難以區分的地步。

 

標的函式

前面我們提到了 GAN 的標的函式是最小化兩個分佈的 JS 散度。實際上,衡量兩個分佈距離的方式有很多種,JS 散度只是其中一種。如果我們定義不同的距離度量方式,就可以得到不同的標的函式。許多對 GAN 訓練穩定性的改進,比如 EBGAN,LSGAN 等都是定義了不同的分佈之間距離度量方式。 

 

f-divergence 

 

f-divergence 使用下麵公式來定義兩個分佈之間的距離:

 

 

上述公式中 f 為凸函式,且 f(1)=0 。採用不同的 f 函式(Generator),可以得到不同的最佳化標的。具體如下:

 

 

值得註意的是,散度這種度量方式不具備對稱性,即 Df(Pdata||Pg) 和 Df(Pg||Pdata) 不相等。

 

LSGAN 

 

上面提到,LSGAN 是 f-divergence 中時的特殊情況。具體來說 LSGAN 的 Loss 如下:

 

 

原作中取 a=c=1,b=0。LSGAN 有兩大優點: 

 

  • 穩定訓練:解決了傳統GAN訓練過程中的梯度飽和問題 

  • 改善生成質量:透過懲罰遠離判別器決策邊界的生成樣本來實現 

 

對於第一點,穩定訓練,可以先看一張圖:

 

 

上圖左邊是傳統 GAN 使用 sigmoid 交叉熵作為 loss 時,輸入與輸出的對照關係圖。上圖右邊是 LSGAN 使用最小二乘 loss 時,輸入與輸出的對照關係圖。可以看到,在左圖,輸入比較大的時候,梯度為 0,即交叉熵損失的輸入容易出現梯度飽和現象。而右邊的最小二乘 loss 則不然。 

 

對於第二點,改善生成質量。這個在原文也有詳細的解釋。具體來說:對於一些被判別器分類正確的樣本,其對梯度是沒有貢獻的。但是判別器分類正確的樣本就一定是很接近真實資料分佈的樣本嗎?顯然不一定。 

 

考慮如下理想情況,一個訓練良好的 GAN,真實資料分佈 Pdata 和生成資料分佈 Pg 完全重合,判別器決策面穿過真實資料點,所以,反過來,我們利用樣本點離決策面的遠近來度量生成樣本的質量,樣本離決策面越近,則 GAN 訓練的越好。

 

 

上圖 b 中,一些離決策面比較遠的點,雖然被分類正確,但是這些並不是好的生成樣本。傳統 GAN 通常會將其忽略。而對於 LSGAN,由於採用最小二乘損失,計算決策面到樣本點的距離,如圖 c,可以把離決策面比較遠的點“拉”回來,也就是把離真實資料比較遠的點“拉”回來。

 

Integral probality metric (IPM) 

 

IPM 定義了一個評價函式族 f ,用於度量任意兩個分佈之間的距離。在一個緊湊的空間中,定義 P(x) 為在 x 上的機率測度。那麼兩個分佈 Pdata,Pg 之間的 IPM 可以定義為如下公式:

 

 

類似於 f-divergence,不同函式 f 也可以定義出一系列不同的最佳化標的。典型的有 WGAN,Fisher GAN 等。下麵簡要介紹一下 WGAN。 

 

WGAN 

 

WGAN 提出了一種全新的距離度量方式——地球移動距離(EM, Earth-mover distance),也叫 Wasserstein 距離。關於 Wasserstein 距離的介紹可以參考:白話 Wassertein 距離 [1]

 

Wasserstein 距離具體定義如下:

 

 

⊓(Pdata,Pg) 表示一組聯合分佈,這組聯合分佈裡的任一分佈 γ 的邊緣分佈均為 Pdata(x) 和 Pg(x)。 

 

直觀上來說,機率分佈函式(PDF)可以理解為隨機變數在每一點的質量,所以 W(Pdata,Pg) 則表示把機率分佈 Pdata(x) 搬到 Pg(x) 需要的最小工作量。 

 

WGAN 也可以用最優傳輸理論來解釋,WGAN 的生成器等價於求解最優傳輸對映,判別器等價於計算 Wasserstein 距離,即最優傳輸總代價 [4]。關於 WGAN 的理論推導和解釋比較複雜,不過程式碼實現非常簡單。具體來說 [3]: 

 

  • 判別器最後一層去掉 sigmoid

     

  • 生成器和判別器的 loss 不取 log 

  • 每次更新判別器的引數之後把它們的絕對值截斷到不超過一個固定常數 c 

 

上述第三點,在 WGAN 的後來一篇工作 WGAN-GP 中,將梯度截斷替換為了梯度懲罰。

 

f-divergence和IPM對比 

 

f-divergence 存在兩個問題:其一是隨著資料空間的維度的增加,f-divergence 會非常難以計算。其二是兩個分佈的支撐集 [3] 通常是未對齊的,這將導致散度值趨近於無窮。 

 

IPM 則不受資料維度的影響,且一致收斂於 Pdata},Pg 兩個分佈之間的距離。而且即便是在兩個分佈的支撐集不存在重合時,也不會發散。 

 

輔助的標的函式 

 

在許多 GAN 的應用中,會使用額外的 Loss 用於穩定訓練或者達到其他的目的。比如在影象翻譯,影象修複,超分辨當中,生成器會加入標的影象作為監督資訊。EBGAN 則把 GAN 的判別器作為一個能量函式,在判別器中加入重構誤差。CGAN 則使用類別標簽資訊作為監督資訊。

其他常見生成式模型

自回歸模型:pixelRNN與pixelCNN

 

自回歸模型透過對影象資料的機率分佈 Pdata(x) 進行顯式建模,並利用極大似然估計最佳化模型。具體如下:

 

 

上述公式很好理解,給定 x1,x2,…,xi-1 條件下,所有 p(xi) 的機率乘起來就是影象資料的分佈。如果使用 RNN 對上述依然關係建模,就是 pixelRNN。如果使用 CNN,則是 pixelCNN。具體如下 [5]

 

 

顯然,不論是對於 pixelCNN 還是 pixelRNN,由於其畫素值是一個個生成的,速度會很慢。語音領域大火的 WaveNet 就是一個典型的自回歸模型。 

 

VAE 

 

PixelCNN/RNN 定義了一個易於處理的密度函式,我們可以直接最佳化訓練資料的似然;對於變分自編碼器我們將定義一個不易處理的密度函式,透過附加的隱變數 z 對密度函式進行建模。VAE 原理圖如下 [6]

 

 

在 VAE 中,真實樣本X透過神經網路計算出均值方差(假設隱變數服從正態分佈),然後透過取樣得到取樣變數 Z 併進行重構。VAE 和 GAN 均是學習了隱變數 z 到真實資料分佈的對映。但是和 GAN 不同的是: 

 

1. GAN 的思路比較粗暴,使用一個判別器去度量分佈轉換模組(即生成器)生成分佈與真實資料分佈的距離。 

 

2. VAE 則沒有那麼直觀,VAE 透過約束隱變數 z 服從標準正態分佈以及重構資料實現了分佈轉換對映 X=G(z)。

 

生成式模型對比 

 

1. 自回歸模型透過對機率分佈顯式建模來生成資料;

 

2. VAE 和 GAN 均是:假設隱變數 z 服從某種分佈,並學習一個對映 X=G(z) ,實現隱變數分佈 z 與真實資料分佈 Pdata(x) 的轉換;

 

3. GAN 使用判別器去度量對映 X=G(z) 的優劣,而 VAE 透過隱變數 z 與標準正態分佈的 KL 散度和重構誤差去度量。

 

GAN常見的模型結構

DCGAN 

 

DCGAN 提出使用 CNN 結構來穩定 GAN 的訓練,並使用了以下一些 trick: 

 

  • Batch Normalization 

  • 使用 Transpose convlution 進行上取樣 

  • 使用 Leaky ReLu 作為啟用函式 

 

上面這些 trick 對於穩定 GAN 的訓練有許多幫助,自己設計 GAN 網路時也可以酌情使用。 

 

層級結構 

 

GAN 對於高解析度影象生成一直存在許多問題,層級結構的 GAN 透過逐層次,分階段生成,一步步提生影象的解析度。典型的使用多對 GAN 的模型有StackGAN,GoGAN。使用單一 GAN,分階段生成的有 ProgressiveGAN。StackGAN 和 ProgressiveGAN 結構如下:

 

 

自編碼結構 

 

經典的 GAN 結構裡面,判別網路通常被當做一種用於區分真實/生成樣本的機率模型。而在自編碼器結構裡面,判別器(使用 AE 作為判別器)通常被當做能量函式(Energy function)。對於離資料流形空間比較近的樣本,其能量較小,反之則大。有了這種距離度量方式,自然就可以使用判別器去指導生成器的學習。 

 

AE 作為判別器,為什麼就可以當做能量函式,用於度量生成樣本離資料流形空間的距離呢?首先,先看 AE 的 loss:

 

 

AE 的 loss 是一個重構誤差。使用 AE 做為判別器時,如果輸入真實樣本,其重構誤差會很小。如果輸入生成的樣本,其重構誤差會很大。因為對於生成的樣本,AE 很難學習到一個影象的壓縮表示(即生成的樣本離資料流行形空間很遠)。所以,VAE 的重構誤差作為 Pdata 和 Pg 之間的距離度量是合理的。典型的自編碼器結構的 GAN 有:BEGAN,EBGAN,MAGAN 等。

 

GAN的訓練障礙

理論中存在的問題

 

經典 GAN 的判別器有兩種 loss,分別是:

 

 

使用上面第一個公式作為 loss 時:在判別器達到最優的時候,等價於最小化生成分佈與真實分佈之間的 JS 散度,由於隨機生成分佈很難與真實分佈有不可忽略的重疊以及 JS 散度的突變特性,使得生成器面臨梯度消失的問題。

 

使用上面第二個公式作為 loss 時:在最優判別器下,等價於既要最小化生成分佈與真實分佈直接的 KL 散度,又要最大化其 JS 散度,相互矛盾,導致梯度不穩定,而且 KL 散度的不對稱性使得生成器寧可喪失多樣性也不願喪失準確性,導致 collapse mode 現象 [7]

 

實踐中存在的問題 

 

GAN 在實踐中存在兩個問題: 

 

其一,GAN 提出者 Ian Goodfellow 在理論中雖然證明瞭 GAN 是可以達到納什均衡的。可是我們在實際實現中,我們是在引數空間最佳化,而非函式空間,這導致理論上的保證在實踐中是不成立的。 

 

其二,GAN 的最佳化標的是一個極小極大(minmax)問題,即,也就是說,最佳化生成器的時候,最小化的是。可是我們是迭代最佳化的,要保證 V(G,D) 最大化,就需要迭代非常多次,這就導致訓練時間很長。

 

如果我們只迭代一次判別器,然後迭代一次生成器,不斷迴圈迭代。這樣原先的極小極大問題,就容易變成極大極小(maxmin)問題,可二者是不一樣的,即:

 

 

如果變化為極小極大問題,那麼迭代就是這樣的,生成器先生成一些樣本,然後判別器給出錯誤的判別結果並懲罰生成器,於是生成器調整生成的機率分佈。可是這樣往往導致生成器變“懶”,只生成一些簡單的,重覆的樣本,即缺乏多樣性,也叫 mode collapse。

 

穩定GAN訓練的技巧 

 

如上所述,GAN 在理論上和實踐上存在三個大問題,導致訓練過程十分不穩定,且存在 mode collapse 的問題。為了改善上述情況,可以使用以下技巧穩定訓練: 

 

Feature matching:方法很簡單,使用判別器某一層的特徵替換原始 GAN Loss 中的輸出。即最小化:生成圖片透過判別器的特徵和真實圖片透過判別器得到的特徵之間的距離。 

 

標簽平滑:GAN 訓練中的標簽非 0 即 1,這使得判別器預測出來的 confidence 傾向於更高的值。使用標簽平滑可以緩解該問題。具體來說,就是把標簽 1 替換為 0.8~1.0 之間的隨機數。 

 

譜歸一化:WGAN 和 Improve WGAN 透過施加 Lipschitz 條件來約束最佳化過程,譜歸一化則是對判別器的每一層都施加 Lipschitz 約束,但是譜歸一化相比於 Improve WGAN 計算效率要高一些。 

 

PatchGAN:準確來說 PatchGAN 並不是用於穩定訓練,但這個技術被廣泛用於影象翻譯當中,PatchGAN 相當於對影象的每一個小 Patch 進行判別,這樣可以使得生成器生成更加銳利清晰的邊緣。

 

具體做法是這樣的:假設輸入一張 256×256 的影象到判別器,輸出的是一個 4×4 的 confidence map,confidence map 中每一個畫素值代表當前 patch 是真實影象的置信度,即為 PatchGAN。當前影象 patch 的大小就是感受野的大小,最後將所有 Patch 的 Loss 求平均作為最終的 Loss。

 

mode collapse的解決方案

針對標的函式的改進方法 

 

為了避免前面提到的由於最佳化 maxmin 導致 mode 跳來跳去的問題,UnrolledGAN 採用修改生成器 loss 來解決。具體而言,UnrolledGAN 在更新生成器時更新 k 次生成器,參考的 Loss 不是某一次的 loss,是判別器後面 k 次迭代的 loss。

 

註意,判別器後面 k 次迭代不更新自己的引數,只計算 loss 用於更新生成器。這種方式使得生成器考慮到了後面 k 次判別器的變化情況,避免在不同 mode 之間切換導致的樣式崩潰問題。此處務必和迭代 k 次生成器,然後迭代 1 次判別器區分開 [8]

 

DRAGAN 則引入博弈論中的無後悔演演算法,改造其 loss 以解決 mode collapse問題 [9]。前文所述的 EBGAN 則是加入 VAE 的重構誤差以解決 mode collapse。 

 

針對網路結構的改進方法 

 

Multi agent diverse GAN (MAD-GAN) 採用多個生成器,一個判別器以保障樣本生成的多樣性。具體結構如下:

 

 

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

 

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

 

 

輸入樣本 x 透過一個 Encoder 編碼為隱變數 E(x) ,然後隱變數被 Generator 重構,訓練時,Loss 有三個。 

 

DM 和 R (重構誤差)用於指導生成 real-like 的樣本。而 DD 則對 E(x) 和 z 生成的樣本進行判別,顯然二者生成樣本都是 fake samples,所以這個判別器主要用於判斷生成的樣本是否具有多樣性,即是否出現 mode collapse。 

 

Mini-batch Discrimination 

 

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

 

關於GAN隱空間的理解

隱空間是資料的一種壓縮表示的空間。通常來說,我們直接在資料空間對影象進行修改是不現實的,因為影象屬性位於高維空間中的流形中。但是在隱空間,由於每一個隱變數代表了某個具體的屬性,所以這是可行的。

 

在這部分,我們會探討 GAN 是如何處理隱空間及其屬性的,此外還將探討變分方法如何結合到 GAN 的框架中。

 

隱空間分解

GAN 的輸入隱變數 z 是非結構化的,我們不知道隱變數中的每一位數分別控制著什麼屬性。因此有學者提出,將隱變數分解為一個條件變數 c 和標準輸入隱變數 z 。具體包括有監督的方法和無監督的方法。 

 

有監督方法 

 

典型的有監督方法有 CGAN 和 ACGAN。 

 

CGAN 將隨機噪聲 z 和類別標簽 c 作為生成器的輸入,判別器則將生成的樣本/真實樣本與類別標簽作為輸入。以此學習標簽和圖片之間的關聯性。 

 

ACGAN 將隨機噪聲 z 和類別標簽 c 作為生成器的輸入,判別器則將生成的樣本/真實樣本輸入,且回歸出圖片的類別標簽。以此學習標簽和圖片之間的關聯性。二者結構如下(左邊為 CGAN,右邊為 ACGAN):

 

 

無監督方法 

 

相比於有監督方法,無監督方法不使用任何標簽資訊。因此,無監督方法需要對隱空間進行解耦得到有意義的特徵表示。 

 

InfoGAN 對把輸入噪聲分解為隱變數 z 和條件變數 c (訓練時,條件變數 c 從均勻分佈取樣而來),二者被一起送入生成器。在訓練過程中透過最大化 c 和 G(z,c) 的互資訊 I(c;G(z,c)) 以實現變數解耦(I(c;G(z,c)) 的互資訊表示 c 裡面關於 G(z,c) 的資訊有多少,如果最大化互資訊 I(c;G(z,c)) ,也就是最大化生成結果和條件變數 c 的關聯性)。

 

模型結構和 CGAN 基本一致,除了 Loss 多了一項最大互資訊。具體如下 [10]

 

 

從上面分析可以看出,InfoGAN 只是實現了資訊的解耦,至於條件變數 c 每一個值的具體含義是什麼,我們無法控制。

 

於是 ss-InfoGAN 出現了,ss-InfoGAN 採用半監督學習方法,把條件變數 c 分成兩部分,。 Css 則利用標簽像 CGAN 一樣學習,Cus 則像 InfoGAN 一樣學習。

 

GAN與VAE的結合

GAN 相比於 VAE 可以生成清晰的影象,但是卻容易出現 mode collapse 問題。VAE 由於鼓勵重構所有樣本,所以不會出現 mode collapse 問題。 

 

一個典型結合二者的工作是 VAEGAN,結構很像前文提及的 MRGAN,具體如下:

 

 

上述模型的 Loss 包括三個部分,分別是判別器某一層特徵的重構誤差,VAE 的 Loss,GAN 的 Loss。

 

GAN模型總結

前面兩節介紹了各種各樣的 GAN 模型,這些模型大都是圍繞著 GAN 的兩大常見問題:樣式崩潰,以及訓練崩潰來設計的。下表總結了這些模型,讀者可以根據下表回顧對照:

 

 

GAN的應用

由於 GAN 在生成樣本過程成不需要顯式建模任何資料分佈就可以生成 real-like 的樣本,所以 GAN 在影象,文字,語音等諸多領域都有廣泛的應用。下表總結了 GAN 在各個方面的應用,後文會這些演演算法做相應介紹。

 

 

影象

影象翻譯 

 

所謂影象翻譯,指從一副(源域)影象到另一副(標的域)影象的轉換。可以類比機器翻譯,一種語言轉換為另一種語言。翻譯過程中會保持源域影象內容不變,但是風格或者一些其他屬性變成標的域。 

 

Paired two domain data 

 

成對影象翻譯典型的例子就是 pix2pix,pix2pix 使用成對資料訓練了一個條件 GAN,Loss 包括 GAN 的 loss 和逐畫素差 loss。而 PAN 則使用特徵圖上的逐畫素差作為感知損失替代圖片上的逐畫素差,以生成人眼感知上更加接近源域的影象。 

 

Unpaired two domain data 

 

對於無成對訓練資料的影象翻譯問題,一個典型的例子是 CycleGAN。CycleGAN 使用兩對 GAN,將源域資料透過一個 GAN 網路轉換到標的域之後,再使用另一個 GAN 網路將標的域資料轉換回源域,轉換回來的資料和源域資料正好是成對的,構成監督資訊。 

 

超分辨 

 

SRGAN 中使用 GAN 和感知損失生成細節豐富的影象。感知損失重點關註中間特徵層的誤差,而不是輸出結果的逐畫素誤差。避免了生成的高分辨影象缺乏紋理細節資訊問題。 

 

標的檢測 

 

得益於 GAN 在超分辨中的應用,針對小標的檢測問題,可以理由 GAN 生成小標的的高解析度影象從而提高標的檢測精度。

 

影象聯合分佈學習 

 

大部分 GAN 都是學習單一域的資料分佈,CoupledGAN 則提出一種部分權重共享的網路,使用無監督方法來學習多個域影象的聯合分佈。具體結構如下 [11]

 

如上圖所示,CoupledGAN 使用兩個 GAN 網路。生成器前半部分權重共享,目的在於編碼兩個域高層的,共有資訊,後半部分沒有進行共享,則是為了各自編碼各自域的資料。判別器前半部分不共享,後半部分用於提取高層特徵共享二者權重。對於訓練好的網路,輸入一個隨機噪聲,輸出兩張不同域的圖片。 

 

值得註意的是,上述模型學習的是聯合分佈 P(x,y) ,如果使用兩個單獨的 GAN 分別取訓練,那麼學習到的就是邊際分佈 P(x) 和 P(y)。通常情況下, P(x,y)≠P(x)·P(y) 。

 

影片生成 

 

通常來說,影片有相對靜止的背景和運動的前景組成。VideoGAN 使用一個兩階段的生成器,3D CNN 生成器生成運動前景,2D CNN 生成器生成靜止的背景。

 

Pose GAN 則使用 VAE 和 GAN 生成影片,首先,VAE 結合當前幀的姿態和過去的姿態特徵預測下一幀的運動資訊,然後 3D CNN 使用運動資訊生成後續影片幀。

 

Motion and Content GAN (MoCoGAN) 則提出在隱空間對運動部分和內容部分進行分離,使用 RNN 去建模運動部分。

序列生成

相比於 GAN 在影象領域的應用,GAN 在文字,語音領域的應用要少很多。主要原因有兩個: 

 

1. GAN 在最佳化的時候使用 BP 演演算法,對於文字,語音這種離散資料,GAN 沒法直接跳到標的值,只能根據梯度一步步靠近。 

 

2. 對於序列生成問題,每生成一個單詞,我們就需要判斷這個序列是否合理,可是 GAN 裡面的判別器是沒法做到的。除非我們針對每一個 step 都設定一個判別器,這顯然不合理。 

 

為瞭解決上述問題,強化學習中的策略梯度下降(Policy gredient descent)被引入到 GAN 中的序列生成問題。 

 

音樂生成 

 

RNN-GAN 使用 LSTM 作為生成器和判別器,直接生成整個音訊序列。然而,正如上面提到的,音樂當做包括歌詞和音符,對於這種離散資料生成問題直接使用 GAN 存在很多問題,特別是生成的資料缺乏區域性一致性。 

 

相比之下,SeqGAN 把生成器的輸出作為一個智慧體(agent)的策略,而判別器的輸出作為獎勵(reward),使用策略梯度下降來訓練模型。ORGAN 則在 SeqGAN 的基礎上,針對具體的標的設定了一個特定標的函式。 

 

語言和語音 

 

VAW-GAN (Variational autoencoding Wasserstein GAN) 結合 VAE 和 WGAN 實現了一個語音轉換系統。編碼器編碼語音訊號的內容,解碼器則用於重建音色。由於 VAE 容易導致生成結果過於平滑,所以此處使用 WGAN 來生成更加清晰的語音訊號。

半監督學習

影象資料的標簽獲得需要大量的人工標註,這個過程費時費力。 

 

利用判別器進行半監督學習 

 

基於 GAN 的半監督學習方法 [12] 提出了一種利用無標簽資料的方法。實現方法和原始 GAN 基本一樣,具體框架如下 [13]

 

 

相比於原始 GAN,主要區別在於判別器輸出一個 K+1 的類別資訊(生成的樣本為第 K+1 類)。對於判別器,其 Loss 包括兩部分,一個是監督學習損失(只需要判斷樣本真假),另一個是無監督學習損失(判斷樣本類別)。生成器則只需要儘量生成逼真的樣本即可。訓練完成後,判別器就可以作為一個分類模型去分類。 

 

從直觀上來看,生成的樣本主要在於輔助分類器學會區分真實的資料空間在哪裡。 

 

使用輔助分類器的半監督學習 

 

上面提及的利用判別器進行半監督學習的模型存在一個問題。判別器既要學習區分正負樣本,也要學習預測標簽。二者標的不一致,容易導致二者都達不到最優。一個直觀的想法就把預測標簽和區分正負樣本分開。Triple-GAN 就是這麼做的 [14]

 

 

(Xg,Yg)~pg(X,Y), (Xl,Yl)~p(X,Y), (Xc,Yc)~pc(X,Y) 分別表示生成的資料,有標簽的資料,無標簽的資料。CE 表示交叉熵損失。

 

域適應

域適應是一個遷移學習裡面的概念。簡單說來,我們定義源資料域分佈為 Ds(x,y),標的資料域分佈為 DT(x,y)。對於源域資料,我們有許多標簽,但是對於標的域的資料沒有標簽。我們希望能透過源域的有標簽資料和標的域的無標簽資料學習一個模型,在標的域泛化的很好。遷移學習的“遷移”二字指的是源域資料分佈向標的域資料分佈的遷移。 

 

GAN 用於遷移學習時,核心思想在於使用生成器把源域資料特徵轉換成標的域資料特徵,而判別器則盡可能區分真實資料和生成資料特徵。以下是兩個把 GAN 應用於遷移學習的例子 DANN 和 ARDA:

 

 

以上圖左邊的 DANN 為例,Is,It 分別代表源域資料,標的域的資料, ys 表示源域資料的標簽。Fs,Ft 表示源域特徵,標的域特徵。DANN 中,生成器用於提取特徵,並使得提取的特徵難以被判別器區分是源域資料特徵還是標的域資料特徵。 

 

在行人重識別領域,有許多基於 CycleGAN 的遷移學習以進行資料增廣的應用。行人重識別問題一個難點在於不同攝像頭下拍攝的人物環境,角度差別非常大,導致存在較大的 Domain gap。

 

因此,可以考慮使用 GAN 來產生不同攝像頭下的資料進行資料增廣。[15] 中提出了一個 CycleGAN 用於資料增廣的方法。具體模型結構如下:

 

 

對於每一對攝像頭都訓練一個 CycleGAN,這樣就可以實現將一個攝像頭下的資料轉換成另一個攝像頭下的資料,但是內容(人物)保持不變。

 

其他應用

 

GAN 的變體繁多,應用非常廣泛,在一寫非機器學習領域也有應用,以下是一些例子。 

 

醫學影象分割 

 

[16] 提出了一種 segmentor-critic 結構用於分割醫學影象。segmentor 類似於 GAN 中的生成器用於生成分割影象,critic 則最大化生成的分割影象和 ground truth 之間的距離。此外,DI2IN 使用 GAN 分割 3D CT 影象,SCAN 使用 GAN 用於分割 X 射線影象。 

 

圖片隱寫 

 

隱寫指的是把秘密資訊隱藏到非秘容器,比如圖片中。隱寫分析器則用於判別容器是否含有秘密資訊。一些研究嘗試使用 GAN 的生成器生成帶有隱寫資訊的圖片,判別器則有兩個,一個用於判別圖片是否是真實圖片,另一個則判別圖片是否具有秘密資訊 [17]。 

 

連續學習 

 

連續學習目的在於解決多個任務,且在學習過程中不斷積累新知識。連續學習中存在一個突出的問題就是“知識遺忘”。[18] 中使用 GAN 的生成器作為一個 scholars model,生成器不斷使用以往知識進行訓練,solver 則給出答案,以此避免“知識遺忘”問題。

 

討論

在第一、二部分我們討論了 GAN 及其變體,第三部分討論了 GAN 的應用。下表總結了比較有名的一些 GAN 的模型結構及其施加的額外約束。

 

 

前面都是對於 GAN 的微觀層面的探討。接下來,我們會站在一個宏觀的視角來討論 GAN。

 

GAN的評價

GAN 的評價方法多種多樣,現有的 example-based(顧名思義,基於樣本層面做評價)方法,均是對生成樣本與真實樣本提取特徵,然後在特徵空間做距離度量。具體框架如下:

 

 

關於本小節的符號對照關係如下: 

 

Pg 表示生成資料分佈,Pr 表示真實資料分佈,E 表示數學期望,x 表示輸入樣本,x~Pg 表示 x 為生成樣本的取樣,x~Pr 表示 x 為真實樣本的取樣。y 表示樣本標簽,M 表示分類網路,通常選擇 Inception network。

 

下麵分別對常見的評價指標進行一一介紹。

 

Inception Score 

 

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

 

1. 對於同一個類別的圖片,其輸出的機率分佈應該趨向於一個脈衝分佈。可以保證生成樣本的準確性。 

 

2. 對於所有類別,其輸出的機率分佈應該趨向於一個均勻分佈,這樣才不會出現 mode collapsing 等,可以保證生成樣本的多樣性。

 

因此,可以設計如下指標:

 

 

根據前面分析,如果是一個訓練良好的 GAN, pM(y|x) 趨近於脈衝分佈, pM(y) 趨近於均勻分佈。二者KL散度會很大。Inception Score 自然就高。實際實驗表明,Inception Score 和人的主觀判別趨向一致。IS 的計算沒有用到真實資料,具體值取決於模型 M 的選擇。 

 

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

 

Mode Score 

 

Mode Score 作為 Inception Score 的改進版本,添加了關於生成樣本和真實樣本預測的機率分佈相似性度量一項。具體公式如下:

 

Kernel MMD

 

計算公式如下:

 

 

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

 

將上述公式展開即可得到下麵的計算公式:

 

 

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

 

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

 

Wasserstein Distance 

 

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

 

 

Wasserstein distance 可以衡量兩個分佈之間的相似性。距離越小,分佈越相似。 

 

特點:如果特徵空間選擇合適,會有一定的效果。但是計算複雜度為 O(n^3) 太高。

 

Fréchet Inception Distance (FID) 

 

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

 

 

μ,C 分別代表協方差和均值。 

 

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

 

1-Nearest Neighbor classifier 

 

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

 

對於真實樣本 Xr ,進行 1-NN 分類的時候,如果生成的樣本越真實。則真實樣本空間 R 將被生成的樣本 Xg 包圍。那麼 Xr 的精度會很低。 

 

對於生成的樣本 Xg ,進行 1-NN 分類的時候,如果生成的樣本多樣性不足。由於生成的樣本聚在幾個 mode,則 Xg 很容易就和 Xr 區分,導致精度會很高。 

 

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

 

其他評價方法 

 

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

 

總結 

 

實際實驗發現,MMD 和 1-NN two-sample test 是最為合適的評價指標,這兩個指標可以較好的區分:真實樣本和生成的樣本, mode collapsing。且計算高效。 

 

總體說來,GAN 的學習是一個無監督學習過程,所以很難找到一個比較客觀的,可量化的評估指標。有許多指標在數值上雖然高,但是生成效果卻未必好。總之,GAN 的評價目前依然是一個開放性的問題。

 

GAN與強化學習的關係

 

強化學習的標的是對於一個智慧體,給定狀態 s,去選擇一個最佳的行為 a (action)。通常的可以定義一個價值函式 Q(s,a) 來衡量,對於狀態 s,採取行動 a 的回報是 Q(s,a),顯然,我們希望最大化這個回報值。對於很多複雜的問題,我們是很難定義這個價值函式 Q(s,a) 的,就像我們很難定義 GAN 生成的圖片到底有多好一樣。

 

說到這裡,大家可能反應過來了。GAN 生成的圖片好不好,我確實找不到一個合適的指標,那我學習一個判別器去判斷一下生成圖片和真實圖片的距離不就好了嗎。強化學習裡面的價值函式 Q(s,a) 難以定義,那直接用個神經網路去學習它就好了。典型的模型有 DDPG,TRPO 等等。

 

GAN的優缺點

優點 

 

1. GAN 的優點在開頭已有所介紹。這裡再總結一下: 

 

2. GAN 可以並行生成資料。相比於 PixelCNN,PixelRNN 這些模型,GAN 生成非常快,因為 GAN 使用 Generator 替代了取樣的過程;

 

3. GAN 不需要透過引入下界來近似似然。VAE 由於最佳化困難,引入了變分下界來最佳化似然。但是 VAE 對於先驗和後驗分佈做了假設,使得 VAE 很難逼近其變分下界;

 

從實踐來看,GAN 生成的結過要比 VAE 更清晰的多。 

 

缺點 

 

GAN 的缺點在前文也有詳細討論,主要問題在於: 

 

1. 訓練不穩定,容易崩潰。這個問題有學者提出了許多解決方案,比如 WGAN,LSGAN 等;

 

2. 樣式崩潰。儘管有很多相關的研究,但是由於影象資料的高維度特性,這個問題依然還沒完全解決。

 

未來的研究方向

GAN 的訓練崩潰,樣式崩潰問題等依然有待研究改進。Deep learning 儘管很強大,但目前仍有許多領域無法征服,期待 GAN 在此基礎上會有一些作為。

 

參考文獻

[1] https://zhuanlan.zhihu.com/p/57062205

[2] https://blog.csdn.net/victoriaw/article/details/60755698 

[3] https://zhuanlan.zhihu.com/p/25071913 

[4] GAN和蒙日-安培方程理論 

[5] https://blog.csdn.net/poulang5786/article/details/80766498 

[6] https://spaces.ac.cn/archives/5253 

[7] https://www.jianshu.com/p/42c42e13d09b 

[8] https://medium.com/@jonathan_hui/gan-unrolled-gan-how-to-reduce-mode-collapse-af5f2f7b51cd 

[9] https://medium.com/@jonathan_hui/gan-dragan-5ba50eafcdf2 

[10] https://medium.com/@jonathan_hui/gan-cgan-infogan-using-labels-to-improve-gan-8ba4de5f9c3d 

[11] https://blog.csdn.net/carrierlxksuper/article/details/60479883 

[12] Salimans, Tim, et al. “Improved techniques for training gans.” Advances in neural information processing systems. 2016. 

[13] https://blog.csdn.net/qq_25737169/article/details/78532719 

[14] https://medium.com/@hitoshinakanishi/reading-note-triple-generative-adversarial-nets-fc3775e52b1e1 

[15] Zheng Z , Zheng L , Yang Y . Unlabeled Samples Generated by GAN Improve the Person Re-identification Baseline in VitroC// 2017 IEEE International Conference on Computer Vision (ICCV). IEEE Computer Society, 2017. 

[16] Yuan Xue, Tao Xu, Han Zhang, Rodney Long, and Xiaolei Huang. Segan: Adversar- ial network with multi-scale l_1 loss for medical image segmentation. arXiv preprint arXiv:1706.01805, 2017. 

[17] Denis Volkhonskiy, Ivan Nazarov, Boris Borisenko, and Evgeny Burnaev. Steganographicgenerative adversarial networks. arXiv preprint arXiv:1703.05502, 2017. 

[18] Shin, Hanul, et al. “Continual learning with deep generative replay.” Advances in Neural Information Processing Systems. 2017.

贊(0)

分享創造快樂