作者:郭曉鋒 (愛奇藝) 前陣子學(xué)習(xí) GAN 的過程發(fā)現(xiàn)現(xiàn)在的 GAN 綜述文章大都是 2016 年 Ian Goodfellow 或者自動化所王飛躍老師那篇。可是在深度學(xué)習(xí),GAN 領(lǐng)域,其進(jìn)展都是以月來計算的,感覺那兩篇綜述有些老了。 最近發(fā)現(xiàn)有一篇最新的 GAN 綜述論文,四十余頁,介紹了 GAN 的各個方面,于是就學(xué)習(xí)并整理筆記如下。文中許多內(nèi)容大都根據(jù)自己所學(xué)總結(jié),有不當(dāng)之處歡迎指出。 此外,本文參考了許多博客資料,已給出參考鏈接。如有侵權(quán),請私信刪除。文章目錄如下: GAN的基本介紹生成對抗網(wǎng)絡(luò)(GAN,Generative Adversarial Networks)作為一種優(yōu)秀的生成式模型,引爆了許多圖像生成的有趣應(yīng)用。GAN 相比于其他生成式模型,有兩大特點: 1. 不依賴任何先驗假設(shè)。傳統(tǒng)的許多方法會假設(shè)數(shù)據(jù)服從某一分布,然后使用極大似然去估計數(shù)據(jù)分布。 2. 生成 real-like 樣本的方式非常簡單。GAN 生成 real-like 樣本的方式通過生成器(Generator)的前向傳播,而傳統(tǒng)方法的采樣方式非常復(fù)雜,有興趣的同學(xué)可以參考下周志華老師的《機(jī)器學(xué)習(xí)》一書中對各種采樣方式的介紹。 下面,我們圍繞上述兩點展開介紹。 GAN的基本概念GAN(Generative Adversarial Networks)從其名字可以看出,是一種生成式的,對抗網(wǎng)絡(luò)。再具體一點,就是通過對抗的方式,去學(xué)習(xí)數(shù)據(jù)分布的生成式模型。 所謂的對抗,指的是生成網(wǎng)絡(luò)和判別網(wǎng)絡(luò)的互相對抗。生成網(wǎng)絡(luò)盡可能生成逼真樣本,判別網(wǎng)絡(luò)則盡可能去判別該樣本是真實樣本,還是生成的假樣本。示意圖如下: 隱變量 z (通常為服從高斯分布的隨機(jī)噪聲)通過 Generator 生成 Xfake, 判別器負(fù)責(zé)判別輸入的 data 是生成的樣本 Xfake 還是真實樣本 Xreal。優(yōu)化的目標(biāo)函數(shù)如下: 對于判別器 D 來說,這是一個二分類問題,V(D,G) 為二分類問題中常見的交叉熵?fù)p失。對于生成器 G 來說,為了盡可能欺騙 D,所以需要最大化生成樣本的判別概率 D(G(z)),即最小化 log(1-D(G(z))),注意:log(D(x)) 一項與生成器 G 無關(guān),所以可以忽略。 實際訓(xùn)練時,生成器和判別器采取交替訓(xùn)練,即先訓(xùn)練 D,然后訓(xùn)練 G,不斷往復(fù)。值得注意的是,對于生成器,其最小化的是 為了保證 V(D,G) 取得最大值,所以我們通常會訓(xùn)練迭代k次判別器,然后再迭代1次生成器(不過在實踐當(dāng)中發(fā)現(xiàn),k 通常取 1 即可)。當(dāng)生成器 G 固定時,我們可以對 V(D,G) 求導(dǎo),求出最優(yōu)判別器 D*(x): 把最優(yōu)判別器代入上述目標(biāo)函數(shù),可以進(jìn)一步求出在最優(yōu)判別器下,生成器的目標(biāo)函數(shù)等價于優(yōu)化 Pdata(x) , Pg(x) 的 JS 散度(JSD, Jenson Shannon Divergence)。 可以證明,當(dāng) G,D 二者的 capacity 足夠時,模型會收斂,二者將達(dá)到納什均衡。此時,Pdata(x)=Pg(x),判別器不論是對于 Pdata(x) 還是 Pg(x) 中采樣的樣本,其預(yù)測概率均為 1/2,即生成樣本與真實樣本達(dá)到了難以區(qū)分的地步。 目標(biāo)函數(shù)前面我們提到了 GAN 的目標(biāo)函數(shù)是最小化兩個分布的 JS 散度。實際上,衡量兩個分布距離的方式有很多種,JS 散度只是其中一種。如果我們定義不同的距離度量方式,就可以得到不同的目標(biāo)函數(shù)。許多對 GAN 訓(xùn)練穩(wěn)定性的改進(jìn),比如 EBGAN,LSGAN 等都是定義了不同的分布之間距離度量方式。 f-divergence f-divergence 使用下面公式來定義兩個分布之間的距離: 上述公式中 f 為凸函數(shù),且 f(1)=0 。采用不同的 f 函數(shù)(Generator),可以得到不同的優(yōu)化目標(biāo)。具體如下: 值得注意的是,散度這種度量方式不具備對稱性,即 Df(Pdata||Pg) 和 Df(Pg||Pdata) 不相等。 LSGAN 上面提到,LSGAN 是 f-divergence 中 原作中取 a=c=1,b=0。LSGAN 有兩大優(yōu)點:
對于第一點,穩(wěn)定訓(xùn)練,可以先看一張圖: 上圖左邊是傳統(tǒng) GAN 使用 sigmoid 交叉熵作為 loss 時,輸入與輸出的對照關(guān)系圖。上圖右邊是 LSGAN 使用最小二乘 loss 時,輸入與輸出的對照關(guān)系圖。可以看到,在左圖,輸入比較大的時候,梯度為 0,即交叉熵?fù)p失的輸入容易出現(xiàn)梯度飽和現(xiàn)象。而右邊的最小二乘 loss 則不然。 對于第二點,改善生成質(zhì)量。這個在原文也有詳細(xì)的解釋。具體來說:對于一些被判別器分類正確的樣本,其對梯度是沒有貢獻(xiàn)的。但是判別器分類正確的樣本就一定是很接近真實數(shù)據(jù)分布的樣本嗎?顯然不一定。 考慮如下理想情況,一個訓(xùn)練良好的 GAN,真實數(shù)據(jù)分布 Pdata 和生成數(shù)據(jù)分布 Pg 完全重合,判別器決策面穿過真實數(shù)據(jù)點,所以,反過來,我們利用樣本點離決策面的遠(yuǎn)近來度量生成樣本的質(zhì)量,樣本離決策面越近,則 GAN 訓(xùn)練的越好。 上圖 b 中,一些離決策面比較遠(yuǎn)的點,雖然被分類正確,但是這些并不是好的生成樣本。傳統(tǒng) GAN 通常會將其忽略。而對于 LSGAN,由于采用最小二乘損失,計算決策面到樣本點的距離,如圖 c,可以把離決策面比較遠(yuǎn)的點“拉”回來,也就是把離真實數(shù)據(jù)比較遠(yuǎn)的點“拉”回來。 Integral probality metric (IPM) IPM 定義了一個評價函數(shù)族 f ,用于度量任意兩個分布之間的距離。在一個緊湊的空間 類似于 f-divergence,不同函數(shù) f 也可以定義出一系列不同的優(yōu)化目標(biāo)。典型的有 WGAN,F(xiàn)isher GAN 等。下面簡要介紹一下 WGAN。 WGAN WGAN 提出了一種全新的距離度量方式——地球移動距離(EM, Earth-mover distance),也叫 Wasserstein 距離。關(guān)于 Wasserstein 距離的介紹可以參考:白話 Wassertein 距離 [1]。 Wasserstein 距離具體定義如下: ?(Pdata,Pg) 表示一組聯(lián)合分布,這組聯(lián)合分布里的任一分布 γ 的邊緣分布均為 Pdata(x) 和 Pg(x)。 直觀上來說,概率分布函數(shù)(PDF)可以理解為隨機(jī)變量在每一點的質(zhì)量,所以 W(Pdata,Pg) 則表示把概率分布 Pdata(x) 搬到 Pg(x) 需要的最小工作量。 WGAN 也可以用最優(yōu)傳輸理論來解釋,WGAN 的生成器等價于求解最優(yōu)傳輸映射,判別器等價于計算 Wasserstein 距離,即最優(yōu)傳輸總代價 [4]。關(guān)于 WGAN 的理論推導(dǎo)和解釋比較復(fù)雜,不過代碼實現(xiàn)非常簡單。具體來說 [3]:
上述第三點,在 WGAN 的后來一篇工作 WGAN-GP 中,將梯度截斷替換為了梯度懲罰。 f-divergence和IPM對比 f-divergence 存在兩個問題:其一是隨著數(shù)據(jù)空間的維度 IPM 則不受數(shù)據(jù)維度的影響,且一致收斂于 Pdata},Pg 兩個分布之間的距離。而且即便是在兩個分布的支撐集不存在重合時,也不會發(fā)散。 輔助的目標(biāo)函數(shù) 在許多 GAN 的應(yīng)用中,會使用額外的 Loss 用于穩(wěn)定訓(xùn)練或者達(dá)到其他的目的。比如在圖像翻譯,圖像修復(fù),超分辨當(dāng)中,生成器會加入目標(biāo)圖像作為監(jiān)督信息。EBGAN 則把 GAN 的判別器作為一個能量函數(shù),在判別器中加入重構(gòu)誤差。CGAN 則使用類別標(biāo)簽信息作為監(jiān)督信息。 其他常見生成式模型自回歸模型:pixelRNN與pixelCNN 自回歸模型通過對圖像數(shù)據(jù)的概率分布 Pdata(x) 進(jìn)行顯式建模,并利用極大似然估計優(yōu)化模型。具體如下: 上述公式很好理解,給定 x1,x2,...,xi-1 條件下,所有 p(xi) 的概率乘起來就是圖像數(shù)據(jù)的分布。如果使用 RNN 對上述依然關(guān)系建模,就是 pixelRNN。如果使用 CNN,則是 pixelCNN。具體如下 [5]: 顯然,不論是對于 pixelCNN 還是 pixelRNN,由于其像素值是一個個生成的,速度會很慢。語音領(lǐng)域大火的 WaveNet 就是一個典型的自回歸模型。 VAE PixelCNN/RNN 定義了一個易于處理的密度函數(shù),我們可以直接優(yōu)化訓(xùn)練數(shù)據(jù)的似然;對于變分自編碼器我們將定義一個不易處理的密度函數(shù),通過附加的隱變量 z 對密度函數(shù)進(jìn)行建模。VAE 原理圖如下 [6]: 在 VAE 中,真實樣本X通過神經(jīng)網(wǎng)絡(luò)計算出均值方差(假設(shè)隱變量服從正態(tài)分布),然后通過采樣得到采樣變量 Z 并進(jìn)行重構(gòu)。VAE 和 GAN 均是學(xué)習(xí)了隱變量 z 到真實數(shù)據(jù)分布的映射。但是和 GAN 不同的是: 1. GAN 的思路比較粗暴,使用一個判別器去度量分布轉(zhuǎn)換模塊(即生成器)生成分布與真實數(shù)據(jù)分布的距離。 2. VAE 則沒有那么直觀,VAE 通過約束隱變量 z 服從標(biāo)準(zhǔn)正態(tài)分布以及重構(gòu)數(shù)據(jù)實現(xiàn)了分布轉(zhuǎn)換映射 X=G(z)。 生成式模型對比 1. 自回歸模型通過對概率分布顯式建模來生成數(shù)據(jù); 2. VAE 和 GAN 均是:假設(shè)隱變量 z 服從某種分布,并學(xué)習(xí)一個映射 X=G(z) ,實現(xiàn)隱變量分布 z 與真實數(shù)據(jù)分布 Pdata(x) 的轉(zhuǎn)換; 3. GAN 使用判別器去度量映射 X=G(z) 的優(yōu)劣,而 VAE 通過隱變量 z 與標(biāo)準(zhǔn)正態(tài)分布的 KL 散度和重構(gòu)誤差去度量。 GAN常見的模型結(jié)構(gòu)DCGAN DCGAN 提出使用 CNN 結(jié)構(gòu)來穩(wěn)定 GAN 的訓(xùn)練,并使用了以下一些 trick:
上面這些 trick 對于穩(wěn)定 GAN 的訓(xùn)練有許多幫助,自己設(shè)計 GAN 網(wǎng)絡(luò)時也可以酌情使用。 層級結(jié)構(gòu) GAN 對于高分辨率圖像生成一直存在許多問題,層級結(jié)構(gòu)的 GAN 通過逐層次,分階段生成,一步步提生圖像的分辨率。典型的使用多對 GAN 的模型有StackGAN,GoGAN。使用單一 GAN,分階段生成的有 ProgressiveGAN。StackGAN 和 ProgressiveGAN 結(jié)構(gòu)如下: 自編碼結(jié)構(gòu) 經(jīng)典的 GAN 結(jié)構(gòu)里面,判別網(wǎng)絡(luò)通常被當(dāng)做一種用于區(qū)分真實/生成樣本的概率模型。而在自編碼器結(jié)構(gòu)里面,判別器(使用 AE 作為判別器)通常被當(dāng)做能量函數(shù)(Energy function)。對于離數(shù)據(jù)流形空間比較近的樣本,其能量較小,反之則大。有了這種距離度量方式,自然就可以使用判別器去指導(dǎo)生成器的學(xué)習(xí)。 AE 作為判別器,為什么就可以當(dāng)做能量函數(shù),用于度量生成樣本離數(shù)據(jù)流形空間的距離呢?首先,先看 AE 的 loss: AE 的 loss 是一個重構(gòu)誤差。使用 AE 做為判別器時,如果輸入真實樣本,其重構(gòu)誤差會很小。如果輸入生成的樣本,其重構(gòu)誤差會很大。因為對于生成的樣本,AE 很難學(xué)習(xí)到一個圖像的壓縮表示(即生成的樣本離數(shù)據(jù)流行形空間很遠(yuǎn))。所以,VAE 的重構(gòu)誤差作為 Pdata 和 Pg 之間的距離度量是合理的。典型的自編碼器結(jié)構(gòu)的 GAN 有:BEGAN,EBGAN,MAGAN 等。 GAN的訓(xùn)練障礙理論中存在的問題 經(jīng)典 GAN 的判別器有兩種 loss,分別是: 使用上面第一個公式作為 loss 時:在判別器達(dá)到最優(yōu)的時候,等價于最小化生成分布與真實分布之間的 JS 散度,由于隨機(jī)生成分布很難與真實分布有不可忽略的重疊以及 JS 散度的突變特性,使得生成器面臨梯度消失的問題。 使用上面第二個公式作為 loss 時:在最優(yōu)判別器下,等價于既要最小化生成分布與真實分布直接的 KL 散度,又要最大化其 JS 散度,相互矛盾,導(dǎo)致梯度不穩(wěn)定,而且 KL 散度的不對稱性使得生成器寧可喪失多樣性也不愿喪失準(zhǔn)確性,導(dǎo)致 collapse mode 現(xiàn)象 [7]。 實踐中存在的問題 GAN 在實踐中存在兩個問題: 其一,GAN 提出者 Ian Goodfellow 在理論中雖然證明了 GAN 是可以達(dá)到納什均衡的??墒俏覀冊趯嶋H實現(xiàn)中,我們是在參數(shù)空間優(yōu)化,而非函數(shù)空間,這導(dǎo)致理論上的保證在實踐中是不成立的。 其二,GAN 的優(yōu)化目標(biāo)是一個極小極大(minmax)問題,即 如果我們只迭代一次判別器,然后迭代一次生成器,不斷循環(huán)迭代。這樣原先的極小極大問題,就容易變成極大極?。╩axmin)問題,可二者是不一樣的,即: 如果變化為極小極大問題,那么迭代就是這樣的,生成器先生成一些樣本,然后判別器給出錯誤的判別結(jié)果并懲罰生成器,于是生成器調(diào)整生成的概率分布。可是這樣往往導(dǎo)致生成器變“懶”,只生成一些簡單的,重復(fù)的樣本,即缺乏多樣性,也叫 mode collapse。 穩(wěn)定GAN訓(xùn)練的技巧 如上所述,GAN 在理論上和實踐上存在三個大問題,導(dǎo)致訓(xùn)練過程十分不穩(wěn)定,且存在 mode collapse 的問題。為了改善上述情況,可以使用以下技巧穩(wěn)定訓(xùn)練: Feature matching:方法很簡單,使用判別器某一層的特征替換原始 GAN Loss 中的輸出。即最小化:生成圖片通過判別器的特征和真實圖片通過判別器得到的特征之間的距離。 標(biāo)簽平滑:GAN 訓(xùn)練中的標(biāo)簽非 0 即 1,這使得判別器預(yù)測出來的 confidence 傾向于更高的值。使用標(biāo)簽平滑可以緩解該問題。具體來說,就是把標(biāo)簽 1 替換為 0.8~1.0 之間的隨機(jī)數(shù)。 譜歸一化:WGAN 和 Improve WGAN 通過施加 Lipschitz 條件來約束優(yōu)化過程,譜歸一化則是對判別器的每一層都施加 Lipschitz 約束,但是譜歸一化相比于 Improve WGAN 計算效率要高一些。 PatchGAN:準(zhǔn)確來說 PatchGAN 并不是用于穩(wěn)定訓(xùn)練,但這個技術(shù)被廣泛用于圖像翻譯當(dāng)中,PatchGAN 相當(dāng)于對圖像的每一個小 Patch 進(jìn)行判別,這樣可以使得生成器生成更加銳利清晰的邊緣。 具體做法是這樣的:假設(shè)輸入一張 256x256 的圖像到判別器,輸出的是一個 4x4 的 confidence map,confidence map 中每一個像素值代表當(dāng)前 patch 是真實圖像的置信度,即為 PatchGAN。當(dāng)前圖像 patch 的大小就是感受野的大小,最后將所有 Patch 的 Loss 求平均作為最終的 Loss。 mode collapse的解決方案針對目標(biāo)函數(shù)的改進(jìn)方法 為了避免前面提到的由于優(yōu)化 maxmin 導(dǎo)致 mode 跳來跳去的問題,UnrolledGAN 采用修改生成器 loss 來解決。具體而言,UnrolledGAN 在更新生成器時更新 k 次生成器,參考的 Loss 不是某一次的 loss,是判別器后面 k 次迭代的 loss。 注意,判別器后面 k 次迭代不更新自己的參數(shù),只計算 loss 用于更新生成器。這種方式使得生成器考慮到了后面 k 次判別器的變化情況,避免在不同 mode 之間切換導(dǎo)致的模式崩潰問題。此處務(wù)必和迭代 k 次生成器,然后迭代 1 次判別器區(qū)分開 [8]。 DRAGAN 則引入博弈論中的無后悔算法,改造其 loss 以解決 mode collapse問題 [9]。前文所述的 EBGAN 則是加入 VAE 的重構(gòu)誤差以解決 mode collapse。 針對網(wǎng)絡(luò)結(jié)構(gòu)的改進(jìn)方法 Multi agent diverse GAN (MAD-GAN) 采用多個生成器,一個判別器以保障樣本生成的多樣性。具體結(jié)構(gòu)如下: 相比于普通 GAN,多了幾個生成器,且在 loss 設(shè)計的時候,加入一個正則項。正則項使用余弦距離懲罰三個生成器生成樣本的一致性。 MRGAN 則添加了一個判別器來懲罰生成樣本的 mode collapse 問題。具體結(jié)構(gòu)如下: 輸入樣本 x 通過一個 Encoder 編碼為隱變量 E(x) ,然后隱變量被 Generator 重構(gòu),訓(xùn)練時,Loss 有三個。 DM 和 R (重構(gòu)誤差)用于指導(dǎo)生成 real-like 的樣本。而 DD 則對 E(x) 和 z 生成的樣本進(jìn)行判別,顯然二者生成樣本都是 fake samples,所以這個判別器主要用于判斷生成的樣本是否具有多樣性,即是否出現(xiàn) mode collapse。 Mini-batch Discrimination Mini-batch discrimination 在判別器的中間層建立一個 mini-batch layer 用于計算基于 L1 距離的樣本統(tǒng)計量,通過建立該統(tǒng)計量去判別一個 batch 內(nèi)某個樣本與其他樣本有多接近。這個信息可以被判別器利用到,從而甄別出哪些缺乏多樣性的樣本。對生成器而言,則要試圖生成具有多樣性的樣本。 關(guān)于GAN隱空間的理解隱空間是數(shù)據(jù)的一種壓縮表示的空間。通常來說,我們直接在數(shù)據(jù)空間對圖像進(jìn)行修改是不現(xiàn)實的,因為圖像屬性位于高維空間中的流形中。但是在隱空間,由于每一個隱變量代表了某個具體的屬性,所以這是可行的。 在這部分,我們會探討 GAN 是如何處理隱空間及其屬性的,此外還將探討變分方法如何結(jié)合到 GAN 的框架中。 隱空間分解GAN 的輸入隱變量 z 是非結(jié)構(gòu)化的,我們不知道隱變量中的每一位數(shù)分別控制著什么屬性。因此有學(xué)者提出,將隱變量分解為一個條件變量 c 和標(biāo)準(zhǔn)輸入隱變量 z 。具體包括有監(jiān)督的方法和無監(jiān)督的方法。 有監(jiān)督方法 典型的有監(jiān)督方法有 CGAN 和 ACGAN。 CGAN 將隨機(jī)噪聲 z 和類別標(biāo)簽 c 作為生成器的輸入,判別器則將生成的樣本/真實樣本與類別標(biāo)簽作為輸入。以此學(xué)習(xí)標(biāo)簽和圖片之間的關(guān)聯(lián)性。 ACGAN 將隨機(jī)噪聲 z 和類別標(biāo)簽 c 作為生成器的輸入,判別器則將生成的樣本/真實樣本輸入,且回歸出圖片的類別標(biāo)簽。以此學(xué)習(xí)標(biāo)簽和圖片之間的關(guān)聯(lián)性。二者結(jié)構(gòu)如下(左邊為 CGAN,右邊為 ACGAN): 無監(jiān)督方法 相比于有監(jiān)督方法,無監(jiān)督方法不使用任何標(biāo)簽信息。因此,無監(jiān)督方法需要對隱空間進(jìn)行解耦得到有意義的特征表示。 InfoGAN 對把輸入噪聲分解為隱變量 z 和條件變量 c (訓(xùn)練時,條件變量 c 從均勻分布采樣而來),二者被一起送入生成器。在訓(xùn)練過程中通過最大化 c 和 G(z,c) 的互信息 I(c;G(z,c)) 以實現(xiàn)變量解耦(I(c;G(z,c)) 的互信息表示 c 里面關(guān)于 G(z,c) 的信息有多少,如果最大化互信息 I(c;G(z,c)) ,也就是最大化生成結(jié)果和條件變量 c 的關(guān)聯(lián)性)。 模型結(jié)構(gòu)和 CGAN 基本一致,除了 Loss 多了一項最大互信息。具體如下 [10]: 從上面分析可以看出,InfoGAN 只是實現(xiàn)了信息的解耦,至于條件變量 c 每一個值的具體含義是什么,我們無法控制。 于是 ss-InfoGAN 出現(xiàn)了,ss-InfoGAN 采用半監(jiān)督學(xué)習(xí)方法,把條件變量 c 分成兩部分, GAN與VAE的結(jié)合GAN 相比于 VAE 可以生成清晰的圖像,但是卻容易出現(xiàn) mode collapse 問題。VAE 由于鼓勵重構(gòu)所有樣本,所以不會出現(xiàn) mode collapse 問題。 一個典型結(jié)合二者的工作是 VAEGAN,結(jié)構(gòu)很像前文提及的 MRGAN,具體如下: 上述模型的 Loss 包括三個部分,分別是判別器某一層特征的重構(gòu)誤差,VAE 的 Loss,GAN 的 Loss。 GAN模型總結(jié)前面兩節(jié)介紹了各種各樣的 GAN 模型,這些模型大都是圍繞著 GAN 的兩大常見問題:模式崩潰,以及訓(xùn)練崩潰來設(shè)計的。下表總結(jié)了這些模型,讀者可以根據(jù)下表回顧對照: GAN的應(yīng)用由于 GAN 在生成樣本過程成不需要顯式建模任何數(shù)據(jù)分布就可以生成 real-like 的樣本,所以 GAN 在圖像,文本,語音等諸多領(lǐng)域都有廣泛的應(yīng)用。下表總結(jié)了 GAN 在各個方面的應(yīng)用,后文會這些算法做相應(yīng)介紹。 圖像圖像翻譯 所謂圖像翻譯,指從一副(源域)圖像到另一副(目標(biāo)域)圖像的轉(zhuǎn)換??梢灶惐葯C(jī)器翻譯,一種語言轉(zhuǎn)換為另一種語言。翻譯過程中會保持源域圖像內(nèi)容不變,但是風(fēng)格或者一些其他屬性變成目標(biāo)域。 Paired two domain data 成對圖像翻譯典型的例子就是 pix2pix,pix2pix 使用成對數(shù)據(jù)訓(xùn)練了一個條件 GAN,Loss 包括 GAN 的 loss 和逐像素差 loss。而 PAN 則使用特征圖上的逐像素差作為感知損失替代圖片上的逐像素差,以生成人眼感知上更加接近源域的圖像。 Unpaired two domain data 對于無成對訓(xùn)練數(shù)據(jù)的圖像翻譯問題,一個典型的例子是 CycleGAN。CycleGAN 使用兩對 GAN,將源域數(shù)據(jù)通過一個 GAN 網(wǎng)絡(luò)轉(zhuǎn)換到目標(biāo)域之后,再使用另一個 GAN 網(wǎng)絡(luò)將目標(biāo)域數(shù)據(jù)轉(zhuǎn)換回源域,轉(zhuǎn)換回來的數(shù)據(jù)和源域數(shù)據(jù)正好是成對的,構(gòu)成監(jiān)督信息。 超分辨 SRGAN 中使用 GAN 和感知損失生成細(xì)節(jié)豐富的圖像。感知損失重點關(guān)注中間特征層的誤差,而不是輸出結(jié)果的逐像素誤差。避免了生成的高分辨圖像缺乏紋理細(xì)節(jié)信息問題。 目標(biāo)檢測 得益于 GAN 在超分辨中的應(yīng)用,針對小目標(biāo)檢測問題,可以理由 GAN 生成小目標(biāo)的高分辨率圖像從而提高目標(biāo)檢測精度。 圖像聯(lián)合分布學(xué)習(xí) 大部分 GAN 都是學(xué)習(xí)單一域的數(shù)據(jù)分布,CoupledGAN 則提出一種部分權(quán)重共享的網(wǎng)絡(luò),使用無監(jiān)督方法來學(xué)習(xí)多個域圖像的聯(lián)合分布。具體結(jié)構(gòu)如下 [11]: 如上圖所示,CoupledGAN 使用兩個 GAN 網(wǎng)絡(luò)。生成器前半部分權(quán)重共享,目的在于編碼兩個域高層的,共有信息,后半部分沒有進(jìn)行共享,則是為了各自編碼各自域的數(shù)據(jù)。判別器前半部分不共享,后半部分用于提取高層特征共享二者權(quán)重。對于訓(xùn)練好的網(wǎng)絡(luò),輸入一個隨機(jī)噪聲,輸出兩張不同域的圖片。 值得注意的是,上述模型學(xué)習(xí)的是聯(lián)合分布 P(x,y) ,如果使用兩個單獨的 GAN 分別取訓(xùn)練,那么學(xué)習(xí)到的就是邊際分布 P(x) 和 P(y)。通常情況下, P(x,y)≠P(x)·P(y) 。 視頻生成 通常來說,視頻有相對靜止的背景和運動的前景組成。VideoGAN 使用一個兩階段的生成器,3D CNN 生成器生成運動前景,2D CNN 生成器生成靜止的背景。 Pose GAN 則使用 VAE 和 GAN 生成視頻,首先,VAE 結(jié)合當(dāng)前幀的姿態(tài)和過去的姿態(tài)特征預(yù)測下一幀的運動信息,然后 3D CNN 使用運動信息生成后續(xù)視頻幀。 Motion and Content GAN (MoCoGAN) 則提出在隱空間對運動部分和內(nèi)容部分進(jìn)行分離,使用 RNN 去建模運動部分。 序列生成相比于 GAN 在圖像領(lǐng)域的應(yīng)用,GAN 在文本,語音領(lǐng)域的應(yīng)用要少很多。主要原因有兩個: 1. GAN 在優(yōu)化的時候使用 BP 算法,對于文本,語音這種離散數(shù)據(jù),GAN 沒法直接跳到目標(biāo)值,只能根據(jù)梯度一步步靠近。 2. 對于序列生成問題,每生成一個單詞,我們就需要判斷這個序列是否合理,可是 GAN 里面的判別器是沒法做到的。除非我們針對每一個 step 都設(shè)置一個判別器,這顯然不合理。 為了解決上述問題,強(qiáng)化學(xué)習(xí)中的策略梯度下降(Policy gredient descent)被引入到 GAN 中的序列生成問題。 音樂生成 RNN-GAN 使用 LSTM 作為生成器和判別器,直接生成整個音頻序列。然而,正如上面提到的,音樂當(dāng)做包括歌詞和音符,對于這種離散數(shù)據(jù)生成問題直接使用 GAN 存在很多問題,特別是生成的數(shù)據(jù)缺乏局部一致性。 相比之下,SeqGAN 把生成器的輸出作為一個智能體(agent)的策略,而判別器的輸出作為獎勵(reward),使用策略梯度下降來訓(xùn)練模型。ORGAN 則在 SeqGAN 的基礎(chǔ)上,針對具體的目標(biāo)設(shè)定了一個特定目標(biāo)函數(shù)。 語言和語音 VAW-GAN (Variational autoencoding Wasserstein GAN) 結(jié)合 VAE 和 WGAN 實現(xiàn)了一個語音轉(zhuǎn)換系統(tǒng)。編碼器編碼語音信號的內(nèi)容,解碼器則用于重建音色。由于 VAE 容易導(dǎo)致生成結(jié)果過于平滑,所以此處使用 WGAN 來生成更加清晰的語音信號。 半監(jiān)督學(xué)習(xí)圖像數(shù)據(jù)的標(biāo)簽獲得需要大量的人工標(biāo)注,這個過程費時費力。 利用判別器進(jìn)行半監(jiān)督學(xué)習(xí) 基于 GAN 的半監(jiān)督學(xué)習(xí)方法 [12] 提出了一種利用無標(biāo)簽數(shù)據(jù)的方法。實現(xiàn)方法和原始 GAN 基本一樣,具體框架如下 [13]: 相比于原始 GAN,主要區(qū)別在于判別器輸出一個 K+1 的類別信息(生成的樣本為第 K+1 類)。對于判別器,其 Loss 包括兩部分,一個是監(jiān)督學(xué)習(xí)損失(只需要判斷樣本真假),另一個是無監(jiān)督學(xué)習(xí)損失(判斷樣本類別)。生成器則只需要盡量生成逼真的樣本即可。訓(xùn)練完成后,判別器就可以作為一個分類模型去分類。 從直觀上來看,生成的樣本主要在于輔助分類器學(xué)會區(qū)分真實的數(shù)據(jù)空間在哪里。 使用輔助分類器的半監(jiān)督學(xué)習(xí) 上面提及的利用判別器進(jìn)行半監(jiān)督學(xué)習(xí)的模型存在一個問題。判別器既要學(xué)習(xí)區(qū)分正負(fù)樣本,也要學(xué)習(xí)預(yù)測標(biāo)簽。二者目標(biāo)不一致,容易導(dǎo)致二者都達(dá)不到最優(yōu)。一個直觀的想法就把預(yù)測標(biāo)簽和區(qū)分正負(fù)樣本分開。Triple-GAN 就是這么做的 [14]: (Xg,Yg)~pg(X,Y), (Xl,Yl)~p(X,Y), (Xc,Yc)~pc(X,Y) 分別表示生成的數(shù)據(jù),有標(biāo)簽的數(shù)據(jù),無標(biāo)簽的數(shù)據(jù)。CE 表示交叉熵?fù)p失。 域適應(yīng)域適應(yīng)是一個遷移學(xué)習(xí)里面的概念。簡單說來,我們定義源數(shù)據(jù)域分布為 Ds(x,y),目標(biāo)數(shù)據(jù)域分布為 DT(x,y)。對于源域數(shù)據(jù),我們有許多標(biāo)簽,但是對于目標(biāo)域的數(shù)據(jù)沒有標(biāo)簽。我們希望能通過源域的有標(biāo)簽數(shù)據(jù)和目標(biāo)域的無標(biāo)簽數(shù)據(jù)學(xué)習(xí)一個模型,在目標(biāo)域泛化的很好。遷移學(xué)習(xí)的“遷移”二字指的是源域數(shù)據(jù)分布向目標(biāo)域數(shù)據(jù)分布的遷移。 GAN 用于遷移學(xué)習(xí)時,核心思想在于使用生成器把源域數(shù)據(jù)特征轉(zhuǎn)換成目標(biāo)域數(shù)據(jù)特征,而判別器則盡可能區(qū)分真實數(shù)據(jù)和生成數(shù)據(jù)特征。以下是兩個把 GAN 應(yīng)用于遷移學(xué)習(xí)的例子 DANN 和 ARDA: 以上圖左邊的 DANN 為例,Is,It 分別代表源域數(shù)據(jù),目標(biāo)域的數(shù)據(jù), ys 表示源域數(shù)據(jù)的標(biāo)簽。Fs,F(xiàn)t 表示源域特征,目標(biāo)域特征。DANN 中,生成器用于提取特征,并使得提取的特征難以被判別器區(qū)分是源域數(shù)據(jù)特征還是目標(biāo)域數(shù)據(jù)特征。 在行人重識別領(lǐng)域,有許多基于 CycleGAN 的遷移學(xué)習(xí)以進(jìn)行數(shù)據(jù)增廣的應(yīng)用。行人重識別問題一個難點在于不同攝像頭下拍攝的人物環(huán)境,角度差別非常大,導(dǎo)致存在較大的 Domain gap。 因此,可以考慮使用 GAN 來產(chǎn)生不同攝像頭下的數(shù)據(jù)進(jìn)行數(shù)據(jù)增廣。[15] 中提出了一個 CycleGAN 用于數(shù)據(jù)增廣的方法。具體模型結(jié)構(gòu)如下: 對于每一對攝像頭都訓(xùn)練一個 CycleGAN,這樣就可以實現(xiàn)將一個攝像頭下的數(shù)據(jù)轉(zhuǎn)換成另一個攝像頭下的數(shù)據(jù),但是內(nèi)容(人物)保持不變。 其他應(yīng)用GAN 的變體繁多,應(yīng)用非常廣泛,在一寫非機(jī)器學(xué)習(xí)領(lǐng)域也有應(yīng)用,以下是一些例子。 醫(yī)學(xué)圖像分割 [16] 提出了一種 segmentor-critic 結(jié)構(gòu)用于分割醫(yī)學(xué)圖像。segmentor 類似于 GAN 中的生成器用于生成分割圖像,critic 則最大化生成的分割圖像和 ground truth 之間的距離。此外,DI2IN 使用 GAN 分割 3D CT 圖像,SCAN 使用 GAN 用于分割 X 射線圖像。 圖片隱寫 隱寫指的是把秘密信息隱藏到非秘容器,比如圖片中。隱寫分析器則用于判別容器是否含有秘密信息。一些研究嘗試使用 GAN 的生成器生成帶有隱寫信息的圖片,判別器則有兩個,一個用于判別圖片是否是真實圖片,另一個則判別圖片是否具有秘密信息 [17]。 連續(xù)學(xué)習(xí) 連續(xù)學(xué)習(xí)目的在于解決多個任務(wù),且在學(xué)習(xí)過程中不斷積累新知識。連續(xù)學(xué)習(xí)中存在一個突出的問題就是“知識遺忘”。[18] 中使用 GAN 的生成器作為一個 scholars model,生成器不斷使用以往知識進(jìn)行訓(xùn)練,solver 則給出答案,以此避免“知識遺忘”問題。 討論在第一、二部分我們討論了 GAN 及其變體,第三部分討論了 GAN 的應(yīng)用。下表總結(jié)了比較有名的一些 GAN 的模型結(jié)構(gòu)及其施加的額外約束。 前面都是對于 GAN 的微觀層面的探討。接下來,我們會站在一個宏觀的視角來討論 GAN。 GAN的評價GAN 的評價方法多種多樣,現(xiàn)有的 example-based(顧名思義,基于樣本層面做評價)方法,均是對生成樣本與真實樣本提取特征,然后在特征空間做距離度量。具體框架如下: 關(guān)于本小節(jié)的符號對照關(guān)系如下: Pg 表示生成數(shù)據(jù)分布,Pr 表示真實數(shù)據(jù)分布,E 表示數(shù)學(xué)期望,x 表示輸入樣本,x~Pg 表示 x 為生成樣本的采樣,x~Pr 表示 x 為真實樣本的采樣。y 表示樣本標(biāo)簽,M 表示分類網(wǎng)絡(luò),通常選擇 Inception network。 下面分別對常見的評價指標(biāo)進(jìn)行一一介紹。 Inception Score 對于一個在 ImageNet 訓(xùn)練良好的 GAN,其生成的樣本丟給 Inception 網(wǎng)絡(luò)進(jìn)行測試的時候,得到的判別概率應(yīng)該具有如下特性: 1. 對于同一個類別的圖片,其輸出的概率分布應(yīng)該趨向于一個脈沖分布。可以保證生成樣本的準(zhǔn)確性。 2. 對于所有類別,其輸出的概率分布應(yīng)該趨向于一個均勻分布,這樣才不會出現(xiàn) mode collapsing 等,可以保證生成樣本的多樣性。 因此,可以設(shè)計如下指標(biāo): 根據(jù)前面分析,如果是一個訓(xùn)練良好的 GAN, pM(y|x) 趨近于脈沖分布, pM(y) 趨近于均勻分布。二者KL散度會很大。Inception Score 自然就高。實際實驗表明,Inception Score 和人的主觀判別趨向一致。IS 的計算沒有用到真實數(shù)據(jù),具體值取決于模型 M 的選擇。 特點:可以一定程度上衡量生成樣本的多樣性和準(zhǔn)確性,但是無法檢測過擬合。Mode Score 也是如此。不推薦在和 ImageNet 數(shù)據(jù)集差別比較大的數(shù)據(jù)上使用。 Mode Score Mode Score 作為 Inception Score 的改進(jìn)版本,添加了關(guān)于生成樣本和真實樣本預(yù)測的概率分布相似性度量一項。具體公式如下: Kernel MMD 計算公式如下: 對于 Kernel MMD 值的計算,首先需要選擇一個核函數(shù) k,這個核函數(shù)把樣本映射到再生希爾伯特空間(Reproducing Kernel Hilbert Space, RKHS),RKHS 相比于歐幾里得空間有許多優(yōu)點,對于函數(shù)內(nèi)積的計算是完備的。 將上述公式展開即可得到下面的計算公式: MMD 值越小,兩個分布越接近。 特點:可以一定程度上衡量模型生成圖像的優(yōu)劣性,計算代價小。推薦使用。 Wasserstein Distance Wasserstein distance 在最優(yōu)傳輸問題中通常也叫做推土機(jī)距離。這個距離的介紹在 WGAN 中有詳細(xì)討論。公式如下: Wasserstein distance 可以衡量兩個分布之間的相似性。距離越小,分布越相似。 特點:如果特征空間選擇合適,會有一定的效果。但是計算復(fù)雜度為 O(n^3) 太高。 Fréchet Inception Distance (FID) FID 距離計算真實樣本,生成樣本在特征空間之間的距離。首先利用 Inception 網(wǎng)絡(luò)來提取特征,然后使用高斯模型對特征空間進(jìn)行建模。根據(jù)高斯模型的均值和協(xié)方差來進(jìn)行距離計算。具體公式如下: μ,C 分別代表協(xié)方差和均值。 特點:盡管只計算了特征空間的前兩階矩,但是魯棒,且計算高效。 1-Nearest Neighbor classifier 使用留一法,結(jié)合 1-NN 分類器(別的也行)計算真實圖片,生成圖像的精度。如果二者接近,則精度接近 50%,否則接近 0%。對于 GAN 的評價問題,作者分別用正樣本的分類精度,生成樣本的分類精度去衡量生成樣本的真實性,多樣性。 對于真實樣本 Xr ,進(jìn)行 1-NN 分類的時候,如果生成的樣本越真實。則真實樣本空間 R 將被生成的樣本 Xg 包圍。那么 Xr 的精度會很低。 對于生成的樣本 Xg ,進(jìn)行 1-NN 分類的時候,如果生成的樣本多樣性不足。由于生成的樣本聚在幾個 mode,則 Xg 很容易就和 Xr 區(qū)分,導(dǎo)致精度會很高。 特點:理想的度量指標(biāo),且可以檢測過擬合。 其他評價方法 AIS,KDE 方法也可以用于評價 GAN,但這些方法不是 model agnostic metrics。也就是說,這些評價指標(biāo)的計算無法只利用:生成的樣本,真實樣本來計算。 總結(jié) 實際實驗發(fā)現(xiàn),MMD 和 1-NN two-sample test 是最為合適的評價指標(biāo),這兩個指標(biāo)可以較好的區(qū)分:真實樣本和生成的樣本, mode collapsing。且計算高效。 總體說來,GAN 的學(xué)習(xí)是一個無監(jiān)督學(xué)習(xí)過程,所以很難找到一個比較客觀的,可量化的評估指標(biāo)。有許多指標(biāo)在數(shù)值上雖然高,但是生成效果卻未必好??傊珿AN 的評價目前依然是一個開放性的問題。 GAN與強(qiáng)化學(xué)習(xí)的關(guān)系強(qiáng)化學(xué)習(xí)的目標(biāo)是對于一個智能體,給定狀態(tài) s,去選擇一個最佳的行為 a (action)。通常的可以定義一個價值函數(shù) Q(s,a) 來衡量,對于狀態(tài) s,采取行動 a 的回報是 Q(s,a),顯然,我們希望最大化這個回報值。對于很多復(fù)雜的問題,我們是很難定義這個價值函數(shù) Q(s,a) 的,就像我們很難定義 GAN 生成的圖片到底有多好一樣。 說到這里,大家可能反應(yīng)過來了。GAN 生成的圖片好不好,我確實找不到一個合適的指標(biāo),那我學(xué)習(xí)一個判別器去判斷一下生成圖片和真實圖片的距離不就好了嗎。強(qiáng)化學(xué)習(xí)里面的價值函數(shù) Q(s,a) 難以定義,那直接用個神經(jīng)網(wǎng)絡(luò)去學(xué)習(xí)它就好了。典型的模型有 DDPG,TRPO 等等。 GAN的優(yōu)缺點優(yōu)點 1. GAN 的優(yōu)點在開頭已有所介紹。這里再總結(jié)一下: 2. GAN 可以并行生成數(shù)據(jù)。相比于 PixelCNN,PixelRNN 這些模型,GAN 生成非???,因為 GAN 使用 Generator 替代了采樣的過程; 3. GAN 不需要通過引入下界來近似似然。VAE 由于優(yōu)化困難,引入了變分下界來優(yōu)化似然。但是 VAE 對于先驗和后驗分布做了假設(shè),使得 VAE 很難逼近其變分下界; 從實踐來看,GAN 生成的結(jié)過要比 VAE 更清晰的多。 缺點 GAN 的缺點在前文也有詳細(xì)討論,主要問題在于: 1. 訓(xùn)練不穩(wěn)定,容易崩潰。這個問題有學(xué)者提出了許多解決方案,比如 WGAN,LSGAN 等; 2. 模式崩潰。盡管有很多相關(guān)的研究,但是由于圖像數(shù)據(jù)的高維度特性,這個問題依然還沒完全解決。 未來的研究方向GAN 的訓(xùn)練崩潰,模式崩潰問題等依然有待研究改進(jìn)。Deep learning 盡管很強(qiáng)大,但目前仍有許多領(lǐng)域無法征服,期待 GAN 在此基礎(chǔ)上會有一些作為。 參考文獻(xiàn)[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:///archives/5253 [7] https://www.jianshu.com/p/42c42e13d09b [8] https:///@jonathan_hui/gan-unrolled-gan-how-to-reduce-mode-collapse-af5f2f7b51cd [9] https:///@jonathan_hui/gan-dragan-5ba50eafcdf2 [10] https:///@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:///@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. 本文為機(jī)器之心轉(zhuǎn)載,轉(zhuǎn)載請聯(lián)系原公眾號獲得授權(quán)。 |
|
微信掃碼,在手機(jī)上查看選中內(nèi)容