天天看點

ICLR 2017 | GAN Missing Modes 和 GAN

ICLR 2017 | GAN Missing Modes 和 GAN

原創 2016-11-07小 S 程式媛的日常 程式媛的日常

ICLR 2017 的 submission DDL 剛剛過,網上就紛紛有了 ICLR 2017 導讀的文章。本周我也将為大家帶來 ICLR 2017 submission 的分類導讀,而且是更詳細地介紹!今天開篇就來介紹我一直很關注也一直在做的 GAN 方面的部分論文(不是全部,分批介紹吧)。

今天會介紹的論文有(全部來自 ICLR 2017 submissions):

1. 《Mode Regularized Generative Adversarial Networks》. Tong Che, Yanran Li, Athul Jacob, Yoshua Bengio, Wenjie Li

2. 《Generative Adversarial Parallelization》. Daniel Jiwoong Im, He Ma, Chris Dongjoo Kim, Graham Taylor

3. 《Unrolled Generative Adversarial Networks》. Luke Metz, Ben Poole, David Pfau, Jascha Sohl-Dickstein.

4. 《Improving Generative Adversarial Networks with Denoising Feature Matching》. David Warde-Farley, Yoshua Bengio

5. 《Energy-based Generative Adversarial Networks》. Junbo Zhao, Michael Mathieu, Yann LeCun

下面進入一篇。

Mode RegularizedGenerative Adversarial Networks

GAN 模型雖然在過去引起極大的關注,但是它過于 free 的訓練方式使得它對于參數極其敏感,訓練過程極其不穩定。除此以外,GAN 生成的樣本(主要是圖檔)會存在比較嚴重的 missing modes 的問題。所謂 missing modes 可以用這篇論文[1] 中的這樣一張圖來解釋:

ICLR 2017 | GAN Missing Modes 和 GAN

即如果 training data 中有一些 modes 的樣本占比很小,則很容易在訓練時被 miss 掉,使得 GAN 隻能學會大 modes 的表達,進而生成出的樣本會集中在某幾個 modes 上,進而缺少 diversity。另一個更可怕的問題是,當這種 missing modes problem 出現時,更容易加劇 GAN 訓練不穩定的問題。

為此,這篇論文[1] 提出一種 mode-regularized 的思想,來增加對 GAN 訓練過程的控制。具體來說,與其上 GAN 中的生成網絡 G 直接從 noise vector z 映射到樣本空間,我們可以讓 z 從一個樣本空間先映射過來,也就是有一個 z = encoder(X) 的過程,進而再,G(encoder(X))。這樣的好處是,reconstruction 過程會增加額外的學習資訊,使得生成網絡生成出來的 fake data(generated sample)不再那樣容易被判别網絡 D 一下子識别出來。這樣 D 和 G 就都能一直有 loss/gradient 去将訓練過程較為穩定地進行下去,進而達到了讓 GAN 訓練更加穩定的效果。另一方面,因為 encoder(X) 保證了 X 和映射後的 X 的空間的對應性,也就可以保證了生成網絡能覆寫所有樣本空間的樣本 modes,也就理論上保證了 missing modes 問題的減少。是以,這篇論文[1] 給出的是一種 rugularizer for GAN,而用這樣的 regularizer 的 GAN 就被作者叫做 Regularized-GAN(在實驗中)。

ICLR 2017 | GAN Missing Modes 和 GAN

在此基礎上,作者繼續提出了一種 manifold-diffusion GAN(MDGAN),它将這種 reconstruction 作為一種 regularizer 的想法進一步變成了 two-step training。也就是說,要讓 reconstruction 也能有更好的目标,把這種 reconstruction loss 提取成單獨的一步去訓練——于是乎,第一步 manifold step 就是去做 G(Enc(X)) 和 X 的訓練,減少這兩者之間的差别;第二步 diffusion 就是讓 G(Enc(X)) 再和 G(z) 做拉近。這樣從模型訓練的過程,形象的了解就是,先把兩個分布的“形狀”調整好,再把兩個分布的距離拉近。

