GAN万字长文综述
https://zhuanlan.zhihu.com/p/58812258
有同學希望給出PDF,這里轉成了PDF放到了github,需要的同學自行下載:
Morde-kaiser/LearningNotes?github.com
此外,本文允許轉載,注明作者,出處即可!
前陣子學習GAN的過程發現現在的GAN綜述文章大都是2016年Ian Goodfellow或者自動化所王飛躍老師那篇(最新發現一篇更新paper,也是王飛躍老師的:http://blog.sciencenet.cn/home.php?mod=space&uid=2374&do=blog&id=1130140)。可是在深度學習,GAN領域,其進展都是以月來計算的,感覺那兩篇綜述有些老了。最近發現有一篇最新的有關GAN綜述的paper[1],四十余頁,介紹了GAN的各個方面,于是就學習并整理筆記如下。文中許多內容大都根據自己所學總結,有不當之處歡迎指出。此外,本文參考了許多博客資料,已給出參考鏈接。如有侵權,請私信刪除。文章目錄如下:
1. GAN的基本介紹
生成對抗網絡(GAN,Generative Adversarial Networks)作為一種優秀的生成式模型,引爆了許多圖像生成的有趣應用。GAN相比于其他生成式模型,有兩大特點:
不依賴任何先驗假設。傳統的許多方法會假設數據服從某一分布,然后使用極大似然去估計數據分布。
生成real-like樣本的方式非常簡單。GAN生成real-like樣本的方式通過生成器(Generator)的前向傳播,而傳統方法的采樣方式非常復雜,有興趣的同學可以參考下周志華老師的《機器學習》一書中對各種采樣方式的介紹。
下面,我們圍繞上述兩點展開介紹。
1.1 GAN的基本概念
GAN(Generative Adversarial Networks)從其名字可以看出,是一種生成式的,對抗網絡。再具體一點,就是通過對抗的方式,去學習數據分布的生成式模型。所謂的對抗,指的是生成網絡和判別網絡的互相對抗。生成網絡盡可能生成逼真樣本,判別網絡則盡可能去判別該樣本是真實樣本,還是生成的假樣本。示意圖如下:
隱變量(通常為服從高斯分布的隨機噪聲)通過Generator生成, 判別器負責判別輸入的data是生成的樣本還是真實樣本。優化的目標函數如下:
對于判別器D來說,這是一個二分類問題,V(D,G)為二分類問題中常見的交叉熵損失。對于生成器G來說,為了盡可能欺騙D,所以需要最大化生成樣本的判別概率D(G(z)),即最小化(注意:一項與生成器G無關,所以可以忽略。)
實際訓練時,生成器和判別器采取交替訓練,即先訓練D,然后訓練G,不斷往復。值得注意的是,對于生成器,其最小化的是,即最小化V(D,G)的最大值。為了保證V(D,G)取得最大值,所以我們通常會訓練迭代k次判別器,然后再迭代1次生成器(不過在實踐當中發現,k通常取1即可)。當生成器G固定時,我們可以對V(D,G)求導,求出最優判別器:
把最優判別器代入上述目標函數,可以進一步求出在最優判別器下,生成器的目標函數等價于優化,的JS散度(JSD, Jenson Shannon Divergence)。
可以證明,當G,D二者的capacity足夠時,模型會收斂,二者將達到納什均衡。此時,,判別器不論是對于還是中采樣的樣本,其預測概率均為,即生成樣本與真實樣本達到了難以區分的地步。
1.2 目標函數
前面我們提到了GAN的目標函數是最小化兩個分布的JS散度。實際上,衡量兩個分布距離的方式有很多種,JS散度只是其中一種。如果我們定義不同的距離度量方式,就可以得到不同的目標函數。許多對GAN訓練穩定性的改進,比如EBGAN,LSGAN等都是定義了不同的分布之間距離度量方式。
1.2.1 f-divergence
f-divergence使用下面公式來定義兩個分布之間的距離:
上述公式中為凸函數,且。采用不同的f函數(Generator),可以得到不同的優化目標。具體如下:
值得注意的是,散度這種度量方式不具備對稱性,即和不相等(嚴格來說,距離度量方式必須具備對稱性,所以散度不是一種距離度量方式,不過此處不去刻意關注這一點,直接把散度也作為一種距離度量方式,下文也是如此)。
LSGAN
上面提到,LSGAN是f-divergence中時的特殊情況。具體來說LSGAN的Loss如下:
原作中取。LSGAN有兩大優點[2]:
穩定訓練:解決了傳統GAN訓練過程中的梯度飽和問題
改善生成質量:通過懲罰遠離判別器決策邊界的生成樣本來實現
對于第一點,穩定訓練,可以先看一張圖:
上圖左邊是傳統GAN使用sigmoid交叉熵作為loss時,輸入與輸出的對照關系圖。上圖右邊是LSGAN使用最小二乘loss時,輸入與輸出的對照關系圖。可以看到,在左圖,輸入比較大的時候,梯度為0,即交叉熵損失的輸入容易出現梯度飽和現象。而右邊的最小二乘loss則不然。
對于第二點,改善生成質量。這個在原文也有詳細的解釋。具體來說:對于一些被判別器分類正確的樣本,其對梯度是沒有貢獻的。但是判別器分類正確的樣本就一定是很接近真實數據分布的樣本嗎?顯然不一定。
考慮如下理想情況,一個訓練良好的GAN,真實數據分布和生成數據分布完全重合,判別器決策面穿過真實數據點,所以,反過來,我們利用樣本點離決策面的遠近來度量生成樣本的質量,樣本離決策面越近,則GAN訓練的越好。
上圖b中,一些離決策面比較遠的點,雖然被分類正確,但是這些并不是好的生成樣本。傳統GAN通常會將其忽略。而對于LSGAN,由于采用最小二乘損失,計算決策面到樣本點的距離,如圖c,可以把離決策面比較遠的點“拉”回來,也就是把離真實數據比較遠的點“拉”回來。
1.2.2 Integral probality metric(IPM)
IPM定義了一個評價函數族,用于度量任意兩個分布之間的距離。在一個緊湊的空間中,定義為在上的概率測度。那么兩個分布之間的IPM可以定義為如下公式:
類似于f-divergence,不同函數f也可以定義出一系列不同的優化目標。典型的有WGAN,Fisher GAN等。下面簡要介紹一下WGAN。
WGAN
WGAN提出了一種全新的距離度量方式——地球移動距離(EM, Earth-mover distance),也叫Wasserstein距離。關于Wasserstein距離的介紹可以參考:
我愛饅頭:白話Wassertein距離?zhuanlan.zhihu.com
Wasserstein距離具體定義如下:
表示一組聯合分布,這組聯合分布里的任一分布的邊緣分布均為和。
直觀上來說,概率分布函數(PDF)可以理解為隨機變量在每一點的質量,所以則表示把概率分布搬到需要的最小工作量。
WGAN也可以用最優傳輸理論來解釋,WGAN的生成器等價于求解最優傳輸映射,判別器等價于計算Wasserstein距離,即最優傳輸總代價[4]。關于WGAN的理論推導和解釋比較復雜,不過代碼實現非常簡單。具體來說[3]:
判別器最后一層去掉sigmoid
生成器和判別器的loss不取log
每次更新判別器的參數之后把它們的絕對值截斷到不超過一個固定常數c
上述第三點,在WGAN的后來一篇工作WGAN-GP中,將梯度截斷替換為了梯度懲罰。
1.2.3 f-divergence和IPM對比
f-divergence存在兩個問題:其一是隨著數據空間的維度的增加,f-divergence會非常難以計算。其二是兩個分布的支撐集[3]通常是未對齊的,這將導致散度值趨近于無窮。
IPM則不受數據維度的影響,且一致收斂于兩個分布之間的距離。而且即便是在兩個分布的支撐集不存在重合時,也不會發散。
1.2.4 輔助的目標函數
在許多GAN的應用中,會使用額外的Loss用于穩定訓練或者達到其他的目的。比如在圖像翻譯,圖像修復,超分辨當中,生成器會加入目標圖像作為監督信息。EBGAN則把GAN的判別器作為一個能量函數,在判別器中加入重構誤差。CGAN則使用類別標簽信息作為監督信息。
1.3 其他常見生成式模型
1.3.1 自回歸模型:pixelRNN與pixelCNN
自回歸模型通過對圖像數據的概率分布p_{data}(x)進行顯式建模,并利用極大似然估計優化模型。具體如下:
上述公式很好理解,給定條件下,所有的概率乘起來就是圖像數據的分布。如果使用RNN對上述依然關系建模,就是pixelRNN。如果使用CNN,則是pixelCNN。具體如下[5]:
pixelRNNpixelCNN
顯然,不論是對于pixelCNN還是pixelRNN,由于其像素值是一個個生成的,速度會很慢。語音領域大火的WaveNet就是一個典型的自回歸模型。
1.3.2 VAE
PixelCNN/RNN定義了一個易于處理的密度函數,我們可以直接優化訓練數據的似然;對于變分自編碼器我們將定義一個不易處理的密度函數,通過附加的隱變量對密度函數進行建模。 VAE原理圖如下[6]:
在VAE中,真實樣本X通過神經網絡計算出均值方差(假設隱變量服從正態分布),然后通過采樣得到采樣變量Z并進行重構。VAE和GAN均是學習了隱變量到真實數據分布的映射。但是和GAN不同的是:
GAN的思路比較粗暴,使用一個判別器去度量分布轉換模塊(即生成器)生成分布與真實數據分布的距離。
VAE則沒有那么直觀,VAE通過約束隱變量服從標準正態分布以及重構數據實現了分布轉換映射
生成式模型對比
自回歸模型通過對概率分布顯式建模來生成數據
VAE和GAN均是:假設隱變量服從某種分布,并學習一個映射,實現隱變量分布與真實數據分布的轉換。
GAN使用判別器去度量映射的優劣,而VAE通過隱變量與標準正態分布的KL散度和重構誤差去度量。
1.4 GAN常見的模型結構
1.4.1 DCGAN
DCGAN提出使用CNN結構來穩定GAN的訓練,并使用了以下一些trick:
Batch Normalization
使用Transpose convlution進行上采樣
使用Leaky ReLu作為激活函數
上面這些trick對于穩定GAN的訓練有許多幫助,自己設計GAN網絡時也可以酌情使用。
1.4.2 層級結構
GAN對于高分辨率圖像生成一直存在許多問題,層級結構的GAN通過逐層次,分階段生成,一步步提生圖像的分辨率。典型的使用多對GAN的模型有StackGAN,GoGAN。使用單一GAN,分階段生成的有ProgressiveGAN。StackGAN和ProgressiveGAN結構如下:
1.4.3 自編碼結構
經典的GAN結構里面,判別網絡通常被當做一種用于區分真實/生成樣本的概率模型。而在自編碼器結構里面,判別器(使用AE作為判別器)通常被當做能量函數(Energy function)。對于離數據流形空間比較近的樣本,其能量較小,反之則大。有了這種距離度量方式,自然就可以使用判別器去指導生成器的學習。
AE作為判別器,為什么就可以當做能量函數,用于度量生成樣本離數據流形空間的距離呢?首先,先看AE的loss:
AE的loss是一個重構誤差。使用AE做為判別器時,如果輸入真實樣本,其重構誤差會很小。如果輸入生成的樣本,其重構誤差會很大。因為對于生成的樣本,AE很難學習到一個圖像的壓縮表示(即生成的樣本離數據流行形空間很遠)。所以,VAE的重構誤差作為和之間的距離度量是合理的。典型的自編碼器結構的GAN有:BEGAN, EBGAN, MAGAN等
1.5 GAN的訓練障礙(Obstacles)
1.5.1 理論中存在的問題
經典GAN的判別器有兩種loss,分別是:
使用上面第一個公式作為loss時:在判別器達到最優的時候,等價于最小化生成分布與真實分布之間的JS散度,由于隨機生成分布很難與真實分布有不可忽略的重疊以及JS散度的突變特性,使得生成器面臨梯度消失的問題
使用上面第二個公式作為loss時:在最優判別器下,等價于既要最小化生成分布與真實分布直接的KL散度,又要最大化其JS散度,相互矛盾,導致梯度不穩定,而且KL散度的不對稱性使得生成器寧可喪失多樣性也不愿喪失準確性,導致collapse mode現象[7]。
1.5.2 實踐中存在的問題
GAN在實踐中存在兩個問題:
其一,GAN提出者Ian Goodfellow在理論中雖然證明了GAN是可以達到納什均衡的。可是我們在實際實現中,我們是在參數空間優化,而非函數空間,這導致理論上的保證在實踐中是不成立的。
其二,GAN的優化目標是一個極小極大(minmax)問題,即,也就是說,優化生成器的時候,最小化的是。可是我們是迭代優化的,要保證V(G,D)最大化,就需要迭代非常多次,這就導致訓練時間很長。如果我們只迭代一次判別器,然后迭代一次生成器,不斷循環迭代。這樣原先的極小極大問題,就容易變成極大極小(maxmin)問題,可二者是不一樣的,即:
如果變化為極小極大問題,那么迭代就是這樣的,生成器先生成一些樣本,然后判別器給出錯誤的判別結果并懲罰生成器,于是生成器調整生成的概率分布。可是這樣往往導致生成器變“懶”,只生成一些簡單的,重復的樣本,即缺乏多樣性,也叫mode collapse。
1.5.3 穩定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。
1.6 GAN mode collapse的解決方案
1.6.1 針對目標函數的改進方法
為了避免前面提到的由于優化導致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。
1.6.2 針對網絡結構的改進方法
Multi agent diverse GAN(MAD-GAN)采用多個生成器,一個判別器以保障樣本生成的多樣性。具體結構如下:
相比于普通GAN,多了幾個生成器,且在loss設計的時候,加入一個正則項。正則項使用余弦距離懲罰三個生成器生成樣本的一致性。
MRGAN則添加了一個判別器來懲罰生成樣本的mode collapse問題。具體結構如下:
輸入樣本通過一個Encoder編碼為隱變量,然后隱變量被Generator重構,訓練時,Loss有三個。和(重構誤差)用于指導生成real-like的樣本。而則對和生成的樣本進行判別,顯然二者生成樣本都是fake samples,所以這個判別器主要用于判斷生成的樣本是否具有多樣性,即是否出現mode collapse。
1.6.3 Mini-batch Discrimination
Mini-batch discrimination在判別器的中間層建立一個mini-batch layer用于計算基于L1距離的樣本統計量,通過建立該統計量去判別一個batch內某個樣本與其他樣本有多接近。這個信息可以被判別器利用到,從而甄別出哪些缺乏多樣性的樣本。對生成器而言,則要試圖生成具有多樣性的樣本。
2、關于GAN隱空間的理解
隱空間是數據的一種壓縮表示的空間。通常來說,我們直接在數據空間對圖像進行修改是不現實的,因為圖像屬性位于高維空間中的流形中。但是在隱空間,由于每一個隱變量代表了某個具體的屬性,所以這是可行的。
在這部分,我們會探討GAN是如何處理隱空間及其屬性的,此外還將探討變分方法如何結合到GAN的框架中。
2.1 隱空間分解
GAN的輸入隱變量是非結構化的,我們不知道隱變量中的每一位數分別控制著什么屬性。因此有學者提出,將隱變量分解為一個條件變量和標準輸入隱變量。具體包括有監督的方法和無監督的方法。
2.1.1 有監督方法
典型的有監督方法有CGAN,ACGAN。
CGAN將隨機噪聲和類別標簽作為生成器的輸入,判別器則將生成的樣本/真實樣本與類別標簽作為輸入。以此學習標簽和圖片之間的關聯性。
ACGAN將隨機噪聲和類別標簽作為生成器的輸入,判別器則將生成的樣本/真實樣本輸入,且回歸出圖片的類別標簽。以此學習標簽和圖片之間的關聯性。二者結構如下(左邊為CGAN,右邊為ACGAN):
2.1.2 無監督方法
相比于有監督方法,無監督方法不使用任何標簽信息。因此,無監督方法需要對隱空間進行解耦得到有意義的特征表示。
InfoGAN對把輸入噪聲分解為隱變量和條件變量(訓練時,條件變量c從均勻分布采樣而來。),二者被一起送入生成器。在訓練過程中通過最大化和的互信息以實現變量解耦(的互信息表示里面關于的信息有多少,如果最大化互信息,也就是最大化生成結果和條件變量的關聯性)。模型結構和CGAN基本一致,除了Loss多了一項最大互信息。具體如下[10]:
從上面分析可以看出,InfoGAN只是實現了信息的解耦,至于條件變量c每一個值的具體含義是什么,我們無法控制。于是ss-InfoGAN出現了,ss-InfoGAN采用半監督學習方法,把條件變量分成兩部分,。則利用標簽像CGAN一樣學習,則像InfoGAN一樣學習。
2.2 GAN與VAE的結合
GAN相比于VAE可以生成清晰的圖像,但是卻容易出現mode collapse問題。VAE由于鼓勵重構所有樣本,所以不會出現mode collapse問題。
一個典型結合二者的工作是VAEGAN,結構很像前文提及的MRGAN,具體如下:
上述模型的Loss包括三個部分,分別是判別器某一層特征的重構誤差,VAE的Loss,GAN的Loss。
2.3 GAN模型總結
前面兩節介紹了各種各樣的GAN模型,這些模型大都是圍繞著GAN的兩大常見問題:模式崩潰,以及訓練崩潰來設計的。下表總結了這些模型,讀者可以根據下表回顧對照:
3. GAN的應用
由于GAN在生成樣本過程成不需要顯式建模任何數據分布就可以生成real-like的樣本,所以GAN在圖像,文本,語音等諸多領域都有廣泛的應用。下表總結了GAN在各個方面的應用,后文會這些算法做相應介紹。
3.1 圖像
3.1.1 圖像翻譯
所謂圖像翻譯,指從一副(源域)圖像到另一副(目標域)圖像的轉換。可以類比機器翻譯,一種語言轉換為另一種語言。翻譯過程中會保持源域圖像內容不變,但是風格或者一些其他屬性變成目標域。
Paired two domain data
成對圖像翻譯典型的例子就是pix2pix,pix2pix使用成對數據訓練了一個條件GAN,Loss包括GAN的loss和逐像素差loss。而PAN則使用特征圖上的逐像素差作為感知損失替代圖片上的逐像素差,以生成人眼感知上更加接近源域的圖像。
Unpaired two domain data
對于無成對訓練數據的圖像翻譯問題,一個典型的例子是CycleGAN。CycleGAN使用兩對GAN,將源域數據通過一個GAN網絡轉換到目標域之后,再使用另一個GAN網絡將目標域數據轉換回源域,轉換回來的數據和源域數據正好是成對的,構成監督信息。
3.1.2 超分辨
SRGAN中使用GAN和感知損失生成細節豐富的圖像。感知損失重點關注中間特征層的誤差,而不是輸出結果的逐像素誤差。避免了生成的高分辨圖像缺乏紋理細節信息問題。
3.1.3 目標檢測
得益于GAN在超分辨中的應用,針對小目標檢測問題,可以理由GAN生成小目標的高分辨率圖像從而提高目標檢測精度
3.1.4 圖像聯合分布學習
大部分GAN都是學習單一域的數據分布,CoupledGAN則提出一種部分權重共享的網絡,使用無監督方法來學習多個域圖像的聯合分布。具體結構如下[11]:
如上圖所示,CoupledGAN使用兩個GAN網絡。生成器前半部分權重共享,目的在于編碼兩個域高層的,共有信息,后半部分沒有進行共享,則是為了各自編碼各自域的數據。判別器前半部分不共享,后半部分用于提取高層特征共享二者權重。對于訓練好的網絡,輸入一個隨機噪聲,輸出兩張不同域的圖片。
值得注意的是,上述模型學習的是聯合分布,如果使用兩個單獨的GAN分別取訓練,那么學習到的就是邊際分布和。通常情況下,。
3.1.5 視頻生成
通常來說,視頻有相對靜止的背景和運動的前景組成。VideoGAN使用一個兩階段的生成器,3D CNN生成器生成運動前景,2D CNN生成器生成靜止的背景。Pose GAN則使用VAE和GAN生成視頻,首先,VAE結合當前幀的姿態和過去的姿態特征預測下一幀的運動信息,然后3D CNN使用運動信息生成后續視頻幀。Motion and Content GAN(MoCoGAN)則提出在隱空間對運動部分和內容部分進行分離,使用RNN去建模運動部分。
3.2 序列生成
相比于GAN在圖像領域的應用,GAN在文本,語音領域的應用要少很多。主要原因有兩個:
GAN在優化的時候使用BP算法,對于文本,語音這種離散數據,GAN沒法直接跳到目標值,只能根據梯度一步步靠近。
對于序列生成問題,每生成一個單詞,我們就需要判斷這個序列是否合理,可是GAN里面的判別器是沒法做到的。除非我們針對每一個step都設置一個判別器,這顯然不合理。
為了解決上述問題,強化學習中的策略梯度下降(Policy gredient descent)被引入到GAN中的序列生成問題。
3.2.1 音樂生成
RNN-GAN使用LSTM作為生成器和判別器,直接生成整個音頻序列。然而,正如上面提到的,音樂當做包括歌詞和音符,對于這種離散數據生成問題直接使用GAN存在很多問題,特別是生成的數據缺乏局部一致性。
相比之下,SeqGAN把生成器的輸出作為一個智能體(agent)的策略,而判別器的輸出作為獎勵(reward),使用策略梯度下降來訓練模型。ORGAN則在SeqGAN的基礎上,針對具體的目標設定了一個特定目標函數。
3.2.2 語言和語音
VAW-GAN(Variational autoencoding Wasserstein GAN)結合VAE和WGAN實現了一個語音轉換系統。編碼器編碼語音信號的內容,解碼器則用于重建音色。由于VAE容易導致生成結果過于平滑,所以此處使用WGAN來生成更加清晰的語音信號。
3.3 半監督學習
圖像數據的標簽獲得需要大量的人工標注,這個過程費時費力。
3.3.1 利用判別器進行半監督學習
基于GAN的半監督學習方法[12]提出了一種利用無標簽數據的方法。實現方法和原始GAN基本一樣,具體框架如下[13]:
相比于原始GAN,主要區別在于判別器輸出一個的類別信息(生成的樣本為第類)。對于判別器,其Loss包括兩部分,一個是監督學習損失(只需要判斷樣本真假),另一個是無監督學習損失(判斷樣本類別)。生成器則只需要盡量生成逼真的樣本即可。訓練完成后,判別器就可以作為一個分類模型去分類。
從直觀上來看,生成的樣本主要在于輔助分類器學會區分真實的數據空間在哪里。
3.3.2 使用輔助分類器的半監督學習
上面提及的利用判別器進行半監督學習的模型存在一個問題。判別器既要學習區分正負樣本,也要學習預測標簽。二者目標不一致,容易導致二者都達不到最優。一個直觀的想法就把預測標簽和區分正負樣本分開。Triple-GAN就是這么做的[14]:
分別表示生成的數據,有標簽的數據,無標簽的數據。CE表示交叉熵損失。
3.4 域適應
域適應是一個遷移學習里面的概念。簡單說來,我們定義源數據域分布為,目標數據域分布為。對于源域數據,我們有許多標簽,但是對于目標域的數據沒有標簽。我們希望能通過源域的有標簽數據和目標域的無標簽數據學習一個模型,在目標域泛化的很好。遷移學習的“遷移”二字指的是源域數據分布向目標域數據分布的遷移。
GAN用于遷移學習時,核心思想在于使用生成器把源域數據特征轉換成目標域數據特征,而判別器則盡可能區分真實數據和生成數據特征。以下是兩個把GAN應用于遷移學習的例子DANN和ARDA:
以上圖左邊的DANN為例,分別代表源域數據,目標域的數據,表示源域數據的標簽。表示源域特征,目標域特征。DANN中,生成器用于提取特征,并使得提取的特征難以被判別器區分是源域數據特征還是目標域數據特征。
在行人重識別領域,有許多基于CycleGAN的遷移學習以進行數據增廣的應用。行人重識別問題一個難點在于不同攝像頭下拍攝的人物環境,角度差別非常大,導致存在較大的Domain gap。因此,可以考慮使用GAN來產生不同攝像頭下的數據進行數據增廣。[15]中提出了一個cycleGAN用于數據增廣的方法。具體模型結構如下:
對于每一對攝像頭都訓練一個cycleGAN,這樣就可以實現將一個攝像頭下的數據轉換成另一個攝像頭下的數據,但是內容(人物)保持不變。
3.5 其他應用
GAN的變體繁多,應用非常廣泛,在一寫非機器學習領域也有應用,以下是一些例子。
3.5.1 醫學圖像分割
[16]提出了一種segmentor-critic結構用于分割醫學圖像。segmentor類似于GAN中的生成器用于生成分割圖像,critic則最大化生成的分割圖像和ground truth之間的距離。此外,DI2IN使用GAN分割3D CT圖像,SCAN使用GAN用于分割X射線圖像。
3.5.2 圖片隱寫
隱寫指的是把秘密信息隱藏到非秘容器,比如圖片中。隱寫分析器則用于判別容器是否含有秘密信息。一些研究嘗試使用GAN的生成器生成帶有隱寫信息的圖片,判別器則有兩個,一個用于判別圖片是否是真實圖片,另一個則判別圖片是否具有秘密信息[17]。
3.6.3 連續學習
連續學習目的在于解決多個任務,且在學習過程中不斷積累新知識。連續學習中存在一個突出的問題就是“知識遺忘”。[18]中使用GAN的生成器作為一個scholars model,生成器不斷使用以往知識進行訓練,solver則給出答案,以此避免“知識遺忘”問題。
4. 討論
在第一,二部分我們討論了GAN及其變體,第三部分討論了GAN的應用。下表總結了比較有名的一些GAN的模型結構及其施加的額外約束。
前面都是對于GAN的微觀層面的探討。接下來,我們會站在一個宏觀的視角來討論GAN。
4.1 GAN的評價
GAN的評價方法多種多樣,現有的example-based(顧名思義,基于樣本層面做評價)方法,均是對生成樣本與真實樣本提取特征,然后在特征空間做距離度量。具體框架如下:
關于本小節的符號對照關系如下:
生成數據分布
表示真實數據分布
:數學期望
:輸入樣本
:表示為生成樣本的采樣
:表示為真實樣本的采樣。
:樣本標簽
M:分類網絡,通常選擇Inception network
下面分別對常見的評價指標進行一一介紹:
4.1.1 Inception Score
對于一個在ImageNet訓練良好的GAN,其生成的樣本丟給Inception網絡進行測試的時候,得到的判別概率應該具有如下特性:
對于同一個類別的圖片,其輸出的概率分布應該趨向于一個脈沖分布。可以保證生成樣本的準確性。
對于所有類別,其輸出的概率分布應該趨向于一個均勻分布,這樣才不會出現mode collapsing等,可以保證生成樣本的多樣性。
因此,可以設計如下指標:根據前面分析,如果是一個訓練良好的GAN,趨近于脈沖分布,趨近于均勻分布。二者KL散度會很大。Inception Score自然就高。實際實驗表明,Inception Score和人的主觀判別趨向一致。IS的計算沒有用到真實數據,具體值取決于模型M的選擇。
特點:可以一定程度上衡量生成樣本的多樣性和準確性,但是無法檢測過擬合。Mode Score也是如此。不推薦在和ImageNet數據集差別比較大的數據上使用。
4.1.2 Mode Score
Mode Score作為Inception Score的改進版本,添加了關于生成樣本和真實樣本預測的概率分布相似性度量一項。具體公式如下:
4.1.3 Kernel MMD (Maximum Mean Discrepancy)
計算公式如下:
對于Kernel MMD值的計算,首先需要選擇一個核函數k,這個核函數把樣本映射到再生希爾伯特空間(Reproducing Kernel Hilbert Space, RKHS) ,RKHS相比于歐幾里得空間有許多優點,對于函數內積的計算是完備的。將上述公式展開即可得到下面的計算公式:
MMD值越小,兩個分布越接近。
特點:可以一定程度上衡量模型生成圖像的優劣性,計算代價小。推薦使用。
4.1.4 Wasserstein distance
Wasserstein distance在最優傳輸問題中通常也叫做推土機距離。這個距離的介紹在WGAN中有詳細討論。公式如下:
Wasserstein distance可以衡量兩個分布之間的相似性。距離越小,分布越相似。
特點:如果特征空間選擇合適,會有一定的效果。但是計算復雜度為O(n^3)太高
4.1.5 Fréchet Inception Distance (FID)
FID距離計算真實樣本,生成樣本在特征空間之間的距離。首先利用Inception網絡來提取特征,然后使用高斯模型對特征空間進行建模。根據高斯模型的均值和協方差來進行距離計算。具體公式如下:
分別代表協方差和均值。
特點:盡管只計算了特征空間的前兩階矩,但是魯棒,且計算高效。
4.1.6 1-Nearest Neighbor classifier
使用留一法,結合1-NN分類器(別的也行)計算真實圖片,生成圖像的精度。如果二者接近,則精度接近50%,否則接近0%。對于GAN的評價問題,作者分別用正樣本的分類精度,生成樣本的分類精度去衡量生成樣本的真實性,多樣性。
對于真實樣本,進行1-NN分類的時候,如果生成的樣本越真實。則真實樣本空間將被生成的樣本包圍。那么的精度會很低。
對于生成的樣本,進行1-NN分類的時候,如果生成的樣本多樣性不足。由于生成的樣本聚在幾個mode,則很容易就和區分,導致精度會很高。
特點:理想的度量指標,且可以檢測過擬合。
4.1.7 其他評價方法
AIS,KDE方法也可以用于評價GAN,但這些方法不是model agnostic metrics。也就是說,這些評價指標的計算無法只利用:生成的樣本,真實樣本來計算。
4.1.8 總結
實際實驗發現,MMD和1-NN two-sample test是最為合適的評價指標,這兩個指標可以較好的區分:真實樣本和生成的樣本, mode collapsing。且計算高效。
總體說來,GAN的學習是一個無監督學習過程,所以很難找到一個比較客觀的,可量化的評估指標。有許多指標在數值上雖然高,但是生成效果卻未必好。總之,GAN的評價目前依然是一個開放性的問題。
4.2 GAN與強化學習的關系
強化學習的目標是對于一個智能體,給定狀態s,去選擇一個最佳的行為a(action)。通常的可以定義一個價值函數Q(s,a)來衡量,對于狀態s,采取行動a的回報是Q(s,a),顯然,我們希望最大化這個回報值。對于很多復雜的問題,我們是很難定義這個價值函數Q(s,a)的,就像我們很難定義GAN生成的圖片到底有多好一樣。
說到這里,大家可能反應過來了。GAN生成的圖片好不好,我確實找不到一個合適的指標,那我學習一個判別器去判斷一下生成圖片和真實圖片的距離不就好了嗎。強化學習里面的價值函數Q(s,a)難以定義,那直接用個神經網絡去學習它就好了。典型的模型有InverseRL,GAIL等等
4.3 GAN的優缺點
4.3.1 優點
GAN的優點在開頭已有所介紹。這里再總結一下:
GAN可以并行生成數據。相比于PixelCNN,PixelRNN這些模型,GAN生成非常快,因為GAN使用Generator替代了采樣的過程
GAN不需要通過引入下界來近似似然。VAE由于優化困難,引入了變分下界來優化似然。但是VAE對于先驗和后驗分布做了假設,使得VAE很難逼近其變分下界。
從實踐來看,GAN生成的結過要比VAE更清晰的多。
4.3.2 缺點
GAN的缺點在前文也有詳細討論,主要問題在于:
訓練不穩定,容易崩潰。這個問題有學者提出了許多解決方案,比如WGAN,LSGAN等
模式崩潰。盡管有很多相關的研究,但是由于圖像數據的高維度特性,這個問題依然還沒完全解決。
4.4 未來的研究方向
GAN的訓練崩潰,模式崩潰問題等依然有待研究改進。
Deep learning盡管很強大,但目前仍有許多領域無法征服,期待GAN在此基礎上會有一些作為
[1]: Hong, Yongjun, et al. "How Generative Adversarial Networks and its variants Work: An Overview of GAN."
[2]https://blog.csdn.net/victoriaw/article/details/60755698
[3]https://zhuanlan.zhihu.com/p/25071913
[4]https://mp.weixin.qq.com/s/gv-cpK161oyXinUyh05KXA
[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.
總結
- 上一篇: 如何理解企业安全能力框架(IPDRR)
- 下一篇: Android抓包方法(一)之Fiddl