InfoGAN
期望的是 input 的每一個維度都能表示輸出數據的某種特征。但實際改變輸入的一個特定維度取值,很難發現輸出數據隨之改變的規律。
InfoGAN 就是想解決這個問題。在 GAN 結構以外,把輸入 z 分成兩個部分 c 和 z' ,然后根據 generated data x 來預測給到 generator 的 c 是什么,這里的ae 做的事情是 code-x-code。同時還需要 discriminator 來配合,x 還必須要足夠像目標數據(要不 generator 直接把 c 復制過來就最容易讓 classifer 預測對)。
為了要讓 classifer 可以成功從 x 中預測原來的 c(能反推回去),那 generator 就要讓 c 的每一個維度都對 output 有一個明確的影響。就讓 z' 去表示那些無法解釋的特征。
VAE-GAN
可以看作用 GAN 來強化 VAE(讓VAE生成的數據更加realistic),也可以看作用 VAE 來強化 GAN(原本的 GAN 是隨機從 z 到 x,現在訓練的時候 generator 還要盡可能好地重構 z 原本的 x,從一開始就知道一個 z 它對應的 x 應該是什么樣,所以 VAE-GAN 訓練會穩定一些)
訓練流程。其中,原本的真實數據 x 、VAE 從 x 經過 encoder 得到 z~ 再經過 decoder 生成的 x~ (重構)、從 P_z 中采樣出來的 z 經過 generator 生成的 x^ (生成)。訓練 VAE 的目標是,encoder 讓后驗分布P_ z~ | x 盡可能服從高斯並且重構誤差越小越好;decoder 讓重構誤差越小越好並且生成數據越像真實數據越好;discriminator 給真實數據 x 高分給生成和重構低分。
BiGAN (ALI)
encoder 和 decoder 不直接相連,而是通過共同騙過 discriminator 來實現互逆映射。和ae比起來,理想上最佳的結果可能是一樣的,但是 BiGAN 的 ae 更能夠抓住語義上的信息(比如可以從一只鳥重構到另一只不同的鳥,但仍然還是鳥)
訓練過程:
Domain-adversarial Training
需要用 generator 從不同的 domain 抽出特征,可以同分布。
實現方法就是,兩個分類器既要讓 label 分類正確,也要讓 domain-label 分類正確;而特征抽取要讓 label 正確但 domain 分不出來