back to index
Ensemble of GAN

link |
到最後,如果你不知道要做什麼的話,你就用ensemble這樣子,好,那為什麼ensemble,大家知道嗎?
link |
就最後你做做做做做做做到最後卡住了,不知道再怎麼往前,無法寸進的時候,這個時候你就會想到要做ensemble,所以game當然也可以做ensemble。
link |
好,用game跟ensemble有什麼好處呢?這邊有一個很明顯的好處,這邊有一個很明顯的例子,這個例子是這樣子的,這個例子來自於ensemble of game這篇paper,他說,如果你在這個cyphertext上面呢,去trade image的generator,我們先姑且不論做得好不好。
link |
他說,這個是某一次update generator以後,generator output的image,這是下一次再update generator的時候,generator output的image。
link |
那你會發現說,在這兩次,generator在兩個iteration間,它的output就有了很大的變化,它的image的quality已經沒有變好,但是本來左邊產生的比較多綠色的東西,到右邊就都產生偏藍色的東西。
link |
我們知道說,這個generator會有mode collapse的問題,如果你的generator的capacity不夠大的話,它產生的東西會比較單一。
link |
那在train game的時候,train到後來,你的generator產生出來的image的quality已經沒有上升了,但是它卻在不同的mode中間不斷地做切換。
link |
這邊是另外一個例子,這個例子是說,我們一樣都是產生人臉,在某一次iteration裡面產生出來的都比較像是白人,在某一個iteration裡面產生出來的都是黃種人,在某一個iteration裡面產生出來的人,皮膚都比較接近巧克力的顏色。
link |
這些image其實都還蠻好的,其實每一張圖看起來都差不多,那就只是膚色變了。所以當你在train game的時候,train到後來,你會發現說,你train出來的人臉已經沒有更realistic了,但它就在不同的膚色間切換。
link |
但是如果你只是拿某一個iterationtrain出來,某一次update參數以後的generator拿出來產生image的話,你拿到第一個generator,你產生出來的都白人,然後第二個generator產生出來的黃種,第三個generator產生出來的都是咖啡色皮膚的人,這樣子就感覺沒有很多元化。
link |
所以在ensemble game裡面,他用了三個不同的方法來對game做ensemble,這些方法其實都蠻直覺的。第一個方法是,所謂的standard ensemble game的意思就是train一大堆game,我就同時train,我們就同時train,比如說五個game,然後就五個generator。
link |
之後在generate image的時候,先隨機挑一個generator,再讓那個generatorsample image,這樣子就算你某一個generator,他都只會產生某一種膚色的人,那所有的generator合起來,你就可以產生比較多樣性的結果了。
link |
Self-ensemble game的意思是說,我們既然已經發現說,在每一個training的iteration,generator的output都很不一樣,那我們就把好幾個iteration的generator都集合起來,再產生output就好了。
link |
所以如果你做self-ensemble game的話,你完全不需要多做任何事,你只要記得把之前train的那些generator的參數存起來,之後在casting的時候,拿一把generator出來sample一個,然後產生image就行了。
link |
最後這個cascade game是用下面這個圖說明的,他是說,我們先train好第一個game,然後再看說有哪些image是第一個game不太容易產生的,有哪些mode是第一個game不太容易產生的。怎麼知道哪些image是第一個game不太容易產生的呢?
link |
你就拿第一個game去sample一大堆image,然後在另一個classify,分辨第一個game產生的image跟real的image,那你再看說real的image丟到discriminator,剛才好像說錯了,你要另一個discriminator,那他會分別generator產生的image跟real的image。
link |
那如果今天這個discriminator在某一張real的image上面的分數很高,discriminator覺得這個image他非常的realistic的話,那這張image他可能就是generator不會產生的mode,因為discriminator可以輕易的分辨現在database裡面這張image跟generatorgenerate的image之間的差異。
link |
那你就把這些generator不會產生出來的image,generator不會產生出來出類似image的這些database裡面的image,集合起來,再去train第二個game,然後這個process就反覆的繼續下去,那就可以得到一把game,每一把game都是產生不同的mode的image。
link |
那另外一個方法呢,有一個方法叫做generative adversarial parallelization,而這個方法他是來自於一個evaluation的方法,而他的靈感是來自於一個evaluation的方法。
link |
有一個evaluation的方法是這樣子的,有一個evaluate game的方法是這樣,他說我們如果要比較兩個generator,G1跟G2的好壞,怎麼比呢?因為我們現在假設有兩個不同的train game的方法,那我們train出了generator1跟generator2,我們要比較generator1跟generator2誰比較強,怎麼辦呢?
link |
我們知道在train game的時候,每一個generator都有一個對手,都有一個discriminator,我們就讓這個generator1跟generator2交換對手,本來generator1都是跟D1比,現在變成generator1跟D2比,generator2要跟D1比,在testing的時候你故意交換他們的對手。
link |
那這樣子,如果今天的狀況是generator1可以贏過D2,而generator2會輸給D1的話,那你就可以確定說generator1可以產生的image是比generator2還要好的,所謂的輸或贏是說,generator1產生的image能不能夠讓generator2覺得是realistic的,generator2產生的image能不能讓generator1覺得是realistic的。
link |
那這個generative adversarial parallelization這篇paper的縮寫叫做GAP,這篇paper裡面有一個賣萌的圖,這是這個真實從paper裡面剪下來的圖,這個作者到底是有多喜歡七龍珠,他這個圖的意思是這樣子。
link |
這邊每一個悟空是一個generator,然後他有不同的師傅就是不同的discriminator,那在第一次training的時候,這個悟空是配這個師傅,這個悟空是配這個師傅,這個悟空是配龜仙人,這個悟空是配這個師傅。
link |
誒,我畫反了,你是從上面下來的,所以第一次update參數的時候是這樣子的配對,那update幾次參數以後就會交換配對,就會交換配對,所以這整個basis,因為generator會跟很多不同的discriminator去進行練習,那這樣子你得到generator就會比較robust。
link |
那這確實會得到一些比較robust的結果,誒,我卡住了,這個圖很明顯就會得到一些比較robust的結果,你比較不會有那個mode collapse的情形。
link |
那其實ensemble的game呢,方法有很多,比如還有一個mixed game,我就把paper列在這邊給大家自己參考,然後後面還有很多很多各式各樣的game。
link |
這邊就是一大堆有用到ensemble概念的game給大家參考。