[GAN学习系列2] GAN的起源
本文大約 5000 字,閱讀大約需要 10 分鐘
這是 GAN 學(xué)習(xí)系列的第二篇文章,這篇文章將開始介紹 GAN 的起源之作,鼻祖,也就是 Ian Goodfellow 在 2014 年發(fā)表在 ICLR 的論文–Generative Adversarial Networks”,當(dāng)然由于數(shù)學(xué)功底有限,所以會簡單介紹用到的數(shù)學(xué)公式和背后的基本原理,并介紹相應(yīng)的優(yōu)缺點。
基本原理
在[GAN學(xué)習(xí)系列] 初識GAN中,介紹了 GAN 背后的基本思想就是兩個網(wǎng)絡(luò)彼此博弈。生成器 G 的目標(biāo)是可以學(xué)習(xí)到輸入數(shù)據(jù)的分布從而生成非常真實的圖片,而判別器 D 的目標(biāo)是可以正確辨別出真實圖片和 G 生成的圖片之間的差異。正如下圖所示:
上圖給出了生成對抗網(wǎng)絡(luò)的一個整體結(jié)構(gòu),生成器 G 和判別器 D 都是有各自的網(wǎng)絡(luò)結(jié)構(gòu)和不同的輸入,其中 G 的輸出,即生成的樣本也是 D 的輸入之一,而 D 則會為 G 提供梯度進行權(quán)重的更新。
那么問題來了,如果 D 是一個非常好的分類器,那么我們是否真的可以生成非常逼真的樣本來欺騙它呢?
對抗樣本
在正式介紹 GAN 的原理之前,先介紹一個概念–對抗樣本(adversarial example),它是指經(jīng)過精心計算得到的用于誤導(dǎo)分類器的樣本。例如下圖就是一個例子,左邊是一個熊貓,但是添加了少量隨機噪聲變成右圖后,分類器給出的預(yù)測類別卻是長臂猿,但視覺上左右兩幅圖片并沒有太大改變。
所以為什么在簡單添加了噪聲后會誤導(dǎo)分類器呢?
這是因為圖像分類器本質(zhì)上是高維空間的一個復(fù)雜的決策邊界。當(dāng)然涉及到圖像分類的時候,由于是高維空間而不是簡單的兩維或者三維空間,我們無法畫出這個邊界出來。但是我們可以肯定的是,訓(xùn)練完成后,分類器是無法泛化到所有數(shù)據(jù)上,除非我們的訓(xùn)練集包含了分類類別的所有數(shù)據(jù),但實際上我們做不到。而做不到泛化到所有數(shù)據(jù)的分類器,其實就會過擬合訓(xùn)練集的數(shù)據(jù),這也就是我們可以利用的一點。
我們可以給圖片添加一個非常接近于 0 的隨機噪聲,這可以通過控制噪聲的 L2 范數(shù)來實現(xiàn)。L2 范數(shù)可以看做是一個向量的長度,這里有個訣竅就是圖片的像素越多,即圖片尺寸越大,其平均 L2 范數(shù)也就越大。因此,當(dāng)添加的噪聲的范數(shù)足夠低,那么視覺上你不會覺得這張圖片有什么不同,正如上述右邊的圖片一樣,看起來依然和左邊原始圖片一模一樣;但是,在向量空間上,添加噪聲后的圖片和原始圖片已經(jīng)有很大的距離了!
為什么會這樣呢?
因為在 L2 范數(shù)看來,對于熊貓和長臂猿的決策邊界并沒有那么遠,添加了非常微弱的隨機噪聲的圖片可能就遠離了熊貓的決策邊界內(nèi),到達長臂猿的預(yù)測范圍內(nèi),因此欺騙了分類器。
除了這種簡單的添加隨機噪聲,還可以通過圖像變形的方式,使得新圖像和原始圖像視覺上一樣的情況下,讓分類器得到有很高置信度的錯誤分類結(jié)果。這種過程也被稱為對抗攻擊(adversarial attack),這種生成方式的簡單性也是給 GAN 提供了解釋。
生成器和判別器
現(xiàn)在如果將上述說的分類器設(shè)定為二值分類器,即判斷真和假,那么根據(jù) Ian Goodfellow 的原始論文的說法,它就是判別器(Discriminator)。
有了判別器,那還需要有生成假樣本來欺騙判別器的網(wǎng)絡(luò),也就是生成器 (Generator)。這兩個網(wǎng)絡(luò)結(jié)合起來就是生成對抗網(wǎng)絡(luò)(GAN),根據(jù)原始論文,它的目標(biāo)如下:
兩個網(wǎng)絡(luò)的工作原理可以如下圖所示,D 的目標(biāo)就是判別真實圖片和 G 生成的圖片的真假,而 G 是輸入一個隨機噪聲來生成圖片,并努力欺騙 D 。
簡單來說,GAN 的基本思想就是一個最小最大定理,當(dāng)兩個玩家(D 和 G)彼此競爭時(零和博弈),雙方都假設(shè)對方采取最優(yōu)的步驟而自己也以最優(yōu)的策略應(yīng)對(最小最大策略),那么結(jié)果就已經(jīng)預(yù)先確定了,玩家無法改變它(納什均衡)。
因此,它們的損失函數(shù),D 的是
G 的是
這里根據(jù)它們的損失函數(shù)分析下,G 網(wǎng)絡(luò)的訓(xùn)練目標(biāo)就是讓 D(G(z)) 趨近于 1,這也是讓其 loss 變小的做法;而 D 網(wǎng)絡(luò)的訓(xùn)練目標(biāo)是區(qū)分真假數(shù)據(jù),自然是讓 D(x) 趨近于 1,而 D(G(z)) 趨近于 0 。這就是兩個網(wǎng)絡(luò)相互對抗,彼此博弈的過程了。
那么,它們相互對抗的效果是怎樣的呢?在論文中 Ian Goodfellow 用下圖來描述這個過程:
上圖中,黑色曲線表示輸入數(shù)據(jù) x 的實際分布,綠色曲線表示的是 G 網(wǎng)絡(luò)生成數(shù)據(jù)的分布,我們的目標(biāo)自然是希望著兩條曲線可以相互重合,也就是兩個數(shù)據(jù)分布一致了。而藍色的曲線表示的是生成數(shù)據(jù)對應(yīng)于 D 的分布。
在 a 圖中是剛開始訓(xùn)練的時候,D 的分類能力還不是最好,因此有所波動,而生成數(shù)據(jù)的分布也自然和真實數(shù)據(jù)分布不同,畢竟 G 網(wǎng)絡(luò)輸入是隨機生成的噪聲;到了 b 圖的時候,D 網(wǎng)絡(luò)的分類能力就比較好了,可以看到對于真實數(shù)據(jù)和生成數(shù)據(jù),它是明顯可以區(qū)分出來,也就是給出的概率是不同的;
而綠色的曲線,即 G 網(wǎng)絡(luò)的目標(biāo)是學(xué)習(xí)真實數(shù)據(jù)的分布,所以它會往藍色曲線方向移動,也就是 c 圖了,并且因為 G 和 D 是相互對抗的,當(dāng) G 網(wǎng)絡(luò)提升,也會影響 D 網(wǎng)絡(luò)的分辨能力。論文中,Ian Goodfellow 做出了證明,當(dāng)假設(shè) G 網(wǎng)絡(luò)不變,訓(xùn)練 D 網(wǎng)絡(luò),最優(yōu)的情況會是:
也就是當(dāng)生成數(shù)據(jù)的分布 pg(x)p_g(x)pg?(x) 趨近于真實數(shù)據(jù)分布 $p_{data}(x) $的時候,D 網(wǎng)絡(luò)輸出的概率 DG?(x)D_G^*(x)DG??(x) 會趨近于 0.5,也就是 d 圖的結(jié)果,這也是最終希望達到的訓(xùn)練結(jié)果,這時候 G 和 D 網(wǎng)絡(luò)也就達到一個平衡狀態(tài)。
訓(xùn)練策略和算法實現(xiàn)
論文給出的算法實現(xiàn)過程如下所示:
這里包含了一些訓(xùn)練的技巧和方法:
分析
優(yōu)點
GAN 在巧妙設(shè)計了目標(biāo)函數(shù)后,它就擁有以下兩個優(yōu)點。
- 首先,GAN 中的 G 作為生成模型,不需要像傳統(tǒng)圖模型一樣,需要一個嚴格的生成數(shù)據(jù)的表達式。這就避免了當(dāng)數(shù)據(jù)非常復(fù)雜的時候,復(fù)雜度過度增長導(dǎo)致的不可計算。
- 其次,它也不需要 inference 模型中的一些龐大計算量的求和計算。它唯一的需要的就是,一個噪音輸入,一堆無標(biāo)準(zhǔn)的真實數(shù)據(jù),兩個可以逼近函數(shù)的網(wǎng)絡(luò)。
缺點
雖然 GAN 避免了傳統(tǒng)生成模型方法的缺陷,但是在它剛出來兩年后,在 2016 年才開始逐漸有非常多和 GAN 相關(guān)的論文發(fā)表,其原因自然是初代 GAN 的缺點也是非常難解決:
- 首當(dāng)其沖的缺點就是 GAN 過于自由導(dǎo)致訓(xùn)練難以收斂以及不穩(wěn)定;
- 其次,原始 G 的損失函數(shù) log(1?D(G(z)))log(1-D(G(z)))log(1?D(G(z))) 沒有意義,它是讓G 最小化 D 識別出自己生成的假樣本的概率,但實際上它會導(dǎo)致梯度消失問題,這是由于開始訓(xùn)練的時候,G 生成的圖片非常糟糕,D 可以輕而易舉的識別出來,這樣 D 的訓(xùn)練沒有任何損失,也就沒有有效的梯度信息回傳給 G 去優(yōu)化它自己,這就是梯度消失了;
- 最后,雖然作者意識到這個問題,在實際應(yīng)用中改用 ?log(D(G(z)))-log(D(G(z)))?log(D(G(z))) 來代替,這相當(dāng)于從最小化 D 揪出自己的概率,變成了最大化 D 抓不到自己的概率。雖然直觀上感覺是一致的,但其實并不在理論上等價,也更沒有了理論保證在這樣的替代目標(biāo)函數(shù)訓(xùn)練下,GAN 還會達到平衡。這個結(jié)果會導(dǎo)致模式奔潰問題,其實也就是[GAN學(xué)習(xí)系列] 初識GAN中提到的兩個缺陷。
當(dāng)然,上述的問題在最近兩年各種 GAN 變體中逐漸得到解決方法,比如對于訓(xùn)練太自由的,出現(xiàn)了 cGAN,即提供了一些條件信息給 G 網(wǎng)絡(luò),比如類別標(biāo)簽等信息;對于 loss 問題,也出現(xiàn)如 WGAN 等設(shè)計新的 loss 來解決這個問題。后續(xù)會繼續(xù)介紹不同的 GAN 的變體,它們在不同方面改進原始 GAN 的問題,并且也應(yīng)用在多個方面。
參考文章:
- Goodfellow et al., “Generative Adversarial Networks”. ICLR 2014.
- beginners-review-of-gan-architectures
- 干貨 | 深入淺出 GAN·原理篇文字版(完整)
- 深度 | 生成對抗網(wǎng)絡(luò)初學(xué)入門:一文讀懂GAN的基本原理(附資源)
配圖來自網(wǎng)絡(luò)和論文 Generative Adversarial Networks
以上就是本文的主要內(nèi)容和總結(jié),可以留言給出你對本文的建議和看法。
歡迎關(guān)注我的微信公眾號–機器學(xué)習(xí)與計算機視覺或者掃描下方的二維碼,和我分享你的建議和看法,指正文章中可能存在的錯誤,大家一起交流,學(xué)習(xí)和進步!
推薦閱讀
1.機器學(xué)習(xí)入門系列(1)–機器學(xué)習(xí)概覽(上)
2.機器學(xué)習(xí)入門系列(2)–機器學(xué)習(xí)概覽(下)
3.[GAN學(xué)習(xí)系列] 初識GAN
總結(jié)
以上是生活随笔為你收集整理的[GAN学习系列2] GAN的起源的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员,你恐慌的到底是什么?
- 下一篇: 使用mysql5.7.10