在實驗中,這篇論文[1] 還有一個貢獻就是提出了新的 evaluation metric,叫做 MODE score。作者基于以前由 OpenAI 團隊提出的 Inception score,發現,Inception score 有一種很不好的現象是,即使 GAN 的網絡訓練塌了(即會産生完全是噪音,肉眼根本不 perceptual 的圖檔),inception score 的分數也會很高(很高應該代表的是圖檔非常像真實樣本)。這是不 make sense 的。為此,作者給了新的 score,将塌了的情況用一種額外的 metric 衡量進來——進而使得最終的 MODE score 是基于樣本品質和樣本 mode(塌了的話,mode 就非常差),兩個角度。

ICLR 2017 | GAN Missing Modes 和 GAN
ICLR 2017 | GAN Missing Modes 和 GAN

最終,運用幾種 metric,這篇論文[1] 證明了這樣的 mode regularizers 是非常有助于提高 GAN 訓練的穩定性的,同時也非常有助于提高 mode diversity 的。除了這樣的量化分析,作者同時給了一些生成的樣本品質來證明:這種 regularizer 并不會影響生成的圖檔品質。

ICLR 2017 | GAN Missing Modes 和 GAN
ICLR 2017 | GAN Missing Modes 和 GAN

Generative Adversarial Parallelization

ICLR 2017 | GAN Missing Modes 和 GAN

今天介紹的第二篇論文[2],其實也是為了提高 GAN 訓練穩定性。它是之前(很久之前)已經在公衆号介紹過的另一篇 GAN 的工作的後續。這篇論文[2] 解決穩定性的方法很簡單,我個人認為它也和 OpenAI 提出 Inception Score 的那篇論文有關系。在那篇論文裡,openAI 團隊還提出了一種 minibatch discrimination 的訓練方法,也就是在每次讓 GAN 的判别網絡 D 進行判别時,不要基于單個樣本,而是基于一個 minibatch 的一批樣本。這樣一批樣本組成起來,就更加 “robust”。那麼現在要介紹的這篇論文[2] 是怎麼做的呢,這篇論文縮寫是 GAP,它就是說,我們不要讓 GAN 每次一個生成網絡用一個判别網絡來判别,而是同時訓練幾組 GAN,然後讓他們的判别網絡 D 們,swap,交替着去判别其他的生成網絡 G 的樣本。這就很像是 minibatch discrimination 了。就是我們一起學,你可能隻見過現象 A(mode A),我見過 mode B,那我見過 mode B 的 D_B 去來判别你隻會生成 mode A 的 G_A,這就更容易 robust 了,也更容易不 miss modes。用一個(賣萌的)圖例來一圖以蔽之:

ICLR 2017 | GAN Missing Modes 和 GAN

這篇論文在後續的 experiments 分别通過抛出問題的方式來 lead experiments results,但是總體的結論就是,我們這樣 swap 可以提高 trainig 的穩定性,也更容易讓學出來的生成樣本的分布逼近真實分布。但是比較可惜的是,他們更多的實驗是在 toy example 上做的,會更期待更好的效果吧。

ICLR 2017 | GAN Missing Modes 和 GAN

Unrolled Generative Adversarial Networks

ICLR 2017 | GAN Missing Modes 和 GAN

然後要分享的第三篇論文[3],也是為了提高 GAN 訓練穩定和減少 missing modes(mode collapse)。這篇論文做的更加理論一點,它們提出了一種新的 loss。這種 loss 并不是通過改變模型 architecture 來引入的,也不是一種新的 metric,可是一種 gradient-based loss。如果說我們過去做 gradient descent trainig 時候,是讓 gradient 進行改變,讓其他模型參數保持不變的話;那麼他們提出的這種 loss,被叫做 surrogate loss,則是要能基于一階 gradient 改變後的其他模型參數的變化再去改變二階甚至高階 gradient——進而是一種 gradient dynamics 資訊。這件事其實并不是很常見,因為在我們大部分神經網絡和機器學習的訓練中,我們都隻會用到一階導數資訊。然而,二階或者高階導數的出發點其實是我們真正的不 approximate 的求解就應該是不斷的 unroll 出 gradient 的或者是 exact solution 的。而這件事就是非常難算的。是以可以認為,這篇論文[3] 提出的這種 loss 是一種中間态,tradeoff。

ICLR 2017 | GAN Missing Modes 和 GAN

