給我五分鐘,你可以了解 GAN 概念。This article demonstrates the basic idea about GAN(Generative Adversarial Network)

Evans Tsai
Aug 13 · 12 min read

Overview

這篇是基於 2019/5/23 號回到政大數理資訊社分享的演講內容,同時將它寫成文章。

  1. GANs introduction
  2. How GANs works
  3. Application of GANs
  4. Conclusion
  5. Reference

Difficulty: ★ ☆ ☆ ☆ ☆

1. GANs introduction

GAN 的全名為 generative adversarial network,中文叫做生成式對抗網路,GAN 的變形有很多種,故他就加了 s 變成了 GANs。這篇文章主要在介紹最最最基本的 GAN 的原理。

deep learning 界的新寵兒

GAN 可說是 deep learning 界的新寵兒,在各個應用領域無論是文字,影像,還是音訊,都少不了 GAN 的身影。而各大頂級論文也都被 GAN 的更複雜架構給佔據了。原因是 GAN 可以說是一種新型態的網路架構,他藉由兩個網路互相拮抗而成,擁有更好的效果,聽不懂什麼是 ”互相拮抗”? 沒關係,後面我們會細細地把這句話講清楚 。

GAN 是屬於 deep generative models 的一類,以 unsupervised 的方法去試著學到 data 的 distribution,也在近幾年取得了很大的成功。Generative model 旨在嘗試著去學習 training data 的真實分佈,並去產生屬於這個 distribution 的新資料點(maybe 帶有一些variation)。常見的生成模型還有 VAE。VAE 嘗試去極大化 data log-likelihood 的 lower bound,跟 GAN 有些不同。

Yann LeCunn’s comments on GAN

深度學習的大神之一,過去為臉書AI研究院院長,於2016.07在知名論壇 quora 回覆說,他覺得最近的 deep learning 發展,讓他最感興趣的就是 GAN了,這個新的概念很有趣。而我想大家再多深入了解 GAN 之後,也會深深地同意他的說法。

2. How GANs works

首先,我們就來看看到底 GAN 是啥咪小東西好了。GAN的出現,大大改變了我們針對於神經網路的訓練,上面有說到 GAN 是由兩個網路互相拮抗而成的。我們這邊舉一個例子,我們可以先想像有一台很會製作人偶面孔的製偶師(G),還有一個專門分辨人偶做得好不好的檢驗師(D)。

製偶師的目標是製作出一個帥氣臉孔的人偶,儘管製偶師(G)雖然不知道世俗對於”帥”的定義是什麼,但是檢驗師(D),卻很瞭解什麼叫做有帥氣臉孔的人偶。因此在製偶師(G)一個一個製作出人偶,檢驗師(D)也針對每個人偶,給出評論: 「喔!這個蠻帥的」;「 喔,這個不行拉….」。如此的循環過程,製偶師(G)雖然一開始不知道什麼叫做帥氣,但逐漸的他對於”帥”的理解也會慢慢變成檢驗師(D)的形狀。

像如此的關係,其實就與 Game theory 裡的 minimax theorem 十分雷同。(GAN數值上的求解也就是在解 MiniMax 問題。)

那麼在這個示意圖中,我們想要製作一個帥氣的臉孔,G 負責產生圖片,D 則負責給予生出來的圖片分數。我們生出了一張金城武的頭像,D 自然而然會給予一個好的評論,因為我們的目標是製造一個帥氣的臉孔。但如果生出了一個 How 哥的頭像,D 則會給予一個不好的評價。

借how學長舉個例,拜託勿吉

再回到我們的架構裡頭,基本上在 GAN 裡頭,會有兩個神經網路,Generator (G) & Discriminator (D)

G 是一個 upsampling 的 Neural Network(NN),它的作用是,輸入一串 tensor 後,可以經過 NN 變成一串維度更高的 tensor (e.g., 輸入100*1的 tensor,輸出 256*256*3 的 tensor(RGB 影像)。)

