歡迎大家來到《知識星球》專欄,這裡是網路結構1000變小專題,GAN是當前深度學習領域裡最火熱的技術之一,從這個十月開始,我們星球就開始更新GAN相關的內容了,理論和實踐結合噢,至少100期以上!先上三期拋磚引玉吧!
作者&編輯 | 言有三
1 DCGANDCGAN第一個全卷積GAN,麻雀雖小,五臟俱全,最適合新人實踐。
DCGAN是第一個使用全卷積網路做資料生成的GAN,生成器和判別器都採用了4層的網路結構。
生成器網路結構如上圖所示,輸入為1×100的向量,然後經過一個全連線層學習,reshape為4×4×1024的張量,再經過4個上取樣的反捲積網路,生成64×64的圖,各層的配置如下:
判別器輸入64×64大小的圖,經過4次卷積,解析度降低為4×4的大小,每一個卷積層的配置如下:
判別器和分類器的損失函式都採用了sigmoid_cross_entropy_with_logits,即sigmoid分類損失。
下面我們採用開源專案進行實踐,GitHub地址如下:https://github.com/carpedm20/DCGAN-tensorflow/。
由於MNIST任務作者已經做過,我們來完成一個新的任務,生成嘴部表情,樣本如下:
下圖分別是判別器和生成器損失圖:
由於生成對抗網路的判別器和生成器是交替訓練相互對抗,所以它們各自的損失曲線不可能像通常的影象任務一樣一直下降直到很低的水平,而是有一個先下降再上升的過程。
對於判別器來說,剛開始沒有學習,因此效能很差,隨著訓練進行,判別器的損失降低。但是因為生成器的效能在不斷提升,所以一段時間之後,判別器的損失可能又會增加,不過在這個實驗中不明顯。
對於生成器來說,剛開始沒有學習,效能很差,隨著訓練進行,效能越來越好,在本實驗中,生成器損失下降到一定程度後又增加了,說明繼續迭代無法再改善效能。
總的來說,兩者相互對抗,直到達到一個較好的平衡,但是光從損失曲線本身,我們仍然難以分辨出模型的效能好壞,因此還要看真正生成的樣本。
從左到右分別是第2,10,50,100個epoch的結果。從上圖結果來看,隨著訓練的進行,逐漸生成了許多有意義且非常逼真的樣本。不過最終生成的影象仍然有一部分效果很差,這是因為DCGAN本身模型效能所限,後續可以使用更好的模型進行改進。
DCGAN的原始論文中總結了很多的技巧,但是隨著技術的發展,其中的一些技巧不再必要或者通用,因此這裡我們先不總結,以後再回過頭來一起看。
DCGAN模型非常淺,原理簡單,生成解析度低,所以簡單的任務仍然不能完美地完成,後面會有更多模型從各個方向來進行改進。
參考文獻
[1] Radford A, Metz L, Chintala S. Unsupervised representation learning with deep convolutional generative adversarial networks[J]. arXiv preprint arXiv:1511.06434, 2015.
2 CGAN條件GAN的誕生,才是GAN真正大展拳腳的開始,不管往後的變種多麼牛,萬變不離其宗都是CGAN。
CGAN
標準的GAN如DCGAN等並不能控制生成的圖片的效果,條件GAN(CGAN)則使用了條件控制變數作為輸入,是幾乎後續所有效能強大的GAN的基礎。
網路結構如上,其中的y就是條件變數。對於生成器來說,輸入包括z和y,兩者會進行拼接後作為輸入。對於判別器來說,輸入包括了x和y,兩者會進行拼接後作為輸入,當然為了和z以及x進行拼接,y需要做一些維度變換,即reshape操作。
相應的,損失函式也略有不同。
可以看到其實就是加入了條件,網路結構本身和損失函式的表示式本身沒有變化。
因此,我們同樣使用之前的DCGAN結構和開源專案,https://github.com/carpedm20/DCGAN-tensorflow/。
對MNIST資料集進行實驗,下圖每一行表示一類。
可以看到這時候可以精確地對需要生成的類別進行控制,這就是CGAN的初體驗,條件GAN的出現使得基於GAN的影象編輯,影象風格化等任務得到了長足的發展,成為了非常流行的一類GAN的模型結構。
參考文獻
[1] Mirza M, Osindero S. Conditional generative adversarial nets[J]. arXiv preprint arXiv:1411.1784, 2014.
3 LAPGAN多尺度技術是計算機視覺裡的核心技術,GAN也不會例外,LAPGAN作為鼻祖,自然是最適合拿來學習的。
DCGAN為代表的網路生成的圖片解析度太低,收斂過程容易不穩定,LAPGAN是一個級連的結構,可以從粗到精生成更高解析度的影象。
DCGAN生成的圖片解析度太低,不超過100×100,難以一次性學習到生成高解析度的樣本,收斂過程容易不穩定。
基於此問題,金字塔GAN結構被提出。它參考影象領域裡面的金字塔結構由粗到精一步一步生成影象,並新增殘差進行學習。
從上圖可以看到從低解析度z3開始,逐級提升,最終生成I0,這是一個金字塔形狀的結構。
我們仔細看其中一個block的原理圖如下:
I0是64*64圖,I1是I0下采樣的32*32圖,l0是I1上取樣的結果,同時被用於產生真實與模擬的樣本。判別器D0的輸入包括兩個殘差和I0,兩個殘差分別是真實圖與l0以及生成圖與l0的殘差。因此生成器用於生成殘差,判別器用於判別殘差。
這樣的結構有幾個好處:
(1) 針對殘差的逼近和學習相對容易,減少了每一次 GAN 需要學習的內容,也就從而增大了 GAN 的學習能力。
(2) 逐級獨立訓練提高了網路簡單記憶輸入樣本的難度,許多高效能的深度網路都面臨著這樣的問題。
使用開源專案,https://github.com/kozistr/Awesome-GANs/tree/master/LAPGAN,結果如下,包括3個判別器和生成器的損失曲線以及最終的生成結果。
原始論文中的LAPGAN雖然仍然只能生成解析度較小的圖,但是這樣的級連結構對後面的Progressive GAN等結構有很大的借鑑意義。
參考文獻
[1] Denton E L, Chintala S, Fergus R. Deep generative image models using a laplacian pyramid of adversarial networks[C]//Advances in neural information processing systems. 2015: 1486-1494.
以上所有內容
來日方長
不見不散
更多精彩
每日更新