back to index

GAN Lecture 5 (2018): General Framework


link |
00:00.000
我們要講一個東西叫做F-gap,那這一段是這個樣子啦,這一段數學比較多,如果你聽不懂的話不用太在意就算了,因為這個東西有點用不上這樣,為什麼?
link |
00:22.000
我們這邊要講的是什麼?我們這邊要講的是說,我們說我們定某種objective function,就是在量JS divergence,那我們能不能夠量其他的divergence呢?
link |
00:35.000
F-gap就是要告訴我們說,怎麼量其他的divergence,那我之所以會說這一招不太有用的原因就是,用不同的divergence,就F-gap它可以讓你的gap量不同的F-divergence,來量你的generated example跟real example之間的差距,但是用不同的F-divergence的結果是差不多的,
link |
01:01.000
所以這招好像沒什麼特別有用的地方,但是我們還是跟大家介紹一下,因為這個在數學上它感覺非常的屌這樣子,但是在實作上好像沒有什麼特別的不同。
link |
01:15.000
好,我們來講一下F-gap,F-gap是要告訴我們的是說,其實不只是用JS divergence,任何F-divergence你都可以放到GAN的架構裡面去,那我們就先來介紹一下什麼是F-divergence。
link |
01:33.000
F-divergence是說,我們現在假設有兩個distribution,P跟Q,我們兩個distribution,P跟Q,P of X代表S從P這個distribution sample出來的機率,Q of X代表S從Q這個distribution sample出來的機率。
link |
01:50.000
那P跟Q這兩個distribution的F-divergence它長什麼樣子呢?它的長相就是我們可以把它寫成像這邊這邊的式子,P是一個distribution,Q是一個distribution,然後你對S做積分,然後把Q of X乘上F of P of X除以Q of X。
link |
02:12.000
那這個F這個function它是,就是說假設這個東西要是一個F-divergence的話,那F這個function它必須是convex的,這是第一個條件。
link |
02:23.000
第二個條件是F of Y必須要等於D,有這兩個條件的話,這一個式子就是某一種F-divergence,你這個F放不同的function,它就是不同的divergence。
link |
02:37.000
然後我們看到說你F放某一個function就是KL-divergence,放另外一個function就變成inverse的KL-divergence。
link |
02:45.000
那首先我們想要跟大家說明的事情是,P跟Q啊,就為什麼這個式子它可以看作是在衡量P跟Q的差異呢?為什麼這個式子可以看作是P跟Q的divergence呢?
link |
03:01.000
首先第一個我們要跟大家說明的是,如果P跟Q這兩個distribution是一模一樣的,那這一個值會是0。
link |
03:10.000
因為這個東西,這個divergence等於是在衡量P跟Q兩個distribution之間的距離,所以如果這兩個distribution是一樣的,它們距離應該為0。
link |
03:19.000
所以我們現在先來看看,假設P跟Q是一樣的,它們距離是不是應該為0呢?
link |
03:25.000
假設P跟Q是一樣的,會發生什麼事呢?假設P跟Q是一樣的,那這一項的值是1。
link |
03:32.000
那我們說F-divergence的一個條件是,F這個式子在1要是0,所以這邊就變成0。
link |
03:38.000
這邊變成0意味著什麼?意味著這一整項都是0,所以當P跟Q是一樣的時候,它們距離會是0。
link |
03:46.000
接下來要跟大家說明的地方是,0是這一個式子可以達到的最小的距離。
link |
03:55.000
也就是說如果P跟Q有些不同,它們不是完全一模一樣,它們算出來的F-divergence就會大於0。
link |
04:04.000
那怎麼說呢?因為F它是一個convex的function,這是F-divergence第二個條件,F必須要是一個convex的function。
link |
04:13.000
如果是一個convex的function,這個式子可以寫成這樣。
link |
04:17.000
這部分跳得有點快,反正你自己回去check一下,反正就是這麼回事就對了。
link |
04:22.000
因為F不是convex的關係,所以這個式子會大於等於這個式子,這個式子會是它的一個lower bound。
link |
04:34.000
接下來你把Q消掉,然後P of X做積分,你就得到F of E,然後會得到0。
link |
04:44.000
所以今天P跟Q,它們如果一模一樣的時候,你的F-divergence算出來是0。
link |
04:50.000
如果P跟Q略有不同,它們一定會大於等於0,因為P跟Q的值一定會大於等於0。
link |
05:01.000
所以P跟Q略有不同的時候,它們的值就會大於等於0。
link |
05:05.000
所以我們可以說這個式子,它可以拿來量P跟Q之間的差異。
link |
05:11.000
好,那接下來呢,我想告訴大家說,假設你F帶不同的式子,你就得到不同的divergence。
link |
05:19.000
舉例來說,如果你的F是Xlow的X,那帶進去以後,把這個F用Xlow的X帶進去以後,你算出來就是KL-divergence。
link |
05:29.000
如果你X是-low的X,如果你把這個-low的X帶進去,你算出來的就是inverse的,reverse的KL-divergence。
link |
05:40.000
如果你現在F of X帶X-1平方,你算出來的就是chi-square的divergence,就這樣。
link |
05:48.000
就帶不同的東西,就得到各式各樣的F-divergence的measure就是了。
link |
05:55.000
好,那接下來要講一個你可能沒有聽過的東西,叫做fractal的conjugate。
link |
06:01.000
這邊要講的東西是說,每一個convex function的F,它都有另外一個conjugate function,叫做F-star。
link |
06:10.000
每一個F,它都有一個對應的夥伴,叫做F-star。
link |
06:16.000
這個F跟F-star它們之間的關係,寫成一個這樣看起來很可怕的式子,
link |
06:21.000
看著就有點頭痛這樣,等一下你就跟不上了這樣。
link |
06:25.000
你看就覺得有點頭痛這樣。
link |
06:27.000
可是這個到底是什麼東西?這個東西是這個樣子,這個東西是這個,
link |
06:32.000
我們有一個F,那它的conjugate function叫做F-star。
link |
06:38.000
這個F-star它長得是這個樣子,它是由F of X所導出來的。
link |
06:44.000
F-star如果我們帶T進去,要怎麼算出它的值呢?
link |
06:48.000
你就窮取所有的T,看哪一個T可以讓XT-F of X的值最大,
link |
06:53.000
就是我們要的值。
link |
06:55.000
這樣講可能有點抽象,所以我們就實際上舉個例子。
link |
06:59.000
F-star的T1是多少?你就把T1帶進去,然後窮取各種不同X的值,
link |
07:06.000
看看哪一個X的值可以讓T1最大。
link |
07:08.000
舉例來說,如果你X帶S1,你得到S1T1-F of S1。
link |
07:14.000
你X帶S2,你得到S2T1-F of S2。
link |
07:18.000
你X帶S3,你得到S3T1-F of S3。
link |
07:23.000
再看這些不同的X裡面誰最大,發現X1最大。
link |
07:27.000
那我們得到的F-star的T1就是這個值。
link |
07:31.000
同理,假設你想要知道T2,F-star的T2的值是多少,
link |
07:36.000
那你就把不同的X,你就把T2先帶進去,
link |
07:39.000
然後把不同的X也帶進去,你帶S1進去,得到這個值。
link |
07:43.000
帶S2進去,得到這個值。
link |
07:45.000
帶S3進去,得到這個值。
link |
07:47.000
看誰最大,看誰最大。
link |
07:48.000
最大的值就是F-star of T2,就這樣子。
link |
07:53.000
所以如果你要今天要知道F-star of T3是什麼樣子,
link |
07:57.000
你就每一點,從T0到T100,每一點通通這個方法去算,
link |
08:01.000
通通這個方法去算,你就可以把F-star of T1把它描繪出來。
link |
08:06.000
但這樣有點麻煩,所以另外一個方法是說,
link |
08:09.000
我們現在把XT-Fx把它畫出來,我們帶不同的S1,
link |
08:18.000
但是把XT-Fx畫出來,假設X是S1的話,長這樣。
link |
08:23.000
假設X是S2的話,長這樣。
link |
08:26.000
這個都是一直線嘛,對不對?
link |
08:28.000
這個都是一直線,因為假設你的T是你唯一的變數,
link |
08:32.000
X是固定的,X-T-Fx,X是固定的,
link |
08:36.000
γ是X1,γ是X2,它都是固定的。
link |
08:39.000
這個時候XT-Fx它都是直線,
link |
08:41.000
你帶不同的S進去,它就是不同的直線。
link |
08:44.000
帶S1進去是這樣,帶S2進去是這樣,帶S3進去是這樣,
link |
08:49.000
帶不同的值進去,它就是不同的直線。
link |
08:53.000
接下來我們要找最大的那個,給定一個T,
link |
08:57.000
我們要找最大的那個,最大的那個是什麼呢?
link |
09:00.000
假設給定T1,最大的那個就是在這個地方,
link |
09:06.000
假設給定T2,最大的那個就是在這個地方。
link |
09:09.000
所以今天你要把XT-Fx畫出來,
link |
09:13.000
就是把所有不同S1所造成的直線通通畫出來,
link |
09:16.000
通通畫出來,通通畫出來,
link |
09:18.000
然後再取它們的Upper Bound,再把它們的Upper Bound找出來,
link |
09:21.000
這個就是XT-Fx。
link |
09:25.000
所以今天你會發現說XT-Fx它一定是Convex的。
link |
09:30.000
所以今天如果你畫很多條直線,畫很多條直線,
link |
09:34.000
隨便亂畫隨便亂畫,不管你怎麼隨便畫,
link |
09:36.000
最後你只要找的是它的Upper Bound,
link |
09:38.000
你得到的Function都會是Convex。
link |
09:40.000
所以今天Fx是Convex,XT-Fx其實也一定是Convex的。
link |
09:48.000
那這邊是想要舉一個例子,
link |
09:50.000
跟大家說明一下我們剛才講的是什麼。
link |
09:52.000
假設Fx是Xlogx,今天如果我們X帶0.1,
link |
10:01.000
我們會得到這樣一條直線,
link |
10:03.000
X帶1我們會得到這樣一條直線,
link |
10:08.000
X帶10我們會得到這樣一條直線。
link |
10:11.000
把這些直線的Upper Bound通通串起來,
link |
10:14.000
我們會得到一個看起來像是這樣子的直線,
link |
10:18.000
看起來像這樣的一個曲線。
link |
10:20.000
所以這個X要帶不同的值,
link |
10:22.000
你從0.1帶進去得到一條線,
link |
10:26.000
0.1001帶進去也是一條線,
link |
10:29.000
0.1002帶進去也是一條線,
link |
10:31.000
通通帶進去你得到無窮無盡的線,
link |
10:33.000
把這些所有的線的Upper Bound通通找出來,
link |
10:35.000
就是紅色這一條線。
link |
10:37.000
那你會發現說這條紅色的線,
link |
10:39.000
它看起來像是Exponential,沒錯,
link |
10:43.000
這一條紅色的線它是Exponential t-1,
link |
10:47.000
所以F of X它的conjugate就是Exponential t-1。
link |
10:55.000
這邊是舉一個很直觀的例子,
link |
11:01.000
下一頁是一個Proof,
link |
11:05.000
我們也許就可以把它跳過去,
link |
11:07.000
反正你就怒算一波以後會發現說確實,
link |
11:11.000
假設F of X是X-logX,
link |
11:15.000
你跳一波以後就知道它是Exponential t-1,
link |
11:18.000
它的conjugate是Exponential t-1。
link |
11:22.000
好,那講這麼多,
link |
11:24.000
好像都跟Game沒半毛錢的關係,
link |
11:27.000
到底為什麼要講這些呢?
link |
11:29.000
接下來我們就要進入跟Game有關的內容了,
link |
11:33.000
我們就要進入跟Game有關的內容了。
link |
11:37.000
我們剛才知道說F of X有一個conjugate,
link |
11:41.000
F star of t,其實F star of t,
link |
11:45.000
它本身的conjugate也就是F of X,
link |
11:49.000
所以F of X跟F star of t,
link |
11:51.000
它們其實是互為conjugate的,
link |
11:54.000
所以F star of t跟F of X之間的關係,
link |
11:57.000
可以寫成這樣的式子。
link |
12:01.000
好,所以接下來,
link |
12:02.000
假設你有一個convex function叫做F of X,
link |
12:06.000
你就可以把這個convex function F of X,
link |
12:08.000
換成右邊這樣的式子。
link |
12:12.000
有人想說,
link |
12:13.000
這不是把本來簡單的問題變得更複雜了嗎?
link |
12:16.000
到底在搞什麼這樣子?
link |
12:17.000
我還可以告訴你說,
link |
12:18.000
這件事情跟Game是有關係的,
link |
12:20.000
神妙的地方就是,
link |
12:21.000
這件事情跟Game是有關係的。
link |
12:25.000
好,所以假設我們有一個F divergence的function,
link |
12:29.000
F divergence的function你是對,
link |
12:31.000
X做積分,Q of X乘上F of t除以Q,
link |
12:34.000
那這個F是一個convex的function對不對?
link |
12:37.000
那我們說convex的function F of X,
link |
12:39.000
都可以換成右邊這個看起來比較複雜的樣子,
link |
12:42.000
所以我們就把它換掉,
link |
12:44.000
就把它把簡單的問題弄得更複雜,
link |
12:46.000
把它換掉。
link |
12:47.000
所以本來X是P除以Q,
link |
12:49.000
X這邊是P除以Q,
link |
12:51.000
是P除以Q,
link |
12:52.000
就將P除以Q帶進去,
link |
12:53.000
P除以Q帶進去,
link |
12:54.000
就得到這樣子的一個式子。
link |
12:56.000
所以本來F of P除以Q,
link |
12:58.000
就變成了P除以Q乘上T,
link |
13:02.000
再減掉F star of t,
link |
13:05.000
F star of t是F的conjugate,
link |
13:07.000
然後再對所有的T取一個max,
link |
13:11.000
你就得到這一個值。
link |
13:15.000
接下來我要告訴你說,
link |
13:18.000
我們現在認一個D,
link |
13:20.000
它其實就是discriminator,
link |
13:21.000
它這個D這個function,
link |
13:23.000
它就是input一個S,
link |
13:25.000
它output一個scalar,
link |
13:26.000
它output的這個scalar,
link |
13:28.000
就是這邊這個T,
link |
13:30.000
就是這邊這個T,
link |
13:31.000
所以我們把這個T用D of X取代掉,
link |
13:34.000
我們希望說,
link |
13:35.000
我們可以認出一個function,
link |
13:37.000
這個function,
link |
13:38.000
我們不要解這個max的problem,
link |
13:40.000
我們不要解這個max的problem,
link |
13:41.000
本來應該是說,
link |
13:42.000
給你P,
link |
13:44.000
給你P of X,
link |
13:46.000
給你Q of X,
link |
13:47.000
給你F star長什麼樣子,
link |
13:49.000
你重舉所有的T,
link |
13:50.000
看哪一個T可以讓這個值最大,
link |
13:52.000
那這個就是你在小括號裡面的值,
link |
13:54.000
在小括號裡面的值,
link |
13:56.000
希望大家聽得懂這樣子。
link |
13:58.000
接下來我們要找一個discriminator,
link |
14:01.000
這個discriminator幫我們解這個max的problem,
link |
14:05.000
這個discriminator怎麼幫我們解max的problem呢,
link |
14:08.000
它就是input一個S,
link |
14:11.000
它告訴我們說,
link |
14:12.000
你現在input這個S以後,
link |
14:15.000
到底哪一個T可以讓這個值最大,
link |
14:18.000
它是一個,
link |
14:19.000
這個D就是要做這件事,
link |
14:21.000
但是因為假設D的capacity是有限的,
link |
14:25.000
那你今天把這個T換成D of X,
link |
14:28.000
你今天把這個T換成D of X,
link |
14:30.000
這一下就會變成是F divergence的一個lower bound,
link |
14:36.000
F divergence的一個lower bound。
link |
14:41.000
好,然後接下來你再把它展開,
link |
14:44.000
你再把它展開,
link |
14:45.000
這邊Q可以刪掉,
link |
14:46.000
所以變成P of X乘上D of X,
link |
14:48.000
減掉Q of X乘上F star of D of X,
link |
14:54.000
那就把這個式子列上來,
link |
14:56.000
因為我現在說我們要找一個D,
link |
14:58.000
因為如果你隨便找一個D,
link |
15:00.000
它一定是,
link |
15:01.000
它會比這個F divergence的值還要小,
link |
15:04.000
如果你找一個最好的D,
link |
15:07.000
它預測出來的T是最準的,
link |
15:10.000
你就可以去逼近F divergence,
link |
15:13.000
所以我們找一個D,
link |
15:14.000
它可以maximize後面這一項,
link |
15:18.000
它就可以去逼近F divergence,
link |
15:20.000
所以F divergence的這個式子,
link |
15:22.000
會等於找一個D,
link |
15:24.000
它可以maximize後面這一項,
link |
15:26.000
後面這一項是什麼呢?
link |
15:27.000
後面這一項是,
link |
15:28.000
對所有的X所有積分,
link |
15:29.000
P of X乘上D of X,
link |
15:31.000
減掉對所有的X所有積分,
link |
15:32.000
Q of X乘上F star of D of X,
link |
15:36.000
接下來我就要跟你說,
link |
15:38.000
它跟Games有什麼關係,
link |
15:40.000
這個式子我們可以寫成是,
link |
15:42.000
對P of X就是一個機率,
link |
15:44.000
P of X是一個機率,
link |
15:46.000
對P of X所有積分,
link |
15:47.000
乘上D of X,
link |
15:48.000
就等於是用P這個distribution,
link |
15:51.000
對D of X取期望值,
link |
15:53.000
這邊是用F star of D of X這個值,
link |
15:57.000
然後用Q這個distribution,
link |
16:00.000
對F star of D of X取期望值,
link |
16:03.000
接下來,
link |
16:06.000
這邊我們只是換了一下名字,
link |
16:10.000
我們把P改成P theta,
link |
16:12.000
我們把Q改成PG,
link |
16:16.000
所以今天P theta跟PG之間的F divergence,
link |
16:21.000
就可以寫成後面這個式子,
link |
16:24.000
你的F divergence是什麼,
link |
16:26.000
就會影響到這個F star你放的是什麼,
link |
16:31.000
所以今天假如你的F divergence是KL divergence,
link |
16:36.000
那你就看KL divergence的F star是什麼,
link |
16:39.000
KL divergence的F是X log X,
link |
16:42.000
它的F star是exponential T減1,
link |
16:46.000
所以這個F star就在exponential T減1,
link |
16:49.000
就這樣子,
link |
16:51.000
你看這個式子跟電看起來的式子,
link |
16:54.000
怎麼看起來這麼像呢,
link |
16:58.000
你想想看,
link |
16:59.000
我們今天在train一個generator的時候,
link |
17:01.000
我們要做的事情,
link |
17:03.000
就是去minimize某一個divergence,
link |
17:06.000
某一個F divergence,
link |
17:07.000
KL divergence,
link |
17:08.000
JX divergence,
link |
17:09.000
reverse KL divergence等等,
link |
17:11.000
而這個divergence,
link |
17:12.000
我們就可以把它寫成這個式子,
link |
17:15.000
隨著你要用什麼divergence,
link |
17:17.000
你這F star就換不同的式子,
link |
17:20.000
你就是在量不同的divergence,
link |
17:24.000
而這個東西,
link |
17:25.000
就是我們說在train gain的時候,
link |
17:28.000
你要用discriminator去maximize,
link |
17:30.000
你的generator要去minimize,
link |
17:32.000
the objective function V of GD,
link |
17:34.000
只是V of GD的定義不同,
link |
17:36.000
你就是在量不同的divergence,
link |
17:39.000
你設某種樣子,
link |
17:40.000
它就是在量JX divergence,
link |
17:42.000
你設另外一種樣子,
link |
17:43.000
你就是在量KL divergence,
link |
17:47.000
那這邊這個就是從Payment上面,
link |
17:49.000
它就告訴你說,
link |
17:50.000
各種不同的divergence的objective function,
link |
17:53.000
都幫你列好了啦,
link |
17:55.000
就選一個你自己喜歡的,
link |
17:57.000
這個是total variance,
link |
17:58.000
這是KL,
link |
17:59.000
reverse KL,
link |
18:00.000
Pearson,
link |
18:02.000
Jeffery,
link |
18:03.000
JS,
link |
18:05.000
然後其實gain那個不算是JS,
link |
18:06.000
它跟JS有一點點不一樣,
link |
18:08.000
它的式子也列在這邊,
link |
18:10.000
所以說你可以去optimize,
link |
18:13.000
各種不同的你喜歡的divergence,
link |
18:17.000
可以optimize不同的divergence,
link |
18:19.000
到底有什麼厲害的地方呢?
link |
18:22.000
它厲害的地方是,
link |
18:23.000
也許這一招可以解決,
link |
18:25.000
一個長期以來困擾著大家的問題是,
link |
18:27.000
當你change gain的時候,
link |
18:29.000
你會遇到一個現象叫做more complex,
link |
18:32.000
more complex的意思是說,
link |
18:33.000
你的real data的distribution是比較大,
link |
18:36.000
但是你generate出來的example,
link |
18:39.000
它的distribution非常的小,
link |
18:41.000
舉例來說,
link |
18:42.000
你在自己做這個二次元人物生成的時候,
link |
18:44.000
如果你update iteration太多,
link |
18:46.000
你得到的結果可能會是這樣,
link |
18:48.000
你會發現某一張特定的人臉,
link |
18:51.000
它就開始蔓延了,
link |
18:53.000
它就開始蔓延,
link |
18:54.000
變得到處都是這樣,
link |
18:55.000
可是它這些人臉,
link |
18:56.000
其實也是略有不同的,
link |
18:57.000
這個是比較偏黃,
link |
18:58.000
這個是比較偏紅,
link |
18:59.000
但是它們都是,
link |
19:01.000
看起來就像是同一張人臉,
link |
19:03.000
也就是說你今天產生出來的distribution,
link |
19:06.000
它會越來越小,
link |
19:08.000
而最後會發現同一張人臉不斷反覆的出現,
link |
19:13.000
那這個case叫做more complex,
link |
19:15.000
那有另外一個case,
link |
19:18.000
比more complex稍微輕微一點,
link |
19:20.000
叫做more dropping,
link |
19:22.000
意思是說,
link |
19:23.000
你的distribution其實有很多個mode,
link |
19:25.000
假設你的real distribution是兩群,
link |
19:28.000
但是你的generator,
link |
19:29.000
只會產生同一群而已,
link |
19:32.000
它沒有辦法產生兩群不同的data,
link |
19:35.000
舉例來說,
link |
19:36.000
你可能train一個人臉的產生系統,
link |
19:39.000
你會發現說,
link |
19:40.000
它產生出來的人臉,
link |
19:42.000
長得是這個樣子,
link |
19:43.000
你仔細一看覺得,
link |
19:45.000
看起來都還可以,
link |
19:47.000
也許沒有什麼太大的問題,
link |
19:48.000
但你發現你在update一次參數以後,
link |
19:51.000
在update一次generator參數以後,
link |
19:53.000
產生出來的image變成這樣,
link |
19:55.000
所以發現說,
link |
19:56.000
其實剛才在前面產生的image,
link |
19:58.000
它沒有產生黃皮膚的人,
link |
20:01.000
它是產生皮膚色比較偏白的人,
link |
20:05.000
它沒產生黃皮膚的人,
link |
20:06.000
但是你再update一次,
link |
20:08.000
它就變成產生黃皮膚的人,
link |
20:10.000
就沒產生白皮膚的人,
link |
20:12.000
再update一次,
link |
20:13.000
它就變成產生黑皮膚的人,
link |
20:15.000
而且它每次都只能夠產生,
link |
20:16.000
某一種膚色的人這樣子,
link |
20:19.000
感覺好像是不太ok的,
link |
20:21.000
為什麼會發生這種現象呢?
link |
20:27.000
一個遠古的猜測是,
link |
20:29.000
也許是因為我們divergence選的不好,
link |
20:33.000
如果今天你的data distribution,
link |
20:38.000
是藍色這樣子的分布,
link |
20:40.000
你的generator distribution,
link |
20:42.000
它只能夠有一個mixture,
link |
20:44.000
它是綠色的虛減的分布,
link |
20:46.000
如果你選不同的divergence,
link |
20:48.000
它們就會,
link |
20:50.000
你最後optimize的結果,
link |
20:52.000
你最後選出來,
link |
20:53.000
可以minimize divergence的generator distribution,
link |
20:57.000
你會發現就是不一樣,
link |
20:59.000
假設你現在去minimize KL divergence,
link |
21:01.000
你用maximum likelihood的方法,
link |
21:03.000
去minimize KL divergence,
link |
21:05.000
那你的generator,
link |
21:06.000
最後認為最好的distribution,
link |
21:09.000
長的是這個樣子,
link |
21:11.000
可以發現說,
link |
21:12.000
假設你的generator distribution,
link |
21:14.000
長的是這個樣子,
link |
21:15.000
你從它裡面去sample data,
link |
21:16.000
你sample在mixture之間,
link |
21:18.000
結果反而會是差的,
link |
21:20.000
所以這可以解釋,
link |
21:21.000
為什麼過去沒有gain的時候,
link |
21:24.000
我們是在minimize KL divergence,
link |
21:26.000
我們是在maximum likelihood,
link |
21:27.000
我們產生的圖片會那麼模糊,
link |
21:29.000
也許就是因為我們產生的distribution,
link |
21:31.000
是這個樣子的,
link |
21:32.000
我們在sample的時候,
link |
21:33.000
其實並不是真的在data density很高的地方sample,
link |
21:38.000
而是會sample在data density很低的地方,
link |
21:41.000
所以這個地方就對應到模糊的圖片,
link |
21:45.000
有人就說,
link |
21:46.000
如果你覺得是KL divergence所造成的,
link |
21:51.000
如果你換別的divergence,
link |
21:54.000
比如說你換inverse的KL divergence,
link |
21:57.000
那你就會發現說,
link |
21:59.000
對generator來說,
link |
22:00.000
最好的distribution是完全跟某個mode一模一樣,
link |
22:08.000
就因為如果你看這個inverse KL divergence的事,
link |
22:11.000
你就會發現說,
link |
22:12.000
對它來說,
link |
22:13.000
如果它產生出來的data,
link |
22:16.000
是原來的distribution,
link |
22:18.000
藍色的distribution,
link |
22:19.000
沒有涵蓋它penalty比較大,
link |
22:20.000
所以如果你選擇inverse KL divergence,
link |
22:23.000
那你的generator就會選擇集中在某一個mode就好,
link |
22:28.000
而不是分散在不同的mode,
link |
22:30.000
而我們傳統的GAM的JS divergence,
link |
22:33.000
它比較接近inverse KL divergence,
link |
22:36.000
這也許解釋了為什麼你train一下GAM的時候,
link |
22:39.000
你會產生出來,
link |
22:40.000
你會有mode collapse,
link |
22:42.000
或者是mode dropping的情形,
link |
22:44.000
因為對你的generator來說,
link |
22:46.000
產生這種mode collapse或mode dropping的情形,
link |
22:49.000
其實反而是比較optimal的,
link |
22:53.000
所以今天FGAM的厲害的地方就是,
link |
22:56.000
如果你覺得是JS divergence的問題,
link |
22:58.000
那現在你可以換了,
link |
22:59.000
你可以換KL divergence,
link |
23:01.000
但結果就是換不同的divergence,
link |
23:03.000
mode dropping的case,
link |
23:04.000
狀況還是一樣,
link |
23:05.000
所以看起來不是mode dropping,
link |
23:08.000
或者是mode collapse的問題,
link |
23:09.000
並不完全是選擇不同的divergence所造成的,
link |
23:15.000
那你趕快問說,
link |
23:16.000
那我要怎麼解決mode collapse的問題呢?
link |
23:18.000
你在做作業的時候,
link |
23:20.000
你很有可能會遇到mode collapse的問題,
link |
23:22.000
我們不是要求大家要產生25張圖嗎?
link |
23:25.000
你的generator可能會,
link |
23:27.000
產生出來的圖通通都是一樣的,
link |
23:29.000
那你這樣就會被扣分了,
link |
23:31.000
那要怎麼避免這個情形呢?
link |
23:32.000
這邊有一個,
link |
23:34.000
其實做得好的同學都會這麼做的,
link |
23:36.000
就是做ensemble,
link |
23:37.000
什麼意思呢?
link |
23:39.000
今天要你產生25張圖片,
link |
23:41.000
你就train25個generator,
link |
23:44.000
然後你的每一個generator,
link |
23:46.000
也許它都mode collapse,
link |
23:47.000
也許你的generator1只會產生這樣的圖,
link |
23:49.000
generator2只會產生這樣的圖,
link |
23:51.000
但沒有關係,
link |
23:52.000
你有25個generator,
link |
23:54.000
所以實際上塑膠在run你的code的時候,
link |
23:56.000
其實是跑了25個generator,
link |
23:58.000
每個generator會產生一張image,
link |
24:01.000
但是對使用者來說,
link |
24:03.000
那些使用者並不知道你有很多的generator,
link |
24:06.000
那所以你產生出來的結果,
link |
24:08.000
看起來就會diverse,
link |
24:10.000
這是一個我覺得最有效可以避免mode collapse的問題,
link |
24:14.000
要一個月?
link |
24:17.000
不會啊,
link |
24:18.000
你就train25個generator而已,
link |
24:20.000
假設一個train3小時,
link |
24:22.000
也是幾天就train完了,
link |
24:23.000
對不對?
link |
24:30.000
好,其實今天要講的呢,
link |
24:32.000
大概就是這個樣子,
link |
24:33.000
我們請塑膠來講一下342,
link |
24:59.000
慢慢講就好。