D 則是一個 regressor,他會給予輸入進來的 tensor 一個連續的分數(或者離散的 0/1,端看模型設計。),根據 task 的目標,如果輸入進來的 tensor 越像你的目標的話,就給1分。假使 D 很明確的知道你輸入進來的 tensor 爛透了,那麼就給予0分。理論上,訓練到最後 D 輸出的結果會收斂到 0.5,代表著目前的 D 沒辦法去判斷這個筆進來的 tensor 到底是不是符合 task 的目標。

About Generator:

Generator 一開始只能生成一坨糊在一起的爛爛的圖片,但他會根據每次生成完丟入 Discriminator 的結果,慢慢的更新 Generator,那麼 Generator 就會有越來越好的生成品質。另外輸入進去給 Generator 的 random noise 其實都控制了圖片生成的某些元素,或許有些能夠解釋,有些則難以洞見。

Ref: http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS18.html

About Discriminator:

一樣以下圖為例,當一開始 G 出來的圖片很爛時,D 給的分數就會很低。再來如果生成的品質很高,讓 D 認為他與真實圖片的 distribution 很接近時,就會給予相對高的分數。

Ref: http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS18.html

Adversarial Training

那 GAN 的訓練過程又是如何呢?為了先給大家一個基本的概念。我們再請 How 哥出來與我們講解一番!首先,我們要收集一批真實的圖片,以這個 GIF 的示意圖來說,目標為試著製造一個 HowHow的頭像。首先Generator Version 1 (G1),不會知道這個 Task 的目的,所以他生成了一批藍先生的圖片。想當然爾,這些都是錯的,不過沒關係,才剛開始訓練而已。這批藍先生的圖片會進入 Discriminator Version 1 (D1),D1相對的會給現在的 G1 不好的分數,畢竟他生出來的藍先生,而不是 How 先生。同時我們給了 real 的 How 先生,並給與很高的分數。由此 D & G 會分別根據 D 來計算 Loss 並更新 weights。接著進入 G2 & D2 階段,這次 G2 可以生成了疑似 howhow 的圖片,但仔細定睛一瞧,咦!怎麼是古人們+影分身的 howhow。OK這次的圖片可能的確有變好,但因為 D2 也變得更嚴格了,所以一樣給了很低的分數,同時我們一樣餵入真實的圖片並給他1分。再次計算 Loss ,計算 gradient 並且更新權重參數。就這樣接著不斷循環去分別更新 G& D。我們最後就會得到一個可以生成很棒的照片的 G!

簡單地看過了training的流程,現在就來看看實際上運作是怎麼運作的吧!

Training Discriminator

首先是 Discriminator,training D的時候,會把 G 鎖起來,鎖起來的意思就是 G 是固定的,更新參數時,並不會更新到 G。生成的圖片即是以目前的 G 去生成 data,這個生成的 data 的 ground truth 會給予0,real 的 data 會給予1的 ground truth。再由此 ground truth 去跟目前的 D 的 output 去計算 loss。接著藉由 BP 去更新權重,更新時會忽略掉 G 的影響,因為此階段為 D 的權重更新階段。

Training Generator

再來是 Generator ,在 training G 的時候會將 D 鎖起來。這次的 Task 的任務為,我要盡可能地讓 G 所生成的 fake data 騙過 D。意思就是將 fake data 輸入進 D 後得到的分數越高越好,這樣就表示此時我的 G 可以讓現在未進化的 D 認為 G 生的圖片的品質很好,很像真的,並給予很高的分數。接著 update 參數,讓 G 進化。如此一來,G就會持續的更新,試著生成更真實的圖片。

Algorithm of GAN

這邊我們就直接來看 GAN 的演算法。
首先,隨機從真實資料抽選 m 筆 data,也隨機產生 m 筆的 noise。將 noise 輸入 G 後,我們會得到 m 筆的 generated data。在 D 的 Learning 階段我們會看到 loss 的計算方式為下:

第一項,Xi 為真實資料,故丟進 D 之後,照理來說要獲得大的值。而後面那項 ,則是生成的 data,丟進 D 之後我們預期他要是一個很爛的數字,因此第二項就會越高越好。因此整體而言,我們會希望 D_loss 越高越好。

