Generative Adversarial Network

Maximum Likelihood Estimation

  • Given a data distribution
  • We have a distribution
    • We want to find such that close to
  • Sample from
  • We can compute
  • Likelihood of generating the samples
  • Find maximize the likelihood

於是乎

  • :從 資料中 sample 出一些 x,x被 產生出來的 log likelihood
  • :(我認為是)當 x 服從 data 的機率分布時, 產生 x 的 log likelihood

  • 總之任務是變成了 minimize 兩個機率分布的 KL divergence

  • :從 network 裡面 sample 出 x 的機率
  • :每個 z 出現的機率,若G(z)是NN則是每個 x 出現的機率?
  • :每個 z 產生出的 G(z) 若和 x 相同,則 = 1,否則 = 0

問題是,likelihood 太難計算,因為 G(z) 非常複雜,要求出 x 的機率會很困難。那麼在無法知道 likelihood 的情況下,如何調整 ,使得 G(z) 的分布會和 data 的分布最接近呢? 這就是 GAN 的貢獻。

Basic Idea of GAN

接下來解釋 的意義 圖中橫軸是D,縱軸是V(G,D)

  • 給定G和D,則 是座標中的紅點(曲線最高處)
    • 而且若 V定義為 ,則 V(G,D)可以視為 Generator 和 data 之間的某種 divergence
    • 我認為就是,D要最大化D所計算出的 generator 和 data 之間的 divergence,G要最小化 D所得到的 divergence
  • 假設G只有圖中三種,則 會選擇 ,因為紅點是三者中最低的

總之最好的 D* 想要最大化 也可以說是最大化

總之 最好的 D,給定一筆資料 x 時, 這個式子就是在衡量 G 和 data 的某種 difference, 接下來說明 為什麼是在衡量 G和data的 difference呢

  • 期望值可以視為積分
  • 左式的 上下同乘 1/2,然後將上方的1/2提出來,會是
    • 右式同理

於是公式就成了下面這樣

小結

兩個 distribution 若完全沒有任何交集,則 JS divergence = log 2,若完全一模一樣,則JS divergence = 0,也就是說 最大值為0,最小值為 -2 log2

最好的 G 可以讓 最小,此時

Algorithm

  • G 不能 update 太多,因為這樣對該 Generator 來說 D* 會變很多,就不能保証新的 D 仍然是

定義 G的loss:

然後用 gradient descent 解 就出來了 耶結束了~~~(不是

In practice

  • 是用來逼近 V 的。 此外,

Maximize

也可以視為 Minimize

也就是 minimize cross entropy,亦即我們只要 train 一個 binary classifier 來分辨 G 和 data

  • 在訓練 D 時,要訓練多次,因為要找到 maximum
    • 但 Ian Goodfellow 在 tutorial 說,他每個 iteration 訓練 D 也習慣只訓練一次
  • 然而可能只找到 local optima,也就是說只能找到 的 lower bound
  • 訓練 G 時,只訓練一次,因為之前說過,G不能差太多
  • 訓練 G 時,要 minimize ,但是左邊那一項和G無關,因此可以省略

承前面所述,理論上,G 應該要 minimize ,然而當D(G(z)) 很小的時候(即 G產生的樣本騙不過D),此時梯度是很小的,因此訓練會變很慢。

解法是,將 objective function 改成

  • 一方面剛開始的訓練速度會變快,因梯度較大
  • 另一方面,實作上的好處是,在這樣更新我們的 時,等同於把 所產生的資料,當作是 discriminative 的 positive 的 example (???為啥)

這邊很玄哪 之後再看一次

因為D計算的是JSD,然而當兩個 distribution 沒有交集時,JSD都是 log2,因此G會沒有動力逼近 data distribution

一個解法是對 input data 或 label 增加 noise

Mode Collapse

本來 Ian Goodfellow 以為發生 mode collapse 的原因是像下面這樣: Ian Goodfellow 認為:如果今天 minimize 的是 KL divergence,則比較不容易發生 mode collapse,因為如果 可以產生 x 的地方, 不能產生 x 的話(即 ),則KL Divergence 會無窮大,因此在 minimize KL divergence 時,會將 盡量涵蓋住所有 的分布。 但是如果要 minimize 的是 Reverse KL divergence 的話,如果 能產生 x 但是 產生x的機率為0,則 reverse KL divergence 會是無窮大。那想 minimize 的話就會造成 固守他找到的distribution,不敢去拓展新的distribution。

然而,我們如果直接 minimize KL divergence (藉由自己設定),仍然會出現 mode collapse 的問題。

So many GANs

Conditional GAN

例如我們想 input text , output image 幹嘛不直接用NN做 supervised learning 就好了呢? 一般的 supervised learning 只能對 data point 建模,因此 input "train",他會 output 一張圖來 minimize 和所有火車圖片的誤差,那就會產生很模糊的圖片。

(圖)

  • GAN 和 NN 不一樣的是,GAN 可以學到資料的分布
  • 然而做 conditional generation時,若 input c (類別) & z (noise),有時候GAN也會無視z,直接根據c產生data,要解決這個問題可以將架構改成,不 input z 了,直接做dropout,這樣也可以有 random distribution 的效果。
  • conditional GAN 的 discriminator 是 輸入c和x,輸出結果,positive 的資料是:正確的c和x對應, negative 的資料是:正確的c和generated data對應,以及不正確的c和真實資料對應;而 generator 想做的事情是:希望 正確的c和generatored資料的對應可以騙過 discriminator。

results matching ""

    No results matching ""