每日最新頭條.有趣資訊

經典GAN實戰教程:理解並運行自己的GAN生成手寫數字

新智元報導

來源:Medium

編輯:元子

【新智元導讀】本文從GAN的簡介、理解和評估GAN、運行自己的GAN3個方面,試圖讓讀者理解生成性對抗性網絡(GAN)研究和評估是如何開發的,然後實現用自己的GAN來生成手寫數字。偏實戰向,針對讀者為學生、開發者以及對動手操作GAN感興趣的讀者。

本文主要是以下3個部分:

了解什麽是GAN

理解和評估GAN

運行自己的GAN

希望通過本文,讀者能夠了解如何評估GAN,並最終能夠動手運行自己的GAN生成MNIST等手寫數字。

GAN的簡要介紹

自2014年Ian Goodfellow的發布“Generative Adversarial Networks”論文成立以來,GAN的進展申訴,應用場景也越來越廣泛。

就在三年前,GAN之父Ian Goodfellow認為GAN僅針對實值數據進行了定義。由於所有NLP都基於離散值,如單詞,字元或字節,因此沒有人真正知道如何將GAN應用於NLP。

然而現在GAN用於創建各種內容,包括圖像,視頻,音頻和文本。這些輸出可用作訓練其他模型的合成數據,或僅用於產生有趣的side項目,例如

https://thispersondoesnotexist.com/

https://thisairbnbdoesnotexist.com/

GAN是什麽?

GAN由一個生成網絡與一個判別網絡組成。

生成網絡從潛在空間(latent space)中隨機采樣作為輸入,其輸出結果需要盡量模仿訓練集中的真實樣本。判別網絡的輸入則為真實樣本或生成網絡的輸出,其目的是將生成網絡的輸出從真實樣本中盡可能分辨出來。而生成網絡則要盡可能地欺騙判別網絡。兩個網絡相互對抗、不斷調整參數,最終目的是使判別網絡無法判斷生成網絡的輸出結果是否真實。

一句話解釋:G要騙過A。

如果你需要對GAN有更深入的理解,推薦你學習以下課程:

Stanford CS231 Lecture 13?—?Generative Models

Style-based GANs

Understanding Generative Adversarial Networks

Introduction to Generative Adversarial Networks

Lillian Weng: From Gan to WGAN

Dive head first into advanced GANs: exploring self-attention and spectral norm

Guim Perarnau: Fantastic GANs and where to find them (Parts I & II)

理解和評估GAN

量化GAN的進度感覺上非常主觀,“這個生成的面部是否看起來足夠逼真?”、“這些生成的圖像是否足夠多樣化?”而且GAN的黑盒屬性使得我們並不清楚模型的哪些組件對學習過程和結果質量造成影響。

為此,MIT計算機科學與人工智能(CSAIL)實驗室的一個小組最近發表了一篇論文《GAN Dissection: Visualizing and Understanding Generative Adversarial Networks》,該論文介紹了一種可視化GAN,以及GAN units是如何像對象之間的相關性一樣,形成與圖像中對象的相關性。

論文提出使用基於分割的網絡剖析方法,允許對generator神經網絡的內部工作進行剖析和可視化。這步操作可以通過尋找一組GAN unit(稱為神經元)與輸出圖像中的概念(例如樹、天空、雲等)之間的協議來實現。因此,我們能夠識別出對某些物體(如建築物或雲)起作用的神經元。

將這種粒度級別放入神經元中,可以允許通過強製激活和去激活(消融)這些對象的相應unit,來編輯現有圖像(例如,添加或移除圖像中所示的樹)。

然而目前尚不清楚網絡是否能夠推斷場景中的對象,或者它是否只是記住這些對象。接近這個問題答案的一種方法,是試圖以不切實際的方式扭曲圖像。

也許MIT CSAIL的GAN Paint互動網絡演示中,最令人印象深刻的部分是該模型似乎能夠將這些編輯限制在“真實感”。例如試圖將草坪放在天空上,結果就會變成這樣:

即使我們激活相應的神經元,看起來GAN已經抑製了後續層中的信號。

可視化GAN的另一種有趣方式是可以進行潛在空間插值(記住,GAN通過從學習的潛在空間中采樣來生成新實例),這可能是查看生成的樣本之間過渡的平滑程度的有用方法。

這些可視化可以幫助我們理解GAN的內部表示,但是找到可量化的方法來理解GAN進度和輸出質量仍然是一個亟待解決的研究領域。

圖像質量和多樣性的兩個常用評估指標:Inception Score(IS)和Fréchet Inception Distance(FID):

