ML_2021_6-1 生成式對抗網路(一) - 基本概念介紹
- 到目前為止的network都是一個function
- 這次則是把network當作generator使用
- 現在的network會加入一個new variable z,現在network就有兩筆輸入了
- z由某個simple distribution生成(distribution必須夠簡單 ex. uniform)
- 初代GAN
Why 需要輸出是一個分布
- 以video prediction「小精靈」為例說明
- 給定previous frames,輸出預測下一個frame會出現的畫面
- 但是在類似畫面下,有時候小精靈往左轉,有時候他往右轉,導致分裂(機器選擇兩面討好,這樣對兩個case的loss最小)
-> 讓機器的輸出不再單一,而是一個機率性的分佈
在機器的輸出需要創造性的時候(同一輸入可能有多種輸出),就會需要distribution
- ex. 繪圖、寫文章、對話
Generative Adversarial Network(GAN)
Anime face ganeration
- 先把x輸入拿掉,並假設z輸入是normal distribution
- 其實二次元人物的臉(圖片)就只是一個高維向量
- 輸入的distribution複雜性其實影響不大,因generator會想辦法把它變複雜
Discriminator
- 在GAN中會有這樣一個神經網路,用於判別輸出的東西是否真實
- 輸入是產生的圖片,而輸出則是一種純量[0.1]
- 可用CNN、transformer…等都可以
Basic Idea of GAN
示意圖:
就像物競天擇的演化一樣,discriminator會去除掉得分低的GAN成品,而GAN成品就會「天擇」成discriminator比較能接受的情況
但是discriminator也會進化,讓GAN必須再繼續進行進化
discriminator與generator通常互相視為敵人
GAN版示意圖(毛圖注意)
Algorithm
Init gen and discriminator
固定住Generator (G),輸入一陀random sampled vector,吐出成品,更新discriminator (D)
- 拿一些「ground truth」 (ex. 真正的二次元人物),互相比較相似度,並且更新D
- 對D來說這是一個分類問題,或是regression問題 (正確圖片標1,錯的標0),總之就是看個人想怎麼做
固定D,更新G,G要練習把D的acc升到最高(去欺騙D)
- 把兩個neural network接起來,就會變成「輸入是一個向量,而輸出會是一個分數」,所以現在情況等同於maximize score (gradient ascent)
- 當然固定D,所以「評分系統」不可變動
- 把兩個neural network接起來,就會變成「輸入是一個向量,而輸出會是一個分數」,所以現在情況等同於maximize score (gradient ascent)
LOOP,反覆訓練G、D
現代GAN
GAN可以產生沒看過的人臉,做一些內插
下一堂講解theory behind GAN