back to index

Improved Generative Adversarial Network


link |
00:01.000
各位同學大家好,我們就開始上課吧。
link |
00:07.000
好,那趁同學一邊慢慢入座之前呢,我們就先很快的go over我們今天要上的內容,然後很快複習一下之前說過的東西。
link |
00:19.000
那今天呢,我們要繼續講Gan,然後上次呢,我們已經講了Gan的這個basic的idea。
link |
00:28.000
那今天呢,我們要更進一步講說Gan呢,它的unified framework是長什麼樣子。
link |
00:35.000
有一個unified framework呢,來統設Gan的這個process。
link |
00:40.000
那接下來呢,我們要講Gan的一個現在最知名的變化,就是WGAN。上次已經調查過了,隨便路邊sample一個人,通通都知道WGAN是什麼。
link |
00:51.000
然後接下來呢,在這個圖上的右半部,我們要講的是如何生成。
link |
00:58.000
也就是說,比如說,機器可以畫出圖,或者是合成出句子。
link |
01:04.000
那在這個outline的左半邊綠色的部分呢,我們要講的是轉換。
link |
01:11.000
給機器一個輸入,它把這個輸入轉換成另外一個東西。
link |
01:15.000
比如說像我們在座位裡面做的,給它一個句子,它把它合成一張圖片。
link |
01:20.000
或者是給它一張黑白的圖片,讓它合成出彩色的圖片等等。
link |
01:25.000
好,那等一下在講transformation的時候,又分成兩部分。
link |
01:29.000
一部分呢,是說假設我們有pair的data,另外一部分是更進一步假設我們是沒有pair的data。
link |
01:37.000
好,那我們先很快地複習一下我們上次說的內容。
link |
01:43.000
好,這個部分如果你覺得太快的話,你就舉手打斷。
link |
01:47.000
好,那現在我們要說的是生成。
link |
01:50.000
什麼意思呢?假設給機器看很多動畫的圖,它能不能夠自動畫出動畫的圖。
link |
01:58.000
我們上次已經示範過,畫出來就有這個樣子。
link |
02:01.000
如果擷取其中幾張的話,應該可以騙過87%的人。
link |
02:06.000
好,那這個要怎麼做呢?我們要用的技術就是generative adversarial的network。
link |
02:14.000
那我們知道說做這種生成的task其實有千千百百種的方法。
link |
02:19.000
舉例來說,如果你看B.M.Buffalo的教科書,它在第20章通通都是在講各式各樣的generative的model。
link |
02:27.000
但我們知道說,現在在做這種generative的model,最新的技術就是這個generative的adversarial network,也就是game。
link |
02:35.000
所以呢,我們就直接講game。
link |
02:38.000
那其實今天他講的這些內容呢,並沒有在教科書上被cover。
link |
02:43.000
我相信你也沒有辦法在任何其他地方聽到,因為今天講的技術大部分都是在今年,甚至是一個月之前被develop出來。
link |
02:53.000
但我們這門課就是要這個,因為我們已經有另外一門機器學習的課,他講的是basic的技術。
link |
03:00.000
那我們這門課呢,就是要target在最前沿的技術,就是要與時俱進。
link |
03:05.000
好,那這個game呢,講的是什麼呢?
link |
03:08.000
那basic idea是這樣,我們要做的事情是說,我們現在已經有一個target distribution。
link |
03:14.000
這個target distribution呢,我們寫作pθ的x,這個是我們希望machine可以生成的,可以找到的這個distribution。
link |
03:25.000
這邊的x可以是任何東西,在我們之前舉的例子裡面,x你就可以想成是一張圖片。
link |
03:33.000
好,在這個圖上呢,我們假設藍色的這個區域裡面,代表的是p of x的值是高的部分。
link |
03:40.000
而藍色區域以外的代表的是p of x的值是低的部分。
link |
03:45.000
而如果你從p of x的值是高的部分,去sample一個x出來,我們現在的x是image。
link |
03:51.000
所以你在藍色區域裡面sample出來的image呢,會是看起來像模像樣的image。
link |
03:56.000
如果是在藍色區域外面sample到的,就會是很模糊的圖。
link |
04:00.000
現在我們要機器做的事情就是找出這個pθ的x。
link |
04:05.000
這樣,你從這個pθ of x去sample出x的話,你就可以讓機器畫出以假亂真的圖了。
link |
04:13.000
那怎麼做呢?我們要找的是一個generator。
link |
04:16.000
這個generator呢,這邊用g來表示。
link |
04:20.000
generator就是一個neural network,我們知道neural network就是一個function。
link |
04:23.000
你丟一個東西進去,它就output一個東西出來。
link |
04:25.000
丟一個vector進去,它就output另外一個vector出來。
link |
04:28.000
所以現在如果你丟一個vector z進去,它就output一個vector x出來。
link |
04:32.000
如果x的dimension跟image一樣,你就可以把它看作是一張圖。
link |
04:36.000
那我們現在丟進去的x,其實不是一個point,而是一個normal distribution。
link |
04:43.000
如果我們丟進去的是一個normal distribution,那通過g這個function的轉換以後,
link |
04:48.000
那我們的輸出就是另外一個distribution。
link |
04:51.000
這個distribution是什麼,我們不知道。
link |
04:53.000
它可能不是你叫得出名字的distribution,比如說Gaussian mixture model等等。
link |
04:57.000
它不是你叫得出名字的東西,因為g是一個neural,它可能有很多個layer。
link |
05:01.000
所以經過這個轉換以後,你得到的distribution,
link |
05:04.000
你根本不知道是什麼,它是個異常複雜的東西。
link |
05:07.000
我們這邊就用Pg of x來描述它,來表示它。
link |
05:11.000
那麼這邊要做的事情就是,我們希望找到這個G,
link |
05:16.000
也就是調這個network裡面的參數,讓這個generator output的這個綠色的distribution
link |
05:21.000
跟藍色的distribution越接近越好,跟我們要找的這個distribution的越接近越好。
link |
05:26.000
這邊的難點是在於,我們沒有辦法直接去計算Pg of x,
link |
05:32.000
也就是說,給我們一個x,你沒有辦法算出Pg of x是多少。
link |
05:37.000
如果我們可以算Pg of x是多少,你可以maximum likelihood,
link |
05:42.000
但是我們現在沒有辦法算Pg of x是多少。
link |
05:45.000
所以給一筆data,我們根本不知道這個model產生這筆data的likelihood是多少。
link |
05:50.000
我們唯一能做的事情,只有sample。
link |
05:53.000
所以GaN的basic idea是這樣,有一個第一代的generator,
link |
05:57.000
一開始我們不知道generator的參數是多少,所以它幾乎是隨機的。
link |
06:01.000
然後呢,你給它從normal distribution裡面sample出一個橘色的點,
link |
06:07.000
丟到這個generator裡面,因為這個generator它是一個很弱的generator,
link |
06:11.000
它的參數幾乎是隨機的,所以它output的東西就是奇奇怪怪的圖,
link |
06:16.000
看起來非常模糊的圖。
link |
06:18.000
那你丟不同的點,你從GaN,你從normal distribution裡面sample多次,
link |
06:23.000
你就sample出不同的圖出來。
link |
06:26.000
好,那接下來呢,我們要找一個discriminator。
link |
06:31.000
雖然我們要的東西只有generator,但是我們要另外訓練一個discriminator。
link |
06:36.000
這個discriminator它的作用呢,就是要來引導這個generator。
link |
06:42.000
我發現投影片上有一個錯誤,有人發現嗎?
link |
06:45.000
這個discriminator啊,就拼錯了這樣子。
link |
06:49.000
好,那我們丟一張,這個discriminator它做的事情就是你丟一張image進去,
link |
06:54.000
它會輸出一個0到1之間的值,那它代表的意思就是,
link |
06:58.000
這個輸入的image它看起來像不像是真的。
link |
07:02.000
如果輸入的這個image越像是真的,那這個discriminator輸出的值就越大。
link |
07:08.000
那同時我們會有另外一組真正的image,realistic的image,真正人化的image。
link |
07:14.000
那discriminator要做的事情就是,它要學習說這些generator所產生的image,
link |
07:20.000
它都是不好的,所以discriminator output的數值就要是0。
link |
07:24.000
那這個database裡面真正人手畫的image呢,那它輸出就要是1。
link |
07:32.000
那我們上次已經證明過說,這個discriminator它的loss跟
link |
07:41.000
這兩個distribution是有關係的。
link |
07:45.000
也就是說如果今天discriminator經過訓練以後,它的loss越大,
link |
07:49.000
代表這兩個distribution它們越接近,越沒有辦法被分開。
link |
07:55.000
那接下來呢,generator要做的事情呢,就是update它的參數。
link |
08:01.000
它希望update它的參數,使得它所generate的這些image會被discriminator label成1。
link |
08:10.000
就它希望update它的參數,使得它在產生image的時候,
link |
08:14.000
它產生的image會被discriminator誤認為是realistic的。
link |
08:20.000
那接下來呢,discriminator也會update它的參數,
link |
08:24.000
使得第二代的generator所generate出來的這些image被它判斷是0。
link |
08:33.000
然後呢,這些真正的image仍然被判斷是1。
link |
08:38.000
然後接下來呢,generator還會再update參數。
link |
08:41.000
這個process就反覆的進行,直到你覺得generator產生的image夠好為止。
link |
08:48.000
那這邊呢,有另外一個直觀的解釋來說明說,
link |
08:53.000
當我們有一個generator,有一個discriminator的時候,
link |
08:56.000
它們中間做的事情,到底是做了什麼樣的事情。
link |
09:00.000
這個藍色的,這個綠色的點啊,代表的是真正的data的distribution。
link |
09:05.000
也就是說,你可以想成每一個藍色的點代表的是人所畫的一張圖,
link |
09:11.000
如果你今天是要讓機器學會自動畫圖的話。
link |
09:14.000
那藍色的點代表的是機器現在的generator,它所畫出來的圖。
link |
09:20.000
那這個藍色的曲線,綠色的曲線跟藍色的曲線代表的是data的distribution,
link |
09:27.000
還有generator產的distribution。
link |
09:31.000
那discriminator做的事情呢,我們剛才說discriminator做的事情就是,
link |
09:35.000
它要讓綠色的那些點輸入discriminator以後,它的輸出就是接近1。
link |
09:40.000
藍色那些點輸入discriminator以後,它的輸出就是接近0。
link |
09:43.000
所以如果你訓練了一個discriminator,
link |
09:46.000
如果我們今天假設呢,是在一維的空間上,
link |
09:50.000
這個discriminator的輸入是一維的空間的話,
link |
09:53.000
那discriminator要讓綠色的這些點輸出是1,
link |
09:57.000
藍色的這些點輸出接近0,那它長的樣子可能就像是這個樣子。
link |
10:01.000
接下來呢,我們要調generator的參數,
link |
10:04.000
使得generator所產生的點,會讓discriminator覺得也是1。
link |
10:09.000
那如果我們要做這件事情的話,就會使得這些藍色的點,
link |
10:14.000
因為我們希望藍色的點呢,可以,
link |
10:17.000
因為現在discriminator output1的地方是在這個區域,
link |
10:20.000
所以藍色的點呢,就會向右移。
link |
10:24.000
因為他們呢,也希望被discriminator認為是1,
link |
10:27.000
所以藍色的點就向右移。
link |
10:29.000
不過我們在調這個network的時候,
link |
10:31.000
你在調network的參數其實是很麻煩的。
link |
10:33.000
所以呢,你很難update一次參數以後,
link |
10:36.000
正好就落在你想要的distribution上面。
link |
10:40.000
所以有可能update參數以後,跑過頭了,
link |
10:43.000
那你現在generated藍色的distribution,
link |
10:46.000
跑到realistic的distribution的右邊。
link |
10:50.000
接下來呢,你就再訓練一個新的另外一個discriminator。
link |
10:55.000
這個discriminator看了這一組綠色和藍色的data,
link |
10:58.000
他要把藍色的dataassign值是0,
link |
11:00.000
綠色的dataassign值是1,
link |
11:02.000
所以他的曲線就變成另外一個樣子。
link |
11:05.000
這個時候,根據這個discriminator,
link |
11:07.000
藍色的點會往左移,
link |
11:09.000
因為藍色的點呢,會希望挪到讓discriminator的值呢,
link |
11:12.000
接近1的位置。
link |
11:14.000
所以discriminator的值呢,就會,
link |
11:16.000
generator這些藍色點的值呢,就會往左移,
link |
11:20.000
那可能變成這個樣子。
link |
11:22.000
那他們的process就反覆的在進行,
link |
11:24.000
你再產生一個discriminator,
link |
11:26.000
這個discriminator希望藍色的值是0,
link |
11:28.000
綠色的點的值是1,
link |
11:30.000
不過因為現在藍色跟綠色的點很靠近,
link |
11:32.000
所以他沒有辦法完全做到這件事情,
link |
11:35.000
可能只能讓綠色的點的值比藍色的點稍微高一點而已。
link |
11:39.000
這時候藍色的點呢,再稍微往右移。
link |
11:41.000
最後呢,當藍色點跟綠色點完全重合的時候,
link |
11:45.000
discriminator已經沒有辦法讓藍色點和綠色點有不同的值,
link |
11:49.000
這個時候discriminator會assign給藍色點和綠色點一模一樣的值,
link |
11:54.000
他會給這個空間上的每一個點一模一樣的值,
link |
11:58.000
這個時候呢,整個discriminator他就是平的,
link |
12:01.000
那這個時候呢,你的generator就沒有目標可以繼續去update,
link |
12:06.000
那整個process就會停止。
link |
12:08.000
那這邊呢,其實有一個example,有一個toy example呢,
link |
12:13.000
就是告訴你說,實際上這整個process是怎麼運作的。
link |
12:17.000
在這個圖上呢,這是一個二維的平面啦,
link |
12:21.000
所以現在你要產生的這個x是二維的,
link |
12:24.000
但實際上在真的要做realistic task的時候呢,
link |
12:27.000
你要產生的data point x是非常high dimensional的,
link |
12:31.000
那你要visualize就只能用二維而已。
link |
12:33.000
那在這個二維的圖上呢,
link |
12:35.000
藍色的點代表real的data distribution,
link |
12:38.000
他就一點而已。
link |
12:40.000
紅色的點呢,代表你現在的network generator的distribution,
link |
12:44.000
他也就是一點而已。
link |
12:46.000
那這個圖上面的這個顏色啊,
link |
12:49.000
代表的是這個discriminator的value,
link |
12:53.000
那越接近白色呢,就代表越接近1,
link |
12:57.000
而越接近紅色呢,就代表越接近0。
link |
13:01.000
那我們呢,實際來看一下這個generator跟discriminator呢,
link |
13:06.000
他的運作的情形。
link |
13:08.000
誒,這個沒有辦法跑。
link |
13:11.000
我發現說呢,我只要換回那個鍵號的時候呢,
link |
13:17.000
他才能跑。
link |
13:21.000
所以這樣你看得懂嗎?
link |
13:23.000
就是discriminator呢,不斷地改變他的方向,
link |
13:27.000
然後每次呢,都要把generator,
link |
13:29.000
也就是藍色的點呢,去往綠色的點挪。
link |
13:33.000
那到最後當藍色點跟綠色點重合在一起的時候,
link |
13:36.000
discriminator沒有辦法給他們不同的值,
link |
13:38.000
這個時候他就功成身退,
link |
13:40.000
他給這整個圖上每一個點呢,一樣的值。
link |
13:43.000
也許我們可以再看一次,你看,
link |
13:45.000
藍色的點是你的data generator的點,
link |
13:47.000
然後他會被你的discriminator呢,
link |
13:49.000
一直引導掃來掃去,
link |
13:51.000
直到他最後停在綠色的點上面。
link |
13:56.000
好,這整個game的process呢,就是這樣。
link |
13:59.000
但實際上我們要處理的是高危的問題,
link |
14:01.000
遠比這個要複雜得多得多了。
link |
14:03.000
那實際上我們在做game的時候,他是怎麼運作的呢?
link |
14:06.000
那這個algorithm我們上次是講過了,
link |
14:08.000
所以這次可以稍微講快一點。
link |
14:10.000
我們有一個discriminator,
link |
14:13.000
他其實是由一組參數θD所決定的,
link |
14:15.000
我們有一個generator,
link |
14:16.000
他其實是由一組參數θG所決定的。
link |
14:19.000
在每一個training的iteration裡面,
link |
14:21.000
我們都要sample m比data,
link |
14:23.000
我們要從我們的pdata裡面sample m比data,
link |
14:27.000
如果我們現在要做影像的生成,
link |
14:29.000
那pdata呢,就是你的影像的database,
link |
14:31.000
你就從你的影像的database裡面隨機抽取出m張圖片來。
link |
14:36.000
那接下來呢,你要讓你的discriminator也產生,
link |
14:39.000
呃,不是discriminator,說錯了,
link |
14:40.000
你要讓你的generator也產生m張圖片。
link |
14:43.000
那你的generator怎麼產生m張圖片呢?
link |
14:45.000
你要丟給他一個從normal distribution sample出來的vector,
link |
14:50.000
然後他從那個vector變成一張圖片。
link |
14:52.000
所以先從normal distribution,
link |
14:53.000
這邊寫成ppyalg,
link |
14:56.000
其實這個ppyalg不一定要是normal啦,
link |
14:58.000
呃,你只是通常都設成normal,其實他要是任何東西都可以的,
link |
15:02.000
呃,這個是隨你高興。
link |
15:04.000
好,我們一個ppyalg的distribution,
link |
15:06.000
大家從裡面sample出z1到zn,
link |
15:09.000
然後把z1到zn丟到generator裡面,
link |
15:12.000
他產生x1到xn,
link |
15:15.000
我們用delta呢,來代表說這些x是machine generated出來的,
link |
15:20.000
他不是真的x,不是真的image。
link |
15:24.000
好,那接下來我們要做的事情就是調整參數θD,
link |
15:29.000
調整discriminator的參數θD。
link |
15:31.000
這個discriminator的參數θD,
link |
15:33.000
他要做的事情是要maximize下面這個function。
link |
15:37.000
喔,呃,也許你已經忘了下面這個function是怎麼回事了,
link |
15:41.000
但是你還是可以很直覺的理解它。
link |
15:43.000
下面這個function,
link |
15:44.000
如果你要maximize它的話呢,
link |
15:46.000
呃,你要maximize它的話,
link |
15:47.000
你會希望logD of x的值越大越好。
link |
15:50.000
也就是說,
link |
15:51.000
一個realistic image discriminator要讓它的D越大越好。
link |
15:55.000
另外呢,這個x delta,
link |
15:58.000
d log x delta是放在log1-D裡面,
link |
16:02.000
所以如果我們要讓V的值越大越好,
link |
16:05.000
意味著我們希望這一項的值越小越好。
link |
16:08.000
discriminator希望給real data比較大的value,
link |
16:11.000
給假的data比較小的value。
link |
16:14.000
然後呢,就用gradient descent去找一個θD,
link |
16:18.000
它可以maximize這邊這個式子,
link |
16:21.000
它可以maximize這邊這個式子的detail。
link |
16:24.000
那走過這個process以後,
link |
16:26.000
我們就找到了我們的discriminatorVD。
link |
16:30.000
那在實作上呢,
link |
16:31.000
根據原來的GAMEPAPER的建議,
link |
16:34.000
我們應該repeat這個processK次。
link |
16:36.000
雖然Bianca Fellow,
link |
16:38.000
GAMEPAPER的作者,
link |
16:40.000
她說,嗯,她雖然建議repeatK次,
link |
16:42.000
但是她personal並不repeatK次。
link |
16:45.000
我們等一下會講說為什麼會這個樣子。
link |
16:50.000
好,那接下來呢,要train generator。
link |
16:53.000
剛才找了一個discriminator,
link |
16:55.000
接下來要train這個generator。
link |
16:57.000
generator做的事情呢,
link |
16:59.000
就是我們另外呢,
link |
17:00.000
再去sample n個vector,
link |
17:02.000
從predistribution裡面sample n個vector出來。
link |
17:05.000
接下來呢,
link |
17:06.000
我們希望找generator的參數θG,
link |
17:09.000
這個generator的參數θG,
link |
17:11.000
它要使得這個vθ的值呢,越小越好。
link |
17:16.000
剛才discriminator要使vθ的值越大越好,
link |
17:19.000
現在generator要使vθ的值越小越好。
link |
17:22.000
但是vθ的第一項,
link |
17:24.000
是跟這個,
link |
17:26.000
vθ的第一項呢,
link |
17:28.000
是跟G,
link |
17:29.000
是跟這個G呢,完全無關的。
link |
17:31.000
它是real,
link |
17:32.000
這個xi是real的image,
link |
17:34.000
你調discriminate,
link |
17:35.000
你調generator的值,
link |
17:36.000
並沒有辦法影響這一項。
link |
17:38.000
所以這一項呢,
link |
17:39.000
就當作沒有看見。
link |
17:40.000
我們只希望後面這一項呢,
link |
17:42.000
越小越好。
link |
17:43.000
希望後面這一項越小越好的意思,
link |
17:45.000
就是希望D of G of Z,
link |
17:48.000
越大越好。
link |
17:49.000
你希望你把一個Z丟進去,
link |
17:51.000
通過這個G以後,
link |
17:52.000
它呢,
link |
17:53.000
可以讓X呢,
link |
17:54.000
output的值越大越好。
link |
17:56.000
這個是那個generator呢,
link |
17:57.000
想要完成的事情。
link |
17:59.000
然後呢,
link |
18:00.000
我們再update generator的參數,
link |
18:02.000
讓它能夠minimize上面這一個式子。
link |
18:05.000
那我們就完成training這個generator,
link |
18:07.000
這件事情。
link |
18:09.000
好,那有了這些東西以後,
link |
18:11.000
我們下一步呢,
link |
18:13.000
上一次只是很specific的告訴大家說,
link |
18:15.000
原來的game是怎麼做的。
link |
18:18.000
現在接下來呢,
link |
18:19.000
我們要進入全新的東西。
link |
18:22.000
這整個game的framework,
link |
18:24.000
到底是怎麼一回事。
link |
18:26.000
這一段呢,
link |
18:28.000
其實頗長的,
link |
18:29.000
我們要講三件事。
link |
18:31.000
第一件事是要告訴大家,
link |
18:32.000
什麼是f-diversions,
link |
18:34.000
再來告訴大家,
link |
18:35.000
什麼是franchise的conjugate,
link |
18:37.000
最後呢,
link |
18:39.000
把這些東西連接起來,
link |
18:40.000
我們才會發現說,
link |
18:41.000
經過這麼一長串的說明以後,
link |
18:43.000
原來這一切呢,
link |
18:45.000
都跟game是有關係的。
link |
18:47.000
所以大家先忍耐一下,
link |
18:48.000
這一段呢,
link |
18:49.000
是比較多數學的。
link |
18:51.000
好,那,
link |
18:53.000
這邊是這篇paper的reference,
link |
18:55.000
那它提出來的這個方法呢,
link |
18:57.000
它這個generalize的framework呢,
link |
18:59.000
它稱之為fgame,
link |
19:01.000
fgame是f-diversions game的縮寫,
link |
19:03.000
那它是發表在NIST的2016,
link |
19:06.000
NIST 2016是去年的11月舉辦的,
link |
19:10.000
所以這篇paper呢,
link |
19:11.000
到發表呢,
link |
19:12.000
還不到這個,
link |
19:14.000
還不到一年,
link |
19:16.000
但實際上呢,
link |
19:17.000
它放到網路上,
link |
19:18.000
它這個去年6月就已經放到網路上,
link |
19:20.000
所以它已經出現將近一年了。
link |
19:22.000
好,那這篇paper,
link |
19:23.000
如果我們要一句話來summarize它的話,
link |
19:26.000
假如等一下所有東西你不想聽的話呢,
link |
19:29.000
聽不下去的話呢,
link |
19:30.000
一句話summarize這個paper就是,
link |
19:32.000
我們原來在做game的時候,
link |
19:34.000
discriminator是跟js-diversions有關,
link |
19:38.000
其實那個discriminator,
link |
19:40.000
它可以跟任何f-diversions有關,
link |
19:44.000
你可以選,
link |
19:45.000
你可以設計你的discriminator,
link |
19:48.000
讓它跟任何f-diversions有關,
link |
19:51.000
那至於要選哪個f-diversions呢,
link |
19:53.000
就看你自己。
link |
19:55.000
好,那我們接下來呢,
link |
19:57.000
第一件要講的事情就是,
link |
19:59.000
什麼是f-diversions,
link |
20:02.000
我相信可能有人知道,
link |
20:03.000
但是也許有些人不知道,
link |
20:05.000
所以我們還是用幾句話,
link |
20:06.000
很快地告訴大家,
link |
20:07.000
什麼是f-diversions。
link |
20:09.000
f-diversions在做的事情是說,
link |
20:11.000
假設我們現在有兩個distribution,
link |
20:13.000
P跟Q,
link |
20:14.000
那這個P of X和Q of X分別代表說,
link |
20:17.000
從P跟Q這兩個distribution裡面,
link |
20:19.000
sample出X的機率,
link |
20:21.000
那在我們要考驗的process裡面,
link |
20:23.000
P跟Q可能分別就是,
link |
20:25.000
P比如說,
link |
20:26.000
P是我們要找的data distribution,
link |
20:28.000
Q是你的generator的distribution。
link |
20:31.000
那f-diversions呢,
link |
20:33.000
就是要量P跟Q它們有多不一樣。
link |
20:37.000
這個f-diversions的式子呢,
link |
20:39.000
是寫成這樣子的,
link |
20:41.000
怎麼量P跟Q有多不一樣呢?
link |
20:43.000
你把P of X跟Q of X
link |
20:45.000
代到以下這個式子裡面,
link |
20:47.000
以下這個式子是,
link |
20:48.000
積分over所有可能的X,
link |
20:51.000
然後把Q of X乘上f of P of X,
link |
20:55.000
除掉Q of X。
link |
20:57.000
那這個f它可以是很多不同的function,
link |
21:00.000
只要滿足下面這個constraint,
link |
21:02.000
第一個就是,
link |
21:03.000
f是convex的,
link |
21:04.000
第二個是,
link |
21:05.000
f of E等於0,
link |
21:07.000
它就是f-diversions,
link |
21:09.000
它就可以拿來衡量呢,
link |
21:11.000
P跟Q呢,
link |
21:13.000
有多不一樣。
link |
21:15.000
那為什麼我們說這個f-diversions
link |
21:17.000
可以拿來衡量P跟Q有多不一樣呢?
link |
21:19.000
因為,
link |
21:20.000
首先假設P等於Q,
link |
21:22.000
假設P跟Q這樣的distribution
link |
21:24.000
是一模一樣的,
link |
21:25.000
也就是說,
link |
21:26.000
P of X跟Q of X
link |
21:27.000
對所有的X它的值都是一樣。
link |
21:30.000
這個時候,
link |
21:31.000
你把這樣子的P跟Q
link |
21:32.000
代到上面這個f-diversions的式子裡面
link |
21:34.000
會發生什麼事呢?
link |
21:35.000
你會發現說呢,
link |
21:37.000
這個,
link |
21:38.000
因為P跟Q永遠都是一樣的,
link |
21:40.000
所以f裡面代的這個值等於1,
link |
21:43.000
f裡面代的值等於1,
link |
21:44.000
我們又假,
link |
21:45.000
我們又已經限制說f of E等於0,
link |
21:47.000
那,
link |
21:48.000
這個f這一項就變成0。
link |
21:52.000
f這一項變成0,
link |
21:53.000
前面的Q of X不管Q of X的值是多少,
link |
21:55.000
你最後得到的值都等於0。
link |
21:57.000
所以我們現在知道說,
link |
21:58.000
如果P跟Q是一模一樣的distribution,
link |
22:00.000
那,
link |
22:01.000
f-diversions衡量出來就是0。
link |
22:04.000
接下來我們說明的是,
link |
22:06.000
0是f-diversions可以得到的最小值。
link |
22:09.000
這個f-diversions,
link |
22:11.000
這一個式子啊,
link |
22:12.000
你算出來總是正,
link |
22:13.000
所以0是最小值。
link |
22:15.000
這件事怎麼證明呢?
link |
22:17.000
如果你對convex function熟悉的話,
link |
22:21.000
這個也是秒證,
link |
22:24.000
對不對?
link |
22:25.000
因為f是convex,
link |
22:27.000
假設你不熟悉的話,
link |
22:29.000
你就把這個結果背起來,
link |
22:31.000
因為這不是今天這堂課的重點。
link |
22:33.000
好,
link |
22:34.000
假設f是convex的話,
link |
22:36.000
你可以把f提出來,
link |
22:38.000
就變成這個樣子。
link |
22:40.000
然後你可以把Q消掉,
link |
22:43.000
你把Q消掉以後,
link |
22:44.000
這邊變成對P of X這個distribution,
link |
22:47.000
對所有的X做積分,
link |
22:50.000
那,
link |
22:51.000
一個distribution做積分,
link |
22:52.000
就等於1, f of EO等於0。
link |
22:54.000
所以我們知道說,
link |
22:55.000
f-diversions它的值一定大於等於0。
link |
22:58.000
所以從這些東西我們知道說,
link |
23:00.000
f-diversions之間的東西,
link |
23:02.000
它最小的值是0,
link |
23:03.000
當你要量這兩個distribution,
link |
23:05.000
它們一模一樣的時候,
link |
23:07.000
它們的值就是0。
link |
23:08.000
如果兩個distribution有點不一樣,
link |
23:10.000
你得到的會是一個正值。
link |
23:13.000
好,
link |
23:14.000
那f-diversions如果你不熟悉的話,
link |
23:16.000
KL-diversions你總是知道的吧?
link |
23:19.000
KL-diversions就是一種f-diversions。
link |
23:25.000
舉例來說,
link |
23:26.000
如果f of X我們代X log X,
link |
23:30.000
f of X我們代X log X,
link |
23:33.000
那意味著說,
link |
23:34.000
我們把這項f of P除以Q,
link |
23:37.000
變成P除以Q乘上log P除以Q,
link |
23:41.000
然後接下來呢,
link |
23:42.000
我們把Q呢,
link |
23:44.000
刪掉,
link |
23:45.000
我們把Q刪掉,
link |
23:46.000
我們就得到這樣的式子。
link |
23:47.000
這個式子我想你是熟悉的,
link |
23:49.000
它就是KL-diversions。
link |
23:52.000
或者是如果今天f of X代負log X,
link |
23:56.000
代負log X的話,
link |
23:58.000
那我們就是把f of P除以Q,
link |
24:00.000
變成負log P除以Q。
link |
24:02.000
負log P除以Q,
link |
24:04.000
你把這個負號拿進去,
link |
24:06.000
會讓PQ的這個分子分母調換,
link |
24:09.000
那你得到reverse的KL-diversions。
link |
24:13.000
這些是你是聽過的,
link |
24:14.000
你也可以弄一些你可能沒有那麼熟悉的,
link |
24:18.000
比如說,
link |
24:19.000
如果f of X是X-1平方,
link |
24:22.000
但你要先check一下X-1平方,
link |
24:24.000
它是不是convex,
link |
24:25.000
它是convex。
link |
24:27.000
如果1代進去,
link |
24:28.000
會發生什麼事?
link |
24:29.000
1代進去,
link |
24:30.000
你得到的值是0。
link |
24:31.000
所以符合我們上面說的這兩個條件,
link |
24:33.000
所以這個f of X可以是X-1平方。
link |
24:37.000
好,那我們把X-1平方代進去,
link |
24:40.000
本來是f of P除以Q,
link |
24:42.000
就變成P除以Q-1的平方。
link |
24:45.000
這個X換成P除以Q,
link |
24:47.000
就變成P除以Q-1的平方。
link |
24:52.000
然後計算一下,
link |
24:53.000
你就得到右邊這個式子。
link |
24:55.000
你把這個平方的部分展開,
link |
24:57.000
你把這個Q進去,
link |
25:03.000
你就得到這樣子的結果。
link |
25:05.000
這個其實就是high square。
link |
25:09.000
好,那講了這個f-diversions以後,
link |
25:11.000
接下來下一件事情,
link |
25:13.000
也跟game有點沒有關係,
link |
25:14.000
但是我們一定要講的是
link |
25:16.000
franchise的conjugate。
link |
25:18.000
這個我想大部分人可能就未必知道了。
link |
25:22.000
這franchise conjugate是什麼呢?
link |
25:24.000
franchise conjugate是說,
link |
25:27.000
這邊我們可能就需要慢一點,
link |
25:29.000
如果你有問題的話,
link |
25:30.000
你就打斷了。
link |
25:31.000
任何的,
link |
25:33.000
每一個convex function f,
link |
25:35.000
它都有一個conjugate,
link |
25:38.000
叫做f-star。
link |
25:40.000
每一個f,
link |
25:42.000
它都有一個朋友,
link |
25:45.000
有一個跟它配對的人,
link |
25:47.000
有一個夥伴,
link |
25:48.000
叫做f-star。
link |
25:50.000
這個f-star,
link |
25:51.000
它的定義可以來自於f。
link |
25:55.000
這個f-star長什麼樣子呢?
link |
25:57.000
這個f-star長得像是這個樣子。
link |
26:00.000
看到這個我知道你就暈眩了,
link |
26:02.000
對不對?
link |
26:03.000
這個是啥玩意兒?
link |
26:05.000
這個有一個max,
link |
26:07.000
max括號後面又有f不知道在做什麼。
link |
26:11.000
這個式子到底在做什麼呢?
link |
26:13.000
我們先,
link |
26:15.000
就如果你要一次,
link |
26:17.000
你可能很難一次想這個f-star t,
link |
26:19.000
到底應該是長什麼樣。
link |
26:21.000
但如果我們試著只算f-star t的其中一個值,
link |
26:25.000
你可能就比較清楚它是在做什麼。
link |
26:28.000
假設我們t呢,
link |
26:30.000
帶某一個specific的值是t1,
link |
26:33.000
那f-star of t呢,
link |
26:35.000
f-star of t1呢,
link |
26:37.000
是如果今天max的這個式子裡面,
link |
26:40.000
這個max的式子,
link |
26:42.000
如果這個max的式子裡面,
link |
26:44.000
把t帶一個specific的值,
link |
26:46.000
t1,
link |
26:47.000
那我們得到x乘t1,
link |
26:49.000
-f of x這個式子。
link |
26:51.000
那x呢,
link |
26:52.000
我們可以帶各種不同的值,
link |
26:54.000
唯一的限制是,
link |
26:55.000
x必須要落在f of x的domain裡面,
link |
26:58.000
不然你帶進去,
link |
26:59.000
f of x沒有定義的話,
link |
27:00.000
你沒辦法算。
link |
27:01.000
除了這個限制以外,
link |
27:02.000
沒有其他的限制,
link |
27:03.000
你找一個x,
link |
27:05.000
這個t1已經固定了,
link |
27:06.000
你找一個x,
link |
27:07.000
可以讓這個式子的值最大,
link |
27:09.000
就是f-star of t1而已。
link |
27:11.000
如果數學很好的同學,
link |
27:13.000
我知道說這邊的max,
link |
27:14.000
應該是super-null啦,
link |
27:16.000
應該是最小上階,
link |
27:18.000
但我知道在電子系,
link |
27:19.000
可能沒有哪一門科室,
link |
27:21.000
必修科室有講super-null的,
link |
27:23.000
所以我也許不應該假設你知道,
link |
27:25.000
所以就把它換成max。
link |
27:28.000
好,
link |
27:29.000
那,
link |
27:31.000
這個式子到底是什麼意思呢?
link |
27:33.000
如果要圖示化它的話,
link |
27:35.000
就是給定了t1,
link |
27:37.000
給定了t1,
link |
27:39.000
然後呢,
link |
27:40.000
我們x可以在不同的值,
link |
27:41.000
我x可以試個x1,
link |
27:43.000
x1乘以t1-f of x1,
link |
27:45.000
我可以得到一個數值,
link |
27:47.000
那我也可以試x2,
link |
27:50.000
x2乘以t1-f of x2,
link |
27:52.000
我得到另外一個數值,
link |
27:54.000
然後我可以試x3,
link |
27:55.000
t3我又得到另外一個數值,
link |
27:57.000
我又可以試x3,
link |
27:58.000
x3我又得到另外一個數值。
link |
28:00.000
我們可以在所有可能的x數值裡面,
link |
28:02.000
看看哪一個x,
link |
28:04.000
可以給我們最大的值。
link |
28:06.000
哪一個最大的值,
link |
28:08.000
比如說這邊我們假設,
link |
28:09.000
x1代進去以後,
link |
28:11.000
可以給我們最大的值,
link |
28:12.000
那這個值就是f star of t1。
link |
28:17.000
那同理呢,
link |
28:18.000
這邊只是同樣的事情再重複一遍,
link |
28:20.000
如果剛才沒聽清楚的話,
link |
28:22.000
等一下有機會再重聽一遍。
link |
28:24.000
這邊是說,
link |
28:25.000
有一個t2,
link |
28:27.000
ok,
link |
28:28.000
我們要算f star of t2,
link |
28:29.000
那就只是把t換成t2,
link |
28:32.000
那我們找一個x,
link |
28:33.000
讓這個大括號裡面的值最大。
link |
28:36.000
哪一個x可以讓大括號值最大呢?
link |
28:38.000
窮取所有的x,
link |
28:39.000
x1代進去試試看,
link |
28:41.000
得到一個值,
link |
28:42.000
x2代進去試試看,
link |
28:43.000
得到一個值,
link |
28:44.000
x3代進去試試看,
link |
28:45.000
得到一個值,
link |
28:46.000
但我們其實有無窮無盡的x,
link |
28:47.000
每一個也都代進去試試看,
link |
28:48.000
看哪一個x可以讓它最大的值最大。
link |
28:51.000
但是因為今天呢,
link |
28:52.000
這個t1跟t2的值是不一樣,
link |
28:55.000
所以可以讓t1最大的x,
link |
28:59.000
跟可以讓t2最大的x,
link |
29:00.000
不見得是一樣。
link |
29:01.000
在這個例子裡面,
link |
29:02.000
在t1這邊,
link |
29:03.000
是x1可以跟t1配合起來最大,
link |
29:06.000
在這邊,
link |
29:07.000
是讓x3可以跟t2呢,
link |
29:09.000
配合起來最大。
link |
29:11.000
那你發現說,
link |
29:12.000
這個值是最大的,
link |
29:13.000
那f star of t2呢,
link |
29:15.000
就是這個值。
link |
29:17.000
好,
link |
29:18.000
那,
link |
29:19.000
講問大家有問題嗎?
link |
29:21.000
沒有,
link |
29:22.000
誒,
link |
29:23.000
有沒有嗎?
link |
29:24.000
那,
link |
29:25.000
接下來就下一頁,
link |
29:26.000
剛才是考慮了一個點,
link |
29:27.000
但是這是個function,
link |
29:29.000
呃,
link |
29:30.000
這個function,
link |
29:31.000
你只考慮這個點而已,
link |
29:32.000
這整個function到底,
link |
29:33.000
長什麼樣子啊?
link |
29:34.000
這整個function到底長什麼樣子?
link |
29:36.000
我們應該要這樣想,
link |
29:38.000
我們先看,
link |
29:39.000
大括號裡面的東西,
link |
29:41.000
大括號裡面的東西是,
link |
29:43.000
xt-f of x,
link |
29:46.000
這個x,
link |
29:47.000
它可以代不同的值,
link |
29:50.000
當給定t的時候,
link |
29:51.000
我們希望找出說,
link |
29:52.000
代哪一個x的值,
link |
29:53.000
可以讓我們最後算出來的值最大。
link |
29:55.000
如果今天沒有給定t呢?
link |
29:57.000
如果沒有給定t,
link |
29:58.000
而是給定x呢?
link |
29:59.000
如果沒有給定t,
link |
30:01.000
而是,
link |
30:02.000
如果沒有給定t,
link |
30:03.000
t可以是任何值,
link |
30:04.000
而給定x的話,
link |
30:05.000
這其實就只是一個linear的function而已,
link |
30:08.000
對不對?
link |
30:09.000
因為,
link |
30:10.000
呃,
link |
30:11.000
t是變數嘛,
link |
30:12.000
xt-f of x,
link |
30:13.000
f of x其實,
link |
30:14.000
也是,
link |
30:15.000
也就是一個constant啊,
link |
30:16.000
因為x代替了f of x,
link |
30:17.000
你得到的就是一個constant啊,
link |
30:18.000
所以,
link |
30:19.000
它是一個,
link |
30:20.000
它就是一條直線而已。
link |
30:22.000
哦,
link |
30:23.000
所以如果你代x1的話,
link |
30:24.000
你會得到一條直線,
link |
30:26.000
你代x2的話,
link |
30:27.000
你會得到一條直線,
link |
30:29.000
你代x3,
link |
30:30.000
會得到一條直線,
link |
30:31.000
而你代不同的值,
link |
30:33.000
都會給你一條直線,
link |
30:35.000
代不同的x,
link |
30:36.000
都會給你一條直線。
link |
30:38.000
接下來我們要做的事情是,
link |
30:39.000
給定某一個t,
link |
30:40.000
看看哪一個x可以給你最大值。
link |
30:43.000
在這個圖上,
link |
30:44.000
你怎麼做呢?
link |
30:45.000
你說,
link |
30:46.000
我給定一個t,
link |
30:47.000
等於t1,
link |
30:48.000
我們給定t,
link |
30:49.000
等於t1,
link |
30:50.000
那你就從t1這個地方畫一刀上來,
link |
30:53.000
它會切過好多條直線,
link |
30:55.000
看看哪一條直線,
link |
30:56.000
在t1的值最大。
link |
30:57.000
那,
link |
30:58.000
那一條直線,
link |
30:59.000
在t1的值,
link |
31:00.000
就是f star的t1。
link |
31:02.000
OK?
link |
31:03.000
然後呢,
link |
31:04.000
我們再看看在哪個地方,
link |
31:05.000
比如t這個,
link |
31:06.000
我們都算f star of t2,
link |
31:07.000
你在t2的地方切一刀,
link |
31:09.000
看看哪個值最大,
link |
31:10.000
看看哪一條線給你的值最大,
link |
31:12.000
你就找到f star of t2。
link |
31:13.000
好,
link |
31:14.000
然後呢,
link |
31:15.000
因為你看這邊,
link |
31:16.000
它是一大堆線性,
link |
31:19.000
它是一大堆的這個,
link |
31:20.000
這個,
link |
31:21.000
這個,
link |
31:22.000
這個直線,
link |
31:23.000
它是一大堆的這個直線,
link |
31:24.000
對不對?
link |
31:25.000
那對一大堆的直線,
link |
31:26.000
如果我們取它的max,
link |
31:29.000
那它是一個convex function,
link |
31:31.000
對不對?
link |
31:32.000
對一大堆的直線,
link |
31:33.000
每一個點,
link |
31:34.000
我們都去取它的max,
link |
31:35.000
每一個點,
link |
31:36.000
我們都去取它的max,
link |
31:37.000
每一個點,
link |
31:38.000
我們都去取它的max,
link |
31:39.000
我們就得到紅色這一條線,
link |
31:40.000
那紅色這一條線,
link |
31:41.000
就是f star of t2。
link |
31:44.000
好,
link |
31:45.000
所以我們今天至少知道了一件事情,
link |
31:47.000
就是f star of t也是convex。
link |
31:52.000
好,
link |
31:54.000
好,
link |
31:55.000
那,
link |
31:57.000
講了這麼多,
link |
31:58.000
如果我們來看一個實際的例子,
link |
32:00.000
我們來看一個實際的例子,
link |
32:02.000
f of x,
link |
32:03.000
如果是等於x log x,
link |
32:05.000
我們剛才說,
link |
32:06.000
如果f of x等於x log x,
link |
32:07.000
把這個f拿去當作f divergence的f的話,
link |
32:10.000
我們就得到KL divergence。
link |
32:13.000
如果f of x等於x log x的話,
link |
32:16.000
你代不同的值,
link |
32:17.000
比如說x等於0.1,
link |
32:20.000
你得到一條這樣的直線。
link |
32:21.000
因為0.1的值比較小嘛,
link |
32:23.000
對不對,
link |
32:24.000
所以你得到的是比較,
link |
32:25.000
斜率比較小,
link |
32:26.000
平躺的直線。
link |
32:28.000
比較平躺的直線,
link |
32:29.000
那你x代1,
link |
32:30.000
你得到另外一條直線,
link |
32:32.000
你x代10,
link |
32:33.000
你得到一條斜率比較高的直線,
link |
32:34.000
你得到一條斜率比較高的直線,
link |
32:35.000
等等,
link |
32:36.000
你就得到一大堆的直線。
link |
32:38.000
那如果我們今天看這個圖的話,
link |
32:40.000
看起來呢,
link |
32:41.000
好像如果我們對這些直線取它的max的話,
link |
32:45.000
看起來像是一個exponential function。
link |
32:48.000
那確實呢,
link |
32:50.000
f of x,
link |
32:51.000
如果等於x log x的話,
link |
32:53.000
它的conjugate f star t,
link |
32:56.000
是exponential t減1,
link |
32:59.000
是一個跟exponential有關的function。
link |
33:01.000
那從圖上也許你很難看出,
link |
33:04.000
它的數學應該是要長什麼樣子,
link |
33:06.000
你不可能說,
link |
33:07.000
如果要你找一個f star,
link |
33:09.000
你都把所有的直線都畫出來,
link |
33:12.000
然後取它的max,
link |
33:13.000
找出f star長什麼樣子,
link |
33:14.000
你沒辦法做這件事,
link |
33:16.000
但是你可以用算的把它算出來。
link |
33:19.000
舉例來說,
link |
33:21.000
f of x,
link |
33:22.000
如果等於x log x,
link |
33:24.000
那它的這個conjugate,
link |
33:29.000
應該長什麼樣子呢?
link |
33:31.000
我們就先把x log x,
link |
33:33.000
代到f of x裡面,
link |
33:35.000
把x log x,
link |
33:36.000
代到f of x裡面。
link |
33:37.000
接下來呢,
link |
33:38.000
我們要計算說,
link |
33:40.000
給定一個t,
link |
33:41.000
給定一個t,
link |
33:43.000
什麼樣的x可以讓這個t最大?
link |
33:45.000
給定一個t,
link |
33:46.000
什麼樣的x可以讓這個t最大?
link |
33:48.000
我們把大括號裡面的這個式子,
link |
33:51.000
用g of x來表示。
link |
33:53.000
我們看說,
link |
33:54.000
假設t是一個知道的數值,
link |
33:56.000
它是個常數的話,
link |
33:57.000
那x要代多少可以讓g of x最大?
link |
34:00.000
怎麼算呢?
link |
34:02.000
你就算個微分,
link |
34:05.000
怒為一波,
link |
34:06.000
然後看看讓那個微分等於0。
link |
34:10.000
你看,
link |
34:11.000
x是變數,
link |
34:12.000
微下去就是t,
link |
34:13.000
-x log x,
link |
34:15.000
微下去就是-log x-1。
link |
34:18.000
你就自己回去check一下,
link |
34:19.000
看我算得對不對。
link |
34:21.000
讓它等於0,
link |
34:22.000
然後看看說,
link |
34:23.000
哪裡的微分值,
link |
34:25.000
x等於多少的時候,
link |
34:26.000
可以讓微分值等於0。
link |
34:27.000
發現,
link |
34:28.000
x等於exponential t-1的時候,
link |
34:31.000
可以讓它的微分值為0。
link |
34:34.000
接下來呢,
link |
34:35.000
你要算出,
link |
34:36.000
所以我們現在已經知道說,
link |
34:37.000
給定一個t的時候,
link |
34:38.000
exponential t-1會有幾值?
link |
34:41.000
接下來我們再把這個值代進去,
link |
34:43.000
再把這個值代進去,
link |
34:44.000
那你就怒算一波以後呢,
link |
34:46.000
你就得到了exponential t-1。
link |
34:48.000
你可以自己回去check看看,
link |
34:50.000
我算得對不對。
link |
34:52.000
好,那總之呢,
link |
34:54.000
我們假設前面的東西,
link |
34:56.000
你沒聽進去的話,
link |
34:58.000
那就算了。
link |
35:00.000
你現在需要知道的是,
link |
35:02.000
你現在就假設沒聽進去,
link |
35:03.000
你也來不及聽了。
link |
35:05.000
你就記得說,
link |
35:06.000
F of x,
link |
35:07.000
它有個好朋友,
link |
35:09.000
叫做F star of t,
link |
35:11.000
然後不知道怎麼回事,
link |
35:12.000
它就是寫成一個很奇怪的式子,
link |
35:14.000
就是長這個樣子。
link |
35:16.000
然後F star呢,
link |
35:17.000
這邊還有另外一件事情,
link |
35:19.000
要跟大家說明的是,
link |
35:21.000
F star,
link |
35:22.000
它的conjugate,
link |
35:25.000
就會是F。
link |
35:26.000
也就是說呢,
link |
35:27.000
F,
link |
35:28.000
如果你找出,
link |
35:29.000
就x log x,
link |
35:31.000
你找出它的F star,
link |
35:33.000
你得到的是exponential t-1。
link |
35:35.000
反過來,
link |
35:36.000
exponential t-1,
link |
35:37.000
它的conjugate得到的是x log x,
link |
35:39.000
那它們呢,
link |
35:40.000
是有這個對應的關係的。
link |
35:43.000
那接下來呢,
link |
35:44.000
我們就要進入,
link |
35:46.000
真正和git有關的部分。
link |
35:49.000
那這邊我們需要的就是,
link |
35:52.000
這個式子。
link |
35:53.000
你要記得說,
link |
35:55.000
F of x,
link |
35:56.000
它有一個好朋友,
link |
35:58.000
就叫做F star of t,
link |
35:59.000
那F star of t,
link |
36:00.000
它有一個好朋友,
link |
36:01.000
就是F of x,
link |
36:02.000
它們中間呢,
link |
36:03.000
有這樣子的轉換關係。
link |
36:06.000
那這給我們什麼呢?
link |
36:08.000
這給我們一個方法,
link |
36:09.000
可以把F divergence,
link |
36:12.000
F divergence,
link |
36:13.000
本來寫成這個樣子。
link |
36:15.000
這給我們一個方法,
link |
36:16.000
把F divergence,
link |
36:17.000
寫得非常像是,
link |
36:19.000
一個game的式子。
link |
36:23.000
本來呢,
link |
36:24.000
我們說,
link |
36:25.000
這個,這個,這個,這個,
link |
36:27.000
F呢,
link |
36:28.000
這邊有一個function F,
link |
36:29.000
我們把這個function F呢,
link |
36:31.000
用它的conjugate呢,
link |
36:33.000
來替換掉。
link |
36:35.000
我們知道說,
link |
36:36.000
這個F of x,
link |
36:37.000
會等於右邊這個式子。
link |
36:39.000
所以我們可以把這一項,
link |
36:41.000
就用右邊這個式子替換掉。
link |
36:43.000
本來F這個括號裡面放的是x,
link |
36:45.000
現在唯一不一樣的是,
link |
36:46.000
你只需要把x改成P of x除以Q of x,
link |
36:49.000
這邊本來放的是P of x除以Q of x,
link |
36:52.000
然後把P of x除以Q of x,
link |
36:54.000
把這個x呢,
link |
36:55.000
置換成P of x除以Q of x,
link |
36:57.000
把這個x置換成P of x,
link |
36:59.000
乘以Q of x。
link |
37:00.000
然後接下來呢,
link |
37:01.000
我們就得到下面這個式子。
link |
37:03.000
本來是F of P除以Q,
link |
37:06.000
但我們知道F of x,
link |
37:08.000
可以寫成右邊這個樣子,
link |
37:10.000
max xt-F star of D,
link |
37:13.000
把x換成P除以Q,
link |
37:15.000
我們就得到下面這個式子。
link |
37:17.000
所以P跟Q的F divergence,
link |
37:19.000
我們可以寫成呢,
link |
37:21.000
積分over所有的x,Q of x,
link |
37:23.000
乘上,
link |
37:24.000
這個括號裡面看起來很複雜,
link |
37:27.000
先計算P of x除以Q of x,
link |
37:30.000
把它們乘T,
link |
37:31.000
然後再減掉F star of T,
link |
37:33.000
然後這F star是什麼,
link |
37:34.000
取決於你現在的F是什麼,
link |
37:36.000
因為F跟F star是成對的,
link |
37:37.000
所以你這邊F放什麼,
link |
37:39.000
你有一個對應的F star,
link |
37:40.000
你要找F star,
link |
37:41.000
可以用我們剛才講的那個式子,
link |
37:43.000
把它找出來,
link |
37:44.000
要想辦法把它找出來。
link |
37:45.000
OK,那這邊呢,
link |
37:47.000
你要找看看有哪一個T,
link |
37:49.000
可以讓這個綜化號裡面的式子最大。
link |
37:52.000
好,
link |
37:53.000
這一件事情呢,
link |
37:56.000
這一件事情,
link |
37:57.000
接下來就是,
link |
37:59.000
也許是比較匪夷所思的部分,
link |
38:03.000
我們假設有一個function叫做D,
link |
38:06.000
就突然天外飛來一個function叫做D,
link |
38:09.000
這個D呢,
link |
38:10.000
它的input就是x,
link |
38:12.000
它的output就是T,
link |
38:15.000
這個有一個function叫做D,
link |
38:17.000
它的input呢,
link |
38:18.000
就是x,
link |
38:19.000
它的output呢,
link |
38:20.000
就是T,
link |
38:23.000
那我們可以說,
link |
38:25.000
我們已經知道說,
link |
38:26.000
F divergence可以等於這個樣子,
link |
38:29.000
可以等於這個樣子,
link |
38:31.000
那我們今天可以知道說,
link |
38:34.000
F divergence有一個lower bound,
link |
38:36.000
這個lower bound是什麼呢,
link |
38:37.000
這個lower bound是積分over所有的xQ of x,
link |
38:40.000
然後括號P除以Q乘D of x,
link |
38:45.000
減掉F star D of x,
link |
38:48.000
這個D of x是誰都無所謂,
link |
38:53.000
大家可以了解我的意思嗎,
link |
38:57.000
為什麼D of x是誰都無所謂,
link |
38:59.000
你想想看,
link |
39:00.000
這邊給定一個x,
link |
39:03.000
我們要找一個T可以讓這個值最大,
link |
39:07.000
對不對,
link |
39:08.000
給定一個x,
link |
39:09.000
我們要找一個T可以讓這個值最大,
link |
39:14.000
現在莫名其妙跑出一個D,
link |
39:16.000
它是input一個x,
link |
39:17.000
output一個T,
link |
39:18.000
它output的T不見得是那個,
link |
39:20.000
可以讓中括號裡面值最大的那個T,
link |
39:22.000
它output的T不見得是可以讓中括號的值最大的那個T,
link |
39:27.000
所以如果我們把這個T用D of x取代掉,
link |
39:30.000
它會變成一個lower bound,
link |
39:33.000
它會變成一個lower bound,
link |
39:36.000
好,
link |
39:37.000
我們把T用D取代掉,
link |
39:39.000
它變成了一個lower bound,
link |
39:41.000
接下來我們把它展開,
link |
39:44.000
接下來這個就沒有什麼匪夷所思的地方,
link |
39:46.000
就把Q乘進去,
link |
39:47.000
把Q乘進去,
link |
39:49.000
這個Q跟Q可以消掉變成P of x乘D of x,
link |
39:52.000
這個Q乘進去變成Q of x乘上F star D of x,
link |
39:58.000
那接下來呢,
link |
40:00.000
接下來最後一步就是,
link |
40:03.000
這個D啊,
link |
40:04.000
我們不管找誰來,
link |
40:06.000
我們不管,
link |
40:07.000
這個D啊,
link |
40:08.000
我們不管找哪一個function來,
link |
40:10.000
它都是DF的lower bound,
link |
40:13.000
接下來我們要做的事情就是,
link |
40:15.000
找一個D,
link |
40:17.000
它可以讓這個F divergence最大,
link |
40:20.000
如果我找一個D,
link |
40:21.000
它可以讓F divergence最大,
link |
40:23.000
我們就可以近似這個F divergence了嘛,
link |
40:26.000
下面這個D,
link |
40:27.000
如果隨便找一個來,
link |
40:28.000
它是個lower bound,
link |
40:29.000
如果我今天找一個D,
link |
40:30.000
它可以讓這一條式子最大,
link |
40:33.000
那我們就可以去近似F divergence了嘛,
link |
40:37.000
所以F divergence,
link |
40:38.000
你可以說它有一個近似,
link |
40:40.000
這個近似是,
link |
40:41.000
假設你寫一個式子,
link |
40:43.000
它是積分over x P of x D of x,
link |
40:46.000
減掉積分over x Q of x F star of D of x,
link |
40:49.000
然後這個D呢,
link |
40:52.000
你可以自己挑一個,
link |
40:53.000
你挑一個最大的,
link |
40:54.000
你挑一個你可以讓,
link |
40:55.000
這個式子最大的那個D放在這邊,
link |
40:58.000
那你得到的值,
link |
40:59.000
就可以去近似一個F divergence,
link |
41:02.000
好,
link |
41:03.000
那有了這個式子以後,
link |
41:05.000
要幹嘛呢?
link |
41:07.000
我們已經知道,
link |
41:08.000
F divergence可以寫成這個樣子,
link |
41:11.000
我們知道F divergence可以寫成這個樣子,
link |
41:14.000
那這邊是積分over所有的P of x,
link |
41:16.000
積分over所有的x乘上P of x,
link |
41:18.000
這邊是積分over所有的x乘上Q of x,
link |
41:20.000
我們可以寫成說,
link |
41:22.000
前面這一項呢,
link |
41:24.000
前面這一項呢,
link |
41:25.000
是從P這個distribution裡面sample x出來,
link |
41:29.000
然後呢,
link |
41:30.000
我們算D of x的期望值,
link |
41:32.000
後面這一項呢,
link |
41:33.000
是從Q這個distribution裡面sample x出來,
link |
41:37.000
我們接下來取F star乘以D of x的期望值,
link |
41:43.000
然後接下來我們要找一個D,
link |
41:45.000
它可以讓這兩個期望值相減後是最大,
link |
41:50.000
我們找一個D,
link |
41:51.000
它可以讓這兩個期望值相減後是最大,
link |
41:53.000
那我們實作的時候,
link |
41:54.000
不會真的去把期望值算出來,
link |
41:58.000
因為我們沒有辦法真的對所有的x做積分,
link |
42:02.000
在實作上,
link |
42:03.000
假如給你一個distribution P,
link |
42:04.000
給你一個distribution Q,
link |
42:06.000
你能夠做的事情是從P裡面sample出一些data,
link |
42:11.000
sample出一些x,
link |
42:12.000
從Q裡面sample出一些x,
link |
42:15.000
然後找一個D,
link |
42:16.000
它可以讓這個式子最大,
link |
42:18.000
你就可以算出P跟Q,
link |
42:19.000
它們的F divergence,
link |
42:22.000
好,
link |
42:23.000
那就回到我們要做的事情,
link |
42:25.000
我們現在假設有一個P data這個distribution,
link |
42:29.000
是我們要讓model去target的那個distribution,
link |
42:34.000
然後我們有一個generator的distribution,
link |
42:37.000
那我們的目標是希望P data跟PG呢,
link |
42:42.000
我們要先,
link |
42:43.000
第一件事情是我們想要先量一下,
link |
42:45.000
現在假設給你一個generator G,
link |
42:47.000
它所generated出來的data distribution PG,
link |
42:50.000
跟真正的data distribution P data,
link |
42:52.000
它們的F divergence有多大,
link |
42:54.000
怎麼算呢?
link |
42:55.000
我們就可以直接套用這個式子來進行計算,
link |
42:58.000
只是把P換成P data,
link |
43:00.000
把Q換成PG,
link |
43:04.000
那你說本來F divergence不是就已經有一個式子了嗎?
link |
43:08.000
本來F divergence不是就已經有一個,
link |
43:10.000
這個Q乘以logP,
link |
43:12.000
Q乘以FP,
link |
43:14.000
P除以Q的那個式子了嗎?
link |
43:15.000
怎麼不直接代?
link |
43:17.000
那是因為我們沒有辦法算P data跟PG,
link |
43:20.000
對任何x的機率啊,
link |
43:21.000
那個機率是不能算的,
link |
43:23.000
我們唯一能做的事情是,
link |
43:24.000
從P data跟PG做sample,
link |
43:26.000
我們只能做sample,
link |
43:27.000
你不能做其他式,
link |
43:28.000
我們現在只能做sample,
link |
43:30.000
今天這個式子如果你要算它的話,
link |
43:32.000
你只需要sample就好了,
link |
43:35.000
對不對?
link |
43:36.000
我們只需要sample就好了,
link |
43:37.000
我們說算期望值這件事情,
link |
43:39.000
可以用sample來做近似,
link |
43:41.000
所以如果我們今天要算P data跟PG,
link |
43:43.000
就給定一個PG,
link |
43:44.000
我們要算P data跟PG它們之間的F divergence,
link |
43:48.000
我們唯一需要做的事情就是,
link |
43:50.000
從P data裡面sample一堆x出來,
link |
43:52.000
從PG裡面sample一堆x出來,
link |
43:54.000
代到這些function裡面,
link |
43:55.000
找一個D讓它的值最大,
link |
43:57.000
所以接下來,
link |
43:59.000
如果我們今天要找一個PG,
link |
44:02.000
它可以跟P data越近越好的話,
link |
44:05.000
我們其實就是要解下面這個式子,
link |
44:08.000
對不對?
link |
44:09.000
我們已經會算說,
link |
44:10.000
給定一個PG它跟P data的某種F divergence,
link |
44:15.000
接下來我要找一個最好的G,
link |
44:17.000
它跟P data是最接近的,
link |
44:19.000
那我要做的事情其實就是,
link |
44:21.000
找一個G它可以minimize這個式子,
link |
44:24.000
找一個G它可以minimize這個式子,
link |
44:28.000
接下來我們知道說,
link |
44:30.000
這個F divergence的這個式子,
link |
44:31.000
就是max加中括號這一項,
link |
44:33.000
就是這一項,
link |
44:34.000
我們把這一項代換掉,
link |
44:37.000
放到這邊,
link |
44:38.000
就變成說,
link |
44:39.000
我們要找最好的一個generator,
link |
44:41.000
G star,
link |
44:42.000
這個G star它產生出來的PG,
link |
44:44.000
跟P data是最近的,
link |
44:45.000
那怎麼找呢?
link |
44:47.000
我們要找一個generator,
link |
44:49.000
它可以minimize這一項,
link |
44:50.000
找一個function D,
link |
44:51.000
它可以maximize後面這一項,
link |
44:55.000
那這個D其實就是,
link |
44:59.000
你看我們用D來表示這個function,
link |
45:01.000
所以這個D其實就是,
link |
45:02.000
我們剛才在game裡面看到的discriminator,
link |
45:06.000
如果我們今天把這一個式子,
link |
45:09.000
寫做V of GD,
link |
45:12.000
它是不是就讓你覺得非常熟悉呢?
link |
45:15.000
是不是跟我們之前看的,
link |
45:17.000
這個game的那個function一模一樣呢?
link |
45:19.000
只是game之前我們在講game的時候,
link |
45:21.000
我們是說不知道怎麼回事,
link |
45:22.000
天外飛來一個V of GD,
link |
45:24.000
然後我們不知道怎麼回事,
link |
45:25.000
就要min它,max它,
link |
45:26.000
然後好像可以做一個什麼,
link |
45:28.000
跟minimize這一個divergence有關的事情,
link |
45:30.000
那今天如果我們有了這個,
link |
45:32.000
這一整套F divergence game的想法,
link |
45:35.000
它就更完整了,
link |
45:36.000
它告訴我們說,
link |
45:37.000
如果你要定這個V of GD,
link |
45:39.000
到底要怎麼定?
link |
45:40.000
到底要怎麼定?
link |
45:41.000
你只要知道你要minimize,
link |
45:43.000
你想要minimize的F divergence是哪一個,
link |
45:45.000
把它的F star找出來,
link |
45:48.000
你就知道要怎麼minimize,
link |
45:50.000
那個F divergence,
link |
45:51.000
你就可以找出我們的那個V of GD了,
link |
45:54.000
那你會發現說呢,
link |
45:56.000
game就只是這個F divergence的game,
link |
46:00.000
原來的game就只是這個F divergence game的一個特例而已,
link |
46:03.000
那接下來還有一個,
link |
46:05.000
比方是,
link |
46:06.000
這個在F divergence這個paper裡面,
link |
46:08.000
還有另外一個貢獻,
link |
46:10.000
它是這樣說的,
link |
46:11.000
那首先我們先改一下我們的notation,
link |
46:14.000
我們原來是說,
link |
46:15.000
找一個generator,
link |
46:16.000
找一個discriminator,
link |
46:17.000
然後找一個最好的generator,
link |
46:18.000
G star,
link |
46:19.000
但實際上這個generator呢,
link |
46:21.000
它是由參數所控制的,
link |
46:23.000
這個generator,
link |
46:24.000
discriminator,
link |
46:25.000
它們都是neural network,
link |
46:27.000
那它們長什麼,
link |
46:28.000
它們做什麼事,
link |
46:29.000
長什麼樣子,
link |
46:30.000
都是由它的參數,
link |
46:31.000
θG跟θD所控制的,
link |
46:33.000
所以我們這邊實際上做的事情是,
link |
46:35.000
我們要找一個θD,
link |
46:37.000
找一個θG,
link |
46:38.000
然後呢,
link |
46:39.000
找到最好的G star,
link |
46:40.000
所以我現在把G跟D都換成θG跟θD,
link |
46:45.000
好,
link |
46:46.000
在原來的game的paper裡面,
link |
46:47.000
它是一個double loop的algorithm,
link |
46:50.000
我們等一下會說到底,
link |
46:51.000
double loop的algorithm,
link |
46:52.000
指的是什麼意思,
link |
46:53.000
我們剛才已經很快的看過了,
link |
46:55.000
game的這個,
link |
46:56.000
這個,
link |
46:57.000
這個,
link |
46:58.000
這個algorithm,
link |
46:59.000
那如果summarize一下的話,
link |
47:00.000
它做的事情是這樣,
link |
47:01.000
給你一個generator,
link |
47:04.000
給你一個generator,
link |
47:05.000
我們先有一個,
link |
47:06.000
先給定一個初始化的generator,
link |
47:08.000
θ是下標G,
link |
47:10.000
上標T,
link |
47:11.000
上標T就代表說是第七個iteration,
link |
47:13.000
初始的時候的generator的參數,
link |
47:16.000
接下來給定這個generator的參數,
link |
47:18.000
在原來game的paper裡面,
link |
47:20.000
我們要做的事情是,
link |
47:21.000
找一個discriminator,
link |
47:22.000
去maximize這個function B,
link |
47:25.000
但是generator的部分,
link |
47:26.000
是已經給定了,
link |
47:27.000
找出來的這個最好的discriminator,
link |
47:30.000
我們寫成θD,
link |
47:31.000
上標T,
link |
47:33.000
那因為今天我們要解一個argmax的花紋,
link |
47:36.000
你是怎麼找這個θD出來的啊,
link |
47:38.000
你要做gradient descent,
link |
47:40.000
對不對,
link |
47:41.000
或者是其實,
link |
47:42.000
因為我們是要做max,
link |
47:43.000
我們是要找max,
link |
47:44.000
我們的objective function是要最大,
link |
47:46.000
所以呢,
link |
47:47.000
我們其實是做gradient ascent,
link |
47:49.000
不是gradient descent,
link |
47:50.000
但是意思是差不多的,
link |
47:51.000
我們要做gradient ascent,
link |
47:52.000
也就是說,
link |
47:53.000
你要iterate的去找這個θD上標T,
link |
47:59.000
你要迭代你的discriminator的參數很多次,
link |
48:02.000
你才能夠找出你的這個θD上標T這個參數,
link |
48:09.000
好,
link |
48:10.000
那接下來呢,
link |
48:11.000
你要update你的generator,
link |
48:13.000
你要update你的generator,
link |
48:16.000
你要update你的generator,
link |
48:19.000
使得它可以讓V的這個value function的值變大,
link |
48:24.000
你就有了這個新的generator,
link |
48:26.000
然後就過完了一個iteration,
link |
48:28.000
你就可以去找新的discriminator,
link |
48:30.000
好,
link |
48:31.000
在這個iteration裡面,
link |
48:33.000
其實你有一個loop,
link |
48:34.000
你有一個inner的loop是,
link |
48:36.000
你要找θD的時候,
link |
48:37.000
其實這邊呢,
link |
48:38.000
是有一個後回圈的,
link |
48:40.000
我們要updateθD的參數好多次,
link |
48:42.000
我們才能夠maximize這個式子,
link |
48:44.000
才能夠把θD找出來,
link |
48:46.000
那這邊有一個outer loop,
link |
48:49.000
這邊有一個outer loop,
link |
48:50.000
就θD跟θG呢,
link |
48:52.000
它們是反覆的被update,
link |
48:55.000
也就是說,
link |
48:56.000
實作上呢,
link |
48:57.000
你就是updateθD很多次,
link |
48:59.000
直到找到最好的θD,
link |
49:01.000
然後updateθG一次,
link |
49:02.000
然後再回頭去updateθG很多次,
link |
49:05.000
這邊是要updateθD很多次,
link |
49:07.000
找出最好的θD,
link |
49:08.000
然後updateθG一次,
link |
49:09.000
再回頭後去找出最好的θD很多次,
link |
49:13.000
那Ian Garfield,
link |
49:15.000
他在他的paper裡面說,
link |
49:17.000
嗯,對啊,
link |
49:18.000
這樣子聽起來就是很合理,
link |
49:19.000
你要找最好的θD,
link |
49:20.000
本來就是要update很多次,
link |
49:22.000
但是他在他的,
link |
49:24.000
這個Nyx 2016 tutorial裡面,
link |
49:26.000
他說了一句話,
link |
49:27.000
就personally,
link |
49:28.000
我都只update一次,
link |
49:30.000
為什麼他只update一次是ok的呢?
link |
49:33.000
在這篇F Divergence Gain的paper裡面,
link |
49:35.000
他也給出了答案,
link |
49:38.000
如果你不打算證明這件事情,
link |
49:39.000
那你可以自己去paper裡面看,
link |
49:41.000
那篇paper裡面說,
link |
49:43.000
如果我們今天要optimize這一個function,
link |
49:49.000
我們要找出最好的G star,
link |
49:51.000
下面這個algorithm也是可行的,
link |
49:55.000
下面這個algorithm可以證明它會是收斂的,
link |
49:58.000
在那邊沒有證明它會是收斂的,
link |
50:00.000
所以下面這個algorithm也是可行的,
link |
50:02.000
下面這個algorithm是一個single step algorithm,
link |
50:05.000
就是θD update一次,θG update一次,
link |
50:08.000
discriminator其實也只要update一次就好了,
link |
50:11.000
實際上怎麼做呢?
link |
50:13.000
實際上是這樣子,
link |
50:14.000
在每一個iteration的時候,
link |
50:16.000
我們都有一個初始化的θG,
link |
50:18.000
跟初始化的θD,
link |
50:19.000
我們今天寫成θG上標T,
link |
50:21.000
跟θD上標T,
link |
50:24.000
接下來,
link |
50:25.000
我們在一個iteration裡面,
link |
50:27.000
我們就各update θD跟θG一次,
link |
50:32.000
我們可以用一個backpropagation,
link |
50:35.000
我們可以用一個backpropagation,
link |
50:37.000
就把V對θD的歸點,
link |
50:41.000
還有V對θG的歸點算出來,
link |
50:45.000
怎麼用一個backpropagation算出這件事情,
link |
50:48.000
可能是比較實作上的問題,
link |
50:51.000
但無論如何呢,
link |
50:52.000
我們可以算出,
link |
50:54.000
我們就算θG對V這個function的歸點,
link |
50:57.000
我們就算θD對V這個function的歸點,
link |
51:00.000
我們就算θG對V這個function的歸點,
link |
51:03.000
然後接下來呢,
link |
51:04.000
有了這個歸點以後,
link |
51:05.000
θD要被update,
link |
51:08.000
θG也要被update,
link |
51:11.000
但是他們update的方向是不一樣的,
link |
51:16.000
他們update的方向是不一樣的,
link |
51:18.000
好,
link |
51:23.000
那現在我們有了這個F divergence gain以後,
link |
51:27.000
你說又怎麼樣呢?
link |
51:29.000
現在好處就是,
link |
51:31.000
你可以去用,
link |
51:33.000
你可以調你的generator,
link |
51:35.000
讓他minimize任何F divergence,
link |
51:39.000
在那個paper裡面,
link |
51:40.000
他列出了各式各樣的F divergence,
link |
51:45.000
這樣你看了有覺得很過癮嗎?
link |
51:46.000
有各種F divergence,
link |
51:48.000
各式各樣的F divergence,
link |
51:50.000
每個F divergence裡面都有一個F對一個function F,
link |
51:53.000
我們說他是一個convex的function,
link |
51:55.000
反正都有一個function F,
link |
51:56.000
每一個function有一個F star,
link |
51:58.000
你也不用求了,
link |
51:59.000
因為paper附錄裡面有這個,
link |
52:02.000
他幫你列出來,
link |
52:03.000
你有了這些以後,
link |
52:04.000
假設你要minimize某一個F divergence,
link |
52:07.000
你其實就是找一個D去maximize,
link |
52:10.000
這個式子,
link |
52:11.000
就結束了,
link |
52:13.000
就結束了,
link |
52:14.000
對,
link |
52:14.000
任何F divergence要找出他的F,
link |
52:16.000
然後你就找出他的F star,
link |
52:17.000
把他的F star帶進來,
link |
52:18.000
就結束了,
link |
52:22.000
那你可能會想說,
link |
52:23.000
可是如果我要minimize F divergence,
link |
52:26.000
最後minimize的值不都是零嗎?
link |
52:29.000
F divergence最小都是零,
link |
52:30.000
就是讓你的兩個distribution一模一樣,
link |
52:33.000
你要讓你的generator,
link |
52:34.000
generator distribution跟你的目標distribution一模一樣,
link |
52:37.000
最後還是就是讓兩個distribution一模一樣而已,
link |
52:40.000
minimize不同的F divergence有差嗎?
link |
52:43.000
今天會有差的時候是,
link |
52:45.000
比如說你的generator,
link |
52:48.000
他不夠強的時候會有差,
link |
52:50.000
假設我們今天要去acrossiment的對象,
link |
52:53.000
是一個Gaussian的mixture model,
link |
52:57.000
而你的generator只有一個single的Gaussian,
link |
53:01.000
也就是說呢,
link |
53:02.000
你現在的target distribution長的是這樣,
link |
53:04.000
他可能比如說有兩個白色的點,
link |
53:07.000
那你要只用一個Gaussian的distribution,
link |
53:09.000
去調這個Gaussian distribution,
link |
53:12.000
他的mean跟variance等等,
link |
53:13.000
讓他可以跟這個Gaussian mixture越接近越好,
link |
53:16.000
如果你今天minimize的對象是不同的F divergence,
link |
53:19.000
最後會得到不同的結果,
link |
53:21.000
換句話說,如果你minimize的KL divergence,
link |
53:23.000
你得到的結果是這樣,
link |
53:25.000
如果你minimize的是JSD divergence,
link |
53:28.000
你得到的結果是這樣,
link |
53:31.000
那在這個paper裡面呢,
link |
53:33.000
他提供了一個有趣的toy example,
link |
53:35.000
這個有趣的toy example是說,
link |
53:37.000
假設在training的時候,
link |
53:39.000
我們要minimize的是,
link |
53:41.000
在training的時候,
link |
53:43.000
他試了五種不同的minimize的對象,
link |
53:45.000
可以是KL reverse,KLJS Jeffrey,還有Pearson divergence,
link |
53:51.000
那在testing的時候呢,
link |
53:53.000
不管你是用哪一種,
link |
53:55.000
不管你是用哪一,
link |
53:57.000
你train的時候是想要minimize哪一種F divergence,
link |
53:59.000
都用不同的divergence來算一下,
link |
54:03.000
那就發現說,
link |
54:04.000
假設你今天是用KL divergence,
link |
54:06.000
當作你testing data的evaluation,
link |
54:08.000
那你在train的時候,
link |
54:10.000
minimizeKL divergence,
link |
54:11.000
你當然得到的值是最小的,
link |
54:13.000
假設你今天是用KL的reverse,
link |
54:15.000
來當作你的evaluation的話,
link |
54:19.000
你當然在training的時候去minimizeKL reverse,
link |
54:22.000
你得到的結果會是最好的,
link |
54:25.000
那這件事情聽起來好像也沒有什麼特別,
link |
54:29.000
但是他其實給了我們一個很重要的issue,
link |
54:33.000
給了我們一個很重要的發現,
link |
54:35.000
過去大家相信game沒有辦法得到diverse的結果,
link |
54:39.000
就大家覺得說game在training的時候,
link |
54:42.000
你的distribution往往都很狹窄,
link |
54:45.000
你train出來的generator,
link |
54:48.000
generate image的時候,
link |
54:49.000
可能generate出來的image,
link |
54:50.000
他的diversity夠大,
link |
54:52.000
是因為我們在minimize的是JS divergence,
link |
54:57.000
你可以看說在這個圖上面,
link |
54:59.000
我就特別舉這個例子,
link |
55:00.000
如果你minimize的是JS divergence,
link |
55:03.000
那你最後得到的結果,
link |
55:06.000
你可以去minimizeJS divergence的時候,
link |
55:10.000
你得到的這個single mixture,
link |
55:12.000
他的distribution是比較小,
link |
55:14.000
如果你換成minimizeKL divergence的話,
link |
55:17.000
他的distribution會是比較大,
link |
55:19.000
所以也許我們把,
link |
55:21.000
我們在train game的時候去minimizeKL divergence,
link |
55:24.000
就可以解決我們說的game他generate的image,
link |
55:27.000
很不diverse的問題,
link |
55:29.000
然後得到的結果是,
link |
55:31.000
換成KL divergence看起來沒有什麼不同,
link |
55:33.000
所以我們就知道說,
link |
55:35.000
沒有辦法產生多樣的image的問題,
link |
55:37.000
可能不是來自於我們minimize的是哪一個divergence,
link |
55:41.000
我們來上課吧,
link |
55:42.000
那我剛才發現一件事情,
link |
55:43.000
就是在這一張投影片上面,
link |
55:45.000
這個正負號寫反了,
link |
55:48.000
剛才發現這件事的同學,
link |
55:50.000
我忘了留你的名字,
link |
55:51.000
記得來等下下課來跟我講一下,
link |
55:54.000
好,
link |
56:00.000
我們講到,
link |
56:02.000
接下來就要講W game,
link |
56:05.000
要講W game,
link |
56:07.000
啊,
link |
56:09.000
這樣子,
link |
56:11.000
不好意思,
link |
56:19.000
好,
link |
56:24.000
編的正負號呢,
link |
56:26.000
是反的還是反的,
link |
56:30.000
然後我已經把他改過來了,
link |
56:32.000
他改過來了,
link |
56:34.000
好,
link |
56:36.000
接下來就要講W game,
link |
56:38.000
那這邊是W game的paper,
link |
56:41.000
那W game的第一篇paper呢,
link |
56:43.000
我記得是今年一月的時候放在archive上,
link |
56:47.000
後來有一個improve的版本,
link |
56:49.000
那improve的版本是,
link |
56:51.000
三月底放在archive上面,
link |
56:54.000
所以他出來呢,
link |
56:56.000
才一個月再多幾天而已,
link |
56:58.000
但是我們呢,
link |
56:59.000
就要在課堂上講一下,
link |
57:00.000
那improve的W game,
link |
57:02.000
好,那如果你,
link |
57:04.000
就等一下講的東西聽不進去的話呢,
link |
57:06.000
一句話說明W game就是,
link |
57:08.000
我們本來就是用F divergence,
link |
57:10.000
我們要minimize兩個distribution的F divergence,
link |
57:13.000
現在改成是minimize兩個distribution的,
link |
57:17.000
Earth movers distance,
link |
57:19.000
而Earth movers distance呢,
link |
57:21.000
其實就是Vessel stand distance,
link |
57:24.000
因為Vessel stand distance的關係呢,
link |
57:27.000
所以就叫他W game,
link |
57:29.000
所以如果等一下你沒聽懂的話,
link |
57:31.000
你以後只要能夠講出這幾句話,
link |
57:33.000
別人就誤以為你懂了,
link |
57:35.000
誤以為你懂懂懂,
link |
57:37.000
誒那個W game,
link |
57:39.000
我想說W game會這麼有名,
link |
57:41.000
也許跟有一篇很好的vlog文章,
link |
57:44.000
叫做令人拍案教學的W game很有關係的,
link |
57:48.000
結果有一個問題,
link |
57:50.000
誒你真的看過W game那篇paper,
link |
57:52.000
有真的看過那篇paper的同學可以舉手一下,
link |
57:54.000
哇還有不少人看過誒,
link |
57:56.000
太厲害了太厲害了,
link |
57:58.000
所以其實大家也不完全是看vlog文章,
link |
58:00.000
所以這個跟我想一樣,
link |
58:02.000
因為現在隨便sample一個人,
link |
58:04.000
都知道W game是什麼,
link |
58:06.000
誒好,
link |
58:08.000
好接下來呢,
link |
58:10.000
我們就是來講一下,
link |
58:12.000
W game要做的事情是什麼,
link |
58:14.000
誒這邊有個很無聊的知識就是,
link |
58:16.000
這個distance的名字啊,
link |
58:18.000
其實那個W是發,
link |
58:20.000
就我手裡應該發V啦,
link |
58:22.000
要念Vessel stand,
link |
58:24.000
因為這個應該是數學家的名字,
link |
58:28.000
應該是俄國數學家的名字,
link |
58:30.000
然後呢這個W呢,
link |
58:32.000
在俄文呢其實是寫成V啦,
link |
58:34.000
所以發的時候應該是Vessel stand,
link |
58:36.000
我還知道另外一個很有用的冷知識就是,
link |
58:38.000
那game到底應該要怎麼發呢,
link |
58:40.000
傳說,
link |
58:42.000
就是如果仔細聽一下,
link |
58:44.000
其他人的發音的話,
link |
58:46.000
也許他應該是念成,
link |
58:48.000
割案四聖,
link |
58:50.000
你想想看那個,
link |
58:52.000
就是那個會用一搓火藥的那個肝書,
link |
58:54.000
那個姓那個肝,
link |
58:56.000
在英文是翻成GAN,
link |
58:58.000
所以GAN念的發音,
link |
59:00.000
應該比較接近肝,
link |
59:02.000
或者是肝四聖,
link |
59:04.000
但是我覺得,
link |
59:06.000
但是如果我們在這堂課,
link |
59:08.000
一直這樣幹來幹去,
link |
59:10.000
實在是在笑話,
link |
59:12.000
而且這樣子會有問題,
link |
59:14.000
就假設比如說,
link |
59:16.000
我要跟大家說,
link |
59:18.000
game的訓練不穩定,
link |
59:20.000
然後就說,幹訓練不穩定,
link |
59:22.000
人家就以為你在罵髒話,
link |
59:24.000
一句話出去,這怎麼得了,
link |
59:26.000
所以我們都要念,
link |
59:28.000
所以我們都要念GAN,
link |
59:30.000
聽起來像是個遊戲,
link |
59:32.000
所以我覺得他聽起來好像,
link |
59:34.000
比較聽到外國人念是,
link |
59:36.000
割案四聖,
link |
59:38.000
好,
link |
59:40.000
那,
link |
59:42.000
我們來講,
link |
59:44.000
WGAN,
link |
59:46.000
那WGAN是什麼呢,
link |
59:48.000
WGAN我們這邊會講,
link |
59:50.000
兩件事,
link |
59:52.000
第一件事是他原來的版本,
link |
59:54.000
原來的版本有一招叫做,
link |
59:56.000
Wake Leaping,
link |
59:58.000
再來是要講他Improved版本,
link |
01:00:00.000
他Improved版本用的是,
link |
01:00:02.000
規定Penalty,
link |
01:00:04.000
等一下我們會分別講他是什麼,
link |
01:00:06.000
好,那我們說WGAN呢,
link |
01:00:08.000
他是要Minimize,
link |
01:00:10.000
Earth Movers Distance,
link |
01:00:12.000
所以我們要先講一下,
link |
01:00:14.000
Earth Movers Distance是什麼,
link |
01:00:16.000
第一件要回答的問題就是,
link |
01:00:18.000
Earth Movers是什麼呢,
link |
01:00:20.000
那Earth Movers Distance就是說,
link |
01:00:22.000
假設兩個Distribution,
link |
01:00:24.000
分別就是兩堆土,
link |
01:00:26.000
如果我們要從,
link |
01:00:28.000
某一個Distribution P,
link |
01:00:30.000
把他的土呢,
link |
01:00:32.000
鏟到,應該我們應該想這樣,
link |
01:00:34.000
其中一個Distribution P是一堆土,
link |
01:00:36.000
另外一個Distribution Q,
link |
01:00:38.000
是你準備要放那個土的位置,
link |
01:00:40.000
那我們要把土從,
link |
01:00:42.000
P這個Distribution的位置鏟到,
link |
01:00:44.000
Q這個位置,
link |
01:00:46.000
然後我們希望,
link |
01:00:48.000
平均要這個推土機,
link |
01:00:50.000
要走的Distance,
link |
01:00:52.000
平均推土機呢,
link |
01:00:54.000
要把土呢,運送多遠,
link |
01:00:56.000
這個呢,就是Earth Movers Distance,
link |
01:00:58.000
不過簡單來講呢,
link |
01:01:00.000
這邊有PQ這兩個Distribution,
link |
01:01:02.000
他們的分布呢,
link |
01:01:04.000
是在一維的空間上的分布,
link |
01:01:06.000
OK,
link |
01:01:08.000
PQ這兩個Distribution,
link |
01:01:10.000
他們的分布呢,是在一維空間上的分布,
link |
01:01:12.000
那他們就都各集中在一個點上,
link |
01:01:14.000
我假設PQ這兩個Distribution,
link |
01:01:16.000
他們的距離呢,
link |
01:01:18.000
是D,
link |
01:01:20.000
如果PQ這兩個Distribution距離是D,
link |
01:01:22.000
你要從P這堆土,
link |
01:01:24.000
運送到Q的位置的話,
link |
01:01:26.000
那平均這個土要被運送多遠呢,
link |
01:01:28.000
就是運送
link |
01:01:30.000
D的距離,
link |
01:01:32.000
對不對,就是運送D的距離,
link |
01:01:34.000
所以W的PQ就
link |
01:01:36.000
等於D,
link |
01:01:38.000
OK,
link |
01:01:40.000
好,所以這兩個Distribution,
link |
01:01:42.000
P跟Q,如果你要算他們的
link |
01:01:44.000
Earth Mover的Distance,
link |
01:01:46.000
那就是D,
link |
01:01:48.000
我們會用W呢,來代表
link |
01:01:50.000
Earth Mover的Distance,
link |
01:01:52.000
好,那現在,如果兩個Distribution
link |
01:01:54.000
是比較複雜的,假設現在
link |
01:01:56.000
有一個P這個Distribution,有一個Q這個Distribution,
link |
01:01:58.000
那他們其實在同一個
link |
01:02:00.000
Space上面啦,就照理說
link |
01:02:02.000
他們兩個應該是重疊在一起的,
link |
01:02:04.000
只是重疊在一起畫起來不太容易,
link |
01:02:06.000
因為這個圖是從
link |
01:02:08.000
以下這一篇部落格剪下來的,
link |
01:02:10.000
那如果你今天講的課程沒有不懂的地方,
link |
01:02:12.000
可以看下面這一篇部落格,
link |
01:02:14.000
他寫得是非常清楚的。
link |
01:02:16.000
好,那如果今天
link |
01:02:18.000
有這兩個Distribution,P跟Q,
link |
01:02:20.000
我們要把P的圖呢,產成
link |
01:02:22.000
Q的樣子,把P的圖
link |
01:02:24.000
產成Q的樣子,其實有
link |
01:02:26.000
很多很多種的方法,
link |
01:02:28.000
那這個每一個方法呢,
link |
01:02:30.000
我們就稱之為一個Moving Plan,
link |
01:02:32.000
它有很多種Moving Plan,
link |
01:02:34.000
舉例來說,你可以
link |
01:02:36.000
把這個地方的圖
link |
01:02:38.000
移到這裡,然後
link |
01:02:40.000
把這個地方的圖
link |
01:02:42.000
移到這裡,這是一種
link |
01:02:44.000
移法,因為你發現說
link |
01:02:46.000
這邊特別低嘛,這邊特別低
link |
01:02:48.000
這邊特別高,所以這邊要補一些圖,
link |
01:02:50.000
所以從右邊移過來,然後再從這邊移過來。
link |
01:02:52.000
那你也可以有
link |
01:02:54.000
別種移法,比如說你可以把
link |
01:02:56.000
這個地方要墊高,你把這邊的圖移過來,
link |
01:02:58.000
這個地方要墊高,你把這邊的圖
link |
01:03:00.000
移過去,你也可以這樣。
link |
01:03:02.000
但是如果你用不同的
link |
01:03:04.000
方法來移動這些圖,你用不同的
link |
01:03:06.000
方法把P的Distribution
link |
01:03:08.000
移到Q的Distribution的話,
link |
01:03:10.000
如果你用不同的方法來移的話,
link |
01:03:12.000
你定義出來的Distance
link |
01:03:14.000
就會是不一樣,
link |
01:03:16.000
你定義出來的Distance就會是不一樣。
link |
01:03:18.000
比如說,
link |
01:03:20.000
如果是這個
link |
01:03:22.000
方法的話,感覺Distance比較小,
link |
01:03:24.000
右邊這個方法感覺Distance比較大,
link |
01:03:26.000
因為這個方法,你就是捨近求遠,
link |
01:03:28.000
你可以把這個圖搬到這邊,你卻偏偏
link |
01:03:30.000
要搬到這裡,這捨近求遠,
link |
01:03:32.000
所以如果你用右邊這個Moving Plan
link |
01:03:34.000
的話,那你要搬圖的
link |
01:03:36.000
距離是比較遠的。
link |
01:03:38.000
那這樣這個
link |
01:03:40.000
Earth Movers Distance圖就有好幾個不同的定義了嘛。
link |
01:03:42.000
所以,那要怎麼讓它
link |
01:03:44.000
只有一個值呢?
link |
01:03:46.000
這邊的方法就是,雖然有很多個不同的Plan,
link |
01:03:48.000
那你就要把所有的Plan
link |
01:03:50.000
通通都找出來,然後看哪一個Plan
link |
01:03:52.000
算出來的Average Distance最小,
link |
01:03:54.000
那你就用最好的那個Plan,
link |
01:03:56.000
你就算搬圖的Distance
link |
01:03:58.000
最小的那個Plan。
link |
01:04:00.000
舉例來說,在今天這個
link |
01:04:02.000
例子裡面,怎麼樣的Plan
link |
01:04:04.000
是最好的Plan呢?
link |
01:04:06.000
今天這個例子裡面最好的Plan是這個樣子。
link |
01:04:08.000
那原來的圖呢,長這個樣子。
link |
01:04:10.000
那每一個地方的圖給它不同的顏色,
link |
01:04:12.000
這樣它們挪動位置以後
link |
01:04:14.000
你才能區別。
link |
01:04:16.000
那最好的Plan呢,是底下這個樣子的。
link |
01:04:18.000
舉例來說,你把
link |
01:04:20.000
灰色的這塊圖
link |
01:04:22.000
挪到這邊,你把灰色這塊圖
link |
01:04:24.000
挪到這邊,也放在這裡。
link |
01:04:26.000
或是你把深灰色這塊圖
link |
01:04:28.000
挪到這邊,
link |
01:04:30.000
或是你把
link |
01:04:32.000
黑色這塊圖挪到這邊,
link |
01:04:34.000
你把粉紅色這塊圖
link |
01:04:36.000
挪到這邊,你把藍色這塊
link |
01:04:38.000
這個是藍色這塊圖嗎?
link |
01:04:40.000
它是這塊,而這塊就在原來的位置。
link |
01:04:42.000
比如這邊,這個深藍色圖
link |
01:04:44.000
就切成好多塊,它有的呢
link |
01:04:46.000
放到這裡,有的放到這邊,有的放到這邊,等等等等。
link |
01:04:48.000
這個是最好的Plan。
link |
01:04:50.000
如果你用這個方法
link |
01:04:52.000
來把P的圖
link |
01:04:54.000
搬成Q的樣子的話,這個時候
link |
01:04:56.000
你的那個推主機呢,
link |
01:04:58.000
要運送圖的這個距離呢,
link |
01:05:00.000
是最短的。
link |
01:05:02.000
好,這是最好的
link |
01:05:04.000
Moving Plan。
link |
01:05:06.000
那我們要用最好的Moving Plan
link |
01:05:08.000
來定義你的
link |
01:05:10.000
Earth Movers的
link |
01:05:12.000
Distance。
link |
01:05:14.000
好,那
link |
01:05:16.000
現在呢,有兩個
link |
01:05:18.000
Distribution,一個是P,一個是Q。
link |
01:05:20.000
一個Moving Plan
link |
01:05:22.000
我們可以把它用一個
link |
01:05:24.000
矩陣來表示。
link |
01:05:26.000
一個Moving Plan可以把它用一個矩陣來
link |
01:05:28.000
表示。那這個矩陣呢
link |
01:05:30.000
我們就用Gamma呢
link |
01:05:32.000
來表示這個Moving Plan。那這個Moving Plan
link |
01:05:34.000
的矩陣呢,可以寫成像這邊這個樣子。
link |
01:05:36.000
這個矩陣
link |
01:05:38.000
的每一個Element
link |
01:05:40.000
這個矩陣的每一個Element
link |
01:05:42.000
就代表了
link |
01:05:44.000
我們如果要把P產生
link |
01:05:46.000
Q的時候,呃
link |
01:05:48.000
從,舉例來說,這邊有一個
link |
01:05:50.000
很亮的點,代表
link |
01:05:52.000
它的值很大,意思就是說
link |
01:05:54.000
我們要把很多的圖,從這個地方
link |
01:05:56.000
運送到這個地方。
link |
01:05:58.000
所以,如果某一個Element的值
link |
01:06:00.000
很大的話,就代表運送的圖呢
link |
01:06:02.000
是很多的。那今天在這個case
link |
01:06:04.000
裡面,這個位置跟這個位置呢
link |
01:06:06.000
其實是同一個位置。所以把圖從這個地方
link |
01:06:08.000
運送到這個地方,你的距離呢
link |
01:06:10.000
是零。
link |
01:06:12.000
那這個Moving Plan呢
link |
01:06:14.000
有一個Constant就是
link |
01:06:16.000
Rho的和啊,Rho的和。
link |
01:06:18.000
比如說在
link |
01:06:20.000
這個Matrix裡面,每一個
link |
01:06:22.000
Rho的和,都會
link |
01:06:24.000
等於呢,P呢
link |
01:06:26.000
在對應到那個Rho的位置
link |
01:06:28.000
的機率。
link |
01:06:30.000
這樣大家聽得懂嗎?
link |
01:06:32.000
聽得懂嗎?就是說
link |
01:06:34.000
我們把這個Rho的值和起來
link |
01:06:36.000
會等於它,我們把這個Rho的值和起來
link |
01:06:38.000
會等於它,我們把這個Rho的值和起來
link |
01:06:40.000
會等於它,等等。
link |
01:06:42.000
那縱軸呢,縱軸的話
link |
01:06:44.000
就是,我們把這個Column的
link |
01:06:46.000
值和起來會等於Q在這個位置的
link |
01:06:48.000
Distribution。我們把
link |
01:06:50.000
這個Column的值和起來會是這個Distribution
link |
01:06:52.000
對,會是這個值。我們把這個Column的
link |
01:06:54.000
值和起來會是這個值,以此類推。
link |
01:06:56.000
那你想想看,這個Constant是很合理的。
link |
01:06:58.000
因為我們今天是要把土
link |
01:07:00.000
因為今天每一個有顏色的地方
link |
01:07:02.000
代表我們把土從這個地方
link |
01:07:04.000
挪到這個地方。每一個有顏色的點代表
link |
01:07:06.000
我們把土從這個地方挪到這個地方。
link |
01:07:08.000
所以,這邊所有的
link |
01:07:10.000
值加起來就是這邊
link |
01:07:12.000
會堆的土。這邊所有的值加起來
link |
01:07:14.000
就是這邊運送出去的土。
link |
01:07:16.000
所以,Rho的這個Element的和
link |
01:07:18.000
會等於P的機率。
link |
01:07:20.000
這個Column的和呢,要等於Q的機率。
link |
01:07:22.000
這個是你對
link |
01:07:24.000
Moving Plan的限制。
link |
01:07:26.000
好,那有了這個限制
link |
01:07:28.000
以後,你就可以定義出一組
link |
01:07:30.000
一大Moving Plan,有很多很多
link |
01:07:32.000
可能的合理
link |
01:07:34.000
有很多各式各樣可能的
link |
01:07:36.000
Moving Plan。所有的Moving Plan合起來呢,
link |
01:07:38.000
我們用一個大π來描述它。
link |
01:07:40.000
今天如果
link |
01:07:42.000
給定了一個Moving Plan
link |
01:07:44.000
今天如果給定了一個Moving Plan
link |
01:07:46.000
γ,那Average的
link |
01:07:48.000
Moving Distance是多少呢?
link |
01:07:50.000
你可以用下面這個式子算出來。
link |
01:07:52.000
我們用B of γ代表
link |
01:07:54.000
Average的Moving Distance。
link |
01:07:56.000
B of γ的值是多少呢?
link |
01:07:58.000
它是Summation over
link |
01:08:00.000
所有的Xp跟Xq。我們把
link |
01:08:02.000
Xp的分布
link |
01:08:04.000
當作Xp。我們把
link |
01:08:06.000
Xq的分布當作
link |
01:08:08.000
Xq。那就Summation over
link |
01:08:10.000
所有的Xp跟
link |
01:08:12.000
Xq,然後算γ的
link |
01:08:14.000
Xp、Xq,再乘上
link |
01:08:16.000
Xp跟Xq
link |
01:08:18.000
之間的距離。γ
link |
01:08:20.000
的Xp跟Xq意思就是說,我們要把
link |
01:08:22.000
多少土從Xp
link |
01:08:24.000
運送到
link |
01:08:26.000
Xq。然後呢,
link |
01:08:28.000
再把這個
link |
01:08:30.000
運送的量
link |
01:08:32.000
γ的Xp、Xq
link |
01:08:34.000
代表從Xp運送到
link |
01:08:36.000
Xq的量
link |
01:08:38.000
再乘上Xp
link |
01:08:40.000
和Xq之間的距離
link |
01:08:42.000
再Summation over所有的Xp
link |
01:08:44.000
跟Xq,就是給定一個
link |
01:08:46.000
Plan的時候,我們平均要
link |
01:08:48.000
挪動的土的
link |
01:08:50.000
距離。這樣大家
link |
01:08:52.000
有問題嗎?
link |
01:08:54.000
沒有嗎?聽得懂嗎?
link |
01:08:56.000
好,如果這樣子的話
link |
01:08:58.000
接下來
link |
01:09:00.000
Earth Movers Distance,也就是
link |
01:09:02.000
P跟Q他們的
link |
01:09:04.000
Versus Stand Distance的定義,WPQ
link |
01:09:06.000
就是窮取所有
link |
01:09:08.000
可能的Plan,γ
link |
01:09:10.000
窮取所有合法的
link |
01:09:12.000
Plan,γ
link |
01:09:14.000
看哪一個γ可以讓這個V的值
link |
01:09:16.000
最小。可以讓V的值
link |
01:09:18.000
最小的那個γ,就是P
link |
01:09:20.000
跟Q的Distance
link |
01:09:22.000
OK,好
link |
01:09:24.000
所以你要算這個
link |
01:09:26.000
Earth Movers Distance
link |
01:09:28.000
還頗麻煩,為什麼?
link |
01:09:30.000
因為你要算這個Distance
link |
01:09:32.000
一般的Distance就
link |
01:09:34.000
比如說F Divergence,你就算下去就好啦
link |
01:09:36.000
這個要算Earth Movers Distance
link |
01:09:38.000
你要先解一個Optimization
link |
01:09:40.000
Problem,你要先解一個Optimization
link |
01:09:42.000
Problem,看說哪一個Plan
link |
01:09:44.000
是最好的Plan,你才能夠算出
link |
01:09:46.000
這個Distance,你沒解這個Optimization Problem
link |
01:09:48.000
你沒有辦法算這個Distance
link |
01:09:50.000
所以很麻煩,算這個很麻煩
link |
01:09:52.000
好,但是我們現在
link |
01:09:54.000
要改成用Earth Movers Distance
link |
01:09:56.000
來Evaluate兩個Distribution的差距
link |
01:09:58.000
我們要Minimize Earth Movers Distance
link |
01:10:00.000
為什麼要Minimize Earth Movers Distance呢?
link |
01:10:02.000
我們上一次已經有講過了
link |
01:10:04.000
演化這件事,我們
link |
01:10:06.000
講過了這個演化的
link |
01:10:08.000
比喻
link |
01:10:10.000
那我們說,如果今天
link |
01:10:12.000
原來的PG
link |
01:10:14.000
是藍色這條線,而Earth Movers Distance
link |
01:10:16.000
是藍色這條線,PData是紅色這條線
link |
01:10:18.000
然後PG跟
link |
01:10:20.000
PData呢,我們目標是要
link |
01:10:22.000
讓PG跟PData重合
link |
01:10:24.000
比如說P在G在Update100次
link |
01:10:26.000
以後變成PG100,它跟
link |
01:10:28.000
PData是重合的
link |
01:10:30.000
那我們沒有辦法
link |
01:10:32.000
一次調整參數就從
link |
01:10:34.000
PG變到
link |
01:10:36.000
PG就從G0變到G100
link |
01:10:38.000
因為我們Update參數的時候是用Gradient Descent
link |
01:10:40.000
你是只能調一點點
link |
01:10:42.000
參數,你沒有辦法調
link |
01:10:44.000
大量的參數
link |
01:10:46.000
你沒有辦法一次就從
link |
01:10:48.000
PG0變成PG100
link |
01:10:50.000
中間要有一些過渡型態
link |
01:10:52.000
比如說PG50是把
link |
01:10:54.000
這條藍色的線挪得
link |
01:10:56.000
離紅色的線更
link |
01:10:58.000
近一點
link |
01:11:02.000
如果你是用JS Divergence
link |
01:11:04.000
來衡量這些
link |
01:11:06.000
這些平行線之間的距離的話
link |
01:11:08.000
你會發現說
link |
01:11:10.000
這個Case它的JS Divergence
link |
01:11:12.000
這個Case它的JS Divergence
link |
01:11:14.000
這個Case的JS Divergence是零
link |
01:11:16.000
那這個長度呢,這個距離呢
link |
01:11:18.000
就是D0
link |
01:11:20.000
那今天的問題就是
link |
01:11:22.000
那今天的問題就是
link |
01:11:24.000
如果要Update參數的話
link |
01:11:26.000
你根本沒有辦法從PG0
link |
01:11:28.000
跑到PG100,因為
link |
01:11:30.000
PG50並沒有比PG0更
link |
01:11:32.000
如果你用JS Divergence來看的話
link |
01:11:34.000
PG50並沒有比PG0
link |
01:11:36.000
更接近PData
link |
01:11:38.000
但是如果你是用
link |
01:11:40.000
Earth Movers Distance
link |
01:11:42.000
就不一樣,因為
link |
01:11:44.000
PG0和Data
link |
01:11:46.000
它們之間的Earth Movers Distance
link |
01:11:48.000
其實是這兩條
link |
01:11:50.000
水平線,它們中間的距離
link |
01:11:52.000
這邊,假設它們距離
link |
01:11:54.000
是D0的話,這兩個Distribution
link |
01:11:56.000
它們的Earth Movers Distance就是D0
link |
01:11:58.000
假設它們距離是D50的話
link |
01:12:00.000
它們的Earth Movers Distance就是D50
link |
01:12:02.000
那假設是0的話
link |
01:12:04.000
它們的Earth Movers Distance
link |
01:12:06.000
就是0
link |
01:12:08.000
所以,如果我們從左邊到右邊
link |
01:12:10.000
當我們把藍色的線
link |
01:12:12.000
隨著Gradient Descent的Update
link |
01:12:14.000
不斷地往紅色的線挪進的時候
link |
01:12:16.000
它的W Divergence呢
link |
01:12:18.000
它的這個Greater Send Distance
link |
01:12:20.000
它的Earth Movers Distance呢
link |
01:12:22.000
會是越來越小
link |
01:12:24.000
那這樣你在做Gradient Descent的時候
link |
01:12:26.000
你的Model就會有動機
link |
01:12:28.000
往右邊移
link |
01:12:30.000
好,再來的問題就是
link |
01:12:32.000
我們之前知道說
link |
01:12:34.000
所有的F Divergence都可以寫成
link |
01:12:36.000
下面這個式子
link |
01:12:38.000
可是這個Earth Movers Distance
link |
01:12:40.000
它不是F Divergence啊
link |
01:12:42.000
那它也有
link |
01:12:44.000
這種式子可以寫嘛
link |
01:12:46.000
那現在這個厲害的地方
link |
01:12:48.000
就是Darwin Gantt
link |
01:12:50.000
這篇Paper,他們說
link |
01:12:52.000
有,是有的
link |
01:12:54.000
但是這個方法不是
link |
01:12:56.000
這個方法是文件上就有的
link |
01:12:58.000
但他們在文件裡面找到了這個式子
link |
01:13:00.000
文件找到這個式子說
link |
01:13:02.000
P Data跟PG
link |
01:13:04.000
它們的Earth Movers Distance
link |
01:13:06.000
可以寫成下面這個式子
link |
01:13:08.000
那前面有一個
link |
01:13:10.000
D屬於One Listed
link |
01:13:12.000
我們先不要管
link |
01:13:14.000
這個式子
link |
01:13:16.000
我們現在要做的事情就是
link |
01:13:18.000
找一個Discriminator D
link |
01:13:20.000
它可以讓大括號裡面的式子對答
link |
01:13:22.000
大括號裡面是什麼呢
link |
01:13:24.000
大括號裡面是
link |
01:13:26.000
對P Data Sample X
link |
01:13:28.000
然後算D of X的期望值
link |
01:13:30.000
對PG Sample X
link |
01:13:32.000
然後算D of X的期望值
link |
01:13:34.000
把它們相減然後取max
link |
01:13:36.000
也就是說從這個式子
link |
01:13:38.000
看起來我們就是要找一個D
link |
01:13:40.000
它可以讓Data的
link |
01:13:42.000
這個這個,它可以讓Data的
link |
01:13:44.000
從Data Sample出來的X它的值
link |
01:13:46.000
越大越好,從G Sample出來的X
link |
01:13:48.000
它的值呢,越小越好
link |
01:13:50.000
link |
01:13:52.000
前面這邊,但是前面這邊有一個限制
link |
01:13:54.000
並不是所有的D
link |
01:13:56.000
都可以拿來這邊用
link |
01:13:58.000
這個D呢,必須要是一個
link |
01:14:00.000
One Listed的Function
link |
01:14:02.000
我們才拿來這邊用
link |
01:14:04.000
就在One Listed Function的這個Set裡面
link |
01:14:06.000
找出來一個D可以讓這個值最大的話
link |
01:14:08.000
那這個最大的值
link |
01:14:10.000
就是Earth Movers Distance
link |
01:14:12.000
那如果D不是的話
link |
01:14:14.000
它不是這個One Listed
link |
01:14:16.000
的一員的話
link |
01:14:18.000
那你找出來的也不是Earth Movers Distance
link |
01:14:20.000
D一定要是
link |
01:14:22.000
One Listed的一員
link |
01:14:24.000
不像我們在前面做的時候,D,我們說D是個Network
link |
01:14:26.000
然後我們可以假設它如果
link |
01:14:28.000
它Capacity無窮大的話,它要是誰就可以是誰
link |
01:14:30.000
OK,它愛幹嘛
link |
01:14:32.000
就可以幹嘛,它要是誰就可以是誰
link |
01:14:34.000
但是在Earth Movers Distance
link |
01:14:36.000
的這個Case下呢
link |
01:14:38.000
D一定要是One Listed的
link |
01:14:40.000
Function
link |
01:14:42.000
好吧,那什麼是
link |
01:14:44.000
Listed的Function呢
link |
01:14:46.000
Listed的Function是說
link |
01:14:48.000
它這個Function符合下面這個條件
link |
01:14:50.000
如果
link |
01:14:52.000
我們計算S1-S2
link |
01:14:54.000
的絕對值
link |
01:14:56.000
我們計算
link |
01:14:58.000
我們計算S1跟S2
link |
01:15:00.000
的距離,然後我們計算
link |
01:15:02.000
F of S1
link |
01:15:04.000
跟F of S2的距離
link |
01:15:06.000
我們發現說F of S1跟F of S2
link |
01:15:08.000
的距離,它會小於
link |
01:15:10.000
K倍的S1跟S2的距離
link |
01:15:12.000
什麼意思呢
link |
01:15:14.000
你可以看說S1跟S2的距離
link |
01:15:16.000
就是輸入的
link |
01:15:18.000
Function輸入的變化
link |
01:15:20.000
F of S1-F of S2
link |
01:15:22.000
的距離就是Function輸出的變化
link |
01:15:24.000
那Function輸出的變化
link |
01:15:26.000
會小於等於Function輸入的變化的
link |
01:15:28.000
K倍,意思就是說
link |
01:15:30.000
這個Function它不是一個很猛烈變化的Function
link |
01:15:32.000
如果今天是
link |
01:15:34.000
One Listed Function
link |
01:15:36.000
的話,意思就是說
link |
01:15:38.000
K等於1就是One Listed Function
link |
01:15:40.000
這意味著說呢
link |
01:15:42.000
今天這個Function它不會
link |
01:15:44.000
變化的非常劇烈
link |
01:15:46.000
當你把輸入
link |
01:15:48.000
移動一個Distance的時候
link |
01:15:50.000
輸出改的變化量
link |
01:15:52.000
不會超過
link |
01:15:54.000
輸入的變化量
link |
01:15:56.000
如果今天你的Function是One Listed Function的話
link |
01:15:58.000
那我們這邊可以舉一個例子
link |
01:16:00.000
來問一下大家說
link |
01:16:02.000
假設我們這邊有兩個
link |
01:16:04.000
Function,它們的Input
link |
01:16:06.000
都是一維的輸出
link |
01:16:08.000
輸出也都是一維的,有一個綠色的
link |
01:16:10.000
Function,有一個藍色的
link |
01:16:12.000
Function,哪一個是
link |
01:16:14.000
One Listed Function,哪一個
link |
01:16:16.000
不是One Listed Function呢?
link |
01:16:18.000
給大家三秒鐘的時間考慮一下,根據左邊的定義
link |
01:16:20.000
K代1的話,你就知道Listed Function
link |
01:16:22.000
是什麼
link |
01:16:24.000
好,你覺得
link |
01:16:26.000
綠色的Function是One Listed Function嗎?
link |
01:16:28.000
覺得是的同學舉手一下
link |
01:16:30.000
好,手放下
link |
01:16:32.000
覺得不是的同學舉手一下
link |
01:16:34.000
大家都覺得是,好
link |
01:16:36.000
那藍色的呢?你覺得藍色的Function是One Listed Function
link |
01:16:38.000
同學舉手一下
link |
01:16:40.000
覺得不是的同學舉手一下
link |
01:16:42.000
好,謝謝謝謝,好,所有人都覺得不是
link |
01:16:44.000
OK,所以
link |
01:16:46.000
因為你看藍色它這個變化這麼劇烈
link |
01:16:48.000
所以它的這個
link |
01:16:50.000
輸出的變化應該是大過輸入的變化
link |
01:16:52.000
所以它不是一個One Listed Function
link |
01:16:54.000
所以大家都
link |
01:16:56.000
都大概知道
link |
01:16:58.000
大家都知道我的意思
link |
01:17:00.000
好,那
link |
01:17:02.000
為什麼這邊我們需要有一個
link |
01:17:04.000
One Listed Function的限制呢?
link |
01:17:06.000
那首先第一個回答就是
link |
01:17:08.000
根據文獻上
link |
01:17:10.000
WaterStand
link |
01:17:12.000
這個FastestStand Distance
link |
01:17:14.000
它就是寫成這樣,OK,結束
link |
01:17:16.000
但是你可以給它另外一個直觀的解釋
link |
01:17:18.000
如果沒有
link |
01:17:20.000
這個One Listed Function的限制的話
link |
01:17:22.000
到底會發生什麼事呢?
link |
01:17:24.000
如果沒有這個One Listed Function的限制的話
link |
01:17:26.000
我們現在有一個
link |
01:17:28.000
pData的distribution和pGa distribution
link |
01:17:30.000
我們都假設它是
link |
01:17:32.000
One Dimension的Space上面的
link |
01:17:34.000
分布,我們都假設它是
link |
01:17:36.000
One Dimension的Space
link |
01:17:38.000
我們都假設它是
link |
01:17:40.000
One Dimension的Space上面的
link |
01:17:42.000
我們都假設它是One Dimension的Space上面的
link |
01:17:44.000
分布,然後呢
link |
01:17:46.000
它們中間的距離是D
link |
01:17:48.000
那我們知道說呢
link |
01:17:50.000
它們的這個EarthMoverDistance距離
link |
01:17:52.000
是D
link |
01:17:54.000
那我們都知道它是EarthMoverDistance距離
link |
01:17:56.000
那我們都知道它是EarthMoverDistance距離
link |
01:17:58.000
距離是D
link |
01:18:00.000
我們都知道它是EarthMoverDistance距離
link |
01:18:02.000
距離是D
link |
01:18:04.000
那這個Function呢
link |
01:18:06.000
你是不是會說
link |
01:18:08.000
Dx1等於正無窮大
link |
01:18:10.000
Dx2等於負無窮大
link |
01:18:12.000
當Dx1是正無窮大
link |
01:18:14.000
Dx2是負無窮大的時候
link |
01:18:16.000
你就可以Maximize
link |
01:18:18.000
這個Function
link |
01:18:20.000
這樣算出來就不是
link |
01:18:22.000
Best of Same Distance啊
link |
01:18:24.000
而且這個Function很奇怪
link |
01:18:26.000
在實作上你會遇到很多問題
link |
01:18:28.000
所以如果對Function沒有任何限制的話
link |
01:18:30.000
其實最佳的Solution
link |
01:18:32.000
應該是在Data
link |
01:18:34.000
今天如果對Function沒有任何限制的話
link |
01:18:36.000
今天如果對Function沒有任何限制的話
link |
01:18:38.000
只要你的Data跟
link |
01:18:40.000
你的Pdata跟Pg沒有Overlap
link |
01:18:42.000
你就會想要給Pdata無窮大的值
link |
01:18:44.000
給Pg無窮小的
link |
01:18:46.000
負無窮大的值
link |
01:18:48.000
所以還好我們有
link |
01:18:50.000
This One Listed Function這個限制
link |
01:18:52.000
One Listed Function這個限制告訴我們說
link |
01:18:54.000
Dx1-Dx2
link |
01:18:56.000
要小於等於x1-x2
link |
01:18:58.000
Dx1跟Dx2的距離
link |
01:19:00.000
要小於x1跟x2的距離
link |
01:19:04.000
那這就告訴我們什麼
link |
01:19:06.000
現在既然
link |
01:19:08.000
x1跟x2之間的距離
link |
01:19:10.000
是D
link |
01:19:12.000
那Dx1跟Dx2之間的距離
link |
01:19:14.000
就不可以超過D
link |
01:19:16.000
在Dx1跟Dx2之間的距離
link |
01:19:18.000
不可以超過D的
link |
01:19:20.000
前提下
link |
01:19:22.000
在這個
link |
01:19:24.000
前提之下
link |
01:19:26.000
在這個前提之下
link |
01:19:28.000
這個東西
link |
01:19:30.000
那它要怎麼做呢
link |
01:19:32.000
是不是就是給這個值K加D
link |
01:19:34.000
給這個值K
link |
01:19:36.000
這個值是多少都無所謂
link |
01:19:38.000
因為最後Dx1會減
link |
01:19:40.000
Dx2它們兩個會相減
link |
01:19:42.000
所以K這個值多少無所謂
link |
01:19:44.000
當然差最多只能差D
link |
01:19:46.000
如果差大過於D的話
link |
01:19:48.000
那D這個function就不是One Listed Function了
link |
01:19:50.000
如果超過D的話
link |
01:19:52.000
就不是One Listed Function了
link |
01:19:54.000
所以它一定要小於D
link |
01:19:56.000
OK
link |
01:19:58.000
這樣大家有問題嗎
link |
01:20:00.000
沒有嗎
link |
01:20:02.000
link |
01:20:04.000
那這邊呢
link |
01:20:06.000
從這個
link |
01:20:08.000
One Listed Function
link |
01:20:10.000
的這個
link |
01:20:12.000
W跟的這個式子
link |
01:20:14.000
你可以很直覺的看出
link |
01:20:16.000
為什麼我們要從
link |
01:20:18.000
JS Diversion換成
link |
01:20:20.000
Vector Standard Distance
link |
01:20:22.000
我們可以看出為什麼我們要這樣換
link |
01:20:24.000
假如我們今天用的是
link |
01:20:28.000
JS
link |
01:20:30.000
我們在原來的Game裡面
link |
01:20:32.000
我們的DomS
link |
01:20:34.000
是一個
link |
01:20:36.000
這個二元的分類器
link |
01:20:38.000
它的Output是一個Sigmoid Function
link |
01:20:40.000
如果是一個二元的分類器
link |
01:20:42.000
它的Output是一個Sigmoid Function
link |
01:20:44.000
然後你有藍色的Distribution
link |
01:20:46.000
你有橙色的Distribution
link |
01:20:48.000
那如果你要把藍色的Distribution
link |
01:20:50.000
橙色的Distribution
link |
01:20:52.000
大小可能是這個樣子
link |
01:20:54.000
可能是這個樣子
link |
01:20:56.000
在藍色這個地方
link |
01:20:58.000
趨近於1
link |
01:21:00.000
在橙色這個地方趨近於0
link |
01:21:02.000
它的線條呢可能是這個樣子
link |
01:21:04.000
那在這兩個0和1的地方
link |
01:21:06.000
它都是非常平滑
link |
01:21:08.000
但如果我們今天
link |
01:21:10.000
要找的是一個Listed Function
link |
01:21:12.000
的話,你的選擇
link |
01:21:14.000
可能會是這個樣子
link |
01:21:16.000
你找出來的解
link |
01:21:18.000
如果你要讓這個位置的
link |
01:21:20.000
D of X跟這個位置的D of X
link |
01:21:22.000
差得最多,然後又要讓
link |
01:21:24.000
你找出來的Function符合
link |
01:21:26.000
Listed,你又要
link |
01:21:28.000
符合這個One Listed Contract的話
link |
01:21:30.000
你找到的可能是
link |
01:21:32.000
綠色這條直線
link |
01:21:34.000
綠色這條直線
link |
01:21:36.000
它可以讓這個地方Assign的值是K
link |
01:21:38.000
這個地方Assign的值
link |
01:21:40.000
是K加D
link |
01:21:42.000
這個時候你會發現這兩個Distribution
link |
01:21:44.000
它們中間的Discriminator
link |
01:21:46.000
這個D of X的Function
link |
01:21:48.000
它是一條直線
link |
01:21:50.000
既然它是一條直線的話
link |
01:21:52.000
如果原來是
link |
01:21:54.000
藍色這條線在這個地方歸電是0
link |
01:21:56.000
在這個地方歸電是0
link |
01:21:58.000
你根本沒有辦法移動紅色這些點
link |
01:22:00.000
紅色這些點是Generator的Output
link |
01:22:02.000
你根本沒有辦法挪動Generator的Output
link |
01:22:04.000
讓它逼近這個Data Distribution
link |
01:22:06.000
歸電是0,它根本沒有辦法移動
link |
01:22:08.000
但是現在還好是
link |
01:22:10.000
綠色這條線
link |
01:22:12.000
如果綠色這條線的話
link |
01:22:14.000
在這個位置
link |
01:22:16.000
它也是有值的
link |
01:22:18.000
所以這個時候,你的Distribution
link |
01:22:20.000
就可以順著這個歸電的方向
link |
01:22:22.000
往藍色的位置移動
link |
01:22:24.000
所以
link |
01:22:26.000
如果用Vector Static Distance的話
link |
01:22:28.000
好處就是你在認的時候
link |
01:22:30.000
就比較不會有這種歸電Vanishing的問題
link |
01:22:32.000
認起來應該是會比較舒服
link |
01:22:36.000
接下來的問題就是
link |
01:22:38.000
怎麼解這個
link |
01:22:40.000
Optimization的Problem呢
link |
01:22:42.000
如果今天沒有
link |
01:22:44.000
這個限制的話
link |
01:22:46.000
那我們不就
link |
01:22:48.000
直接用歸電Descent
link |
01:22:50.000
或歸電Ascent就好了嗎
link |
01:22:52.000
但是問題就是
link |
01:22:54.000
我們現在有這個
link |
01:22:56.000
One Listed Function的限制
link |
01:22:58.000
我們現在有這個限制
link |
01:23:00.000
所以
link |
01:23:02.000
所以我們現在
link |
01:23:04.000
我們現在有這個限制
link |
01:23:06.000
那怎麼辦
link |
01:23:08.000
你沒有辦法單純的用
link |
01:23:10.000
歸電Descent或歸電Ascent來
link |
01:23:12.000
解這個問題
link |
01:23:14.000
所以呢
link |
01:23:16.000
第一篇WGAN的Panel
link |
01:23:18.000
他說不然我們做Weight Clipping
link |
01:23:20.000
Weight Clipping是什麼意思呢
link |
01:23:22.000
他說我們強制
link |
01:23:24.000
讓所有學出來的參數的值
link |
01:23:26.000
我們現在學的是一個Network
link |
01:23:28.000
我們學的這個Network它的參數的值
link |
01:23:30.000
都要介於C
link |
01:23:32.000
和-C
link |
01:23:34.000
中間
link |
01:23:36.000
link |
01:23:38.000
都要介於C
link |
01:23:40.000
和-C中間
link |
01:23:42.000
那這件事怎麼做呢
link |
01:23:44.000
怎麼在做歸電Descent的時候
link |
01:23:46.000
強制讓你的所有參數都介於C和-C
link |
01:23:48.000
中間呢
link |
01:23:50.000
因為你知道做歸電的時候你參數Update以後你根本沒有辦法控制它的Range在哪裡
link |
01:23:52.000
所以這邊的做法就是
link |
01:23:54.000
Update完參數以後
link |
01:23:56.000
如果參數
link |
01:23:58.000
大於C就讓它變C
link |
01:24:00.000
如果參數小於-C就讓它變-C
link |
01:24:02.000
我記得我
link |
01:24:04.000
這個Clipping在另外一個地方也會做
link |
01:24:06.000
在Rn的時候
link |
01:24:08.000
你會對那個歸電做Clipping
link |
01:24:10.000
那這邊呢
link |
01:24:12.000
這個Gain在Trend Down的Gain的時候
link |
01:24:14.000
你會對這個Weight做Clipping
link |
01:24:16.000
link |
01:24:18.000
那你說
link |
01:24:20.000
做Weight Clipping這件事情
link |
01:24:22.000
我們就可以保證說
link |
01:24:24.000
我們得到的Function
link |
01:24:26.000
是一個One-Lifted Function嗎
link |
01:24:28.000
其實沒有辦法
link |
01:24:30.000
我們只能夠保證說
link |
01:24:32.000
我們得到的Function
link |
01:24:34.000
是一個K-Lifted Function
link |
01:24:36.000
一個K
link |
01:24:38.000
什麼意思
link |
01:24:40.000
你看我們對
link |
01:24:42.000
W的Weight
link |
01:24:44.000
做出了限制
link |
01:24:46.000
當我們對W的Weight做出限制的時候
link |
01:24:48.000
意味著說我們對Network的Input
link |
01:24:50.000
做一個變化的時候
link |
01:24:52.000
Output的變化總是有限的
link |
01:24:54.000
Output的變化總是有限的
link |
01:24:56.000
因為你的Weight
link |
01:24:58.000
因為你的Weight有個Range
link |
01:25:00.000
所以你對Input有個變化的時候
link |
01:25:02.000
你的Output的變化總是有限的
link |
01:25:04.000
那這樣子如果Output的變化是有限的話
link |
01:25:06.000
你只要
link |
01:25:08.000
K是一個夠大的值
link |
01:25:10.000
那你的Network
link |
01:25:12.000
就可以滿足K-Lifted Function
link |
01:25:14.000
那你說
link |
01:25:16.000
可是不是要滿足One-Lifted Function嗎
link |
01:25:18.000
滿足K-Lifted Function行嗎
link |
01:25:20.000
待會兒更難Paper裡面有說
link |
01:25:22.000
如果我們今天
link |
01:25:24.000
把這個限制放寬成K的話
link |
01:25:26.000
那我們最後得到的結果
link |
01:25:28.000
會在Basis and Distance
link |
01:25:30.000
會在Error Mover Distance前面呢
link |
01:25:32.000
是一個K
link |
01:25:34.000
所以跟原來的Error Mover Distance呢
link |
01:25:36.000
仍然是成正比的
link |
01:25:40.000
那另外一個問題就是
link |
01:25:42.000
就算是你現在可以接受
link |
01:25:44.000
我們把限制放寬
link |
01:25:46.000
放寬到找K-Lifted Function
link |
01:25:48.000
的其中一員
link |
01:25:50.000
而不侷限於One-Lifted Function
link |
01:25:52.000
你用這個Function的方法
link |
01:25:54.000
找出來的Function
link |
01:25:56.000
也不保證它是真的
link |
01:25:58.000
最大化後面這個式子的
link |
01:26:00.000
而且
link |
01:26:02.000
而且
link |
01:26:04.000
你可以想想看
link |
01:26:06.000
應該是有一些Function
link |
01:26:08.000
它的Weight
link |
01:26:10.000
不是介於C和-C
link |
01:26:12.000
之間
link |
01:26:14.000
但是滿足
link |
01:26:16.000
這個Constraint
link |
01:26:18.000
因為滿足這個
link |
01:26:20.000
就是說
link |
01:26:22.000
如果你對Weight做Clipping
link |
01:26:24.000
你可以保證它滿足這個Constraint
link |
01:26:26.000
但並不代表滿足這個Constraint
link |
01:26:28.000
所有的Function
link |
01:26:30.000
都是符合這個Weight
link |
01:26:32.000
都是符合這個Weight Clipping
link |
01:26:34.000
不代表所有的Function
link |
01:26:36.000
都是符合這個Weight Clipping
link |
01:26:38.000
因此我們今天呢
link |
01:26:40.000
如果做Weight Clipping的話
link |
01:26:42.000
我們Search Space其實只是
link |
01:26:44.000
原來這個Mesh下面
link |
01:26:46.000
這個限制的一個Search Space
link |
01:26:48.000
而已
link |
01:26:50.000
所以這樣大家聽得懂嗎
link |
01:26:52.000
反正這種一些奇奇怪怪的地方就是
link |
01:26:54.000
大家也不要太深究
link |
01:26:56.000
有其他不一樣的做法
link |
01:26:58.000
好,那在實作上
link |
01:27:00.000
沒加這個Clipping
link |
01:27:02.000
顯然是有問題的
link |
01:27:04.000
一定要加這個Clipping
link |
01:27:06.000
為什麼呢?你這樣看
link |
01:27:08.000
今天如果你有藍色橙色這兩個Distribution
link |
01:27:10.000
它們是沒有Overlay就長這個樣子
link |
01:27:12.000
如果你今天就直接做
link |
01:27:14.000
歸間Decimal Maximize
link |
01:27:16.000
這個式子沒有做Clipping的話
link |
01:27:18.000
你的結果就是
link |
01:27:20.000
你會Assign給藍色這個地方的值無窮大
link |
01:27:22.000
橙色這個地方的值負無窮大
link |
01:27:24.000
然後你的Training就會
link |
01:27:26.000
沒有辦法停止
link |
01:27:28.000
如果你今天
link |
01:27:30.000
你的這個Discriminator
link |
01:27:32.000
它的Output是一條直線的話
link |
01:27:34.000
這個直線它最後會越來越直
link |
01:27:36.000
它會給藍色這邊的值越來越大
link |
01:27:38.000
紅色這邊的值越來越小
link |
01:27:40.000
因為沒辦法停止
link |
01:27:42.000
所以一定要Clipping
link |
01:27:44.000
假設你的Discriminator是一條直線的話
link |
01:27:46.000
你就限制了
link |
01:27:48.000
這條直線的斜率
link |
01:27:50.000
這樣在實作上
link |
01:27:52.000
你就比較不會有問題
link |
01:27:54.000
link |
01:27:56.000
那總之
link |
01:27:58.000
我們來看一下
link |
01:28:00.000
WGAN的Helper
link |
01:28:02.000
我們這邊先很快的再閃過一次
link |
01:28:04.000
原來的GAN的式子
link |
01:28:06.000
在原來的GAN的式子裡面
link |
01:28:08.000
你會得Sample一些Real的Object
link |
01:28:10.000
你會Sample一些Generated Object
link |
01:28:12.000
然後呢
link |
01:28:14.000
你會算下面這個Vfunction
link |
01:28:16.000
然後你要讓這個值呢
link |
01:28:18.000
被Maximize
link |
01:28:20.000
你的Discriminator的參數
link |
01:28:22.000
讓這個值被Maximize
link |
01:28:24.000
接下來呢
link |
01:28:26.000
你再Sample一些Z
link |
01:28:28.000
你要讓下面這個V的值
link |
01:28:30.000
越大越好
link |
01:28:32.000
然後你再調整一下參數
link |
01:28:34.000
讓下面這個V的值
link |
01:28:36.000
越大越好
link |
01:28:38.000
好那
link |
01:28:40.000
WGAN是怎麼樣呢
link |
01:28:42.000
如果在實作上WGAN其實只要改幾個地方
link |
01:28:44.000
首先
link |
01:28:46.000
原來這邊這個V這個Function的第一項
link |
01:28:48.000
是D of S
link |
01:28:50.000
WGAN就改成D of S
link |
01:28:52.000
原來是
link |
01:28:54.000
Log-1-D of S
link |
01:28:56.000
WGAN改成-D of S
link |
01:28:58.000
這邊前面這個是Delta
link |
01:29:00.000
你要讓這個D of S Delta
link |
01:29:02.000
越小越好
link |
01:29:04.000
WGAN這邊沒有Log
link |
01:29:06.000
它就是-D of S Delta
link |
01:29:08.000
如果你
link |
01:29:10.000
帶回去前面看一下
link |
01:29:12.000
那個MessageStandDistance
link |
01:29:14.000
那個EarthMoveDistance式子的話
link |
01:29:16.000
Data裡面Sample出來的X
link |
01:29:18.000
它的D的值越大越好
link |
01:29:20.000
從Distribution
link |
01:29:22.000
從Generated的Model裡面Sample出來的X Delta
link |
01:29:24.000
它的值越小越好
link |
01:29:26.000
寫出來的式子就是
link |
01:29:28.000
這個D of X
link |
01:29:30.000
跟D of X Delta相減
link |
01:29:32.000
那另外一個
link |
01:29:34.000
另外一個不同是
link |
01:29:36.000
我們現在會Output的地方
link |
01:29:38.000
就不需要Sigmoid Function
link |
01:29:40.000
我們D的Output就不需要Sigmoid Function
link |
01:29:42.000
因為原來你需要有Sigmoid Function
link |
01:29:44.000
原來沒Sigmoid Function
link |
01:29:46.000
第一個最大的問題就是
link |
01:29:48.000
你的值可能會沒定義
link |
01:29:50.000
如果你的Output是隨便都可以的值的話
link |
01:29:52.000
Log-D of X
link |
01:29:54.000
跟Log-E-D of X
link |
01:29:56.000
它可能是沒定義的
link |
01:29:58.000
你要讓Log-D of X
link |
01:30:00.000
你要讓你的D of X介於0到1之間
link |
01:30:02.000
這兩個式子
link |
01:30:04.000
你才能夠保證它有定義
link |
01:30:06.000
那現在既然你把Log拿掉了
link |
01:30:08.000
那你的Output就可以是任何值
link |
01:30:10.000
所以在做WGAN的時候
link |
01:30:12.000
Sigmoid Function
link |
01:30:14.000
你可以讓你的Output就是0
link |
01:30:16.000
另外一件事情就是你要做Weight Clipping
link |
01:30:18.000
你更新完你的W的參數
link |
01:30:20.000
以後去Check一下
link |
01:30:22.000
現在你的W的參數有沒有超過C
link |
01:30:24.000
或有沒有小於-C
link |
01:30:26.000
如果有超過C就把它變C
link |
01:30:28.000
如果小於-C就把它變成-C
link |
01:30:30.000
這個就是Weight Clipping
link |
01:30:32.000
那下面Generator的地方
link |
01:30:34.000
是一模一樣的
link |
01:30:36.000
本來是E-D of G of Z
link |
01:30:38.000
現在把E-D of G of Z
link |
01:30:40.000
換成
link |
01:30:42.000
把Log-E-D of G of Z
link |
01:30:44.000
Log的這項就直接換成
link |
01:30:46.000
-D of G of Z
link |
01:30:48.000
就結束了
link |
01:30:50.000
這個東西你要改Code
link |
01:30:52.000
大概就不需要花太多時間
link |
01:30:54.000
幾行就可以辦到
link |
01:30:56.000
然後在第一篇WGAN的Paper裡面
link |
01:30:58.000
它的都市傳說就是
link |
01:31:00.000
你不能用addon
link |
01:31:02.000
要用rmsplot
link |
01:31:04.000
他們發現說用rmsplot
link |
01:31:06.000
用addon train WGAN的結果
link |
01:31:08.000
你把它改掉了
link |
01:31:10.000
要用rmsplot
link |
01:31:12.000
那你可以在這個留言終結者裡面
link |
01:31:14.000
自己試著verify一下這件事
link |
01:31:16.000
但是有另外一件要告訴大家的事情就是
link |
01:31:18.000
在improved的WGAN裡面
link |
01:31:20.000
他們又發現說addon
link |
01:31:22.000
是比rmsplot還要好的
link |
01:31:24.000
之前在這篇Paper裡面
link |
01:31:26.000
發現addon比較差
link |
01:31:28.000
rmsplot比較好
link |
01:31:30.000
那另外一篇Paper裡面又發現說
link |
01:31:32.000
addon比較好 rmsplot比較差
link |
01:31:34.000
你看這個
link |
01:31:36.000
這個地方風向其實是非常混亂的
link |
01:31:40.000
這是一些
link |
01:31:42.000
WGAN的那篇Paper裡面的
link |
01:31:44.000
實驗結果
link |
01:31:46.000
他這邊有比較了幾個case
link |
01:31:48.000
左邊的圖都是WGAN所產生的
link |
01:31:50.000
右邊的圖都是原來的GAN所產生的
link |
01:31:52.000
第一個case
link |
01:31:54.000
是你用CNN當作你的generator
link |
01:31:56.000
那你這個CNN
link |
01:31:58.000
是deep的CNN
link |
01:32:00.000
那WGAN跟GAN
link |
01:32:02.000
其實performance都是好的
link |
01:32:04.000
就是那種防偏的圖
link |
01:32:06.000
那在第二個image呢
link |
01:32:08.000
我們也是用CNN的generator
link |
01:32:10.000
但這個CNN是比較差的CNN
link |
01:32:12.000
怎麼說他比較差呢
link |
01:32:14.000
第一個就是他沒有做fessionalization
link |
01:32:16.000
第二個就是他的structure是不好
link |
01:32:18.000
所謂structure不好的意思是說
link |
01:32:20.000
他每一個layer的filter的數目
link |
01:32:22.000
都是一樣
link |
01:32:24.000
在DCGAN那篇Paper裡面
link |
01:32:26.000
他告訴我們一個設計filter的準則
link |
01:32:28.000
就是每一層的filter都要是前一層的
link |
01:32:30.000
我記得好像如果沒弄錯的話
link |
01:32:32.000
是要兩倍
link |
01:32:34.000
但這邊不是,每一層都是一樣
link |
01:32:36.000
所以這個是一個比較差的架構的設計
link |
01:32:38.000
如果有沒有比較差的架構設計的話
link |
01:32:40.000
WGAN還可以得到好的結果
link |
01:32:42.000
但是原來的GAN會整個壞掉
link |
01:32:44.000
你可能問說現在這個GAN
link |
01:32:46.000
要怎麼evaluate呢
link |
01:32:48.000
等一下我們最後
link |
01:32:50.000
在這份本裡面最後
link |
01:32:52.000
我們會講一下這個GAN
link |
01:32:54.000
evaluate的方式
link |
01:32:56.000
我們會講一下說
link |
01:32:58.000
你要怎麼來evaluate
link |
01:33:00.000
這種generative的model
link |
01:33:02.000
但現在主流的做法
link |
01:33:04.000
還是就是人臉看
link |
01:33:06.000
然後用喊
link |
01:33:08.000
懂我意思嗎
link |
01:33:10.000
你先用一個方法
link |
01:33:12.000
用你的baseline generate image
link |
01:33:14.000
然後自己再generate image
link |
01:33:16.000
然後再說一些
link |
01:33:18.000
我generate的果然比較好
link |
01:33:20.000
從來沒有看過這麼清晰的圖像
link |
01:33:22.000
這個其實還頗難比較的啦
link |
01:33:24.000
但是有一些很明顯的case
link |
01:33:26.000
像你總不能昧著良心說
link |
01:33:28.000
這個東西這樣子比較好
link |
01:33:30.000
對不對
link |
01:33:32.000
像這種case你就很難比較
link |
01:33:34.000
到底WGAN好還是GAN好
link |
01:33:36.000
因為這個很難比
link |
01:33:38.000
你覺得看起來差不多
link |
01:33:40.000
但是這個case你總不能昧著良心說
link |
01:33:42.000
GAN其實比WGAN還要好
link |
01:33:44.000
這邊顯然是WGAN比較好
link |
01:33:46.000
最後呢
link |
01:33:48.000
這邊有一個case是
link |
01:33:50.000
我們的generator是NLP的
link |
01:33:52.000
那如果generator是NLP的話
link |
01:33:54.000
感覺應該產生的image都比這邊差
link |
01:33:56.000
產生的image都比這邊差
link |
01:33:58.000
但是GAN感覺又更差一點
link |
01:34:00.000
GAN感覺更差一點
link |
01:34:02.000
這就比較難講啦
link |
01:34:04.000
GAN這邊有很多重複的圖
link |
01:34:06.000
所以感覺是比較差的
link |
01:34:08.000
如果你今天做的是WGAN的話
link |
01:34:10.000
你的這個
link |
01:34:12.000
discriminator的output
link |
01:34:14.000
我們說discriminator的output
link |
01:34:16.000
就是在maximize這個式子
link |
01:34:18.000
你的discriminator的output
link |
01:34:20.000
就可以拿來衡量
link |
01:34:22.000
你的model的performance
link |
01:34:24.000
因為原來
link |
01:34:26.000
如果你是用原來的GAN
link |
01:34:28.000
你是在衡量JS divergence
link |
01:34:30.000
今天有兩個case
link |
01:34:32.000
一個是假設你就是遵照原來
link |
01:34:34.000
原來GAN的想法
link |
01:34:36.000
你每次都把JS divergence
link |
01:34:38.000
train到底
link |
01:34:40.000
真的去量JS divergence的話
link |
01:34:42.000
那你得到的結果可能是
link |
01:34:44.000
幾乎所有的case都是零
link |
01:34:46.000
你根本就不知道你的image generator
link |
01:34:48.000
你generate出來的output比較好
link |
01:34:50.000
不管output generator好或壞
link |
01:34:52.000
都是一個
link |
01:34:54.000
都是一個定值
link |
01:34:56.000
不管你generate的image好還是壞
link |
01:34:58.000
通常你算JS divergence
link |
01:35:00.000
都是一個定值
link |
01:35:02.000
根本就不知道你generate的image
link |
01:35:04.000
有沒有好還是不好
link |
01:35:06.000
所以過去如果
link |
01:35:08.000
另外一個case是
link |
01:35:10.000
你不要遵照原來衡量JS divergence
link |
01:35:12.000
這件事把你的discriminator train到底
link |
01:35:14.000
你每次都只update一次
link |
01:35:16.000
update是discriminator
link |
01:35:18.000
就update generator
link |
01:35:20.000
update discriminator
link |
01:35:22.000
這樣你的discriminator真正衡量的東西
link |
01:35:24.000
就不是JS divergence
link |
01:35:26.000
那他衡量的東西根本就不是divergence
link |
01:35:28.000
根本不知道是什麼
link |
01:35:30.000
那你的discriminator output就變得沒有意義了
link |
01:35:32.000
但是如果我們今天用的是WGAN的話
link |
01:35:34.000
這個時候discriminator衡量的是
link |
01:35:36.000
vector distance
link |
01:35:38.000
或是Earth movers distance
link |
01:35:40.000
他衡量的是
link |
01:35:42.000
他現在是真的在衡量這個distance
link |
01:35:44.000
而這個distance真的可以表示兩個
link |
01:35:46.000
distribution他們遠近的關係
link |
01:35:48.000
所以如果你看你的discriminator
link |
01:35:50.000
的loss
link |
01:35:52.000
你從你的discriminator的loss
link |
01:35:54.000
可以真的看出來
link |
01:35:56.000
你generate出來的image
link |
01:35:58.000
有沒有比較好
link |
01:36:00.000
在paper裡面就舉了幾個例子
link |
01:36:02.000
舉例來說
link |
01:36:04.000
假設我們現在的generator
link |
01:36:06.000
是一個multilayer perceptron
link |
01:36:08.000
就沒有用CNN的generator
link |
01:36:10.000
我們隨著training的進行
link |
01:36:12.000
隨著training的進行
link |
01:36:14.000
這個vector distance
link |
01:36:16.000
會越來越小
link |
01:36:18.000
那就顯示了說
link |
01:36:20.000
我們現在generate的image
link |
01:36:22.000
是越來越好
link |
01:36:24.000
是越來越好
link |
01:36:26.000
或是你看這樣一個case
link |
01:36:28.000
在vector distance很大的時候
link |
01:36:30.000
你的generator
link |
01:36:32.000
這邊用的就是DCGAN
link |
01:36:34.000
也就是你用deep convolution neural network
link |
01:36:36.000
當作你的generator
link |
01:36:38.000
我們如果量的是vector distance的話
link |
01:36:40.000
在vector distance很大的時候
link |
01:36:42.000
你的image是慢
link |
01:36:44.000
但vector distance下降得很快
link |
01:36:46.000
當vector distance一下降的時候
link |
01:36:48.000
這個時候image就變好
link |
01:36:50.000
所以如果你今天是train WGAN的時候
link |
01:36:52.000
從這個
link |
01:36:54.000
WOPDataPG
link |
01:36:56.000
也就是你的discriminator
link |
01:36:58.000
的loss
link |
01:37:00.000
裡面
link |
01:37:02.000
你可以看出你的image generate的好不好
link |
01:37:04.000
你的discriminator的loss大
link |
01:37:06.000
代表你的image generate的好
link |
01:37:08.000
他的loss小代表image generate的不好
link |
01:37:10.000
所以這個時候就給我們
link |
01:37:12.000
一個很明確的指標告訴我們說
link |
01:37:14.000
gain測出來的結果好不好
link |
01:37:16.000
就以前如果沒有這樣的指標的時候
link |
01:37:18.000
那你
link |
01:37:20.000
以前如果沒有這樣的指標的時候
link |
01:37:22.000
你train的時候你都只能憑著直覺
link |
01:37:24.000
這樣
link |
01:37:26.000
就你每次update幾次參數以後
link |
01:37:28.000
你就要generate a pinch image
link |
01:37:30.000
那就坐在電腦旁邊看看有沒有比較好
link |
01:37:32.000
那現在你可以看
link |
01:37:34.000
vector distance的變化
link |
01:37:36.000
就知道它會比較好
link |
01:37:38.000
這樣子可以
link |
01:37:40.000
做很多稱領的功夫
link |
01:37:42.000
像如果你generate的是一些
link |
01:37:44.000
你很難憑著直覺
link |
01:37:46.000
衡量的東西
link |
01:37:48.000
因為image比較容易衡量
link |
01:37:50.000
有些東西比較難一眼看出來
link |
01:37:52.000
這個時候有這種evaluation的
link |
01:37:54.000
measure有這種東西可以告訴你
link |
01:37:56.000
你現在generate的image好或壞的
link |
01:37:58.000
這種measure就會很有幫助
link |
01:38:00.000
那這邊有另外一個case是
link |
01:38:02.000
vector distance一直都很大
link |
01:38:04.000
那你這時候generate出來的image
link |
01:38:06.000
就都是爛
link |
01:38:08.000
這邊是你的generator跟discriminator
link |
01:38:10.000
都是multi-layer
link |
01:38:12.000
conceptual的情況下
link |
01:38:14.000
那你generate出來的image都是爛
link |
01:38:16.000
這個時候measure set distance
link |
01:38:18.000
會一直維持一個很大的value
link |
01:38:22.000
link |
01:38:24.000
那接下來
link |
01:38:26.000
我們來很快的講一下
link |
01:38:28.000
improve的
link |
01:38:30.000
wget
link |
01:38:32.000
來講一下improve的wget
link |
01:38:34.000
improve的wget它improve在哪裡呢
link |
01:38:36.000
我們說
link |
01:38:38.000
原來的
link |
01:38:40.000
原來的
link |
01:38:42.000
這個wget
link |
01:38:44.000
原來的wget
link |
01:38:46.000
它要maximize的式子
link |
01:38:48.000
長的是這個樣子
link |
01:38:50.000
我們要找一個one-axis function
link |
01:38:52.000
然後要maximize
link |
01:38:54.000
這個式子
link |
01:38:56.000
那我們之前是說就用weight clipping的方法
link |
01:38:58.000
來solve這個problem
link |
01:39:00.000
在improve的wget裡面
link |
01:39:02.000
它是怎麼做的呢
link |
01:39:04.000
在improve的wget裡面
link |
01:39:06.000
我們的做法
link |
01:39:08.000
在improve的wget裡面
link |
01:39:10.000
首先呢
link |
01:39:12.000
one-axis function它有一個特性
link |
01:39:14.000
一個differentiable function
link |
01:39:16.000
如果它是one-axis function
link |
01:39:18.000
if and only if
link |
01:39:20.000
它的gradient norm
link |
01:39:22.000
會小於等於1
link |
01:39:24.000
那這件事情其實還頗直覺的
link |
01:39:26.000
如果一個function
link |
01:39:28.000
它是one-axis function
link |
01:39:30.000
意味著
link |
01:39:32.000
improve的gradient的這個norm
link |
01:39:34.000
會小於等於1
link |
01:39:36.000
這邊要注意一下
link |
01:39:38.000
這個gradient並不是對d的參數
link |
01:39:40.000
做gradient
link |
01:39:42.000
d是一個neural network
link |
01:39:44.000
那個neural network裡面有一組參數
link |
01:39:46.000
就是neural wave跟bias
link |
01:39:48.000
這個gradient我們一般在做gradient descent的時候
link |
01:39:50.000
是算那些參數的gradient
link |
01:39:52.000
那這邊我們算的
link |
01:39:54.000
不是那些參數的gradient
link |
01:39:56.000
我們算的是
link |
01:39:58.000
input對output的gradient
link |
01:40:00.000
這個discriminator
link |
01:40:02.000
它的input x
link |
01:40:04.000
對output d of x的gradient
link |
01:40:06.000
所以跟一般的gradient descent是不一樣的
link |
01:40:08.000
希望大家了解我的意思
link |
01:40:10.000
如果這是one-axis function的話
link |
01:40:12.000
它的norm會
link |
01:40:14.000
小於等於1
link |
01:40:16.000
如果它是one-axis function的話
link |
01:40:18.000
它的norm會小於等於1
link |
01:40:20.000
那這件事情
link |
01:40:22.000
其實也還蠻合理的
link |
01:40:24.000
你想想看
link |
01:40:26.000
我們說一個function是one-axis function
link |
01:40:28.000
不能夠太快
link |
01:40:30.000
如果你今天
link |
01:40:32.000
你的這個gradient
link |
01:40:34.000
的norm大過1的話
link |
01:40:36.000
它就不是one-axis function
link |
01:40:38.000
如果它的gradient的norm大過1的話
link |
01:40:40.000
你今天你input有一個變化
link |
01:40:42.000
output的變化會比input還要大
link |
01:40:44.000
這個時候你就不是
link |
01:40:46.000
one-axis function
link |
01:40:48.000
有了這件事以後
link |
01:40:50.000
我們就得到了下面這一個
link |
01:40:52.000
minimize就這個式子的解法
link |
01:40:54.000
就可以變成下面這個樣子
link |
01:40:56.000
原來我們說找
link |
01:40:58.000
要找一個function符合
link |
01:41:00.000
one-axis function
link |
01:41:02.000
現在可以變成找所有可能的function
link |
01:41:04.000
但是我們在找這些function的時候
link |
01:41:06.000
加上一項
link |
01:41:08.000
penalty
link |
01:41:10.000
這個penalty是這樣寫
link |
01:41:12.000
這個penalty是負lambda
link |
01:41:14.000
對所有x做積分
link |
01:41:16.000
max0 gradient的norm
link |
01:41:18.000
-1 dx
link |
01:41:20.000
這個是什麼意思
link |
01:41:22.000
這個意思是說
link |
01:41:24.000
我們prefer找一個d of x
link |
01:41:26.000
它的gradient的norm
link |
01:41:28.000
是小於等於1
link |
01:41:30.000
因為我們知道one-axis function
link |
01:41:32.000
它有這個特性
link |
01:41:34.000
所以我們希望找一個function
link |
01:41:36.000
它儘量可以滿足這個特性
link |
01:41:38.000
而這件事情
link |
01:41:40.000
我們就用最後這一項
link |
01:41:42.000
來體現
link |
01:41:44.000
最後這一項是這樣
link |
01:41:46.000
它是max0跟這個東西
link |
01:41:48.000
-1跟這個norm-1
link |
01:41:50.000
所以什麼時候會有loss
link |
01:41:52.000
如果這項這個norm
link |
01:41:54.000
大於1的時候
link |
01:41:56.000
你取max它就會是正的值
link |
01:41:58.000
那這個時候你就會有loss
link |
01:42:00.000
如果這個norm小於1的話
link |
01:42:02.000
這個時候max會取0
link |
01:42:04.000
這個時候你就沒有loss
link |
01:42:06.000
所以加了這一項
link |
01:42:08.000
並不保證
link |
01:42:10.000
你找出來的d
link |
01:42:12.000
它的gradient一定會小於1
link |
01:42:14.000
因為這項只是像regularization一樣
link |
01:42:16.000
是一個penalty
link |
01:42:18.000
你並沒有辦法保證
link |
01:42:20.000
你找出來的function一定滿足這件事
link |
01:42:22.000
但是你找出來的function
link |
01:42:24.000
會傾向於滿足這件事
link |
01:42:26.000
ok
link |
01:42:28.000
然後前面再加一個積分
link |
01:42:30.000
就是希望對所有的x
link |
01:42:32.000
都可以
link |
01:42:34.000
都對所有的x
link |
01:42:36.000
都計算一下loss
link |
01:42:38.000
希望你的d of x
link |
01:42:40.000
對所有的x
link |
01:42:42.000
它的gradient的norm
link |
01:42:44.000
都傾向於小於1
link |
01:42:46.000
那如果你今天浪打
link |
01:42:48.000
你可能就可以
link |
01:42:50.000
真的解上面這個function
link |
01:42:52.000
浪打受夠大
link |
01:42:54.000
這一項的影響力夠大
link |
01:42:56.000
你找出來的function
link |
01:42:58.000
就比較有可能滿足
link |
01:43:00.000
是1 basis function
link |
01:43:02.000
當然實作上
link |
01:43:04.000
你不可能對所有的x
link |
01:43:06.000
做積分
link |
01:43:08.000
做所有的x做積分不行
link |
01:43:10.000
但是做sample
link |
01:43:12.000
總可以吧
link |
01:43:14.000
我們找一個distribution p penalty
link |
01:43:16.000
我們找一個distribution p penalty
link |
01:43:18.000
從這個p penalty裡面
link |
01:43:20.000
sample出一些x
link |
01:43:22.000
然後我們希望它所sample出來的這些x
link |
01:43:24.000
在計算對d of x的gradient的時候
link |
01:43:26.000
它的norm要小於1
link |
01:43:28.000
本來是對所有的x做積分
link |
01:43:30.000
但對所有的x做積分不行
link |
01:43:32.000
就從x的這個space上面
link |
01:43:34.000
sample一些x出來
link |
01:43:36.000
然後希望這一項越小越好
link |
01:43:38.000
那從所有的x
link |
01:43:40.000
那這個p penalty到底應該是什麼呢
link |
01:43:42.000
p penalty到底應該是什麼呢
link |
01:43:44.000
資源上想起來
link |
01:43:46.000
也許p penalty應該是一個
link |
01:43:48.000
uniform distribution
link |
01:43:50.000
對整個x space上
link |
01:43:52.000
是一個uniform distribution
link |
01:43:54.000
那你對p penalty做sample的時候
link |
01:43:56.000
你就想成其實是在minimum上面
link |
01:43:58.000
積分這一項
link |
01:44:00.000
但實際上不是
link |
01:44:02.000
實際上p penalty並不是
link |
01:44:04.000
一個uniform distribution
link |
01:44:06.000
在improved wget裡面
link |
01:44:08.000
他們選擇了一個特別的p penalty
link |
01:44:10.000
這個我們就休息10分鐘
link |
01:44:12.000
再來繼續講
link |
01:44:16.000
我們講到什麼呢
link |
01:44:18.000
上一堂課我們講到說
link |
01:44:22.000
p penalty呀
link |
01:44:24.000
不是什麼uniform distribution
link |
01:44:26.000
他選了一下
link |
01:44:28.000
他說
link |
01:44:30.000
p penalty是什麼呢
link |
01:44:32.000
p penalty是一個
link |
01:44:34.000
特別的distribution
link |
01:44:36.000
這p penalty的distribution
link |
01:44:38.000
怎麼從p penalty裡面
link |
01:44:40.000
sample x出來呢
link |
01:44:42.000
你這樣sample
link |
01:44:44.000
先從p data裡面sample一個點
link |
01:44:46.000
再從你的generator裡面
link |
01:44:48.000
sample一個點
link |
01:44:50.000
接下來
link |
01:44:52.000
再把他們連起來
link |
01:44:54.000
你把
link |
01:44:56.000
從p data裡面sample出來的點
link |
01:44:58.000
跟p generator裡面sample出來的點連起來
link |
01:45:00.000
然後在他們的連線
link |
01:45:02.000
的中間的
link |
01:45:04.000
在他們的連線中間
link |
01:45:06.000
再sample一個點
link |
01:45:08.000
就是sample x
link |
01:45:10.000
這樣了解嗎
link |
01:45:12.000
所以你每次sample x的時候就用這個流程
link |
01:45:14.000
p data sample一個點
link |
01:45:16.000
p g sample一個點
link |
01:45:18.000
中間連線
link |
01:45:20.000
再從這條線上sample出一個點
link |
01:45:22.000
就是這個x
link |
01:45:24.000
或者你可以想成
link |
01:45:26.000
p penalty其實就是
link |
01:45:28.000
介於p g和
link |
01:45:30.000
p data中間的部分
link |
01:45:32.000
也就是這個藍色的區域
link |
01:45:34.000
簡單的比較rough的來說
link |
01:45:36.000
p penalty就是這個藍色的區域
link |
01:45:38.000
也就是說
link |
01:45:40.000
我們不要sample整個x的space
link |
01:45:42.000
我們只sample p data和
link |
01:45:44.000
p g中間的space
link |
01:45:46.000
為什麼這樣子呢
link |
01:45:48.000
那篇paper裡面這樣說的
link |
01:45:50.000
有家癮號就是那篇paper裡面直接quote下來的句子
link |
01:45:52.000
他說
link |
01:45:54.000
enforcing this constraint everywhere is intractable
link |
01:45:56.000
enforcing this constraint everywhere is intractable
link |
01:45:58.000
enforcing this constraint everywhere is intractable
link |
01:46:00.000
enforcing it only along
link |
01:46:02.000
this straight line
link |
01:46:04.000
你只考慮你的
link |
01:46:06.000
constraint在這些
link |
01:46:08.000
直線上
link |
01:46:10.000
seems sufficient and experimental result
link |
01:46:12.000
in group performance
link |
01:46:14.000
你想質疑這件事嗎
link |
01:46:16.000
反正實驗結果是好的
link |
01:46:18.000
就看起來
link |
01:46:20.000
實驗結果是好的
link |
01:46:22.000
ok就是了
link |
01:46:24.000
這邊下面我
link |
01:46:26.000
加了一個解釋
link |
01:46:28.000
為什麼這樣是好的呢
link |
01:46:30.000
直覺想起來說
link |
01:46:32.000
我們現在
link |
01:46:34.000
discriminator目標就是要引導
link |
01:46:36.000
generator挪向data
link |
01:46:38.000
那如果是
link |
01:46:40.000
discriminator要做的事情就是要引導
link |
01:46:42.000
generator挪向data
link |
01:46:44.000
真正重要的其實只有generator
link |
01:46:46.000
和data中間的歸點
link |
01:46:48.000
才會影響你的結果
link |
01:46:50.000
data以外的部分
link |
01:46:52.000
其實可能對結果沒有什麼影響
link |
01:46:54.000
也許只有藍色這個部分的歸點
link |
01:46:56.000
是重要的
link |
01:46:58.000
所以我們只對藍色這個部分的歸點
link |
01:47:00.000
加以限制
link |
01:47:02.000
好那再更進一步
link |
01:47:04.000
其實improveWGAN
link |
01:47:06.000
真正做的事情是這樣
link |
01:47:08.000
他不是取一個
link |
01:47:10.000
max
link |
01:47:12.000
他不是說我要讓歸點的none
link |
01:47:14.000
小於1
link |
01:47:16.000
而是他希望歸點的none
link |
01:47:18.000
越接近1
link |
01:47:20.000
越好
link |
01:47:22.000
這兩個式子是不一樣的
link |
01:47:24.000
下面這個式子你把歸點減低取平方
link |
01:47:26.000
意思是說你希望歸點
link |
01:47:28.000
越接近1越好
link |
01:47:30.000
歸點大於1會有penalty
link |
01:47:32.000
歸點小於1其實也有penalty
link |
01:47:34.000
上面這個式子我們只希望歸點大於
link |
01:47:36.000
小於1
link |
01:47:38.000
如果歸點小於1的話
link |
01:47:40.000
就不會有penalty
link |
01:47:42.000
這邊是希望歸點的none
link |
01:47:44.000
要接近1
link |
01:47:46.000
就不會有penalty
link |
01:47:48.000
為什麼這樣呢
link |
01:47:50.000
我們再直接quote
link |
01:47:52.000
他說
link |
01:47:54.000
one may wonder
link |
01:47:56.000
why we penalize
link |
01:47:58.000
the none of the gradient
link |
01:48:00.000
for differing from 1
link |
01:48:02.000
為什麼是要讓它
link |
01:48:04.000
越接近1越好
link |
01:48:06.000
為什麼是penalize它不接近1這件事
link |
01:48:08.000
instead of just penalizing large gradient
link |
01:48:10.000
為什麼我們不是只是讓它小於1呢
link |
01:48:12.000
他說
link |
01:48:14.000
the optimal critic
link |
01:48:18.000
actually has gradient with none 1
link |
01:48:20.000
almost everywhere
link |
01:48:22.000
under pr and pg
link |
01:48:24.000
這個pr是指data
link |
01:48:26.000
pg是指
link |
01:48:28.000
generator distribution
link |
01:48:30.000
他的意思是說
link |
01:48:32.000
你再仔細check一下
link |
01:48:34.000
你再仔細check一下
link |
01:48:36.000
appendix上的證明
link |
01:48:38.000
這邊的意思是說
link |
01:48:40.000
如果我在p
link |
01:48:42.000
data這邊
link |
01:48:44.000
找一條
link |
01:48:46.000
找一個點
link |
01:48:48.000
我總是可以在pg那邊
link |
01:48:50.000
找到另外一個點
link |
01:48:52.000
然後把pdata和pg連起來
link |
01:48:54.000
他們中間的連線上面
link |
01:48:56.000
那條連線上面的
link |
01:48:58.000
他意思是說
link |
01:49:00.000
假設你找了一個optimal
link |
01:49:02.000
的discriminator
link |
01:49:04.000
假設我們知道
link |
01:49:06.000
這一個optimal
link |
01:49:08.000
假設我們知道
link |
01:49:10.000
better said this discriminator
link |
01:49:12.000
optimal那個是哪一個
link |
01:49:14.000
找出他,他會有一個特性
link |
01:49:16.000
他會有一個特性是
link |
01:49:18.000
他會讓pdata
link |
01:49:20.000
和pg間
link |
01:49:22.000
的連線
link |
01:49:24.000
通常他的歸連
link |
01:49:26.000
都是一樣
link |
01:49:28.000
那這件事情其實也是
link |
01:49:30.000
make sense
link |
01:49:32.000
你想想看
link |
01:49:34.000
一個最好的discriminator
link |
01:49:36.000
如果他要安排他的
link |
01:49:38.000
樣子的話
link |
01:49:40.000
應該要怎麼樣安排
link |
01:49:42.000
才是最好的安排呢
link |
01:49:44.000
因為我們現在的目標
link |
01:49:46.000
是要讓ddata這個部分的
link |
01:49:48.000
discriminator值越大越好
link |
01:49:50.000
我們要讓pg這個部分的
link |
01:49:52.000
discriminator值越小越好
link |
01:49:54.000
但是
link |
01:49:56.000
one-listed function
link |
01:49:58.000
他的變化
link |
01:50:00.000
他沒有辦法很劇烈的變化
link |
01:50:02.000
他可以變化的幅度是有限
link |
01:50:04.000
在可以變化幅度是有限的
link |
01:50:06.000
情況下我們要讓
link |
01:50:08.000
這個地方的pd最大
link |
01:50:10.000
這個地方的dx最大
link |
01:50:12.000
這個地方的dx最小
link |
01:50:14.000
我們要怎麼做到這件事呢
link |
01:50:16.000
是不是我們就希望
link |
01:50:18.000
在這兩塊區域中間
link |
01:50:20.000
他們的歸連
link |
01:50:22.000
越大越好
link |
01:50:24.000
如果這兩塊中間的歸連很大
link |
01:50:26.000
到時候紅色這個區域
link |
01:50:28.000
藍色這個地方的歸連
link |
01:50:30.000
越大越好
link |
01:50:32.000
藍色這個地方的歸連越大
link |
01:50:34.000
紅色跟黃色的地方到時候海拔就差越多
link |
01:50:36.000
這樣大家可以
link |
01:50:38.000
可以接受這個講法嗎
link |
01:50:40.000
可以接受有人有問題嗎
link |
01:50:42.000
你要讓紅色這個地方越高
link |
01:50:44.000
黃色這個地方越低
link |
01:50:46.000
那藍色這個地方
link |
01:50:48.000
當然是越陡越好
link |
01:50:50.000
但是你可以多陡呢
link |
01:50:52.000
你最陡是有限制的
link |
01:50:54.000
你最陡你歸連的none沒辦法大於1
link |
01:50:56.000
你最陡歸連的none最多就等於1
link |
01:50:58.000
那既然我們要讓藍色這個區域
link |
01:51:00.000
越陡越好
link |
01:51:02.000
那藍色這個區域的歸連的none
link |
01:51:04.000
等於1囉
link |
01:51:06.000
好,那他又加了一句話
link |
01:51:08.000
他說
link |
01:51:10.000
simply penalizing over large gradient
link |
01:51:12.000
also works in theory
link |
01:51:14.000
就這樣做也works in theory
link |
01:51:16.000
but experimentally
link |
01:51:18.000
we found that this approach converts faster
link |
01:51:20.000
and to better optima
link |
01:51:22.000
實驗結果就是比較好的就是了啦
link |
01:51:24.000
link |
01:51:26.000
link |
01:51:28.000
link |
01:51:30.000
就這邊有個proof啦
link |
01:51:32.000
大家再自己check一下那個paper
link |
01:51:34.000
那如果你
link |
01:51:36.000
就是說
link |
01:51:38.000
那我們來看一下paper裡面附的實驗結果
link |
01:51:40.000
他先比較了說
link |
01:51:42.000
如果你是用weight clipping
link |
01:51:44.000
跟gradient penalty的話
link |
01:51:46.000
如果你是用weight clipping
link |
01:51:48.000
跟gradient penalty的話
link |
01:51:50.000
你認出來的discriminator
link |
01:51:52.000
會有什麼樣的差距
link |
01:51:54.000
好,那
link |
01:51:56.000
如果你是用weight clipping的話
link |
01:51:58.000
最後上你會發現說你的weight
link |
01:52:00.000
就是集中在那個clip的地方
link |
01:52:02.000
假設你clip在0.01和負0.01
link |
01:52:04.000
你發現說你最後的weight都跑到
link |
01:52:06.000
0.01和負0.01的地方
link |
01:52:08.000
如果你是用gradient penalty的話
link |
01:52:10.000
你得到weight distribution感覺比較正常
link |
01:52:12.000
然後下面這個case是說
link |
01:52:14.000
我們假設說
link |
01:52:16.000
我們的true distribution
link |
01:52:18.000
就是黃色的這些點
link |
01:52:20.000
黃色這些點黃色這些點黃色這些點
link |
01:52:22.000
黃色這一點黃色這一點
link |
01:52:24.000
然後呢
link |
01:52:26.000
你做一個discriminator
link |
01:52:28.000
讓黃色這些點的
link |
01:52:30.000
value大
link |
01:52:32.000
其他的點的value小
link |
01:52:34.000
如果你是用weight clipping的方法
link |
01:52:36.000
因為weight clipping的方法
link |
01:52:38.000
給了function的space很大的限制
link |
01:52:40.000
所以你找出來的function
link |
01:52:42.000
沒有辦法很複雜
link |
01:52:44.000
雖然說照理說應該要讓這些點的值
link |
01:52:46.000
比較大
link |
01:52:48.000
讓這些點的值比較大
link |
01:52:50.000
讓螺旋狀的這個地方的值比較大
link |
01:52:52.000
但是你在做weight clipping的時候
link |
01:52:54.000
trainer做不到這件事情
link |
01:52:56.000
但是如果是用gradient penalty的話
link |
01:52:58.000
至少在這個case
link |
01:53:00.000
在這個
link |
01:53:02.000
有8個
link |
01:53:04.000
高選等距三步的這個case
link |
01:53:06.000
他可以真的抓出來說
link |
01:53:08.000
在這8個高選的位置
link |
01:53:10.000
應該要有比較大的d of x
link |
01:53:12.000
其他地方要有比較小的d of x
link |
01:53:14.000
link |
01:53:16.000
這是一個toy example
link |
01:53:18.000
接下來是一些
link |
01:53:20.000
真實的實驗結果
link |
01:53:22.000
第一個color是DCGAN的結果
link |
01:53:24.000
DCGAN就是
link |
01:53:26.000
原來的GAN
link |
01:53:28.000
discriminator跟generator
link |
01:53:30.000
是定的convolution
link |
01:53:34.000
第二排LSGAN
link |
01:53:36.000
LSGAN是
link |
01:53:38.000
least square GAN
link |
01:53:40.000
其實還蠻早就被放到archive上面
link |
01:53:42.000
我記得應該是去年11月還是12月
link |
01:53:44.000
的時候就在archive上面
link |
01:53:46.000
所以發生蠻多paper
link |
01:53:48.000
實作的時候都是用LSGAN
link |
01:53:50.000
那個方法
link |
01:53:52.000
LSGAN真的是有比較好
link |
01:53:54.000
好再來第三個color是原來的WGAN
link |
01:53:56.000
第四個color是
link |
01:53:58.000
improved WGAN
link |
01:54:00.000
ok
link |
01:54:02.000
好那我們看一下這個
link |
01:54:04.000
我們看一下這個
link |
01:54:06.000
實驗
link |
01:54:08.000
我們看一下這個實驗結果
link |
01:54:10.000
發現說如果
link |
01:54:12.000
generator跟discriminator都是定的convolution
link |
01:54:14.000
neural network的話
link |
01:54:16.000
這四個case似乎表現的都差不多
link |
01:54:18.000
但是如果今天
link |
01:54:20.000
generator跟discriminator
link |
01:54:22.000
都弄的爛一點就是沒有做
link |
01:54:24.000
batch normalization的話
link |
01:54:26.000
看起來至少
link |
01:54:28.000
看起來好像在這三個case會比較差
link |
01:54:30.000
看起來improved的WGAN
link |
01:54:32.000
似乎有比較好
link |
01:54:34.000
如果今天是generator跟discriminator
link |
01:54:36.000
都用hyperbolic tangent的話
link |
01:54:38.000
感覺performance又變得
link |
01:54:40.000
更差一點
link |
01:54:42.000
但是這個時候WGAN還是有好的performance
link |
01:54:44.000
如果說
link |
01:54:48.000
如果說是generator
link |
01:54:50.000
是multilayer perceptron
link |
01:54:52.000
沒有用CNN
link |
01:54:54.000
而discriminator有用CNN的話
link |
01:54:56.000
這個時候呢
link |
01:54:58.000
LSGAN會爛掉
link |
01:55:00.000
然後看起來improved的WGAN
link |
01:55:02.000
仍然還沒有爛掉
link |
01:55:04.000
原來WGAN有點爛掉
link |
01:55:06.000
好再來如果是看說
link |
01:55:08.000
generator
link |
01:55:10.000
是CNN
link |
01:55:12.000
而discriminator的structure是壞的
link |
01:55:14.000
就是說filter的數目沒有設好的話
link |
01:55:16.000
那這兩個
link |
01:55:18.000
DCGAN跟LSGAN都會壞掉
link |
01:55:20.000
那improvedWGAN仍然有好的結果
link |
01:55:22.000
最後他試了一個
link |
01:55:24.000
很深的network
link |
01:55:26.000
然後他試了一個很深的network
link |
01:55:28.000
看他會發生什麼事
link |
01:55:30.000
然後發現說DCGAN LSGAN
link |
01:55:32.000
跟原來的WGAN都會爛掉
link |
01:55:34.000
只有improved的WGAN
link |
01:55:36.000
performance是好的
link |
01:55:38.000
所以他今天想要表達的結果就是說
link |
01:55:40.000
他今天試了各種不同的case
link |
01:55:42.000
然後其他的方法
link |
01:55:44.000
在不同的case就給他做不同的壓力測試
link |
01:55:46.000
那其他的方法
link |
01:55:48.000
沒有辦法通過所有的壓力測試
link |
01:55:50.000
只有improved的WGAN
link |
01:55:52.000
可以通過所有的壓力測試
link |
01:55:54.000
在各種綁手綁腳的情況下
link |
01:55:56.000
這個improved的WGAN
link |
01:55:58.000
還是會有比較好的performance
link |
01:56:00.000
那improved的WGAN
link |
01:56:02.000
不只可以拿來generate圖
link |
01:56:04.000
他還可以拿來generate句子
link |
01:56:06.000
他還可以拿來generate sentence
link |
01:56:08.000
怎麼generate一個sentence呢
link |
01:56:10.000
比如說
link |
01:56:12.000
我們可以把
link |
01:56:14.000
怎麼產生一個sentence呢
link |
01:56:16.000
你可以把一個sentence這樣看待
link |
01:56:18.000
一個sentence比如說goodbye
link |
01:56:20.000
他其實就是character sequence
link |
01:56:22.000
所組成的對不對
link |
01:56:24.000
第一個character是G
link |
01:56:26.000
第二個character是O
link |
01:56:28.000
第三個character是O
link |
01:56:30.000
第四個character是D
link |
01:56:32.000
第五個character是space
link |
01:56:34.000
表演符號你也可以把它都算成是character
link |
01:56:36.000
所以G的code就是這樣
link |
01:56:38.000
然後O是這樣
link |
01:56:40.000
O是這樣
link |
01:56:42.000
D是這樣
link |
01:56:44.000
space他也有一個
link |
01:56:46.000
這邊有一個錯
link |
01:56:48.000
你有發現嗎
link |
01:56:50.000
我覺得這邊應該要是零
link |
01:56:52.000
就我拿最後一個dimension表示space
link |
01:56:54.000
所以這邊應該是零
link |
01:56:56.000
好就是這樣
link |
01:56:58.000
然後接下來呢
link |
01:57:00.000
假設這個句子的長度
link |
01:57:02.000
你固定他的長度
link |
01:57:04.000
換作是一個image
link |
01:57:06.000
對不對
link |
01:57:08.000
因為如果我們固定sentence的長度
link |
01:57:12.000
然後把這些vector通通拼起來
link |
01:57:14.000
他就變成一個矩陣
link |
01:57:16.000
對不對他就變成一個矩陣
link |
01:57:18.000
那這個矩陣
link |
01:57:20.000
你就可以把它當作一個image來看
link |
01:57:22.000
image也是一個矩陣啊
link |
01:57:24.000
對不對image也是一個矩陣
link |
01:57:26.000
我們可以把這個矩陣
link |
01:57:28.000
image也是一個矩陣啊
link |
01:57:30.000
我們就可以把
link |
01:57:32.000
把這個這個這個這個
link |
01:57:34.000
這個character的sequence當作
link |
01:57:36.000
一個矩陣來看
link |
01:57:38.000
那我們就可以把它當作是
link |
01:57:40.000
一張image
link |
01:57:42.000
你就可以用原來產生image的方法
link |
01:57:44.000
去產生他
link |
01:57:46.000
那你說一個句子很長啊
link |
01:57:48.000
那你那個image不就很寬就好了
link |
01:57:50.000
你那個就是一個很寬的image
link |
01:57:52.000
那你說可是句子的長短不一啊
link |
01:57:54.000
如果你說寬就是一千個character
link |
01:57:56.000
如果今天產生的句子數目少於一千個character
link |
01:57:58.000
怎麼辦呢
link |
01:58:00.000
很簡單
link |
01:58:02.000
假設你現在橫軸
link |
01:58:04.000
有一千個meta那麼長
link |
01:58:06.000
你的image寬有
link |
01:58:08.000
有一千個dimension
link |
01:58:10.000
那但是你只要產生一百個character
link |
01:58:12.000
那剩下九百個character的位置
link |
01:58:14.000
你就拿一個特殊的字元叫做沒東西
link |
01:58:16.000
no我要補上去
link |
01:58:18.000
就好了
link |
01:58:20.000
這樣講大家有問題嗎
link |
01:58:22.000
這樣大家可以聽得懂我的意思嗎
link |
01:58:24.000
link |
01:58:26.000
那理論上你當然可以用game
link |
01:58:28.000
產生sentence
link |
01:58:30.000
但有沒有發現用game產生句子的test
link |
01:58:32.000
少之又少
link |
01:58:34.000
我覺得有一個可能的原因
link |
01:58:36.000
是這個樣子
link |
01:58:38.000
你想想看我之前想說要用game產生句子的時候
link |
01:58:40.000
我自己就卡在這個地方
link |
01:58:42.000
有點困惑
link |
01:58:44.000
真正的句子
link |
01:58:46.000
他是one of a kind
link |
01:58:48.000
每一個color只有一個值是1
link |
01:58:50.000
其他都是0
link |
01:58:52.000
你現在用neural network去產生
link |
01:58:54.000
一個matrix
link |
01:58:56.000
每一個vector正好某一個值是1
link |
01:58:58.000
其他都是0
link |
01:59:00.000
就算你加softmax
link |
01:59:02.000
你最多只能得到說
link |
01:59:04.000
你每一個color是一個distribution
link |
01:59:06.000
某一個dimension的值特大
link |
01:59:08.000
其他dimension的值很小0.000001
link |
01:59:10.000
但你也沒辦法真的讓它
link |
01:59:12.000
變成0
link |
01:59:14.000
對不對
link |
01:59:16.000
所以這樣子對discriminator來說
link |
01:59:18.000
他要分辨real跟generator的image
link |
01:59:20.000
太簡單了
link |
01:59:22.000
你只要產生出來的vector
link |
01:59:24.000
他的color
link |
01:59:26.000
值不是剛好是1
link |
01:59:28.000
就是假的
link |
01:59:30.000
你根本不用管語意這件事
link |
01:59:32.000
文法語意都不要管
link |
01:59:34.000
對discriminator來說
link |
01:59:36.000
他根本就不會學會語意這件事
link |
01:59:38.000
他直接看有沒有出現1
link |
01:59:40.000
沒有出現1
link |
01:59:42.000
那就是假的
link |
01:59:44.000
所以一個classifier
link |
01:59:46.000
他秒就知道
link |
01:59:48.000
誰是真的誰是假的
link |
01:59:50.000
那這樣子其實就沒什麼好勸了
link |
01:59:52.000
你的generator不管產生什麼東西
link |
01:59:54.000
discriminator都會覺得他是假的
link |
01:59:56.000
那怎麼辦
link |
01:59:58.000
這個會發生這種情況
link |
02:00:00.000
就是因為現在的real的sentence
link |
02:00:02.000
跟generated的sentence
link |
02:00:04.000
就是你的generator
link |
02:00:06.000
你可以generate出來的東西跟你真正的東西
link |
02:00:08.000
他是沒有overlap的
link |
02:00:10.000
你永遠generate不出這樣子的結果
link |
02:00:12.000
他沒有overlap
link |
02:00:14.000
所以這一次diversion算出來
link |
02:00:16.000
link |
02:00:18.000
都是0
link |
02:00:20.000
那他們是重合的意思嗎
link |
02:00:22.000
這邊寫錯啦
link |
02:00:24.000
我現場把它
link |
02:00:26.000
link |
02:00:28.000
現場delete了
link |
02:00:30.000
link |
02:00:32.000
那WGAN就可以派上用場
link |
02:00:34.000
我們說WGAN
link |
02:00:36.000
他可以擅長做的事情
link |
02:00:38.000
如果你兩個distribution沒有overlap
link |
02:00:40.000
還是用WGAN量
link |
02:00:42.000
還是會有值的
link |
02:00:44.000
所以這時候WGAN就可以派上用場
link |
02:00:46.000
所以WGAN就可以拿來產生句子
link |
02:00:48.000
把句子合為單位來產生
link |
02:00:50.000
那這個是improvedWGAN的結果
link |
02:00:52.000
他說
link |
02:00:54.000
你看看我們產生了這些句子
link |
02:00:56.000
每一個句子的長度都是32個字元
link |
02:00:58.000
包括空白還有標點符號
link |
02:01:00.000
當然裡面有很多怪東西
link |
02:01:02.000
你會發現他產生一些詞彙
link |
02:01:04.000
比如說the new
link |
02:01:06.000
the near
link |
02:01:08.000
但是好像不太合文法就是
link |
02:01:10.000
但至少他可以產生詞彙
link |
02:01:12.000
另外如果你是用一般的GAN的話
link |
02:01:14.000
Paper會給我們結果
link |
02:01:16.000
沒有辦法產生句子
link |
02:01:20.000
然後
link |
02:01:22.000
我們實驗室有一個
link |
02:01:24.000
同學他做了
link |
02:01:26.000
唐詩練成
link |
02:01:28.000
李宗盈同學他做了唐詩練成
link |
02:01:30.000
在唐詩練成這個task裡面
link |
02:01:32.000
他就用WGAN做
link |
02:01:34.000
那他的WGAN輸出就是32個character
link |
02:01:36.000
包括標點符號
link |
02:01:38.000
你想想看
link |
02:01:40.000
假設你是七言絕句的話
link |
02:01:42.000
七言絕句不是28個字嗎
link |
02:01:44.000
加標點符號
link |
02:01:46.000
正好就是32個character
link |
02:01:48.000
所以今天WGAN
link |
02:01:50.000
如果你輸出32個character的話
link |
02:01:52.000
正好最長可以產生一個
link |
02:01:54.000
四言絕句
link |
02:01:56.000
對不對
link |
02:01:58.000
link |
02:02:00.000
對不起
link |
02:02:02.000
我等一下把那段剪掉
link |
02:02:04.000
太羞愧了
link |
02:02:10.000
是七言絕句
link |
02:02:12.000
絕句是四句
link |
02:02:14.000
律師是八句
link |
02:02:16.000
所以是七言絕句
link |
02:02:18.000
是七言絕句
link |
02:02:20.000
不好意思
link |
02:02:22.000
最長可以產生七言絕句
link |
02:02:24.000
沒辦法產生律師
link |
02:02:26.000
因為他只有32個字
link |
02:02:28.000
沒辦法產生律師
link |
02:02:30.000
你可能會很擔心說WGAN可以產生一首好詩
link |
02:02:32.000
在擔心這個問題之前
link |
02:02:34.000
先擔心他可不可以產生一首詩
link |
02:02:36.000
詩是有固定的format的
link |
02:02:38.000
也就是說你要嘛是五個字一句
link |
02:02:40.000
要嘛是七個字一句
link |
02:02:42.000
如果你產生不是五個字一句
link |
02:02:44.000
不是七個字一句就錯了
link |
02:02:46.000
但是WGAN
link |
02:02:48.000
他從來沒有看過真正的詩
link |
02:02:50.000
你想想看WGAN從來沒有看過真正的詩
link |
02:02:52.000
他從來不知道真正的詩
link |
02:02:54.000
長什麼樣子
link |
02:02:56.000
他真的可以產生出
link |
02:02:58.000
一首唐詩嗎
link |
02:03:00.000
結果看起來是可以的
link |
02:03:02.000
他都是
link |
02:03:04.000
七言或者是
link |
02:03:06.000
五言的絕句或者是律師
link |
02:03:08.000
標點符號也是
link |
02:03:10.000
Machine自動產生的
link |
02:03:12.000
標點符號是自動點上去的
link |
02:03:14.000
所以Machine知道說比如說看到
link |
02:03:16.000
產生七個character以後
link |
02:03:18.000
記得點一個逗號
link |
02:03:20.000
再產生七個character記得點一個句號
link |
02:03:22.000
我是產生五個character就點一個逗號
link |
02:03:24.000
五個character就產生句號
link |
02:03:26.000
而且我發現他產生的結果
link |
02:03:28.000
在有些地方是有語意的
link |
02:03:30.000
當然大部分的句子有很多時候是
link |
02:03:32.000
並不太清楚他有什麼意思
link |
02:03:34.000
但有很多其實是有語意的
link |
02:03:36.000
比如說褚仁重酒事
link |
02:03:38.000
褚仁是他自動產生的
link |
02:03:40.000
他自動知道說褚後面要接仁
link |
02:03:42.000
或者是
link |
02:03:44.000
他看到有一句話是頭醉空其杯
link |
02:03:46.000
他知道醉要接空
link |
02:03:48.000
要接杯
link |
02:03:50.000
或者是這句不飲白呂今飲冬
link |
02:03:52.000
他知道說白
link |
02:03:54.000
要飲冬所以可能不確定白呂是什麼
link |
02:03:56.000
但他就自己發明了這個東西
link |
02:04:00.000
白就是要接冬
link |
02:04:02.000
所以他其實是產生一些句子
link |
02:04:04.000
然後這些詩字是沒有選的
link |
02:04:06.000
如果你認真選的話
link |
02:04:08.000
比如說讓他產生一萬首
link |
02:04:10.000
你只選一首怎麼可以選到一首好詩
link |
02:04:12.000
這邊就沒有選產生什麼就是什麼
link |
02:04:16.000
那其實還有其他
link |
02:04:18.000
其實有其他的方法可以產生句子
link |
02:04:20.000
其中一個很著名的方法就是
link |
02:04:22.000
sequence game
link |
02:04:24.000
我們現在不會講sequence game
link |
02:04:26.000
為什麼呢?因為他其實不是一個
link |
02:04:28.000
typical game的方法
link |
02:04:30.000
他比較像是actor creating
link |
02:04:32.000
在原來的game的方法裡面
link |
02:04:34.000
你的discriminator
link |
02:04:36.000
的歸點要接給generator
link |
02:04:38.000
但在sequence game裡面沒有這個process
link |
02:04:40.000
他比較像是
link |
02:04:42.000
他比較像是
link |
02:04:44.000
reinforcement learning
link |
02:04:46.000
這個我們之後講reinforcement learning的時候
link |
02:04:48.000
再講
link |
02:04:50.000
所以如果我們扣掉這種用reinforcement learning
link |
02:04:52.000
來learn的方法的話
link |
02:04:54.000
看起來wgame可能是第一個
link |
02:04:56.000
用game的方法
link |
02:04:58.000
就是discriminator可以把它的歸點public給到generator的方法
link |
02:05:00.000
券出句子的task
link |
02:05:02.000
券出句子的技術
link |
02:05:04.000
好那接下來呢
link |
02:05:06.000
我們要講一下
link |
02:05:08.000
如果我們
link |
02:05:10.000
要怎麼做這個
link |
02:05:12.000
transformation
link |
02:05:14.000
接下來我們要講一下
link |
02:05:16.000
怎麼做transformation
link |
02:05:18.000
怎麼在兩類不同的action間的進行轉換
link |
02:05:20.000
其中一個我們已經講過的東西呢
link |
02:05:22.000
就是conditional game
link |
02:05:24.000
那conditional game
link |
02:05:26.000
在他的scenario裡面呢
link |
02:05:28.000
他跟一般的supervised learning一樣
link |
02:05:30.000
你需要準備function的input
link |
02:05:32.000
和output
link |
02:05:34.000
舉例來說我們要做text to image
link |
02:05:36.000
你就要跟machine說看到a dog is running
link |
02:05:38.000
就是狗
link |
02:05:40.000
而bird is flying就產生這個鳥
link |
02:05:42.000
如果是用原來supervised learning的想法
link |
02:05:44.000
就其實我們上次都講過了
link |
02:05:46.000
你輸入一個句子你會產生一個image
link |
02:05:48.000
而你產生的image呢
link |
02:05:50.000
會希望跟你的target
link |
02:05:52.000
舉例來說你輸入a dog is running
link |
02:05:54.000
你會希望跟他的target這隻狗呢
link |
02:05:56.000
但這麼做可能是有問題的
link |
02:05:58.000
因為同一個句子同一個敘述
link |
02:06:00.000
他可能對到很多不同的image
link |
02:06:02.000
用這個方法來訓練
link |
02:06:04.000
你的machine的output你的urn的output
link |
02:06:06.000
會想要同時minimize跟所有
link |
02:06:08.000
不同的example之間的distance
link |
02:06:10.000
你產生的可能就是一個
link |
02:06:12.000
很糊的圖案
link |
02:06:14.000
所以
link |
02:06:16.000
如果用game的話會怎麼樣呢
link |
02:06:18.000
如果你用game的話
link |
02:06:20.000
有一個generator他輸入的是
link |
02:06:22.000
句子跟一個
link |
02:06:24.000
distribution
link |
02:06:26.000
而輸出是一個image
link |
02:06:28.000
但是輸出的這個image你可以看成是
link |
02:06:30.000
x等於g of c跟z
link |
02:06:32.000
而z是一個distribution
link |
02:06:34.000
所以x呢也是一個distribution
link |
02:06:36.000
所以如果你用game的方法
link |
02:06:38.000
來train這樣一個generator
link |
02:06:40.000
這個generator會受c操控
link |
02:06:42.000
你input c的時候
link |
02:06:44.000
output的x是不一樣的
link |
02:06:46.000
但他的output是一個distribution
link |
02:06:48.000
而你希望這個distribution呢
link |
02:06:50.000
他可以去approximate下面
link |
02:06:52.000
這樣子
link |
02:06:54.000
像下面這樣子的distribution
link |
02:06:56.000
如果你是用generator的方法
link |
02:06:58.000
來認你的generator
link |
02:07:00.000
如果你是用game的方法來認你的generator的話
link |
02:07:02.000
你要用generator sample data的時候
link |
02:07:04.000
他要嘛產生的data
link |
02:07:06.000
落在藍點這邊
link |
02:07:08.000
要嘛落在紅點這邊
link |
02:07:10.000
要嘛落在綠點這邊
link |
02:07:12.000
但他就不會落在紅點這邊
link |
02:07:18.000
link |
02:07:20.000
那要怎麼train
link |
02:07:22.000
這個discriminator呢
link |
02:07:24.000
我們有兩種方法
link |
02:07:26.000
可以train discriminator
link |
02:07:28.000
這個我們上次也講過了
link |
02:07:30.000
在作業裡面比較一下
link |
02:07:32.000
這兩種方法有什麼不同
link |
02:07:34.000
我們作業也是text to image的test嘛
link |
02:07:36.000
可以比較一下這兩種方法有什麼不同
link |
02:07:38.000
第一個是認一個generator
link |
02:07:40.000
這個generator input一張image output一個
link |
02:07:42.000
分數
link |
02:07:44.000
這邊你完全可以用wget來做
link |
02:07:46.000
就是這個discriminator
link |
02:07:48.000
他的output
link |
02:07:50.000
他要去
link |
02:07:52.000
這個discriminator他要去maximize
link |
02:07:54.000
objective function
link |
02:07:56.000
你完全可以用wget的objective function
link |
02:07:58.000
ok我們已經講過wget了嘛
link |
02:08:00.000
你完全可以用wget的objective function
link |
02:08:02.000
就是discriminator對正確的東西分數越大越好
link |
02:08:04.000
對錯的東西分數越小越好
link |
02:08:06.000
然後你加一個weight clipping
link |
02:08:08.000
或加一個policy的
link |
02:08:10.000
或加一個gradient的
link |
02:08:12.000
penalty等等
link |
02:08:14.000
你就可以完全用wget的方法
link |
02:08:16.000
來train你的discriminator
link |
02:08:18.000
ok
link |
02:08:20.000
今天這個scalar就代表著說
link |
02:08:22.000
你的x是realistic的
link |
02:08:24.000
還是不是
link |
02:08:26.000
在訓練的時候你就給他一堆
link |
02:08:28.000
positive的image
link |
02:08:30.000
給他一些真的image當作positive example
link |
02:08:32.000
這些image的scalar
link |
02:08:34.000
這些image丟到discriminator以後
link |
02:08:36.000
他的值要越大越好
link |
02:08:38.000
你要從generator裡面sample一些image
link |
02:08:40.000
當作negative example
link |
02:08:42.000
對discriminator來說這些image要越小越好
link |
02:08:44.000
ok
link |
02:08:46.000
那有另外一種discriminator
link |
02:08:48.000
這種discriminator他吃的
link |
02:08:50.000
有兩個input
link |
02:08:52.000
他不是只有吃x
link |
02:08:54.000
他吃c跟x
link |
02:08:56.000
他不是只有吃generator
link |
02:08:58.000
output x看x好不好
link |
02:09:00.000
他吃generator的input和output
link |
02:09:02.000
和他們兩個合在一起
link |
02:09:04.000
好不好
link |
02:09:06.000
什麼叫做c和x合在一起好不好呢
link |
02:09:08.000
所以這個discriminator他會衡量兩件事
link |
02:09:10.000
他會衡量
link |
02:09:12.000
x是不是realistic
link |
02:09:14.000
他會衡量c跟x
link |
02:09:16.000
map在一起
link |
02:09:18.000
他們能不能夠
link |
02:09:20.000
被map在一起
link |
02:09:22.000
他們合在一起
link |
02:09:24.000
所以對time2的discriminator來說
link |
02:09:26.000
你的positive example
link |
02:09:28.000
就是
link |
02:09:30.000
比如說火車車
link |
02:09:32.000
火車就要對應到這張圖片
link |
02:09:34.000
那你的positive example就是c的地方
link |
02:09:36.000
輸入火車
link |
02:09:38.000
x的地方放這張圖片
link |
02:09:40.000
output的值要越大越好
link |
02:09:42.000
next example呢
link |
02:09:44.000
next example你要有兩種next example
link |
02:09:46.000
一種是
link |
02:09:48.000
正確的文字
link |
02:09:50.000
但是很差的image
link |
02:09:52.000
正確的文字但是
link |
02:09:54.000
是generator產生出來的
link |
02:09:56.000
可能很不清楚很奇怪的火車
link |
02:09:58.000
把這個輸給c這個輸給x
link |
02:10:00.000
那因為discriminator要檢查
link |
02:10:02.000
說你的x數是realistic的
link |
02:10:04.000
所以看到這個case
link |
02:10:06.000
雖然他們兩個可能是match的
link |
02:10:08.000
但是你產生出來的image
link |
02:10:10.000
是non-realistic是很奇怪的
link |
02:10:12.000
所以discriminator應該給他很小的值
link |
02:10:14.000
在這個case
link |
02:10:16.000
你的輸入是一張
link |
02:10:18.000
你的輸入是一個
link |
02:10:20.000
你的image是一個很正常的image
link |
02:10:22.000
是一個很清晰的image
link |
02:10:24.000
但是你的文字跟影像
link |
02:10:26.000
是不match的
link |
02:10:28.000
這是一個火車的圖
link |
02:10:30.000
但文字卻說是一隻貓
link |
02:10:32.000
你把這個貓當作c丟進去
link |
02:10:34.000
你把這個火車當作x丟進去
link |
02:10:36.000
因為雖然這個image是很好的
link |
02:10:38.000
但是這個cat是
link |
02:10:40.000
跟這個image是不match的
link |
02:10:42.000
如果今天比較
link |
02:10:44.000
這兩個case你覺得哪一個case
link |
02:10:46.000
可以得到比較好的結果呢
link |
02:10:48.000
如果你覺得左邊會得到
link |
02:10:50.000
比較好的結果同學舉手一下
link |
02:10:52.000
你覺得右邊會得到比較好的
link |
02:10:54.000
同學舉手一下
link |
02:10:56.000
多數同學都覺得右邊會比較好
link |
02:10:58.000
沒錯在文獻上確實右邊會比較好
link |
02:11:00.000
你可以在作業3
link |
02:11:02.000
自己試試看
link |
02:11:04.000
如果你是用左邊那種discriminator的話
link |
02:11:06.000
你遇到一個問題就是
link |
02:11:08.000
machine可能產生
link |
02:11:10.000
清晰但是和輸入內容
link |
02:11:12.000
無關的影像
link |
02:11:14.000
比如說你要畫狗
link |
02:11:16.000
他畫一隻好的貓
link |
02:11:18.000
你要畫一隻好的狗
link |
02:11:20.000
好那這個conditional generator
link |
02:11:22.000
他也可以產生
link |
02:11:24.000
他也可以輸入影像
link |
02:11:26.000
產生影像
link |
02:11:28.000
舉例來說我們可以
link |
02:11:30.000
任一個generator
link |
02:11:32.000
這個generator輸入的是
link |
02:11:34.000
這種簡單的幾何圖案
link |
02:11:36.000
當作c
link |
02:11:38.000
輸入c跟noise
link |
02:11:40.000
產生的是
link |
02:11:42.000
清晰的房屋的圖案
link |
02:11:44.000
輸入c跟z
link |
02:11:46.000
得到x of g of cz
link |
02:11:48.000
那你輸出來的這個x呢
link |
02:11:50.000
是一個清晰的圖案
link |
02:11:52.000
這影像間的互轉呢
link |
02:11:54.000
叫做image to image translation
link |
02:11:56.000
現在有很多這樣的task
link |
02:11:58.000
比如說你可以把黑白的圖
link |
02:12:00.000
黑色圖片轉成彩色圖片
link |
02:12:02.000
你可以把
link |
02:12:04.000
白天轉成晚上
link |
02:12:06.000
你可以把這個
link |
02:12:08.000
某個物件的邊框
link |
02:12:10.000
轉成他真正的樣子
link |
02:12:12.000
等等
link |
02:12:14.000
這個怎麼做呢
link |
02:12:16.000
如果是原來supervised learning
link |
02:12:18.000
setting的話你需要告訴
link |
02:12:20.000
machine說輸入這個幾何圖寫
link |
02:12:22.000
就輸出這個房屋的樣子
link |
02:12:24.000
那在實作上
link |
02:12:26.000
在collect這種data的時候
link |
02:12:28.000
你是反過來collect
link |
02:12:30.000
你並不是說
link |
02:12:32.000
畫了這個幾何圖寫以後再去找下一個房子
link |
02:12:34.000
你是說先收集很多房屋的圖
link |
02:12:36.000
然後再把它
link |
02:12:38.000
轉成這種幾何圖寫
link |
02:12:40.000
這樣就可以收集到
link |
02:12:42.000
一大堆一大堆的
link |
02:12:44.000
這種圖了
link |
02:12:46.000
就可以收集到一大堆一大堆的這種圖了
link |
02:12:48.000
link |
02:12:50.000
link |
02:12:52.000
現在呢
link |
02:12:54.000
如果你是用一般的supervised learning
link |
02:12:56.000
的方法來train這樣子的network
link |
02:12:58.000
的話你輸入就是
link |
02:13:00.000
一個房你輸入就是
link |
02:13:02.000
這樣子的幾何圖寫
link |
02:13:04.000
輸出就是一張
link |
02:13:06.000
圖片那你希望這張圖片
link |
02:13:08.000
跟你的target越接近
link |
02:13:10.000
越好如果你是用這種
link |
02:13:12.000
traditional的supervised learning的方法
link |
02:13:14.000
來learn一個network而不是learn一個
link |
02:13:16.000
gain train generator的話
link |
02:13:18.000
你輸入比如說在testing的時候
link |
02:13:20.000
這是文獻上真正的結果
link |
02:13:22.000
在testing的時候你輸入一個這樣子的房子
link |
02:13:24.000
你輸出可能是
link |
02:13:26.000
這樣子的結果
link |
02:13:28.000
那這個房子看起來遠看也是對的
link |
02:13:30.000
但是問題就是
link |
02:13:32.000
它太糊了
link |
02:13:34.000
就像我們剛才說的
link |
02:13:36.000
同一個輸入在train data裡面可能對應到
link |
02:13:38.000
很多不同的輸出
link |
02:13:40.000
文獻找到的會是好幾個image的
link |
02:13:42.000
平均所以得到的結果
link |
02:13:44.000
會是糊的
link |
02:13:46.000
如果你要gain train的話呢
link |
02:13:48.000
如果用gain train的話你要train一個generator
link |
02:13:50.000
他input這個房子的樣子
link |
02:13:52.000
然後逆這個noise
link |
02:13:54.000
distribution然後他output一張image
link |
02:13:56.000
你再把這個image
link |
02:13:58.000
跟輸入的這個幾何的圖形
link |
02:14:00.000
丟到discriminator裡面
link |
02:14:02.000
discriminator去check說
link |
02:14:04.000
這兩個圖案放在一起
link |
02:14:06.000
link |
02:14:08.000
匹不匹配
link |
02:14:10.000
然後要檢查說
link |
02:14:12.000
這個image他是不是realistic
link |
02:14:14.000
得到一個scalar
link |
02:14:16.000
代表說input這兩個東西
link |
02:14:18.000
他匹不匹配
link |
02:14:20.000
這個image他generator呢
link |
02:14:22.000
好不好
link |
02:14:24.000
如果你是這麼做的話
link |
02:14:26.000
會得到什麼樣的結果呢
link |
02:14:28.000
如果你是這麼做的話
link |
02:14:30.000
得到的結果像是這樣
link |
02:14:32.000
這是machine產生出來的
link |
02:14:34.000
image你會發現說
link |
02:14:36.000
相較於左邊這張圖
link |
02:14:38.000
gain產生的image呢
link |
02:14:40.000
是比較清楚的
link |
02:14:42.000
那同時呢
link |
02:14:44.000
你其實還可以再加另外一個constraint
link |
02:14:46.000
讓machine產生的image
link |
02:14:48.000
跟你原來的target image越接近越好
link |
02:14:50.000
如果你做這件事的話
link |
02:14:52.000
就是你同時train
link |
02:14:54.000
discriminator又同時
link |
02:14:56.000
要讓你的generator的output滿足
link |
02:14:58.000
這個條件的話你會發現說你得到的
link |
02:15:00.000
結果是右邊這個樣子
link |
02:15:02.000
這三張圖裡面比起來可能
link |
02:15:04.000
這個結果是最好
link |
02:15:06.000
這個結果雖然也很清晰但他的問題就是
link |
02:15:08.000
他加了很多不存在的東西
link |
02:15:10.000
舉例來說他這邊有蓋一個
link |
02:15:12.000
小閣樓或是類似
link |
02:15:14.000
煙囪的東西
link |
02:15:16.000
原來的圖裡面是沒有這個小閣樓
link |
02:15:18.000
是machine自己沒事
link |
02:15:20.000
加上去
link |
02:15:22.000
他覺得應該要加一個小閣樓
link |
02:15:24.000
因為這個
link |
02:15:26.000
你在train這個discriminator的時候
link |
02:15:28.000
跟train這個generator的時候並沒有說不能加這個小閣樓
link |
02:15:30.000
所以他就加了一個小閣樓
link |
02:15:32.000
那如果你有加這個constraint
link |
02:15:34.000
也有說generator的output還是要跟你的target image
link |
02:15:36.000
比較像的話
link |
02:15:38.000
gain就
link |
02:15:40.000
generator就比較不會亂加其他不存在的東西
link |
02:15:42.000
最後我們要講的
link |
02:15:44.000
另外一個task
link |
02:15:46.000
是這樣子
link |
02:15:48.000
假設
link |
02:15:50.000
假設我們今天
link |
02:15:52.000
沒有pair的data
link |
02:15:54.000
在我們剛才講的case裡面我們都假設有pair的data
link |
02:15:56.000
你要有
link |
02:15:58.000
文字敘述對應image
link |
02:16:00.000
你要有
link |
02:16:02.000
這個簡單的幾何圖形
link |
02:16:04.000
對應複雜的
link |
02:16:06.000
房子的樣子
link |
02:16:08.000
那我們今天要怎麼
link |
02:16:10.000
把object從一個domain
link |
02:16:12.000
轉到另外一個domain
link |
02:16:14.000
但是完全不要任何pair的data呢
link |
02:16:16.000
比如說
link |
02:16:18.000
你能不能夠把
link |
02:16:20.000
一張那個
link |
02:16:22.000
真實的圖轉成
link |
02:16:24.000
泛古化的畫的風格
link |
02:16:26.000
而中間卻沒有pair的data
link |
02:16:28.000
也就是說你只有一大堆
link |
02:16:30.000
真正的圖
link |
02:16:32.000
跟一大堆泛古化的畫
link |
02:16:34.000
你能不能就任一個generator
link |
02:16:36.000
把真正的圖
link |
02:16:38.000
真正的風景畫都轉成泛古化的畫
link |
02:16:40.000
但是你並沒有
link |
02:16:42.000
data label說這張風景畫
link |
02:16:44.000
應該對應到哪一張泛古化的圖
link |
02:16:46.000
這個怎麼做呢
link |
02:16:48.000
那這個方法
link |
02:16:50.000
有兩個,一個是cycle game
link |
02:16:52.000
一個是disco game,那cycle game跟disco game
link |
02:16:54.000
有什麼不同呢
link |
02:16:56.000
沒有什麼不同
link |
02:16:58.000
這個是不同的人
link |
02:17:00.000
在幾乎同一個時間propose了
link |
02:17:02.000
非常非常類似的方法
link |
02:17:04.000
他們彼此都沒有提到對方的favor
link |
02:17:06.000
所以顯然是在同一時間
link |
02:17:08.000
不同人想出了一樣的方法
link |
02:17:10.000
真是殊途同歸
link |
02:17:12.000
真的很驚人
link |
02:17:14.000
該怎麼說呢
link |
02:17:16.000
人類在同樣的趨同演化
link |
02:17:20.000
我這邊引用的是
link |
02:17:22.000
cycle game這篇paper的結果
link |
02:17:24.000
他裡面說
link |
02:17:26.000
莫內的畫轉成相片
link |
02:17:30.000
這邊是莫內的畫轉成相片
link |
02:17:32.000
再把相片轉成莫內的畫
link |
02:17:34.000
斑馬轉成馬
link |
02:17:36.000
馬轉成斑馬
link |
02:17:38.000
夏天轉成冬天
link |
02:17:40.000
冬天轉成夏天
link |
02:17:42.000
其實有些失敗的例子
link |
02:17:44.000
當把馬轉成斑馬的時候
link |
02:17:46.000
上面的人也變成斑馬
link |
02:17:52.000
好,那這個cycle game
link |
02:17:54.000
是怎麼做的
link |
02:17:56.000
cycle game是這樣做的
link |
02:17:58.000
先吹一個generator
link |
02:18:00.000
這個generator可以把x domain的東西
link |
02:18:02.000
轉成y domain
link |
02:18:04.000
指的是真實的風景畫
link |
02:18:06.000
y domain指的是
link |
02:18:08.000
泛古的畫
link |
02:18:10.000
你把一個真實的圖
link |
02:18:12.000
真實的照片
link |
02:18:14.000
透過generator從x變成y
link |
02:18:16.000
產生一個有泛古風格的畫
link |
02:18:18.000
然後discriminator會去抓說
link |
02:18:20.000
discriminator就去認說
link |
02:18:22.000
他要去辨識一句話
link |
02:18:24.000
不是一句話
link |
02:18:26.000
一幅畫是不是
link |
02:18:28.000
泛古畫的畫
link |
02:18:30.000
輸出的值代表一幅畫是不是泛古畫的畫
link |
02:18:32.000
所以他就是一個binary classifier
link |
02:18:34.000
這些是泛古畫的畫
link |
02:18:36.000
這些不是泛古畫的畫
link |
02:18:38.000
那得到的結果可能就是
link |
02:18:40.000
現在這張畫就會越來越像
link |
02:18:42.000
泛古畫的畫
link |
02:18:44.000
結果是
link |
02:18:46.000
他可能會產生一張
link |
02:18:48.000
跟輸入完全無關的圖
link |
02:18:50.000
因為你現在對他的要求只有產生泛古的畫
link |
02:18:52.000
那他畫這張圖不是很像泛古的畫嗎
link |
02:18:54.000
這個input就把他當作noise
link |
02:18:56.000
整個忽略掉就好了
link |
02:18:58.000
所以你可能會產生這個結果
link |
02:19:00.000
為了要避免產生這件事情
link |
02:19:02.000
你要再加一個generator
link |
02:19:04.000
這個generator做的事情是
link |
02:19:06.000
把y動位轉x動位
link |
02:19:08.000
把泛古畫的畫
link |
02:19:10.000
轉成真的圖
link |
02:19:12.000
把泛古畫的畫轉成真的圖
link |
02:19:14.000
那訓練的時候呢
link |
02:19:16.000
他的criterion就是
link |
02:19:18.000
希望input跟output
link |
02:19:20.000
越接近越好
link |
02:19:22.000
希望input和output
link |
02:19:24.000
越接近越好
link |
02:19:26.000
那這個時候呢
link |
02:19:28.000
你就可以避免說
link |
02:19:30.000
這個x到y動位的generator
link |
02:19:32.000
產生比如說像
link |
02:19:34.000
泛古畫的畫
link |
02:19:36.000
比如說產生像這個泛古的自畫像
link |
02:19:38.000
因為如果他產生這個自畫像的話
link |
02:19:40.000
他會失去轉回原來圖的information
link |
02:19:42.000
所以他會產生一張圖
link |
02:19:44.000
他原來保有原來的information
link |
02:19:46.000
這樣才能把這張圖轉回來
link |
02:19:48.000
link |
02:19:50.000
那同時我們也可以
link |
02:19:52.000
把這個y到x動位的generator
link |
02:19:54.000
拿來做其他事
link |
02:19:56.000
我們也可以把它拿來
link |
02:19:58.000
把這個泛古的頭像呢
link |
02:20:00.000
泛古畫的畫呢
link |
02:20:02.000
轉成real的image
link |
02:20:04.000
轉成真實的相片
link |
02:20:06.000
那一樣呢
link |
02:20:08.000
我們需要有一個
link |
02:20:10.000
discriminator去抓說
link |
02:20:12.000
現在這個
link |
02:20:14.000
generate出來的image
link |
02:20:16.000
像不像x動位的圖
link |
02:20:18.000
像不像一張真正的照片
link |
02:20:20.000
那我們也要產生一個generator
link |
02:20:22.000
我們要產生一個generator
link |
02:20:24.000
他從x動位到y動位
link |
02:20:26.000
他可以把真實的圖
link |
02:20:28.000
轉回
link |
02:20:30.000
他可以把真實的相片轉回泛古畫的風格
link |
02:20:32.000
一樣要讓這個輸入
link |
02:20:34.000
跟這個輸出越接近越好
link |
02:20:36.000
然後這個generator跟這個generator
link |
02:20:38.000
參數是太在一起的
link |
02:20:40.000
這個generator跟這個generator參數
link |
02:20:42.000
是太在一起的
link |
02:20:44.000
所以今天在這個task裡面
link |
02:20:46.000
你會同時認兩個generator
link |
02:20:48.000
跟兩個discriminator
link |
02:20:50.000
那其實我覺得
link |
02:20:52.000
有了這個技術以後
link |
02:20:54.000
你可以做什麼呢
link |
02:20:56.000
你就可以做真人的動畫化
link |
02:20:58.000
你就可以把整個世界變成動畫
link |
02:21:00.000
舉例來說
link |
02:21:02.000
我們現在在那個作業裡面
link |
02:21:04.000
不是有收集很多人物的頭像嗎
link |
02:21:06.000
那你其實也可以找到
link |
02:21:08.000
在網路上找到那個真人的頭像
link |
02:21:10.000
這樣你就可以把真人的頭像
link |
02:21:12.000
和網路的頭像
link |
02:21:14.000
真人的頭像和動漫的頭像
link |
02:21:16.000
互相轉換來
link |
02:21:18.000
讓所有你看到的人
link |
02:21:20.000
通通轉成動畫的人物
link |
02:21:22.000
在網路上其實是有這個code的
link |
02:21:24.000
但是它其實不是用cycle game
link |
02:21:26.000
或者是disco game做
link |
02:21:28.000
它是用別的技術做的
link |
02:21:30.000
這是一個日文的blog
link |
02:21:32.000
如果你想要知道它的內容
link |
02:21:34.000
歡迎看這一篇
link |
02:21:36.000
我大概可以猜得出它是怎麼做的
link |
02:21:38.000
但是因為它沒有對應的paper
link |
02:21:40.000
又是日文的
link |
02:21:42.000
所以我就不要猜好
link |
02:21:44.000
你可以自己去猜猜看
link |
02:21:46.000
它以後就跑起來了
link |
02:21:48.000
然後就跑了一下
link |
02:21:50.000
這邊有兩個死臭酸宅
link |
02:21:52.000
大家都知道
link |
02:21:54.000
所以我們要把它變成萌妹子
link |
02:21:56.000
所以它就變成這樣子
link |
02:21:58.000
這個頭就變成這樣
link |
02:22:00.000
這個頭就變成這樣
link |
02:22:02.000
所以結果就是長成這樣
link |
02:22:04.000
把這個世界動畫化
link |
02:22:06.000
link |
02:22:08.000
也會有一些失敗的例子
link |
02:22:10.000
我發現如果有背景的話還蠻容易失敗的
link |
02:22:12.000
這個也是個死臭酸宅
link |
02:22:14.000
如果把它變成動畫化
link |
02:22:16.000
這個結果是失敗的
link |
02:22:18.000
他們覺得麥克風應該是頭髮的一部分
link |
02:22:20.000
那你可能會問說
link |
02:22:22.000
動畫化這個有什麼用
link |
02:22:24.000
這個沒有什麼用
link |
02:22:26.000
這個很有用你知道嗎
link |
02:22:28.000
舉例來說
link |
02:22:30.000
假設有一天這個死臭酸宅要開線上課程
link |
02:22:32.000
那線上課程那個老色頭不是都會出現在右下角嗎
link |
02:22:34.000
但是如果老師是個死臭酸宅的話
link |
02:22:36.000
大家都討厭
link |
02:22:38.000
所以我們就要用這個技術
link |
02:22:40.000
把那個老色頭變成一個萌妹子
link |
02:22:42.000
好那我們今天就先上到這邊
link |
02:22:44.000
謝謝