教電腦畫畫:初心者的生成式對抗網路(GAN)入門筆記(TensorFlow + Python3)

Yi-Hsiang Kao
14 min readJul 18, 2017
計算機繪畫教室

聽來真是炫炮。

其實距離聽到生成式對抗網路(翻成中文雖然感覺很潮但真的拗口,以下簡稱GAN,Generative Adversarial Network)這個名詞也好一陣子了:第一次看到這個字是去年G社發的一篇論文;內容大致上是在說他們利用GAN這一種機器學習的方法讓計算機領域最著名的兩個人物Alice和Bob在一連串加解密的過程中發展出自己的加密法。單看這句話,可以說是集合了當今全民AI時代最風行的各個buzzword,什麼嗎訊冷凝,低普冷凝,人工智慧,機器發明,無怪乎當時那篇文章一發表也佔據了很多科技新聞的版面……啊離題了,有興趣的可以參考一下當時的報導

總之GAN的概念新歸新,不過自己一直沒有比較系統地去了解它背後的機制和原理。恰好前先時候看到了O’Reilly上推出的初心者教學,花不了多少時間,就一步一步照著做完了,順便把過程筆記一下。

GAN基本結構

Resource: https://github.com/jonbruner/generative-adversarial-networks/blob/master/gan-notebook.ipynb

首先需要大致瞭解GAN的運作模式:這裡面有兩個需要被訓練的model,一個是Discriminator network,另一個是Generator network;我們姑且稱之為偵探和工匠(腦海中第一個浮現的名詞,爬了一下其他文也有人稱畫家與鑑賞家):我們現在手上有真的data,工匠要做的事就是偽造出假的data,而偵探則是要分辨現在給他的data是真的還是假的,並且會給出一個回饋。工匠根據這個回饋來「訓練」他現在的工藝,也就是調整model的parameter;一旦工匠的工藝成熟到偵探分辨不出來誰真誰假,就可以說我們訓練出了一個能夠模擬真正data分布的model。

嘴砲那麼多,這中間疑點還是重重啊,回饋怎麼給?真假參數如何設定?偵探跟直接用loss function作回饋的區別在哪?直接看程式。

題目設定&環境

這次Tutorial設定的task是MNIST手寫辨識資料集,採用的神經網路framework是TensorFlow(1.2),語言是Python3.6。

首先我們把該資料集抓下來,TensorFlow上有包好好的指令集讓大家使用,連自己讀檔都省了,佛心啊。

--

--