GAN生成對抗網絡綜述

原文鏈接:https://zhuanlan.zhihu.com/p/58812258?utm_source=wechat_session&utm_medium=social&s_s_i=Iosdev5hJVmX4jACzjbsIb4WwZqx1fnLaP7GRRCXPJs%3D&s_r=1

前陣子學習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)從其名字可以看出,是一種生成式的,對抗網絡。再具體一點,就是通過對抗的方式,去學習數據分佈的生成式模型。所謂的對抗,指的是生成網絡和判別網絡的互相對抗。生成網絡儘可能生成逼真樣本,判別網絡則儘可能去判別該樣本是真實樣本,還是生成的假樣本。示意圖如下:
在這裏插入圖片描述
隱變量z(通常爲服從高斯分佈的隨機噪聲)通過Generator生成XfakeX_fake , 判別器負責判別輸入的data是生成的樣本 XfakeX_fake 還是真實樣本 XrealX_real。優化的目標函數如下:
在這裏插入圖片描述
對於判別器D來說,這是一個二分類問題,V(D,G)爲二分類問題中常見的交叉熵損失。對於生成器G來說,爲了儘可能欺騙D,所以需要最大化生成樣本的判別概率D(G(z)),即最小化log(1D(G(z)))\log{(1-D(G(z)))}(注意: log(1D(G(z)))\log{(1-D(G(z)))} 一項與生成器G無關,所以可以忽略。)

實際訓練時,生成器和判別器採取交替訓練,即先訓練D,然後訓練G,不斷往復。值得注意的是,對於生成器,其最小化的是在這裏插入圖片描述 ,即最小化V(D,G)的最大值。爲了保證V(D,G)取得最大值,所以我們通常會訓練迭代k次判別器,然後再迭代1次生成器(不過在實踐當中發現,k通常取1即可)。當生成器G固定時,我們可以對V(D,G)求導,求出最優判別器D(x)D^*(x):
在這裏插入圖片描述
把最優判別器代入上述目標函數,可以進一步求出在最優判別器下,生成器的目標函數等價於優化 pdata(x)p_{data}(x) , pg(x)p_{g}(x) 的JS散度(JSD, Jenson Shannon Divergence)。

可以證明,當G,D二者的capacity足夠時,模型會收斂,二者將達到納什均衡。此時,pdata(x)p_{data}(x) = pg(x)p_{g}(x) ,判別器不論是對於pdata(x)p_{data}(x) 還是 pg(x)p_{g}(x) 中採樣的樣本,其預測概率均爲 0.5,即生成樣本與真實樣本達到了難以區分的地步。

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

1.2.1 f-divergence
f-divergence使用下面公式來定義兩個分佈之間的距離:
在這裏插入圖片描述
上述公式中f 爲凸函數,且f(1)=0 。採用不同的f函數(Generator),可以得到不同的優化目標。具體如下:在這裏插入圖片描述
值得注意的是,散度這種度量方式不具備對稱性,即 Df(pdatapg)D_f(p_{data}||p_{g})Df(pgpdata)D_f(p_{g}||p_{data}) 不相等(嚴格來說,距離度量方式必須具備對稱性,所以散度不是一種距離度量方式,不過此處不去刻意關注這一點,直接把散度也作爲一種距離度量方式,下文也是如此)。

LSGAN

上面提到,LSGAN是f-divergence中 f(x)=(t1)2f(x)=(t-1)^2時的特殊情況。具體來說LSGAN的Loss如下:
在這裏插入圖片描述
原作中取a=c=1,b=0 。LSGAN有兩大優點[2]:

穩定訓練:解決了傳統GAN訓練過程中的梯度飽和問題
改善生成質量:通過懲罰遠離判別器決策邊界的生成樣本來實現
對於第一點,穩定訓練,可以先看一張圖:
在這裏插入圖片描述
上圖左邊是傳統GAN使用sigmoid交叉熵作爲loss時,輸入與輸出的對照關係圖。上圖右邊是LSGAN使用最小二乘loss時,輸入與輸出的對照關係圖。可以看到,在左圖,輸入比較大的時候,梯度爲0,即交叉熵損失的輸入容易出現梯度飽和現象。而右邊的最小二乘loss則不然。

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

考慮如下理想情況,一個訓練良好的GAN,真實數據分佈pdatap_{data} 和生成數據分佈 pgp_{g}完全重合,判別器決策面穿過真實數據點,所以,反過來,我們利用樣本點離決策面的遠近來度量生成樣本的質量,樣本離決策面越近,則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距離具體定義如下:
[公式]
π\pipdatapgp_{data}p_{g} 表示一組聯合分佈,這組聯合分佈裏的任一分佈 $$ 的邊緣分佈均爲 [公式] 和 [公式] 。

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

WGAN也可以用最優傳輸理論來解釋,WGAN的生成器等價於求解最優傳輸映射,判別器等價於計算Wasserstein距離,即最優傳輸總代價[4]。關於WGAN的理論推導和解釋比較複雜,不過代碼實現非常簡單。具體來說有三點:
判別器最後一層去掉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)進行顯式建模,並利用極大似然估計優化模型。具體如下:
[公式]
上述公式很好理解,給定 x1,x2,x3......x_1,x_2,x_3...... 條件下,所有p(xi)p(x_i)的概率乘起來就是圖像數據的分佈。如果使用RNN對上述依然關係建模,就是pixelRNN。如果使用CNN,則是pixelCNN。具體如下[5]:
pixelRNN
pixelCNN
顯然,不論是對於pixelCNN還是pixelRNN,由於其像素值是一個個生成的,速度會很慢。語音領域大火的WaveNet就是一個典型的自迴歸模型。
1.3.2 VAE
PixelCNN/RNN定義了一個易於處理的密度函數,我們可以直接優化訓練數據的似然;對於變分自編碼器我們將定義一個不易處理的密度函數,通過附加的隱變量 [公式] 對密度函數進行建模。 VAE原理圖如下[6]:
在這裏插入圖片描述
在VAE中,真實樣本X通過神經網絡計算出均值方差(假設隱變量服從正態分佈),然後通過採樣得到採樣變量Z並進行重構。VAE和GAN均是學習了隱變量 [公式] 到真實數據分佈的映射。但是和GAN不同的是:

