深度學習Paper系列(03):Generative Adversarial Networks

--

Hello 大家好!前陣子忙研究所計畫、所以深度學習的系列一直沒有更新,現在碩士論文告一個段落了就來更新一下吧!

還是老樣子因為這個系列有點像是想寫什麼就寫什麼比較隨性,所以請多多見諒啦。

最近生程式AI像ChatGPT、BARD、MidJourney出現真的是轟動全世界,而今天要講的這個Generative Adversarial Networks,簡稱GAN其也是屬於生成式AI的演算法架構之一。不過相信有在follow AI趨勢的都應該知道GAN差不多到2019就被玩到爛了,被後來出現的Diffussion model給打趴,不過其實GAN在很多應用場景的表現其實還是比Diffussion model來得好,還是有被持續被應用。

歷史和起源

GAN中文翻成生成對抗網絡,其是由大神Ian J. Goodfellow和他的圖靈獎老師Yoshua Bengio所發表的,論文名稱叫做

Generative Adversarial Nets

看看這種革命性的論文,往往都是標題簡單。

而這篇論文是在2014發表在NeurIPS上,相信大部分的人也都知道Goodfellow這位大神,他寫了一本「Deep Learning」堪稱為深度學習聖經。

另外這邊也講一個八卦,其實GAN的雛型和基本想法,是另一位大神Jurgen Schmidhuber (發明LSTM) 大概在1991年所提出的,當時他提出的paper名稱叫Learning factorial codes by predictability minimization。據說當天Goodfellow在NeurIPS上發表GAN的時候,Jurgen Schmidhuber也在場,雙方Q&A時間一直爭論誰才是原創,後來Jurgen Schmidhuber還氣到寫一篇paper

Generative Adversarial Networks are Special Cases of Artificial Curiosity (1990) and also Closely Related to Predictability Minimization (1991)

講說GAN根本和他之前想的方法一樣。

不過這不就是科技發展的過程嗎?往往這些出名的人並不是最先提出概念想法的,而他們會出名其實都只是因為他們的work讓大家都看懂、並讓大家都學會了嗎?這就跟ChatGPT出來,Yann Lecun(另一位圖靈講得主)每天在Twitter上嘴砲,ChatGPT根本沒什麼,裡面很多方法都是我提出的其實還蠻像的。

簡單介紹

好那麼GAN到底怎麼運作的呢?實際上GAN是由兩個神經網絡所構成的,一個叫做Generator(生成器)另一個叫做Discriminator(判別器)。

Generator做的事情就是想辦法把一堆雜訊變成看起來很逼真的照片,而Discriminator做的事情就是想辦法去判別說哪個是真的照片哪個是從Generator生成的假照片。所以在訓練的過程中,Generator生成的照片會越來越逼真想辦法騙過Discriminator,而Discriminator也會想盡辦法去學習辨識真的和假的照片。而這樣兩個神經網絡對抗的過程,我們叫做Adversarial Learning。

所以我們的最終目標就是讓Discriminator完全無法區別哪個是真的照片哪個是假的照片。

理論

好那麼我們竟然已經知道GAN的基本架構和原理,那我們接下來就是要用比較嚴謹的方式來講述GAN到底是怎麼學習的。概念上就是如果我們想要生成一堆假的人的照片,那勢必一定要先準備一堆人臉照片作為訓練資料,如果今天想要生成很多假的狗的照片,那也一定要先準備一堆狗的照片。

那問題來了,資料準備好了,那接下來呢?我們的神經網絡到底要學什麼?實際上我們的神經網絡的學習目標,

就是學習如何近似我們訓練資料的分布

一旦學好的話,因為我們神經經網絡學出來的分布和真的資料分布很接近,那我們就可以很輕鬆的從訓練出來的分布裡面隨機挑選一個點,這個點也勢必和真實資料很接近。

這邊我們定義

真實資料的分布為p_data

神經網絡學出來的分布為p_g

雜訊的分布為p_z

今天我們想做的事情就是,從雜訊分布p_z隨機取樣一個雜訊z,然後我們的Generator G,可以把雜訊z轉換成假照片G(z),而這邊我們相對應的Discriminator可以表示為D(x)。

有些人看到這邊會有點疑惑,為什麼這些分布和方程式後面的括號是接(x)和(z),其實很簡單,z就是雜訊分布上的點,x就是照片分布上的點。所以我們的Discriminator就是要去分辨真照片x~p_data(x)和假照片G(z), z~p(z)。

綜合上面所提到的這些我們就可以把它寫成下面這個最佳化方程式

以Discriminator的角度來看,等於後面的方程式其實就是一個標準的分類問題。我們希望最大化後面的期望值。以理想狀態來說,我們今天有一個完美的Discriminator,那D(x) = 1,D(G(z)) = 0,也就是1代表分類為真照片,0代表分類為假照片。而不完美的D通常輸出一定是介於0~1之間,取log之後就會是負數,所以最佳狀況就是等於後面的方程式加總等於0。