Inception Score

Inception Score由Salimans等人提出,並在2016年發表論文《用於訓練GAN的改進技術》。

Inception Score基於一種啟發式方法,即當通過預先訓練的網絡(例如ImageNet上的Inception)傳遞時,現實樣本應該能夠被分類。 從技術上講,這意味著樣本應具有低熵softmax預測向量。

除了高可預測性(低熵)之外,Inception Score還基於所生成的樣本的多樣性來評估GAN(例如,生成的樣本的分布的高方差或熵)。

如果這兩個特徵都得到滿足,那麽應該有一個很大的Inception Score。結合這兩個標準的方法是評估樣本的條件標簽分布與所有樣本的邊際分布之間的Kullback-Leibler(KL)差異。

Fréchet Inception Distance

FID由Heusel等人在2017年提出。FID通過測量生成的圖像分布與真實分布之間的距離來估計真實感。

FID將一組生成的樣本嵌入由特定初始網絡層給出的特徵空間中。該嵌入層被視為連續的多元高斯,然後估計生成的數據和實際數據的均值和協方差。然後使用這兩個高斯之間的Fréchet距離(也被稱為 Wasserstein-2距離)來量化生成的樣本的質量。較低的FID對應於更相似的實際和生成的樣本。

值得注意的是,FID需要一個合適的樣本量才能產生良好的結果(建議的大小=50k樣本)。如果樣本太少,實際FID會被高估,並且估算值差異很大。

一般來說,研究人員對不同領域的評估指標采取不同的方法。對於文本GAN,Guy Tevet和他的團隊提出使用傳統的基於概率的語言模型度量來評估。

運行自己的GAN

本次練習,主要通過網站comet.ml來實現。Comet.ml允許數據科學家和開發人員輕鬆監視、比較和優化其機器學習模型。

該GAN模型將MNIST訓練數據和隨機噪聲作為輸入(具體為噪聲的隨機向量)來生成以下內容:

圖像(在這種情況下,手寫數字的圖像)。 最終,這些生成的圖像將類似於MNIST數據集的數據分布

discriminator對生成的圖像的預測

Generator和Discriminator模型一起形成對抗模型,對於這個例子,如果對抗模型將生成的圖像分類為所有輸入的實數,則generator將表現良好。

完整代碼請複製以下鏈接clone:

https://gist.github.com/ceceshao1/935ea6000c8509a28130d4c55b32fcd6

追蹤模型進度

可以使用Comet.ml跟蹤Generator和Discriminator模型的訓練進度。

在繪製discriminator和對抗模型的準確性和損失過程中,要跟蹤的最重要指標是:

鑒別者的損失(見右圖中的藍線) - dis_loss

對抗模型的準確性(見左圖中的藍線) - acc_adv

複製鏈接來查看此實驗的培訓進度:

https://www.comet.ml/ceceshao1/mnist-gan/cf310adacd724bf280323e2eef92d1cd/chart

我們還需要確認培訓過程實際上是否正在使用GPU,可以在Comet System Metrics選項卡中查看。

請注意到我們的for循環語句包括從測試向量報告圖像的代碼,部分原因是可以直觀地分析generator和discriminator模型在生成逼真的手寫數字方面的表現,並正確地將生成的數字分類為“真實”或“假”,分別。

複製以下鏈接來看看這些生成的結果!

https://www.comet.ml/ceceshao1/mnist-gan

可以看到Generator模型如何從這個模糊的灰色輸出(參見下面的0.png)開始,它看起來並不像我們期望的手寫數字。

隨著培訓的進行和我們模型的損失下降,生成的數字變得更加清晰。 查看生成的輸出:

500步後:

1000步後:

1500步後:

10000步以後,注意紅色框中的數字

完成訓練後海可以在Comet的圖形選項卡中查看我們報告的輸出作為視頻(只需按下播放按鈕!)。

為了完成最後的實驗步驟,確保運行了以下命令來查看有關模型和GPU使用情況的一些摘要統計信息:

模型迭代

模型可以更長時間地訓練以查看它如何影響性能,感興趣的話還可以嘗試使用幾個不同的參數進行迭代,比如:discriminator的優化器、學習率、dropout概率、batch大小等等。

可以通過Comet重新生成一個測試網址,這樣就可以對差異進行比較:

參考鏈接:

https://towardsdatascience.com/graduating-in-gans-going-from-understanding-generative-adversarial-networks-to-running-your-own-39804c283399

獲得更多的PTT最新消息
按讚加入粉絲團