back to index

Deep Learning Theory 2-3: Does Deep Network have Local Minima?


link |
00:01.000
一般的nonlinear deep network,它到底有沒有local minima?
link |
00:06.000
你要證沒有local minima很難,但你要證有local minima太容易了,
link |
00:11.000
找個local minima來,就證它有local minima了,對不對?
link |
00:15.000
所以,這個就好像說你要證明一個東西不存在很難,
link |
00:18.000
但是要證明事情存在呢,是相對比較容易的。
link |
00:23.000
好,那怎麼做?這邊的說法呢,是這個樣子的。
link |
00:28.000
這邊我就收集了一些資料。
link |
00:31.000
首先呢,這個都是文獻上的結果啦,
link |
00:34.000
首先就算是非常簡單的task,比如說XOR的task,
link |
00:39.000
我們今天在講machine learning的時候,
link |
00:42.000
從non-deep的network跨到deep network的時候,
link |
00:45.000
我們就是舉了XOR的例子嘛,
link |
00:47.000
說如果今天有一個data point,它是這樣的分布,
link |
00:53.000
然後呢,這兩個point是delay,linear network沒有辦法分,
link |
01:00.000
所以一定要non-linear的network。
link |
01:02.000
但如果你實際上去認一下這種XOR的problem,
link |
01:05.000
你會發現說,如果你用一個network它只有一個hidden layer,
link |
01:09.000
它的neural的速度是2,3,4,5,6到7,
link |
01:12.000
就算是增加到7個neural那麼多,
link |
01:14.000
你使用addend這種optimization,
link |
01:16.000
都沒有辦法保證你一定可以得到100%的正確率,
link |
01:21.000
都沒有辦法保證你一定可以得到一個,
link |
01:24.000
找到一個global的optimal。
link |
01:28.000
那如果是這個sigmoid,在network比較大的時候倒是可以。
link |
01:33.000
接下來這篇payment裡面呢,它想了一個更複雜的問題,
link |
01:36.000
這個複雜的問題叫做jellyfish的問題,
link |
01:39.000
它說它現在有四個點,這四個點的分布呢,
link |
01:43.000
就分布在這四個位置,然後這兩個黑點是delay,
link |
01:47.000
這兩個白點是delay。
link |
01:49.000
那如果是sigmoid,它還可以解SO的problem,
link |
01:53.000
如果是jellyfish,不管是relu還是sigmoid,
link |
01:56.000
你都是沒有辦法解的,
link |
01:59.000
你都找不到用一般的,
link |
02:01.000
以及是我們現在覺得最state-of-the-art的optimization方法,
link |
02:04.000
用addend,你都找不到global的optimal。
link |
02:09.000
這個是第一個比較不直接的證據告訴你說,
link |
02:13.000
就算是很簡單的network,有時候你也認不起來。
link |
02:17.000
再來呢,我們今天假設要證明說relu的network有local minima,
link |
02:21.000
其實非常簡單,找一個來就行了,
link |
02:24.000
找一個來就證明說relu的network有local minima了嘛。
link |
02:27.000
所以怎麼辦呢,在文件上有人就找了一個,
link |
02:30.000
他就隨便找一個,這個其實你要找十個八個也是有的,
link |
02:33.000
他就說我們現在有一個case,我們有五筆data,
link |
02:37.000
這五筆data分別就是,這邊要畫一個點,
link |
02:40.000
這邊要畫一個逗點,不知道為什麼畫成一個小數點,
link |
02:43.000
我畫錯了,有五個點,-1,3,1,-3,3,0,4,1,5,2,有五個點。
link |
02:49.000
接下來呢,我們有一個全世界最簡單的relu network,
link |
02:53.000
它只有一個neural,那把x放進去,
link |
02:57.000
它會乘上一個weight,加上一個bias,
link |
03:01.000
再通過relu這個activation function,
link |
03:03.000
再乘上一個weight,再加上一個bias,得到最終的y。
link |
03:06.000
那現在在這一排,這五個這個pair裡面,
link |
03:10.000
每一個數字都代表x,output就是,第二個數字就是target。
link |
03:17.000
好,今天假設你有一個relu的network是1,-3,1,0,
link |
03:22.000
它的曲線畫出來,它x跟y的關係畫起來是這個樣子,
link |
03:27.000
它正好可以fit後面三個點,但它fit不了前面這兩個點,
link |
03:32.000
那它的loss算出來是18,那你可以輕易的證明它是一個local minimum,
link |
03:38.000
怎麼輕易的證明呢?你可以證說這個1,-3,1,0,
link |
03:41.000
如果你都把它們加一個小小的delta,
link |
03:44.000
不管加的delta是什麼,它的loss一定都會增加,
link |
03:47.000
所以它是一個local minimum。
link |
03:49.000
那接下來你只要找到另外一個minimum,它的值,
link |
03:53.000
你只要能夠找到另外一組參數,它的loss比18還要低,
link |
03:59.000
那你就知道說這一組參數是一個local minimum,就結束了對不對?
link |
04:03.000
那找不找得到呢?就胡亂找就一組這樣子。
link |
04:06.000
這個-7,-4,1,0這個network,它音部跟output的關係長這個樣子,
link |
04:11.000
它算出來的loss是14,比它還要低,它是一個minimum,
link |
04:16.000
然後又發現說有其他的參數loss更低,
link |
04:20.000
它就不是global minimum了,所以就結束了,
link |
04:23.000
所以ReLU的network是有local minimum的,
link |
04:28.000
有不是global minimum的local minimum的。
link |
04:31.000
那剛才舉的是一個非常specific的case,
link |
04:37.000
也許你覺得這個case太過specific,
link |
04:39.000
其實in general而言,ReLU的network都可以找到local minimum,
link |
04:45.000
怎麼說呢?因為ReLU這種network有一個狀況叫做它的盲點,
link |
04:51.000
你可以為ReLU這個network製造盲點,
link |
04:53.000
什麼叫做ReLU的盲點呢?
link |
04:55.000
我們知道ReLU這個network,它的每一個neuron有兩種operation region,
link |
04:59.000
一種region是input等於output,一種是output等於0,
link |
05:03.000
今天我們假設一個case是所有的neuron它通通是output等於0,
link |
05:09.000
這個就是代表這種狀況叫做ReLU的network陷入盲點,
link |
05:13.000
就是今天input一個x進來,所有的neuron它的output通通都是0,
link |
05:19.000
如果所有的neuron都作用在output是0的region上,
link |
05:22.000
那整個network最終的output當然也是0,
link |
05:25.000
那你會發現說在這個case,你的歸點算出來就是0,對不對?
link |
05:31.000
因為你想想看,你今天假設在這個盲點的這個區域裡面,
link |
05:37.000
你不管怎麼調整參數一點點,
link |
05:41.000
假設你不改變這些neuron的operation region,
link |
05:46.000
你的output永遠不會變啊,
link |
05:48.000
所以今天所有的參數,它的歸點通通都是0,
link |
05:53.000
所以你今天你就找到一個critical point,
link |
06:00.000
那這個critical point它其實是一個local minima,
link |
06:05.000
怎麼說它是local minima呢?
link |
06:07.000
因為這個critical point它在它的,
link |
06:10.000
它其實是這樣子的,就假設橫軸是你的參數的變化,
link |
06:17.000
假設橫軸是你的參數的變化,我寫做theta好了,
link |
06:20.000
那這個盲點的意思就是說,
link |
06:23.000
在某一個區間內啊,你的network的output呢,
link |
06:29.000
它的值都是0,
link |
06:30.000
那今天在這個output是0的這個區間裡面選一個點,
link |
06:38.000
它其實都是local minima,
link |
06:40.000
因為它跟旁邊的region比起來,
link |
06:42.000
都是大於等於旁邊的region嘛,
link |
06:44.000
所以它是一個local minima,
link |
06:46.000
但它會不會是global minima?
link |
06:47.000
它一定不是global minima啊,
link |
06:49.000
你只要你最後的那個target它不是0就好了,
link |
06:52.000
你只要你最好的那個target它不是0,
link |
06:54.000
你只要有別的case它可以找到的loss小於output是0的case,
link |
07:00.000
那它就不是global minima了,
link |
07:03.000
所以對reduce這個network來說,
link |
07:05.000
你可以非常容易的製造出那個,
link |
07:09.000
你知道它進入那種盲點的狀態,
link |
07:13.000
就所有的neuron通通output是0的狀態,
link |
07:15.000
它很有可能就是local minima,
link |
07:18.000
你說怎麼製造它都是盲點的狀態呢?
link |
07:20.000
其實很簡單,
link |
07:22.000
你給它比如說每一個neuron的bias設很大,
link |
07:25.000
比如說設負的很大,
link |
07:28.000
那它的output就很容易是0,
link |
07:30.000
它就很容易陷入盲點的狀態,
link |
07:32.000
那在實驗裡面呢,
link |
07:34.000
你可以輕易的做出這件事,
link |
07:36.000
這個是文獻上的實驗,
link |
07:37.000
它這個實驗是這樣做的,
link |
07:38.000
它做在,
link |
07:40.000
它train了很多的reduce的network,
link |
07:42.000
然後做在unlist上面,
link |
07:44.000
然後用addon,
link |
07:45.000
然後參數update一百萬次這樣子,
link |
07:49.000
就update到覺得已經不可能再有任何變化,
link |
07:54.000
update一百萬次,
link |
07:56.000
然後呢,
link |
07:57.000
今天它做了不同的initialization的case,
link |
08:00.000
首先上面這個row跟下面這個row,
link |
08:04.000
上面這個row是用一般的unlist training set train的,
link |
08:10.000
下面這個row是用奇怪的unlist train,
link |
08:12.000
什麼叫奇怪的unlist呢?
link |
08:14.000
就是你把每一張圖片的label,
link |
08:16.000
隨機置換成別的label,
link |
08:18.000
就比如說它是一張1,
link |
08:19.000
你故意說它是5,
link |
08:20.000
它是個2,
link |
08:21.000
你故意說它是7這樣,
link |
08:22.000
好,
link |
08:23.000
今天假設你用一個正常的initialization的方式,
link |
08:26.000
你用一個normal distribution,
link |
08:28.000
means是0,
link |
08:29.000
variance是0.01,
link |
08:30.000
來初始化你的參數,
link |
08:32.000
或者是means是0,
link |
08:33.000
variance是1,
link |
08:34.000
來初始化你的參數,
link |
08:36.000
那今天這個圖上的每一個點,
link |
08:38.000
都代表了一個network,
link |
08:40.000
然後這個network呢,
link |
08:41.000
有時候代表說它們有不同的hidden unit,
link |
08:44.000
那也不同的顏色代表兩個hidden layer,
link |
08:46.000
或者是五個hidden layer,
link |
08:48.000
那發現說不管是多少hidden layer,
link |
08:50.000
不管是多少的hidden unit,
link |
08:53.000
只要用這種正常的initialization的方式,
link |
08:56.000
用這種正常的initialization的方式,
link |
08:58.000
你accuracy都可以train到1,
link |
08:59.000
accuracy都可以train到1,
link |
09:01.000
除了這個case有點例外,
link |
09:02.000
當你neuron有點少的時候,
link |
09:04.000
在這個特別的data set上,
link |
09:06.000
在這個怪怪的data set上,
link |
09:07.000
有時候會train不起來,
link |
09:09.000
但是今天假如另外一個case,
link |
09:11.000
試圖讓network進入盲點的區域,
link |
09:15.000
也就是在initial的時候,
link |
09:17.000
就給它非常奇怪的initial值,
link |
09:20.000
舉例來說,
link |
09:21.000
在initial w的時候,
link |
09:23.000
故意讓它是從mean是-10的random variable sample起,
link |
09:29.000
故意讓它是從mean是-10的random variable sample起,
link |
09:33.000
或者是故意讓bias的mean是-10,
link |
09:36.000
故意讓bias的mean是-10,
link |
09:38.000
或者是w跟d,
link |
09:40.000
weight跟bias的mean都是-1,
link |
09:43.000
也就是故意讓network在一開始的時候,
link |
09:45.000
在初始化的時候,
link |
09:46.000
就掉入盲點的區域,
link |
09:48.000
就掉入local minima的區域,
link |
09:51.000
它就再也爬不出來了,
link |
09:52.000
它的accuracy就一直在趨近於0的地方,
link |
09:56.000
它就再也爬不出來。
link |
09:58.000
所以這個告訴我們什麼?
link |
10:00.000
首先告訴我們說,
link |
10:01.000
relu的network是有local minima的,
link |
10:04.000
那會不會撞到local minima,
link |
10:06.000
跟你怎麼做initialization是有關係的。
link |
10:11.000
這邊還有其他的實驗,
link |
10:14.000
這個實驗是說,
link |
10:15.000
不只是initialization會影響你有沒有local minima,
link |
10:20.000
會不會碰到local minima,
link |
10:22.000
你的data本身長什麼樣子,
link |
10:25.000
可能也會影響你的network,
link |
10:28.000
你在train的時候,
link |
10:29.000
會不會容易遇到local minima這件事。
link |
10:32.000
怎麼說呢?
link |
10:33.000
假設我們有一個network,
link |
10:35.000
這個network只有一個hidden layer,
link |
10:38.000
它有n個neural,
link |
10:42.000
input是一個vector x,
link |
10:44.000
假設每個neural它的參數分別就是w1, w2到wn,
link |
10:48.000
那每個neural的input就是x跟w1做inner product,
link |
10:53.000
就是你把w1的transpose成x當作activation function input,
link |
10:57.000
w2的transpose成x當作activation function input,
link |
11:00.000
wn的transpose成x當activation function input,
link |
11:02.000
通過relu以後再乘上1得到最終的y,
link |
11:06.000
這是你的network,
link |
11:08.000
而w是要被train出來的。
link |
11:10.000
我們剛才在討論的時候,
link |
11:13.000
我們都沒有假設我們的data應該長什麼樣子,
link |
11:15.000
現在假設data是從一個generator生出來的,
link |
11:19.000
這個generator怎麼生data呢?
link |
11:21.000
這個generator是一個network,
link |
11:23.000
但這個network的參數是給定的,
link |
11:25.000
假設我們知道這是一個有k個neural的hidden layer的network,
link |
11:29.000
它的參數也就是每個neural的weight分別是v1, v2到vn,
link |
11:33.000
我寫錯一個地方,大家有發現嗎?
link |
11:40.000
對,是k,其實是k,
link |
11:42.000
這個k跟n是不一樣的,
link |
11:44.000
這個是這個實驗的重點,
link |
11:46.000
這個k跟n是不一樣的,
link |
11:48.000
所以這應該是k,抱歉抱歉,
link |
11:50.000
這個應該是k,
link |
11:52.000
好,v1的transpose成x,
link |
11:55.000
v2的transpose成x到v,
link |
11:57.000
怎麼會是寫對的呢?
link |
11:59.000
vk的transpose乘上x,
link |
12:01.000
然後最後把它通通加起來,得到你的label,
link |
12:04.000
所以你今天在產生data的時候,
link |
12:06.000
怎麼產生data?
link |
12:07.000
從一個normal distribution做sample,
link |
12:09.000
sample出x,
link |
12:10.000
丟到這個label generator產生你的label y hat,
link |
12:13.000
今天這個network,
link |
12:15.000
它要做的事情是想盡辦法去fit這個x跟y hat之間的關係,
link |
12:19.000
那你可以想見說,
link |
12:21.000
假設今天這兩個network他們的neural的數目,
link |
12:24.000
下面這個network的neural的數目比較多,
link |
12:27.000
或上面這個network它的neural的數目大於等於下面這個networkneural的數目,
link |
12:32.000
我們只要這邊的第一個neural等於這邊的第一個neural,
link |
12:36.000
這邊的第二個neural等於這邊的第二個neural,
link |
12:39.000
這邊的dk的neural等於這邊的dk的neural,
link |
12:41.000
也就是這邊的di的neural等於這邊的di的neural,
link |
12:45.000
你就可以找到global minima,
link |
12:48.000
你的loss就會是0,
link |
12:53.000
但是我們發現說,
link |
12:55.000
今天雖然只要n等於k,
link |
12:57.000
只要n大於等於k,
link |
12:59.000
就可以找到,
link |
13:01.000
就一定保持,
link |
13:03.000
我們就知道global minima長什麼樣子,
link |
13:06.000
但是n等於k跟n大於k得到的結果,
link |
13:12.000
其實是很不一樣的,
link |
13:14.000
那這個是實際實驗的結果了,
link |
13:17.000
就文獻上的結果,
link |
13:19.000
這個文獻告訴我們什麼呢,
link |
13:20.000
這個文獻告訴我們,
link |
13:24.000
這個文獻告訴我們說,
link |
13:26.000
他試了不同的k,
link |
13:28.000
然後假設現在n的數目跟k的數目是一樣的,
link |
13:32.000
也就是你要train的networkneural的數目,
link |
13:36.000
跟你的label generator neural的數目是一樣的,
link |
13:39.000
這個時候你發現說,
link |
13:41.000
除了在n等於6的情況下,
link |
13:44.000
local minima很少,
link |
13:46.000
這邊就是說你真的去train那個network,
link |
13:48.000
他有多少的百分比呢,
link |
13:50.000
就你train到停下來,
link |
13:52.000
然後再檢查說他是不是一個local minima,
link |
13:55.000
然後看說有多少的百分比,
link |
13:57.000
你是停在一個local minima,
link |
13:59.000
他發現說,
link |
14:00.000
今天有很大的機率會停在local minima,
link |
14:06.000
那另外呢,
link |
14:07.000
他還對他停下來的時候,
link |
14:08.000
就假設他找到一個critical point,
link |
14:10.000
那他會去算那個HM,
link |
14:12.000
他還真的算了一下HM,
link |
14:13.000
把他的eigenvalue都找出來,
link |
14:15.000
他發現說,
link |
14:16.000
eigenvalue的平均的最小值呢,
link |
14:18.000
都是正的,
link |
14:19.000
代表說他多數的時候,
link |
14:21.000
找到那個critical point,
link |
14:22.000
他的eigenvalue都是正的,
link |
14:23.000
代表說他是一個,
link |
14:25.000
eigenvalue正的代表說,
link |
14:26.000
你從這個critical point往四周走,
link |
14:28.000
都是增加的,
link |
14:30.000
代表他是一個local minima,
link |
14:32.000
這個是n跟k,
link |
14:34.000
也就是label generator,
link |
14:35.000
跟你要train那個network,
link |
14:36.000
他們是一樣的,
link |
14:38.000
neural的數目的情況下,
link |
14:40.000
但假設你現在增加了,
link |
14:42.000
你的network的參數呢,
link |
14:45.000
假設現在network的neural,
link |
14:48.000
比label generator,
link |
14:50.000
硬是多一個neural呢,
link |
14:52.000
這個時候你就會發現,
link |
14:53.000
你的local minima,
link |
14:55.000
你就很少遇到local minima,
link |
14:57.000
但這個是一個實驗過程,
link |
14:58.000
他並不是理論上的證明,
link |
14:59.000
而是實驗上做出來發現說,
link |
15:01.000
當network的參數量,
link |
15:03.000
比較多的時候,
link |
15:05.000
有點那種over parameterized的情況,
link |
15:07.000
他參數比他需要的還要多的時候,
link |
15:09.000
這個時候,
link |
15:10.000
遇到local minima的機會,
link |
15:12.000
就變得很少了,
link |
15:14.000
而他甚至發現說,
link |
15:16.000
假設n是設大於,
link |
15:19.000
大於等於k加2,
link |
15:21.000
就這邊呢,
link |
15:22.000
是這個k是8,
link |
15:24.000
你的label generator,
link |
15:26.000
8個neural的時候,
link |
15:27.000
你的network有9個neural,
link |
15:28.000
如果今天呢,
link |
15:29.000
你的label generator有8個neural,
link |
15:31.000
你的network給他10個neural,
link |
15:34.000
這個時候你會發現說呢,
link |
15:36.000
你就完全找不到local minima,
link |
15:39.000
當然並不代表local minima,
link |
15:40.000
真的不存在啦,
link |
15:41.000
但他在實驗的過程中,
link |
15:42.000
就一直試一直試,
link |
15:43.000
一直train一直train,
link |
15:44.000
然後都不會卡在local minima,
link |
15:46.000
都可以找到global minima,
link |
15:48.000
那這個實驗要告訴我們的事情是,
link |
15:51.000
data對結果也是很重要,
link |
15:54.000
那講這麼多,
link |
15:55.000
到底想要告訴大家是什麼呢?
link |
15:57.000
因為剛才講法好像都是說,
link |
15:59.000
relu的network,
link |
16:01.000
或是non-linear的deep的network,
link |
16:03.000
他就是有local minima,
link |
16:05.000
但是這些實驗的結果,
link |
16:07.000
並不是要告訴大家說,
link |
16:08.000
deep learning是不work,
link |
16:10.000
deep learning是沒有辦法train的,
link |
16:12.000
而是想要藉由,
link |
16:13.000
找出什麼樣的狀況有local minima,
link |
16:15.000
而反過來推說,
link |
16:17.000
什麼樣的狀況沒有local minima,
link |
16:19.000
就假設所有的狀況是這麼多,
link |
16:21.000
那你把有local minima的狀況都記掉,
link |
16:23.000
剩下就知道說,
link |
16:24.000
什麼情況下會沒有local minima,
link |
16:27.000
那這樣的理論還沒有出現,
link |
16:29.000
那你可以想像說,
link |
16:30.000
未來假設有這種有關,
link |
16:32.000
relu的network,
link |
16:33.000
或deep的network,
link |
16:34.000
有沒有local minima的理論出現的話,
link |
16:35.000
那個理論的statement會是講,
link |
16:37.000
你不太可能證說,
link |
16:38.000
relu的network就沒有local minima,
link |
16:41.000
你不太可能做這種statement,
link |
16:43.000
因為它就是有local minima的這樣子,
link |
16:45.000
你不可能睜眼說瞎話說,
link |
16:46.000
它就是沒有local minima,
link |
16:47.000
剛才舉了很多例子,
link |
16:48.000
它就是有的,
link |
16:49.000
所以到時候如果真的有理論出來的話,
link |
16:52.000
那個理論的說明應該是,
link |
16:54.000
在某種condition下,
link |
16:56.000
雖然我們還不知道是什麼,
link |
16:57.000
在某種condition,
link |
16:58.000
應該要考慮initialization,
link |
17:00.000
我們剛才講說,
link |
17:01.000
你故意initialize在relu network的盲點,
link |
17:04.000
你就可以擊敗它,
link |
17:06.000
但你不能故意initialize在盲點的地方,
link |
17:09.000
所以在某種initialization的情況下,
link |
17:12.000
在某種data的distribution的情況下,
link |
17:16.000
我們剛才有講過說,
link |
17:17.000
如果你現在的data相對於network是比較簡單的,
link |
17:20.000
你network給它過多的參數,
link |
17:23.000
你就在實驗上找不到local minima,
link |
17:26.000
這意味著說,
link |
17:27.000
今天你的data跟你的network之間的關係,
link |
17:30.000
也應該被考慮的,
link |
17:31.000
在這些情況下,
link |
17:33.000
可能會有一個演算法告訴我們說,
link |
17:35.000
我們一定能夠找到global optimal。