GAN的思路比較粗暴,使用一個判別器去度量分佈轉換模塊(即生成器)生成分佈與真實數據分佈的距離。
VAE則沒有那麼直觀,VAE通過約束隱變量z 服從標準正態分佈以及重構數據實現了分佈轉換映射 X=G(Z)
生成式模型對比

自迴歸模型通過對概率分佈顯式建模來生成數據
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 針對目標函數的改進方法
爲了避免前面提到的由於優化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。

1.6.2 針對網絡結構的改進方法
Multi agent diverse GAN(MAD-GAN)採用多個生成器,一個判別器以保障樣本生成的多樣性。具體結構如下:
在這裏插入圖片描述
相比於普通GAN,多了幾個生成器,且在loss設計的時候,加入一個正則項。正則項使用餘弦距離懲罰三個生成器生成樣本的一致性。

MRGAN則添加了一個判別器來懲罰生成樣本的mode collapse問題。具體結構如下:
在這裏插入圖片描述
輸入樣本 [公式] 通過一個Encoder編碼爲隱變量 [公式] ,然後隱變量被Generator重構,訓練時,Loss有三個。 DmD_mRR (重構誤差)用於指導生成real-like的樣本。而DDD_D 則對 E(x)和 z生成的樣本進行判別,顯然二者生成樣本都是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的輸入隱變量 z 是非結構化的,我們不知道隱變量中的每一位數分別控制着什麼屬性。因此有學者提出,將隱變量分解爲一個條件變量 c 和標準輸入隱變量 z 。具體包括有監督的方法和無監督的方法。

2.1.1 有監督方法
典型的有監督方法有CGAN,ACGAN。

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

ACGAN將隨機噪聲 z和類別標籤 c 作爲生成器的輸入,判別器則將生成的樣本/真實樣本輸入,且迴歸出圖片的類別標籤。以此學習標籤和圖片之間的關聯性。二者結構如下(左邊爲CGAN,右邊爲ACGAN):
在這裏插入圖片描述
2.1.2 無監督方法
相比於有監督方法,無監督方法不使用任何標籤信息。因此,無監督方法需要對隱空間進行解耦得到有意義的特徵表示。

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採用半監督學習方法,把條件變量 [公式] 分成兩部分, [公式] 。 [公式] 則利用標籤像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網絡。生成器前半部分權重共享,目的在於編碼兩個域高層的,共有信息,後半部分沒有進行共享,則是爲了各自編碼各自域的數據。判別器前半部分不共享,後半部分用於提取高層特徵共享二者權重。對於訓練好的網絡,輸入一個隨機噪聲,輸出兩張不同域的圖片。

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

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,主要區別在於判別器輸出一個 K+1 的類別信息(生成的樣本爲第K+1 類)。對於判別器,其Loss包括兩部分,一個是監督學習損失(只需要判斷樣本真假),另一個是無監督學習損失(判斷樣本類別)。生成器則只需要儘量生成逼真的樣本即可。訓練完成後,判別器就可以作爲一個分類模型去分類。

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

3.3.2 使用輔助分類器的半監督學習
上面提及的利用判別器進行半監督學習的模型存在一個問題。判別器既要學習區分正負樣本,也要學習預測標籤。二者目標不一致,容易導致二者都達不到最優。一個直觀的想法就把預測標籤和區分正負樣本分開。Triple-GAN就是這麼做的[14]:
在這裏插入圖片描述
(Xg,Yg) pg(X,Y)(Xl,Yl) pg(X,Y)(Xc,Yc) pc(X,Y)(X_g,Y_g)~p_g(X,Y),(X_l,Y_l)~p_g(X,Y),(X_c,Y_c)~p_c(X,Y)分別表示生成的數據,有標籤的數據,無標籤的數據。CE表示交叉熵損失。
3.4 域適應
域適應是一個遷移學習裏面的概念。簡單說來,我們定義源數據域分佈爲 [公式] ,目標數據域分佈爲DT(x,y)D_T(x,y) 。對於源域數據,我們有許多標籤,但是對於目標域的數據沒有標籤。我們希望能通過源域的有標籤數據和目標域的無標籤數據學習一個模型,在目標域泛化的很好。遷移學習的“遷移”二字指的是源域數據分佈向目標域數據分佈的遷移。

GAN用於遷移學習時,核心思想在於使用生成器把源域數據特徵轉換成目標域數據特徵,而判別器則儘可能區分真實數據和生成數據特徵。以下是兩個把GAN應用於遷移學習的例子DANN和ARDA:
在這裏插入圖片描述
以上圖左邊的DANN爲例,Is,ItI_s,I_t 分別代表源域數據,目標域的數據,ysy_s表示源域數據的標籤。 Fs,FtF_s,F_t表示源域特徵,目標域特徵。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(顧名思義,基於樣本層面做評價)方法,均是對生成樣本與真實樣本提取特徵,然後在特徵空間做距離度量。具體框架如下:
在這裏插入圖片描述
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在此基礎上會有一些作爲

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章