到目前為止,我們主要討論的目標都是找到一個可以預測答案的方程式,而不是生成獨一無二的東西。那生成式對抗網路的創造,就是為了這個目標而生。
Generator不同的點在於,輸入會額外加入一個機率分布simple Distribution Z,以產生一個隨機的輸出。
我們可以先從一個例子來了解,EX: 小精靈遊戲
假設要輸出一個小精靈遊戲的video prediction,如果我們的輸入同時有小精靈向左轉和向右轉的遊戲內容,那就有可能會發生到轉角處,小精靈分裂成兩隻的狀況,因為機器想兩面討好,但這樣的答案我們不能用 , 所以要加入一個Z的機率分佈,讓向左轉向右轉呈現出機率分佈,只產生一組答案。
假設z為random variable → 這樣向左轉或向右轉各1/2的機率
當我們的任務需要一點創造力時,需要每次的答案都不同時,就可以利用generator。
我們實際以生成一張二次元圖片為目標作為一個例子。
假設我們的simple distribution Z為normal distribution,那我們的目標就是要透過generator生成複雜的distribution與高維的向量(像是64x64x3的向量)。
*Low-dim vector與 high-dim vector指的就是低維與高維的向量
那在GAN裡頭,除了generator之外,我們還要另外訓練Distriminator作為generator的監視者。負責判別從generator生成的二次元圖片是不是真的二次元圖片。
此時,generator與discriminator彼此就會互相砥礪。
generator的目標就是讓Discriminator判別不出來,Discriminator就是要想辦法判別那些是generator創造的。最後就能得到最好的Generator。
具體流程:
*generator訓練的過程與一般network無異,都是採用gradient Decent。
*在訓練的過程不一定只有一組generator或是discriminator,也有可能有好幾層的Generator與Discriminator。
那要如何判別我們training出來的Generator的好壞呢?
*Mode collapse是一種generator走偏門的現象,當generator發現discriminator的某個盲點,從此只產生固定的那幾張圖,藉此騙過discriminator的現象,就被稱為mode collapse。除此之外,還有另外一種現象稱為Mode dropping,指的是Generator在產出的圖片中,某些特徵都使用相同的,只為了讓Discriminator能夠判別過,像是人臉都一樣,這樣多樣性就很小。
最後在了解了unconditional Generation之後,我們就可以加入input X,變成conditional Generation。Input X就會變成我們生成圖片的條件,結合我們設定的簡單機率分布,生成圖片。
那目前大多使用的訓練方式,就是將GAN結合supervised learning的方式訓練,除了生成圖片外,也希望與我們的條件X越接近越好。
但在訓練過程中,如果有其中一方停下來,就會無法繼續訓練,這也導致GAN本身是非常難訓練的model。
除此之外,我們回過頭看,之前篇章聊到的Transformer中的Decoder其實也是一種Generator,可以算是GAN在sequence上的訓練。但同樣的,如果在訓練的過程中發現,Decoder輸出的distribution與實際圖片之間的差距很小,就很難使用gradient decent改善參數,那就會很難Train GAN。
為了解決這問題,就有人提出Pre-train的概念。這一部分就牽扯到的BERT與GPT的部分,等到下一篇,我們再來好好討論~
那前面我們訓練GAN的方式都是supervised learning,也就是有參考答案來比較。但如果我們完全沒有參考的output Y(unsupervised learning)的話呢?在這樣的情況下,Generator有可能只確保在Discriminator上拿到高分就好,那就可能導致Generator都只產生一樣的圖,或是用偏門的方式過關,這樣就達不到訓練的效果。
那解決的方式就是可以使用cycle GAN的方式training。
Cycle GAN 的原理就是除了原有的Generator1以外,我們還額外增加一個Generator2,用來將Generator1輸出的vector還原成原有的圖片Y。
接著我們將還原的圖片Y與原有的圖片X比較,目標是越接近越好。
額外增加的Generator2作為條件,就能限制Generator1往正確的訓練過程。
*不同的learning方式整理:
supervised: 一般來說我們需要有成對的X與Y,我們才能訓練Network。
semi-supervised: 我們有一堆X與一堆Y,有一些成對,有一些沒有成對。
unsupervised: 完全沒有成對的資料。
那以上就是GAN的知識整理,我們下一篇見~