更新完 D 的參數後,我們接著訓練 G,G 的 loss function 跟 D 很像,首先我們先 random sample m 個 noise 出來,這個 noise sample 出來的值丟進 G 之後應該要越高越好,越高表示我的 G 越好。因此 Optimizer 的任務就是去maximize loss,並隨之更新參數。

3. Application of GANs

現在 GANs 的應用已經無所不在了。無論是影像,文字,亦或是聲音。

這陣子爆紅的 FaceApp,即有很大的機會在背後使用了 GAN 的技術去生成老化圖片。雖然不得而知他們是使用哪種 stat-of-the-art 的 生成網路去做生成,不過根據報導,他們的確是一間 AI 公司。從這我們就可以看到 GAN 有多大的能耐能夠讓整個世界為之瘋狂了!

ref: https://www.cw.com.tw/article/article.action?id=5096072

除了這個以外,我們還可以舉出許多 GAN 的應用,讓大家能夠對於 GAN 有更多的想像與理解。以下便舉了幾個比較著名的 GAN 種類,給大家參考!

Pix2Pix

https://arxiv.org/pdf/1611.07004.pdf

看看這些圖片,這些都是 Pix2Pix 生成的影像,pix2pix 便是使用了 GAN 的概念,只是他沒有跟著叫 xxxGAN。

  • 原始的 input 為一張街景的 segmentation map,經過 pix2pix 後生成真的街景
  • 原始的 input 為隨手的塗鴉照,經過 pix2pix 後產生一幢房子的照片。
  • 原始的 input 為黑白照片,經過 pix2pix 後為照片增添了色彩
  • 原始的 input 為 google 衛星圖,經過 pix2pix 之後即變成地圖了

以上就是 pix2pix 能夠做到的事情。如果得手邊的 project 有類似的影像 domain 互轉,不仿也是可以試試 pix2pix,只是它已經是 3 年前的技術了。現在或許有些更 STOA(State of the art) 的演算法可以使用了。諸如 Cycle GAN, StarGAN 都是類似的概念!但 pix2pix 確實為這樣 domain 轉換的先河。這邊有個 Demo 網頁,可以來大家來玩玩 pix2pix。

GauGAN

GauGAN: Changing Sketches into Photorealistic Masterpieces

在開始之前,我們不仿先看一下 demo video.

GAUGAN

這篇 2019/3 的論文,確確實實的讓 Nvidia 好好的火力展示了一番。看起來真的是很強大。你可以任意著色,便會生成超級真實的風景畫。相較於人臉圖通常有著固定的 pattern,我認為風景畫的生成會是更困難的 Task。而 GauGAN training 的條件也很嚴苛,需要非常好的硬體設備,但Nvidia真的是在賣 GPU 的 XD。想一想能有如此的火力展示,也是挺合理的。

Seq GAN

Seq GAN 專注於文字生成。 seq GAN 用了 RNN-based generator + CNN-based discriminator,並且使用了 MLE 去做 pre-train 並得到相當不錯的效果!再來使用 Monte-Carlo 來獲得 reward, 在經過 policy gradient 來指導 generator 做更好的生成! Seq GAN 這步導入 Reinforcement learning 算是當時十足的的創新點。成為了當時的文字生成領域的標竿。

seq GAN https://arxiv.org/abs/1609.05473

4. Conclusion

目前在 deep generative models 方面有很多侷限,相對於 supervised learning,做的還是沒有那麼好。不過聽到李宏毅老師的演講,老師說 GAN 做大的淺力是在 semi-supervised learning 身上,使用 GAN 的架構,我們可以只使用少量的 labeled data,但卻可以達到相同的準確率。並且在 structure learning 尚有特別好的效果。

5. Reference

Taiwan AI Academy

news, tech reviews and supplemental materials

Evans Tsai

Written by

Taiwan AI Academy

news, tech reviews and supplemental materials

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade