AI佳作解讀系列(六) - 生成對抗網絡(GAN)綜述精華


注:本文來自機器之心的PaperWeekly系列:萬字綜述之生成對抗網絡(GAN),如有侵權,請聯系刪除,謝謝!

 

前陣子學習 GAN 的過程發現現在的 GAN 綜述文章大都是 2016 年 Ian Goodfellow 或者自動化所王飛躍老師那篇。可是在深度學習,GAN領域,其進展都是以月來計算的,感覺那兩篇綜述有些老了。最近發現有一篇最新的 GAN 綜述論文(How Generative Adversarial Networks and Their Variants Work: An Overview),四十余頁,介紹了 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-pergence

f-pergence 使用下面公式來定義兩個分布之間的距離:

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

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

  • LSGAN

上面提到,LSGAN 是 f-pergence中時的特殊情況。具體來說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-pergence,不同函數 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-pergence 和 IPM 對比

f-pergence存在兩個問題:其一是隨着數據空間的維度的增加,f-pergence會非常難以計算。其二是兩個分布的支撐集 [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 進行判別,這樣可以使得生成器生成更加銳利清晰的邊緣。

具體做法是這樣的:假設輸入一張 256x256 的圖像到判別器,輸出的是一個 4x4 的 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 perse 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。

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

  • I nception 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 的優缺點

優點

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

  • GAN 可以並行生成數據。相比於 PixelCNN,PixelRNN 這些模型,GAN 生成非常快,因為 GAN 使用 Generator替代了采樣的過程;
  • GAN 不需要通過引入下界來近似似然。VAE 由於優化困難,引入了變分下界來優化似然。但是 VAE 對於先驗和后驗分布做了假設,使得 VAE很難逼近其變分下界;
  • 從實踐來看,GAN 生成的結過要比 VAE 更清晰的多。

缺點

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

  • 訓練不穩定,容易崩潰。這個問題有學者提出了許多解決方案,比如 WGAN,LSGAN 等;
  • 模式崩潰。盡管有很多相關的研究,但是由於圖像數據的高維度特性,這個問題依然還沒完全解決。

未來的研究方向

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

學習路線圖

 

GANs in Action – Deep learning with Generative Adversarial Networks by manning Publications: https://www.manning.com/books/gans-in-action

*(可以免費試讀所有章節)

 

 

 

參考文獻

[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.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM