本文大約 3800 字,閱讀大約須要 8 分鐘git
要說最近幾年在深度學習領域最火的莫過於生成對抗網絡,即 Generative Adversarial Networks(GANs)了。它是 Ian Goodfellow 在 2014 年發表的,也是這四年來出現的各類 GAN 的變種的開山鼻祖了,下圖表示這四年來有關 GAN 的論文的每月發表數量,能夠看出在 2014 年提出後到 2016 年相關的論文是比較少的,可是從 2016 年,或者是 2017 年到今年這兩年的時間,相關的論文是真的呈現井噴式增加。github
那麼,GAN 到底是什麼呢,它爲什麼會成爲這幾年這麼火的一個研究領域呢?微信
GAN,即生成對抗網絡,是一個生成模型,也是半監督和無監督學習模型,它能夠在不須要大量標註數據的狀況下學習深度表徵。最大的特色就是提出了一種讓兩個深度網絡對抗訓練的方法。網絡
目前機器學習按照數據集是否有標籤能夠分爲三種,監督學習、半監督學習和無監督學習,發展最成熟,效果最好的目前仍是監督學習的方法,可是在數據集數量要求更多更大的狀況下,獲取標籤的成本也更加昂貴了,所以愈來愈多的研究人員都但願可以在無監督學習方面有更好的發展,而 GAN 的出現,一來它是不太須要不少標註數據,甚至能夠不須要標籤,二來它能夠作到不少事情,目前對它的應用包括圖像合成、圖像編輯、風格遷移、圖像超分辨率以及圖像轉換等。app
好比字體的轉換,在 zi2zi 這個項目中,給出了對中文文字的字體的變換,效果以下圖所示,GAN 能夠學習到不一樣字體,而後將其進行變換。機器學習
除了字體的學習,還有對圖片的轉換, pix2pix 就能夠作到,其結果以下圖所示,分割圖變成真實照片,從黑白圖變成彩色圖,從線條畫變成富含紋理、陰影和光澤的圖等等,這些都是這個 pix2pixGAN 實現的結果。ide
CycleGAN 則能夠作到風格遷移,其實現結果以下圖所示,真實照片變成印象畫,普通的馬和斑馬的互換,季節的變換等。函數
上述是 GAN 的一些應用例子,接下來會簡單介紹 GAN 的原理以及其優缺點,固然也還有爲啥等它提出兩年後纔開始有愈來愈多的 GAN 相關的論文發表。學習
GAN 的思想其實很是簡單,就是生成器網絡和判別器網絡的彼此博弈。測試
GAN 主要就是兩個網絡組成,生成器網絡(Generator)和判別器網絡(Discriminator),經過這兩個網絡的互相博弈,讓生成器網絡最終可以學習到輸入數據的分佈,這也就是 GAN 想達到的目的--學習輸入數據的分佈。其基本結構以下圖所示,從下圖能夠更好理解G 和 D 的功能,分別爲:
在訓練的過程當中,G 的目標是儘量生成足夠真實的數據去迷惑 D,而 D 就是要將 G 生成的圖片都辨別出來,這樣二者就是互相博弈,最終是要達到一個平衡,也就是納什均衡。
(如下優勢和缺點主要來自 Ian Goodfellow 在 Quora 上的回答,以及知乎上的回答)
Pg(G)
沒有顯式的表達GAN 的本質就是 G 和 D 互相博弈並最終達到一個納什平衡點,但這只是一個理想的狀況,正常狀況是容易出現一方強大另外一方弱小,而且一旦這個關係造成,而沒有及時找到方法平衡,那麼就會出現問題了。而梯度消失和模式奔潰其實就是這種狀況下的兩個結果,分別對應 D 和 G 是強大的一方的結果。
首先對於梯度消失的狀況是D 越好,G 的梯度消失越嚴重,由於 G 的梯度更新來自 D,而在訓練初始階段,G 的輸入是隨機生成的噪聲,確定不會生成很好的圖片,D 會很容易就判斷出來真假樣本,也就是 D 的訓練幾乎沒有損失,也就沒有有效的梯度信息回傳給 G 讓 G 去優化本身。這樣的現象叫作 gradient vanishing,梯度消失問題。
其次,對於模式奔潰(mode collapse)問題,主要就是 G 比較強,致使 D 不能很好區分出真實圖片和 G 生成的假圖片,而若是此時 G 其實還不能徹底生成足夠真實的圖片的時候,但 D 卻分辨不出來,而且給出了正確的評價,那麼 G 就會認爲這張圖片是正確的,接下來就繼續這麼輸出這張或者這些圖片,而後 D 仍是給出正確的評價,因而二者就是這麼相互欺騙,這樣 G 其實就只會輸出固定的一些圖片,致使的結果除了生成圖片不夠真實,還有就是多樣性不足的問題。
更詳細的解釋能夠參考 使人拍案叫絕的Wasserstein GAN,這篇文章更詳細解釋了原始 GAN 的問題,主要就是出如今 loss 函數上。
(0.2, 0.3, 0.1,0.2,0.15,0.05)
,那麼變爲 onehot是(0,1,0,0,0,0),若是softmax輸出是(0.2, 0.25, 0.2, 0.1,0.15,0.1 ),one-hot 仍然是(0, 1, 0, 0, 0, 0)
,因此對於生成器來講,G 輸出了不一樣的結果, 可是 D 給出了一樣的判別結果,並不能將梯度更新信息很好的傳遞到 G 中去,因此 D 最終輸出的判別沒有意義。對於鞍點,來自百度百科的解釋是:
鞍點(Saddle point)在微分方程中,沿着某一方向是穩定的,另外一條方向是不穩定的奇點,叫作鞍點。在泛函中,既不是極大值點也不是極小值點的臨界點,叫作鞍點。在矩陣中,一個數在所在行中是最大值,在所在列中是最小值,則被稱爲鞍點。在物理上要普遍一些,指在一個方向是極大值,另外一個方向是極小值的點。
鞍點和局部極小值點、局部極大值點的區別以下圖所示:
訓練的技巧主要來自Tips and tricks to make GANs work。
Tanh
激活函數在原始 GAN 論文中,損失函數 G 是要 , 但實際使用的時候是採用
,做者給出的緣由是前者會致使梯度消失問題。
但實際上,即使是做者提出的這種實際應用的損失函數也是存在問題,即模式奔潰的問題,在接下來提出的 GAN 相關的論文中,就有很多論文是針對這個問題進行改進的,如 WGAN 模型就提出一種新的損失函數。
參考文章:
注:配圖來自網絡和參考文章
以上就是本文的主要內容和總結,能夠留言給出你對本文的建議和見解。
同時也歡迎關注個人微信公衆號--機器學習與計算機視覺或者掃描下方的二維碼,和我分享你的建議和見解,指正文章中可能存在的錯誤,你們一塊兒交流,學習和進步!