以Generator的角度,我們倒是希望能夠最小化等於後面的方程式,為什麼呢,因為我們的Generator就是希望能夠騙過Discriminator,也就是D(G(z)) = 1。

所以整個演算法流程如下

我們sample m個真實照片和m個雜訊z,並把這m個雜訊透過G(z)轉換成m個假照片。接下來我們先把Generator的參數固定住,利用上述方程式計算梯度來更新Discriminator的參數。而這樣的步驟重複k次。

接下來我們一樣sample 另外m個雜訊,並透過G(z)轉換成m個假照片。接下來我們先把Discriminator的參數固定住,利用上述方程式計算梯度來更新Generator的參數。

大家可能會想為啥Discriminator要更新k次,Generator一次就好,這邊的話作者也沒有特別解釋,只說這就是Hyperparameter。不過在這邊作者倒是有討論到,因為Generator一開始產生的圖片一定很醜,所以Discriminator一開始也一定可以輕鬆就學會分辨真和假照片,這樣就會導致說更新Generator的梯度會非常小。

所以作者說比起最小化log(1-D(G(z))),不如我們來最大化log(D(G(z))),因為你想想看D(G(z))很接近0的時候,log(1-D(G(z)))也會很接近0,使Generator梯度很小,但是log(D(G(z)))的話,我們可以得到一個很大的負數,如此一來就可以比較有效的更新Generator參數。

不過這邊大家可能就會覺得很矛盾,阿Generator想要最小化、Discriminator想要最大化,這樣真的找得到最佳解p_g = p_data,訓練分布等於真實分布嗎?

這邊我們先以Discriminator角度來看,假使我們今天在更新Discriminator,並把Generator參數固定住,那我們希望:

這邊我覺得是本篇最抽象的地方我們先看到下面這張圖

黑色虛線代表真實數據的分布p_data,綠色的線代表G學出來的分布p_g,藍色虛線代表D的輸出值。而今天我們的G就是把z映射到x上。

黑色虛線高於綠線代表,從這邊隨便挑一個點比較接近真實照片,所以這裡當然D的數值越接近1,而綠線高於黑色虛線的地方代表,從這個地方隨便挑一個點比較接近假照片,所以D在這邊數值接近0。而如果在黑線和綠線很接近的地方,代表我們的G在這個地方學得很好,所以D在這個地方的數值會比較接近1/2。

所以我們看到上面的方程式中

描述的就是這件事情。那我們有提到今天G學得好的地方,D的數值為1/2,這不就代表只有在p_g = p_data時才會發生這種事嗎!

所以我們改寫C(G)方程式,可以得到

JSD就是所謂的Jensen–Shannon divergence,這邊可以把它想像是計算p_data和p_g分布的差異,數值只會大於等於0,所以C(G)最小值為-log(4),也就是說p_g = p_data才會使上面方程式為最佳解。

所以依照上面的流程,直白地說,其實就是最後面我們的Generator產生的照片太逼真了,Discriminator怎麼都分辨不出來,使得D(x) = 0.5,D(G(z))=0.5。

結語

其實GAN它的優點也是他的缺點,就是他繞過了學Representation這個概念,GAN的學習目標就是直接想辦法生出一堆看起來很像真實照片的假照片,所以GAN的學習過程屬於隱式的,也就是說他沒有學到真正的Representation,所以說他很難和文字、語音去做整合,但是也因為這樣GAN的訓練、推論速度比其他生成模型,如Diffusion model、VAE、Flow來的快非常多。

另外一點就是其實很多學者並不是很喜歡GAN的架構,可以從上面看到作者用了很多技巧讓訓練變得更穩定,但是並沒有特別解釋為什麼要這樣做,另外就是GAN本身數學推導上不是那麼好看,有時候看起來甚至很雜亂,相對來說VAE的架構就來得清爽和嚴謹許多。

不過GAN在那個時候也算是開啟了AI新紀元,各種酷炫的變種GAN和應用場景隨後爆發式的展開,不過也因為這樣衍伸了很多倫理道德問題,像是著名的DeepFake AI換臉事件,就引起不小風波。

Reference:

[1] Goodfellow, I., Pouget-Abadie, J., Mirza, M., Xu, B., Warde-Farley, D., Ozair, S., … & Bengio, Y. (2020). Generative adversarial networks. Communications of the ACM, 63(11), 139–144.

--

--

劉智皓 (Chih-Hao Liu)
劉智皓 (Chih-Hao Liu)

Written by 劉智皓 (Chih-Hao Liu)

豬屎屋AI RD,熱愛AI研究、LLM/SD模型、RAG應用、CUDA/HIP加速運算、訓練推論加速,同時也是5G技術愛好者,研讀過3GPP/ETSI/O-RAN Spec和O-RAN/ONAP/OAI開源軟體。

No responses yet