一日搞懂 GAN by 李宏毅 — 不動腦的筆記

禮拜日有幸能上李宏毅老師的 Generative Adversarial Network (GAN) 課程(由台灣資料科學年會舉辦)

在這裡列一些零碎筆記和給自己看的心得,不一定是李老師的本意或措詞,有些是自己尚未經過驗證的詮釋和聯想。這也不是涵蓋投影片的大綱(那看投影片就夠了),單純只是記自己想記的。

Why GAN? 為何而戰?

  • Structure Learning: output 不單純只是類別或數字 (classification/regression),而可能是圖片、句子、decision making / control…
  • 李老師認為 GAN 可能是另一種領悟 structured learning 的方法:一個突破,一張門票。
  • GAN 不光只是「產生資料」,更有甚者是一種「瞭解事物分布」的方法
(從 1:20:23 開始)
  • 其中一個例子是傳統 text-to-image 可能會產生模糊的影像。但是如果用 Conditional GAN 可以產生比較現實的圖片(「瞭解事物分布」):投影片 page 160

“Bottom-up” Generator + “Top-down” Discriminator

如果只用 generator 產生資料呢?

  • 例如 Auto-encoder,或 Variance auto-encoder(補滿「沒看過」的空洞)
  • 產生出來的東西可能不對勁,不現實:average of mixtures. 只是為了錯誤最小化而不一定在某個 distribution 上

如果只用 discriminator 產生資料呢?

  • 只有真理資料可用,沒有 negative data

Generator + Discriminator

  • 有「大局觀」的產生器

Improving GAN

  • discriminator 如果訓練得太好,generator update (via gradient ascent) 可能反而動不了 — 掌控 discriminator 的「火候」
  • Generator (which is a function) 最終的目的是長成 data distribution 的樣子。而不同的 discriminator 代表 data and generator distribution 的 divergence measure。不同的 divergence measure 則有不同特性。
    例如 Vanilla GAN 和 JS divergence 有關,而 JS divergence 只要在兩個機率分布不重疊的時候都是定值:當這個情況發生時,discriminator 就無法分辨 generator 的好或壞,無法「鼓勵」generator in the minimax game。(See also f-GAN
  • Generator & discriminator 可以多個,甚至可以 paired 和交換(悟空換老師學各種東西 是這篇嗎 XD),以及 Ensemble 求多樣性(投影片 page 217)

「素養」from GAN?

一開始接觸 deep learning 的時候覺得有些概念很震撼而關鍵,可是又好像很顯然,是有在做 NN 的人都有的素養,例如 weight/parameter sharing, layer reuse as features 等等。這次課程感覺也聽到了一兩個,但我還無法內化在未來的場合活用,只好先記下來在說。

auto-encoder (in EBGAN)

EBGAN 用 auto-encoder 做 discriminator。所以這表示 auto-encoder 不光可以拿來降維,也可以拿來做 clustering / classification ? 把 auto-encoder 當做 PCA 想的話可能是這樣沒錯?

encode / decode 互為 inverse

投影片 “Connecting Code and Attribute” (page 151),原本我們只有 code-to-image 的 generator,為了要有反過來的 image-to-code(which 為了要看有某 attribute 的圖片的 code 分布)(which 為了要 embed attribute… word2vec anyone?),所以在 generator 前面接一個 image-to-code encoder 把整件事當成一個 auto-encoder,i.e. an identity function。

Q & A

MNIST classifier 宣稱的 “1” 不見得是真的 “1”。GAN 可以幫忙嗎

(問題靈感來自 this and this)

兩種可能的方法:

  1. 把 discriminator 的 weight 當做 classifier 的 initial weight
  2. Train GAN: 不過原本分辨 real or fake,現在變成分辨 0, 1, …, 9 or fake

GAN 可以用在擴充 training data (for supervised learning) 嗎?

如果 data generation 的資料來源僅從真理資料來,沒有額外資訊的話那不一定可行。但如果有額外資訊的話可能可以(See CVPR best paper from Apple?)

怎麼判斷 GAN 產生的東西好或不好?

用人工(huh?),或是用公認好的 classifier 來辨別產生出來的東西(例如 Inception for images)

額外閱讀?

  • RL = GAN ??
    1. “RNN generation”, “reinforcement learning”, “sequence GAN” and “policy gradient”
    2. “actor-critic” and GAN (actor as gen. and critic as disc.)
  • Deepstyle” vs. cycle GAN (or disco GAN)?
  • Energy-based model 到底是什麼?在課程斷斷續續聽到,在 EBGAN paper 也看到

Resources

Misc

  • t-SNE: 適合視覺化的降維方法
  • 手機變臉 app?
  • 「今天頭髮想怎麼剪啊?」
One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.