上面就是這個 loss 的表達式。進一步來分析,這篇論文[3] 又把這個 loss 給拆成了3項,來分開介紹他們的 contribution:

ICLR 2017 | GAN Missing Modes 和 GAN

其中第二項最重要,就是當生成網絡 G change 的時候,判别網絡 D 能給出很好的回報——是以當 G 往不好的方面(mode collapse)時改變的時候,D 的這項就會給出較大的懲罰。是以說,G 在生成的時候就要考慮到我走這一步(這麼改變)的話,D 會怎麼變(D 會怎麼看我- -),于是乎 G 的考慮就比以前多了。也是一種高階 gradient information 的展現。

是以這篇論文[3]我認為最重要的貢獻就是,它指出了也強調了高階資訊在神經網絡或者在機器學習中的重要性(主要是神經網絡)。順着這個思路思考下去,應該也能為其他模型和其他任務帶來一些新的解決方法。

ICLR 2017 | GAN Missing Modes 和 GAN

Improving Generative Adversarial Networks with Denoising Feature Matching

ICLR 2017 | GAN Missing Modes 和 GAN

接下來要介紹的這篇論文[4] 想法和[3] 有點相似,同時也可以認為是 openAI 那篇論文中(minibatch discrimination 那篇)另一個 trick——feature matching 的延伸和泛化。這個說的是啥呢,在之前訓練 GAN 中,已經有人提出了一些比較 heuristic 的訓練方法,或者說 addiitional feature,去幫助穩定和提高效果。其中就有一些是用判别網絡 D 學到的 feature 來做輔助,讓 G 生成的時候要盡可能去比對 D 的一些 feature 的統計特征。這個事情其實比較好了解,就是說既然你 D 能通過一些東西(feature)判斷我不好,那麼我就把你的東西直接抄過來,變成我自己的一種能力,讓你不再能(隻)利用這個 feature 來判别出我是假的。但是這個事情,在這篇論文[4] 之前都很 heuristic,包括前人的 VAEGAN 也提到了 Dis_l(layer)這種 feature 加入一種新 loss。

那麼這篇論文[4] 又為什麼和今天介紹的論文[3] 有關系呢,它們其實都指出了一種 gradient 或者說生成網絡 G 要去改進的方向。[3] 是用高階 gradient 直接指導 G,而這篇論文[4] 是用 denoising feature matching 來讓 G 生成的時候 manifold 更趨向于真實 distribution——而這個 distribution 是通過用 D 學出來的 feature space 來展現的。

ICLR 2017 | GAN Missing Modes 和 GAN
ICLR 2017 | GAN Missing Modes 和 GAN

Energy-based Generative Adversarial Networks

ICLR 2017 | GAN Missing Modes 和 GAN

下面要介紹的這篇論文[5],EBGAN,其實已經放在 arXiv 上有一段時間了。它的主要貢獻個人認為還是在于給出了一種 parameter sweeping 的系統調參方法。至于它利用 energy model 來刻畫 diversity 的這種方式,我覺得還有值得深挖的地方,暫時來說并沒有發揮出太大的 energy based model 的功能。也就是說,他們雖然也緻力于解決 mode diversity 的問題,但是解決的辦法就是一種 ad-hoc loss——去衡量 diversity,然後把這個 diversity metric 加入 loss function:

ICLR 2017 | GAN Missing Modes 和 GAN

如他們在論文裡說的,這種 loss 和 minibatch discrimination(上文已經介紹)沒什麼本質差別。

他們的 parameter sweeping 是這樣做的:

ICLR 2017 | GAN Missing Modes 和 GAN

就是把 GAN 中,判别網絡 D 和生成網絡 G 的層數和特征數都提取出來(因為隻做了 MLP 的,是以沒有什麼特殊網絡結構),然後把優化等等各種參數都提取出來。這樣排列組合(其實沒有排列- -),就可以做出一堆 model。把這堆 model 全跑一遍,算 inception score。并給出一些實驗結果。這種方式還是不錯的,不過局限性也很明顯。因為像 DCGAN 這種 CNN 基礎的網絡就不太能通過這種方式試驗出來,而正是 DCGAN 這種網絡結構現在種種實驗結果表明其更穩定。

ICLR 2017 | GAN Missing Modes 和 GAN

寫得好累……明天再繼續!

繼續閱讀