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

  1. Init gen and discriminator

  2. 固定住Generator (G),輸入一陀random sampled vector,吐出成品,更新discriminator (D)

    • 拿一些「ground truth」 (ex. 真正的二次元人物),互相比較相似度,並且更新D
    • 對D來說這是一個分類問題,或是regression問題 (正確圖片標1,錯的標0),總之就是看個人想怎麼做
  3. 固定D,更新G,G要練習把D的acc升到最高(去欺騙D)

    • 把兩個neural network接起來,就會變成「輸入是一個向量,而輸出會是一個分數」,所以現在情況等同於maximize score (gradient ascent)
         - 當然固定D,所以「評分系統」不可變動
  4. LOOP,反覆訓練G、D


現代GAN