孪生三兄弟 CycleGAN, DiscoGAN, DualGAN
孿生三兄弟 CycleGAN, DiscoGAN, DualGAN?
2017-05-11 11:43
GAN 提出兩年多來,很多想法都被研究者們提出、探索并實踐。直到最近近乎同一時期發布的三篇論文,CycleGAN、DiscoGAN 和 DualGAN,已經展現了集百家之長的特點。同時,這三篇論文的想法十分相似,幾乎可以說是孿生三兄弟,并都取得了不錯的結果。不過,這三兄弟的誕生原因也有跡可循。今天就想稍微整理一下這三篇相似論文的發展脈絡:它們彼此之間的異同,以及它們與前人工作的相似之處——從而找出它們散落天涯的“遠親們”。
今天會涉及到的論文有:
1. 《Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks》 by BAIR
2. 《Learning to Discover Cross-Domain Relations with Generative Adversarial Networks》 by SK T-Brain
3. 《DualGAN: Unsupervised Dual Learning for Image-to-Image Translation》 by Memorial University of Newfoundland & Simon Fraser University
4. 《Unsupervised Cross-Domain Image Generation》 by FAIR
5. 《Coupled Generative Adversarial Networks》 by MEIR
6. 《Adversarially Learned Inference》 by MILA
7. 《Adversarial Feature Learning》by UC Berkeley
8. 《Mode Regularized Generative Adversarial Networks》 by MILA & PolyU
9. 《Energy-Based Generative Adversarial Networks》 by NYU
CycleGAN 的開頭非常優美和引人入勝,先是放出了這些 impressive 的 result;同時用一種帶逛博物館的語氣寫了 Introduction:“當梵高在一個和煦的春天的早上,站在河畔畫下這幅畫時,他眼前究竟是怎樣的景象呢?如果梵高站在一個清爽的夏天的早上,又會看到怎樣的景象,畫出怎樣的作品呢?”作者的寫作功底可見一斑。
作者用這樣的開頭,引出了一個 motivation:我們雖然沒有辦法真的穿越時空,站在梵高身邊看到他當時看到的景象,但是我們卻可以通過他的畫作,想象當時的場景;同時也可以根據他的作品(和他的畫風),想象他畫出的其他場景會是怎樣的。也就是說,我們沒有 paired data 卻可以實現這種“翻譯”或者說映射。那么我們是否也可以讓機器做到這件事呢?這是 CycleGAN,也是 DualGAN 的 motivation(雖然 DiscoGAN 也有這個 motivation,但側重點不在這里,后面詳述)。
我們人類之所以可以做到這件事,作者假設,在兩個領域(X,Y)之間,是存在一種底層的關系的,或者說隱含的關聯——這種隱含的關聯可能是,對于同一個事物,有兩種不同的映射后的表達,那么這兩種表達之間就是針對這同一個事物的一種關聯。如果我們僅用一個映射把 G: X->Y 進行單向映射,那么我們無法保證這個 G 是單一的。或者說,我們無法保證 X 中的所有樣本 x 和 Y 領域中的所有樣本 y 是合理對應的。這也就(可能)導致 mode collpase 的問題。對于這個問題的描述,在 CycleGAN 中,作者用了 meaningful 這個詞;而在 DiscoGAN 中,作者強調了我們希望的是 one-to-one mapping, rather than many-to-one mapping。
通過這樣的分析,很容易看出,一種自然的解決方案就是,我們不僅要求一個單向映射,而更要求一種雙向映射。在 CycleGAN 中,這個問題被形式化為:我們有 G: X->Y, F: Y->X 兩個映射或者說翻譯器,我們希望 F(G(x)) ≈ x, G(F(y)) ≈ y. 在 DiscoGAN 中,作者直接把這個映射用 GAN 中的 generator 代表,所以為了實現這樣的雙向映射,DiscoGAN 中指出我們需要兩個 G,并且讓盡量 G1(G2(x)) = x,反之同理。DualGAN 的形式化與 DiscoGAN 相似。不過,三篇論文分別用了三種不同的術語來實現這樣的約束或者說目標。CycleGAN 中,作者用了 vision 中被應用多次的?cycle consistency loss,CycleGAN 也因此得名;DiscoGAN 則是因為直接強調了一一映射,所以用了?bijective map來闡述;DualGAN 因為是從去年 NIPS 2016 Dual Learning for MT 的 paper 受到啟發的,所以是從?closed loop角度來寫的。不過個人認為從 Dual Learning 那篇得到啟發做這件事,寫得不是很好,其實也不是那樣相似。從出發點上就比另外兩篇 paper 弱了一些。
下面來看看三篇工作的模型示意圖:
上圖:CycleGAN
上圖:DiscoGAN
上圖:DualGAN
上面三個示意圖雖然風格迥異,但是如果把 CycleGAN 中的 G 和 F 的映射用最后實現中的生成器 G1 G2 來理解,那么三個模型真可謂親如手足。
其實三者的公式也非常相似,在這里就不截圖貼出了。只不過實現細節上,還是有相當大的差別。既然都是 GAN,我們先從三者的生成器來比較。三者的生成器都用了不同架構,其中 CycleGAN 對于不同的任務基本都用了同樣的架構,但是 DualGAN 的架構似乎變化比較多(任務差別比較大)。CycleGAN 主要采用了 Fei-Fei Li 組做提出 perceptual loss 的 style transfer 的架構,有 residual block,并且也用了 instance normalization。DiscoGAN 的結構則和 DCGAN 比較相似,是和簡單的 conv-deconv 結構,這可能是因為他們主要目的是做橫向對比。DualGAN 的結構則采用了 pix2pix 工作中也用到的 U-Net 對稱結構,同時也包含了 residual block,并且他們給出了比較多的 intuition 為什么這樣的結構比較合理——但個人認為這樣也會同時有些將自己的工作局限在某些特定 task 上,從賣點上會和 CycleGAN 更不同一些。說完了生成器再說判別器。CycleGAN 和 DualGAN 的判別器比較相似,都采用了 PatchGAN 來實現局部判別(而非完整圖片的判別);DiscoGAN 則繼續簡單粗暴,用和生成器相似的也就是和 DCGAN 相似的簡單結構就完成了。
最后進入重中之重,他們分別做了哪些實驗。從實驗上其實可以看到更大的差異,或者說文章的立意與側重點的不同。CycleGAN 因為強調的是 unpaired translation,所以做了各種兩個領域之間的圖像“翻譯”任務,可謂數據集之大觀:
而?DiscoGAN 則側重分析這樣的雙向映射,或者說 bijective mapping 的約束,是如何避免 mode collapse 進而提升生成樣本質量的:
DiscoGAN 用上面的 Figure 3 來解釋為什么簡單單向加 reconstruction loss(Figure 3(c) )不能完全解決 mode collapse 的問題。可以看出,這會導致不同的樣本在同樣的對應的 mode 之間震蕩(ocsillate)。而下面的圖,是 DiscoGAN 制造的一個 toy experiment,將可視化技術用到了極致。在圖中,他們不僅利用了點線面的可視化方法,還利用了背景色的方法(背景色代表判別器的輸出值)。可以看到,只有圖(d) 對應的 DiscoGAN 這種雙向映射的方法完美地區分了10個 mode(從背景色可以看出判別器訓練得很好);而圖(c) 的單向 reconstruction loss 雖然也可以區分一部分 mode,但對于有一些 mode 還是無能為力(依然 collapse 掉了)。圖(b) 則是普通 GAN 基本完全 miss 掉各種 mode 的結果(所以背景色單一,且被分出的區域很少)。
而 DualGAN 在實驗任務上和 CycleGAN 比較相似,基本都是各種圖像“翻譯”,不過圖像的種類比較多:
其實就如開篇說的,這仨孿生兄弟有很多散落天涯的“遠方親戚”,不如一起來看一下。
先來看一下前幾天在 (點擊閱讀)里介紹過的 Domain Transfer Network(DTN):
從公式來看,和孿生三兄弟并不十分相似。這是因為,這篇工作是非常強調找到底層的 invariant representation。DTN 的作者認為,當 GAN 達到平衡時,其中學到的 G 的表達可以認為是對于任何一個 D 都不可區分的——也就是得到了一種 invariant representaion。分析上面的四個式子可以看出,公式(3)(4) 是 GAN 的 loss,(5) 是針對原始領域 S 的,(6) 是針對目標領域 T 的。如果我們令G = g·f,就可以將上面的公式(3)(4) 看做,DTN 實際上希望 G 可以學到某些和重建相關的方面的 representation(f 在 G 下不變)。再進一步觀察公式(3) 可以看到,DTN 中的判別器的損失函數,L_GAN 中的判斷變得更加細致了,它被拆分成了——針對 T->T,S->T 兩種,也就是說,對于從目標領域生成目標領域的圖片時->,應該保持 identity mapping(這點是在上面孿生三兄弟的設定里沒有的)。也正是基于此,我們可以看到,如果我們把 D1 和 D2 合并(不考慮這個設定),那么其實在 DTN 中也是有兩個 D,和兩個 G(普通的 G 和 g·f)——這應該是 DTN 和孿生三兄弟最大的區別與相似之處。最后它們還加入了一個 smoothing function TID,也就是公式(6) 使得生成的圖片質量更好:
說到 invariant representation 和兩個 GAN,就不得不提更早以前的一些工作。首當其中的可能是 Coupled GAN(CoGAN):
從 CoGAN 的示意圖可以看到,這個“遠方親戚”它最大的相似之處也是在于它有兩個(兩組) GAN。不同之處在于它們用于學到兩個領域之間的關系或者說聯合概率(joint distribution)的方法是共享生成器和判別器的部分層的參數。從下面這個公式可以看出,它和 DTN 的目標是非常相似的(因為出發點都是學習 invariant representation,這也是只共享某些層的參數的原因):
下面我們繼續“擴散”,找更遠方的“親戚”。上面介紹的都是兩個 G,兩個D,兩組 GAN 的工作。其實更早以前的工作,有一些是用兩個 G,但只有一個 D;或者反之。比如在 DCGAN 之后緊隨的一篇工作,ALI:
對比左右兩個部分可以看到,在 ALI 框架里,存在的映射不是兩個領域之間的,而是 x 和 z,也就是輸入的圖片和輸入的噪音之間的。所以這兩個映射分別是 G_z: X->Z, G_x: Z->X。前者可以看做是把圖片再映射到一個低維特征空間里,相當于是希望學到的特征是具有復原原始圖片的能力的。但是這個工作的一個問題也是,這種映射的約束不夠強,導致可能多個圖片有同樣的低維特征,或者說同一個低維特征會對應許多不同的高維樣本,所以最后學出的圖片會非常模糊(像一種平均):
注意,上圖已經是縮小了樣本尺寸后的結果了,仍然可以看出很強的模糊度。另外,還有一篇工作也有相似的思想,就是 BiGAN:
最后來看兩個更更更遠方的親戚,分別都添加了一個額外的編碼器來解決 mode collapse 的問題。首先是在[8] 中提出的 Regularized GAN,RegGAN。其思想其實就是單向 reconstruction loss,幾乎等同于 DiscoGAN 中設置的第三種場景(也就是 Figure 3(c)):
這里,d(x, G·E(x)) 是 L2 loss。在具體操作中,其實也試過 L1 loss,甚至混合距離,但效果都不如 L2。而在 DiscoGAN 等雙向 reconstruction loss 的條件下,這個距離函數實際上可以取 L2, hinge loss 等等,效果都很相似(都不錯)——這可能正是單向 reconstruction loss 不穩定所造成的局限性。
而[9] 是另一個利用額外編碼器來改進 GAN 的典型工作,EBGAN:
從上面 EBGAN 的示意圖和公式可以看出,EBGAN 中,除了有一個額外的編碼器,還有一個額外的解碼器,可以把 Dec(Enc(x)) 看成一個全部的 G(x) 或者看成上面 DTN 中的 g·f,畢竟很多 GAN 生成器的結構也都是編碼解碼對稱,比如 U-Net 比如 DCGAN。這樣做的好處是可以實現一定程度的生成樣本的豐富度(diversity),也就從“反向”緩解了 mode collapse 的問題。不過,這樣的解決辦法依然存在 DiscoGAN 中提到的 oscillate 問題。
回顧今天提到的9篇論文,雖然是按照時間發展的逆序(也就是從最新開始回顧)的方法介紹的,但是反過來來理解就可以梳理出一條發展線。單向到雙向,單個到多個。很多東西是相通的,希望和大家多多討論,互相啟發。
?
相關閱讀:
干貨 | Generative Adversarial Networks(GAN) 的現有工作
ICLR 2017 | GAN Missing Modes 和 GAN
ICLR 2017 | Highlight 2: Invariant Representation Learning
轉自原創:?小 S?程序媛的日常?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的孪生三兄弟 CycleGAN, DiscoGAN, DualGAN的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java学习小程序(10)三个等级的才字
- 下一篇: DualGan