back to index

【機器學習2021】類神經網路訓練不起來怎麼辦 (一): 局部最小值 (local minima) 與鞍點 (saddle point)


link |
00:01.000
好,那我們來上課吧。
link |
00:04.000
那接下來我們要講什麼呢?
link |
00:06.000
接下來呢,我們要講如果optimization失敗的時候怎麼辦。
link |
00:12.000
所以看一下我們剛才的攻略,現在我們要講的是optimization的部分。
link |
00:18.000
所以等一下我們要講的東西,基本上跟比如說overfitting沒有什麼太大的關聯,
link |
00:24.000
我們只是討論optimization的時候,怎麼把gradient descent做得更好。
link |
00:30.000
好,那為什麼optimization會失敗呢?
link |
00:36.000
那你常常在做optimization的時候,你會發現說隨著你的參數不斷的update,
link |
00:42.000
你的training的loss不會再下降,但是你對這個loss仍然不滿意。
link |
00:47.000
就像我剛才說的,你可以把deep的network跟linear的model或比較shallow的network
link |
00:52.000
比較發現說它沒有做得更好,所以你覺得deep的network沒有發揮它完整的力量,
link |
00:57.000
所以optimization顯然是有問題。
link |
01:00.000
那有時候你會甚至發現說,一開始你的model就train不起來,
link |
01:05.000
一開始你不管怎麼update你的參數,你的loss通通都掉不下去。
link |
01:11.000
那這個時候到底發生了什麼事情呢?
link |
01:15.000
那過去常見的一個猜想是,因為我們現在走到了一個地方,
link |
01:22.000
這個地方參數對loss的微分為零。
link |
01:26.000
當你的參數對loss的微分為零的時候,gradient descent就沒有辦法再update參數了。
link |
01:35.000
這個時候training就停下來了,你的參數不再update了,loss當然就不會再下降。
link |
01:41.000
那講到gradient為零的時候,大家通常最先想到的,腦海中最先浮現的,
link |
01:48.000
可能就是local minima。
link |
01:51.000
所以常有人說,我做deep learning,你用gradient descent,你會卡在local minima,
link |
01:57.000
所以gradient descent不work,所以deep learning不work。
link |
02:01.000
但是如果有一天你要寫跟deep learning相關的paper的時候,
link |
02:05.000
你千萬不要講什麼卡在local minima這種事情,
link |
02:08.000
別人會覺得你非常沒有水準,為什麼?
link |
02:11.000
因為不是只有local minima的gradient是零,還有其他可能會讓gradient是零,
link |
02:19.000
比如說saddle point,所謂的saddle point其實就是gradient是零,
link |
02:25.000
但是不是local minima,也不是local maxima的地方。
link |
02:31.000
像在這個例子裡面,紅色的這個點,它在左右這個方向是比較高的,
link |
02:39.000
前後這個方向是比較低的,它就像是一個馬鞍的形狀,
link |
02:43.000
所以叫做saddle point,中文就翻成鞍點。
link |
02:47.000
那像saddle point這種地方,它也是gradient為零,但它不是local minima。
link |
02:53.000
那像這種gradient為零的點,統稱為critical point,
link |
02:59.000
所以你可以說你的loss沒有辦法再下降,也許是因為卡在了critical point,
link |
03:06.000
但你不能說是卡在local minima,因為saddle point也是為分為零的點。
link |
03:13.000
好,但是如果我們今天你發現你的gradient真的很靠近零,
link |
03:19.000
卡在了某個critical point,我們有沒有辦法知道到底是local minima還是saddle point呢?
link |
03:26.000
其實是有辦法的,不是完全沒有辦法的。
link |
03:31.000
那為什麼我們會想要知道到底是卡在local minima還是卡在saddle point呢?
link |
03:36.000
因為如果是卡在local minima,那可能就沒有路可以走了,
link |
03:41.000
因為四周都比較高,你現在所在的位置已經是最低的點,
link |
03:46.000
loss最低的點了,往四周走,loss都會比較高,
link |
03:49.000
你會不知道怎麼走到其他的地方去。
link |
03:51.000
那saddle point就比較沒有這個問題,如果你今天是卡在saddle point的話,
link |
03:55.000
你今天是走到一個saddle point的話,saddle point旁邊還是有路,
link |
04:00.000
可以走的還是有路,可以讓你的loss更低的。
link |
04:03.000
你只要逃離saddle point,你就有可能讓你的loss更低。
link |
04:06.000
所以鑑別今天我們走到critical point的時候,
link |
04:09.000
到底是local minima還是saddle point是一個值得去探討的問題。
link |
04:17.000
那怎麼知道今天一個critical point到底是屬於local minima還是saddle point呢?
link |
04:24.000
這邊需要用到一點數學。
link |
04:27.000
以下這一段,其實沒有很難的數學啦,
link |
04:30.000
就只是微積分跟線性代數,但如果你沒有聽懂的話,
link |
04:34.000
以下這一段skip掉是沒有關係的。
link |
04:37.000
那怎麼知道一個點到底是local minima還是saddle point呢?
link |
04:43.000
你要知道我們loss function的形狀。
link |
04:46.000
可是我們怎麼知道loss function的形狀呢?
link |
04:48.000
Narrow本身很複雜,用復雜的Narrow算出來的loss function顯然也很複雜,
link |
04:52.000
我們怎麼知道loss function長什麼樣子呢?
link |
04:56.000
雖然我們沒有辦法完整知道整個loss function的樣子,
link |
04:59.000
但是如果給定某一組參數,比如說藍色的這個saddle point,
link |
05:05.000
在saddle point附近的loss function是有辦法被寫出來的,
link |
05:11.000
它寫出來就像是這個樣子。
link |
05:15.000
所以這個LO of saddle完整的樣子寫不出來,
link |
05:20.000
但是它在saddle point附近,你可以用這個式子來表示它。
link |
05:26.000
你可能說,哇,這個是什麼,這個還有好多種顏色啊,
link |
05:28.000
這個東西到底是什麼。
link |
05:30.000
這個東西是Heller-Series Approximation,
link |
05:34.000
這個假設你在微積分的時候其實已經學過了,
link |
05:38.000
所以我就不會細講說這一串是怎麼來的,
link |
05:40.000
但我們就只講一下它的概念。
link |
05:43.000
這一串裡面包含什麼東西呢?
link |
05:45.000
第一項是LO of saddle point,就告訴我們說,
link |
05:50.000
當saddle跟saddle point很近的時候,
link |
05:52.000
LO of saddle應該跟LO of saddle point還蠻靠近的。
link |
05:57.000
那第二項是什麼呢?
link |
05:58.000
第二項是saddle-saddle point的transpose乘上G,
link |
06:03.000
G是什麼?G是一個向量,這個G就是我們的gradient,
link |
06:09.000
我們在上週已經講過gradient這個東西了,
link |
06:11.000
我們用綠色的這個G來代表gradient,它是一個向量。
link |
06:16.000
那這個gradient告訴我們什麼呢?
link |
06:18.000
這個gradient會來彌補saddle point跟saddle之間的差距,
link |
06:24.000
我們雖然剛才說saddle跟saddle point他們應該很接近,
link |
06:28.000
但是中間還是有些差距的,
link |
06:30.000
那這個差距第一項我們用這個gradient來表示他們之間的差距。
link |
06:36.000
那這個G呢,就是有時候gradient會寫成倒三角形of L,
link |
06:41.000
它是由saddle point這個地方的G,
link |
06:44.000
然後G是一個向量,它的第一個component就是saddle的第一個component,
link |
06:49.000
對L的微分。
link |
06:52.000
好,光是看G還是沒有辦法完整的描述LO of saddle,
link |
06:58.000
你還要看第三項,第三項是什麼?
link |
07:01.000
第三項跟hesion有關。
link |
07:04.000
這邊有一個H,這個H叫做hesion,它是一個矩陣。
link |
07:10.000
這個第三項是saddle-saddle point的全後乘上H再乘上saddle-saddle point。
link |
07:17.000
第三項會再補足再加上gradient以後跟真正的LO of saddle之間的差距。
link |
07:25.000
那這個H裡面放的是什麼東西呢?
link |
07:27.000
這個H裡面放的是LO的二次微分。
link |
07:32.000
這個H它的第i個row,第j個column的值是什麼呢?
link |
07:38.000
它第i個row,第j個column的值就是把saddle的第i個component對L做微分。
link |
07:45.000
再把saddle的第j個component對L做微分。
link |
07:50.000
再把saddle的第i個component對L做微分。
link |
07:53.000
做兩次微分後的結果就是這個Hij。
link |
07:57.000
好,如果這邊你覺得有點聽不太懂的話也沒有關係,
link |
08:01.000
反正你就記得說這個LO of saddle,這個Loss function,
link |
08:05.000
這個Loss surface在saddle point附近可以寫成這個樣子。
link |
08:10.000
這個式子跟兩個東西有關係,跟gradient有關係,跟Hij有關係。
link |
08:15.000
Gradient就是一次微分,Hij就是裡面有二次微分的項目。
link |
08:23.000
好,那如果我們今天走到了一個critical point,那意味著什麼?
link |
08:27.000
意味著gradient為0,也就是綠色的這一項完全都不見了。
link |
08:32.000
即使一個zero vector,綠色的這一項完全都不見了,只剩下紅色的這一項。
link |
08:38.000
所以當在critical point的時候,這個Loss function,
link |
08:42.000
它可以被近似為L of saddle point加上紅色的這一項。
link |
08:48.000
我們可以根據紅色的這一項來判斷說,
link |
08:51.000
在saddle point附近的arrow surface到底長什麼樣子。
link |
08:54.000
知道arrow surface長什麼樣子,我們就可以判斷說,
link |
08:57.000
saddle point它是一個local minima,是一個local maxima,還是一個saddle point。
link |
09:03.000
我們可以靠這一項來了解這個arrow surface的地貌大概長什麼樣子,
link |
09:08.000
知道它地貌長什麼樣子,我們就可以知道說現在是在什麼樣的狀態。
link |
09:13.000
這個是Hij。
link |
09:16.000
好,那我們就來看一下怎麼根據Hij,怎麼根據紅色的這一項來判斷saddle point附近的地貌。
link |
09:27.000
我們現在為了等一下符號方便起見,我們把saddle-saddle point用V這個向量來表示。
link |
09:34.000
saddle是一個向量,saddle point也是一個向量,這兩個向量相減,我們用V這個向量來表示它。
link |
09:43.000
如果今天對任何可能的V,V的control H乘上V都大於0,
link |
09:50.000
也就是說現在saddle不管帶任何值,V可以是任何的V,
link |
09:55.000
就代表說saddle-saddle point可以是任何值,也就是saddle可以是任何值。
link |
09:59.000
不管saddle帶任何值,紅色框框裡面通通都大於0。
link |
10:04.000
那意味著什麼?意味著說紅色框框裡面都大於0,
link |
10:08.000
換言之,意味著說L of saddle大於L of saddle point。
link |
10:13.000
比如說saddle不管帶多少,只要在saddle point附近,saddleL of saddle都大於L of saddle point。
link |
10:19.000
那代表什麼?代表L of saddle point是附近的一個最低點,所以它是local minima。
link |
10:27.000
如果今天反過來說對所有的V而言,V transpose H乘上V都小於0,
link |
10:32.000
也就是紅色框框裡面永遠都小於0,
link |
10:35.000
也就是saddle不管帶什麼,什麼值,紅色框框裡面都小於0,那意味著什麼?
link |
10:41.000
意味著紅色框框裡面都小於0,意味著說L of saddle point都是大於L of saddle,
link |
10:47.000
L of saddle小於L of saddle point。
link |
10:50.000
代表說L of saddle point是附近最高的一個點,所以它是local maxima。
link |
10:56.000
第三個可能是假設V transpose HV有時候大於0有時候小於0,
link |
11:02.000
帶不同的V進去,也就是帶不同的saddle進去,
link |
11:05.000
紅色這個框框裡面有時候大於0有時候小於0,
link |
11:08.000
意味著說在saddle point附近有時候有些Loss比L of,
link |
11:15.000
有時候L of saddle大於L of saddle point,有時候L of saddle小於L of saddle point。
link |
11:20.000
在L of saddle point附近有些地方高有些地方低,這意味著什麼?
link |
11:25.000
這意味著這是一個saddle point。
link |
11:29.000
這邊你會有的接下一個問題是,我們看紅色這一項,
link |
11:34.000
我們現在可以判斷它是local minima還是saddle point還是local maxima,
link |
11:39.000
但是你這邊是說我們要帶所有的V去看V transpose HV是大於0還是小於0,
link |
11:45.000
我們怎麼有可能把所有的V都拿來試試看呢?
link |
11:48.000
所以有一個更簡便的方法去確認說這一個條件或這一個條件會不會發生,
link |
11:54.000
這個就直接告訴你結論,先進代數理論上是有教過這件事情的。
link |
12:00.000
如果今天對所有的V而言,V transpose HV都大於0,
link |
12:05.000
那這種矩陣叫做positive definite。
link |
12:10.000
Positive definite的矩陣有什麼特性呢?
link |
12:13.000
它所有的Eigenvalue都是真的。
link |
12:16.000
所以如果你今天算出一個Hesitant,你不需要把它跟所有的V都乘看看,
link |
12:20.000
你只要去直接看這個H的Eigenvalue,
link |
12:23.000
如果你發現說所有Eigenvalue都是真的,
link |
12:27.000
那就代表說這一個條件成立,V transpose HV會大於0,
link |
12:33.000
也就代表說是一個local minima。
link |
12:36.000
所以你從Hesitant metric可以看出它是不是local minima,
link |
12:39.000
你只要算出Hesitant metric,算完以後,
link |
12:42.000
看它的Eigenvalue發現都是真的,它就是local minima,就結束了。
link |
12:46.000
那反過來說也是一樣,如果今天在這個狀況,
link |
12:51.000
對所有的V而言,V transpose HV小於0,
link |
12:54.000
那H是negative definite,那就代表所有的Eigenvalue都是負的。
link |
13:01.000
所有的Eigenvalue都是負的,就保證它是local maxima。
link |
13:07.000
那如果Eigenvalue有正有負,那就代表是stable point。
link |
13:12.000
那假設講到這邊,你沒有聽得很懂的話,
link |
13:14.000
你就可以記得結論,你只要算出一個東西,
link |
13:17.000
這個東西的名字叫做hesion,它是一個矩陣。
link |
13:20.000
這個矩陣,如果它所有的Eigenvalue都是正的,
link |
13:23.000
那就代表我們現在在local minima。
link |
13:26.000
如果它有正有負,就代表還是stable point。
link |
13:29.000
所以我們是有辦法判斷說是local minima還是stable point。
link |
13:36.000
那如果剛才講的,你覺得你沒有聽得很懂的話,
link |
13:39.000
我們這邊舉一個例子。
link |
13:41.000
我們現在有一個史上最廢的Neuron,它廢到什麼程度呢?
link |
13:46.000
輸入一個X,它只有一個Neuron乘上W1,
link |
13:50.000
而且這個Neuron還沒有activation function,
link |
13:53.000
所以X乘上W1以後,之後就輸出,然後再乘上W2,
link |
13:57.000
然後就再輸出,就得到最終的數值就是Y。
link |
14:00.000
總之這一個function非常的簡單,
link |
14:02.000
單Y等於W1乘以W2乘以X,
link |
14:05.000
這是一個史上最廢的Neuron network。
link |
14:08.000
那我們有一個史上最廢的training dataset,
link |
14:11.000
這個dataset說我們只有一筆data,
link |
14:14.000
這筆data是X是1的時候,它的label是1,
link |
14:19.000
所以輸入1進去,你希望最終的輸出跟1越接近越好。
link |
14:24.000
這個史上最廢的training。
link |
14:27.000
這個史上最廢的training它的error surface,
link |
14:30.000
你是有辦法直接畫出來的,
link |
14:32.000
因為反正只有兩個參數W1、W2嘛,連bias都沒有。
link |
14:35.000
假設沒有bias,只有W1跟W2兩個參數,
link |
14:39.000
這個Neuron只有兩個參數W1跟W2。
link |
14:43.000
那我們可以窮取所有W1跟W2的數值,
link |
14:46.000
算出所有W1、W2的數值所帶來的loss,
link |
14:50.000
然後就畫出error surface,長這個樣子。
link |
14:54.000
所以這邊是高的,這邊loss是高的,
link |
14:56.000
這邊loss是高的,這邊loss也是高的。
link |
14:59.000
四個角落loss是高的。
link |
15:02.000
這個圖上你可以看出來說有一些critical point,
link |
15:06.000
哪些地方critical point呢?
link |
15:08.000
這個黑點點的地方,這個0,0啊,圓點的地方是critical point。
link |
15:13.000
然後事實上呢,這一條線這邊也是一排critical point,
link |
15:19.000
也是一排critical point。
link |
15:21.000
如果你更進一步要分析它們是saddle point還是local minimum的話,
link |
15:25.000
那圓心這個地方,圓點這個地方,它是saddle point。
link |
15:31.000
為什麼它是saddle point呢?
link |
15:32.000
你往這個方向走,loss會變大,
link |
15:35.000
往這個方向走loss會變大,往這個方向走loss會變小,
link |
15:38.000
往這個方向走loss會變小,它是一個saddle point。
link |
15:42.000
而這兩群critical point,它們都是local minimum。
link |
15:49.000
所以這個三溝裡面有一排local minimum,
link |
15:52.000
這一排三溝裡面有一排local minimum,
link |
15:54.000
然後在圓點的地方有一個saddle point。
link |
15:57.000
這個是我們把error surface報收以後,
link |
16:00.000
報收所有的參數得到的loss function以後,
link |
16:03.000
得到的loss的值以後,畫出error surface,
link |
16:05.000
可以得到這樣的結論。
link |
16:07.000
那現在假設如果不報收所有可能的loss,
link |
16:12.000
那如果要直接算出一個點,
link |
16:15.000
是local minimum還是saddle point的話,
link |
16:19.000
怎麼算呢?
link |
16:21.000
我們可以把loss的function寫出來,
link |
16:24.000
這個loss的function,這個l呢,
link |
16:26.000
是正確答案y hat減掉model的輸出,
link |
16:31.000
也就是w1,w2乘以x。
link |
16:33.000
那這邊取這個square error,
link |
16:36.000
這邊只有一筆data,
link |
16:37.000
所以就不會submention over所有的training data,
link |
16:39.000
因為反正只有一筆data。
link |
16:41.000
x代1,y hat代1,我剛才說過,
link |
16:43.000
只有一筆訓練資料,最廢的,
link |
16:45.000
只有一筆訓練資料,
link |
16:46.000
所以loss function就是1減w1,w2的平方。
link |
16:50.000
那你可以把這個loss function,
link |
16:52.000
它的gradient求出來,
link |
16:54.000
那這邊細節我們就不講了。
link |
16:56.000
你可以,你如果維基尊都還記得的話,
link |
16:59.000
算一下就會知道說這個是對的,
link |
17:01.000
反正w1對l的微分寫出來是這個樣子,
link |
17:05.000
w2對l的微分寫出來是這個樣子。
link |
17:08.000
那這個東西就是所謂的G,
link |
17:11.000
所謂的規點。
link |
17:13.000
什麼時候規點會0呢?
link |
17:14.000
什麼時候會到一個critical point呢?
link |
17:16.000
舉例來說,如果w1等於0,w2等於0,
link |
17:19.000
在原心這個地方,
link |
17:20.000
如果你w1代0,w2代0,
link |
17:23.000
這個規點算出來就都是0了。
link |
17:25.000
如果w1代0,w2代0,
link |
17:27.000
w1對l的微分,w2對l的微分,
link |
17:30.000
算出來就都是0,就都是0。
link |
17:32.000
這個時候我們就知道說,
link |
17:34.000
原點是一個critical point。
link |
17:37.000
但是它是一個critical point,
link |
17:39.000
但它是local maxima,
link |
17:41.000
它是local minima,還是settled point呢?
link |
17:44.000
那你就要看Hessian才能夠知道了。
link |
17:48.000
你就要看Hessian才能夠知道。
link |
17:50.000
那我們剛才已經報收說,
link |
17:52.000
可能w1,w2了啦,
link |
17:53.000
所以你已經知道說,
link |
17:54.000
它顯然是一個settled point,
link |
17:56.000
但是現在假設還沒有報收
link |
17:58.000
所有可能的loss,
link |
18:00.000
所以我們要看看能不能夠用H,
link |
18:02.000
用Hessian看出它是什麼樣的critical point。
link |
18:07.000
那怎麼算出這個H呢?
link |
18:10.000
H它是一個矩陣,
link |
18:13.000
那這個矩陣裡面呢,
link |
18:15.000
就是收集了l的各次微分。
link |
18:19.000
所以這個矩陣裡面,
link |
18:21.000
第一個row,第一個column的位置,
link |
18:23.000
就是w1對l微分兩次。
link |
18:26.000
第一個row,第二個column的位置,
link |
18:28.000
就是先用w2對l做微分,
link |
18:29.000
再用w1對l做微分。
link |
18:31.000
然後這邊就是w1對l做微分,
link |
18:33.000
w2對l做微分,
link |
18:34.000
然後w2對l微分兩次。
link |
18:36.000
這四個值組合起來,
link |
18:38.000
就是我們的Hessian。
link |
18:41.000
那這個Hessian的值是多少呢?
link |
18:43.000
這個Hessian的式子,
link |
18:44.000
我都已經把它寫出來了。
link |
18:45.000
你只要把w1等於0,w2等於0,
link |
18:47.000
代進去,代進去,
link |
18:49.000
你就得到在原點的地方,
link |
18:51.000
Hessian是0,w2,w2,0,
link |
18:53.000
這樣子的一個矩陣。
link |
18:55.000
好,那這個矩陣告訴我們,
link |
18:58.000
這個Hessian告訴我們,
link |
19:00.000
它是local minima還是saddle point呢?
link |
19:02.000
那就要看這個矩陣的eigenvalue了。
link |
19:05.000
算一下發現,
link |
19:06.000
這個矩陣有兩個eigenvalue,
link |
19:08.000
2跟-2,
link |
19:09.000
eigenvalue有正有負,
link |
19:11.000
代表saddle point,對不對?
link |
19:13.000
我們剛才講,
link |
19:14.000
eigenvalue有正有負,
link |
19:16.000
就代表的是saddle point。
link |
19:20.000
好,那所以我們現在呢,
link |
19:22.000
就是用一個例子跟你操作一下,
link |
19:24.000
告訴你說,
link |
19:25.000
你怎麼從Hessian看出一個點,
link |
19:28.000
它一個critical point,
link |
19:29.000
它是saddle point還是local minima。
link |
19:33.000
好,如果今天呢,
link |
19:35.000
你卡的地方是saddle point,
link |
19:39.000
也許你就不用那麼害怕了。
link |
19:41.000
為什麼?
link |
19:42.000
因為如果你今天你發現
link |
19:44.000
你停下來的時候
link |
19:45.000
是因為saddle point停下來的,
link |
19:47.000
那你可以放心的,
link |
19:49.000
你其實就有機會可以放心了。
link |
19:53.000
為什麼?
link |
19:54.000
因為H啊,
link |
19:55.000
它不只可以幫助我們判斷
link |
19:57.000
現在是不是在一個saddle point,
link |
19:59.000
它還指出了我們參數
link |
20:02.000
可以update的方向。
link |
20:04.000
就之前我們參數update的時候,
link |
20:06.000
都是看gradient,看G,
link |
20:08.000
但是我們走到某個地方
link |
20:09.000
又發現G變成0了,
link |
20:11.000
不能再看G了,
link |
20:12.000
G不見了,
link |
20:13.000
gradient沒有了。
link |
20:14.000
但如果是一個saddle point的話,
link |
20:16.000
還可以再看H。
link |
20:18.000
怎麼再看H呢?
link |
20:19.000
H怎麼告訴我們
link |
20:20.000
怎麼update參數呢?
link |
20:23.000
我們這邊假設U啊,
link |
20:25.000
是H的eigenvector,
link |
20:27.000
然後λ是U的eigenvalue,
link |
20:30.000
就H有一個eigenvalue叫λ,
link |
20:32.000
它的對應的eigenvector叫做U。
link |
20:35.000
如果我們把這邊的V換成U的話,
link |
20:38.000
會發生什麼事呢?
link |
20:39.000
如果我們把U乘在H的左邊
link |
20:42.000
跟H的右邊,
link |
20:43.000
也就U乘Pose乘上H乘U,
link |
20:45.000
會得到什麼呢?
link |
20:47.000
H乘以U啊,
link |
20:48.000
會得到λU,
link |
20:50.000
為什麼?
link |
20:51.000
因為U是一個eigenvector啊,
link |
20:53.000
所以H乘上eigenvector,
link |
20:54.000
會得到λeigenvalue乘上eigenvector,
link |
20:57.000
所以這邊得到UT乘於λU。
link |
21:00.000
然後再整理一下,
link |
21:02.000
把UT跟U乘起來得到U的那種平方,
link |
21:04.000
所以得到λU的那種平方。
link |
21:07.000
所以這一項啊,
link |
21:09.000
這一項,
link |
21:10.000
假設我們這邊V
link |
21:11.000
帶的是一個eigenvector,
link |
21:13.000
我們這邊θ減θpoint
link |
21:15.000
放的是一個eigenvector的話,
link |
21:16.000
會發現說,
link |
21:18.000
我們這個紅色的項裡面,
link |
21:20.000
其實就是λ乘上U的那種平方。
link |
21:25.000
那今天如果λ小於0,
link |
21:28.000
eigenvalue小於0的話,
link |
21:30.000
會發生什麼事呢?
link |
21:32.000
如果eigenvalue小於0的話,
link |
21:34.000
那λ乘上U的那種平方就會小於0,
link |
21:37.000
因為U的那種平方一定是正的嘛,
link |
21:39.000
所以eigenvalue是負的,
link |
21:40.000
那這一整項就會是負的。
link |
21:42.000
也就是U的Pose乘上H乘上U,
link |
21:44.000
它是負的,
link |
21:46.000
也就是紅色這個框框裡面,
link |
21:48.000
是小於0的,是負的。
link |
21:51.000
所以這個意思是說,
link |
21:52.000
假設θ減θpoint等於U,
link |
21:56.000
那這一項就是負的,
link |
21:58.000
也就是λθ會小於λθpoint。
link |
22:03.000
也就是說,
link |
22:04.000
假設θ減θpoint等於U,
link |
22:06.000
也就是θ等於θpoint加U,
link |
22:08.000
你把θpoint,
link |
22:10.000
本來參數在θpoint的位置加上U,
link |
22:12.000
沿著U的方向做update得到θ,
link |
22:14.000
你就可以讓loss變小,
link |
22:16.000
因為根據這個式子,
link |
22:19.000
你只要θ減θpoint等於U,
link |
22:21.000
loss就會變小。
link |
22:22.000
所以你今天只要讓θ等於θpoint加U,
link |
22:25.000
你就可以讓loss變小。
link |
22:27.000
你只要沿著U,
link |
22:28.000
也就是eigenvector的方向,
link |
22:30.000
去更新你的參數,
link |
22:32.000
去改變你的參數,
link |
22:33.000
你就可以讓loss變小了。
link |
22:35.000
所以雖然在critical point沒有gradient,
link |
22:38.000
如果我們今天是在一個theta point,
link |
22:40.000
你也不一定要驚慌,
link |
22:43.000
你只要找出負的eigenvalue,
link |
22:49.000
再找出它對應的eigenvector,
link |
22:51.000
用這個eigenvector去加θpoint,
link |
22:54.000
就可以找到一個新的點,
link |
22:56.000
這個點的loss比原來還要低。
link |
22:58.000
如果這樣你聽得不是很清楚的話,
link |
23:01.000
我們就舉具體的例子。
link |
23:02.000
剛才我們已經發現說,
link |
23:04.000
原點是一個critical point,
link |
23:06.000
它的hesion長這個樣子。
link |
23:10.000
我們現在發現說,
link |
23:11.000
這個hesion有一個負的eigenvalue,
link |
23:15.000
這個eigenvalue等於負2。
link |
23:22.000
這個eigenvalue等於負2,
link |
23:26.000
那它對應的eigenvector長什麼樣子呢?
link |
23:28.000
它有很多個,
link |
23:29.000
其實是無窮多個對應的eigenvector。
link |
23:32.000
我們就取一個出來,
link |
23:33.000
我們取11,11是它對應的一個eigenvector。
link |
23:40.000
那我們其實只要順著這個u的方向,
link |
23:43.000
順著11這個vector的方向,
link |
23:45.000
去更新我們的參數,
link |
23:47.000
你就可以找到一個比θpoint的loss,
link |
23:50.000
還要更低的點。
link |
23:54.000
如果以今天這個例子來看的話,
link |
23:56.000
你的θpoint在00這個地方,
link |
24:00.000
你在這個地方因為沒有歸點,
link |
24:02.000
就會告訴你說你要怎麼更新參數。
link |
24:04.000
那hesion告訴我們說,
link |
24:06.000
hesion的eigenvector告訴我們說,
link |
24:08.000
只要往11的方向更新,
link |
24:10.000
你就可以讓loss變得更小。
link |
24:12.000
只要往u這個eigenvector的方向更新,
link |
24:14.000
11的方向更新,
link |
24:16.000
你就可以讓你的loss變小。
link |
24:19.000
也就是說你可以逃離你的θpoint,
link |
24:21.000
然後讓你的loss變小。
link |
24:24.000
所以從這個角度來看,
link |
24:27.000
似乎θpoint並沒有那麼可怕。
link |
24:31.000
如果你今天在training的時候,
link |
24:33.000
你的訓練停下來,
link |
24:35.000
你的歸點變成0,
link |
24:36.000
你的訓練停下來,
link |
24:37.000
是因為θpoint的話,
link |
24:39.000
那似乎還有解。
link |
24:42.000
但是當然實際上,
link |
24:43.000
在實際的implementation裡面,
link |
24:46.000
你幾乎不會真的把hesion算出來。
link |
24:50.000
為什麼?
link |
24:51.000
這個要是二次微分,
link |
24:53.000
要計算這個矩陣的computation,
link |
24:56.000
需要的運算量非常非常的大。
link |
24:59.000
更遑論你還要把它的eigenvalue
link |
25:02.000
跟eigenvector找出來。
link |
25:04.000
所以在實作上,
link |
25:05.000
你幾乎沒有看到有人用這一個方法
link |
25:08.000
來逃離θpoint。
link |
25:11.000
等一下我們會講其他
link |
25:12.000
也有機會逃離θpoint的方法。
link |
25:14.000
他們的運算量都比要算這個h還要小很多。
link |
25:17.000
那今天之所以我們把這個
link |
25:19.000
θpoint跟eigenvector,
link |
25:21.000
跟hesion的eigenvector拿出來講,
link |
25:23.000
是想要告訴你說,
link |
25:24.000
如果是卡在θpoint,
link |
25:26.000
也許沒有那麼可怕。
link |
25:28.000
在這招的狀況下,
link |
25:29.000
你還有這一招可以告訴你
link |
25:31.000
要往哪一個方向走。
link |
25:35.000
好,那在講到這邊,
link |
25:36.000
你就會有一個問題了。
link |
25:37.000
這個問題是,
link |
25:38.000
那到底θpoint跟local minima
link |
25:42.000
誰比較常見呢?
link |
25:43.000
我們說θpoint其實並沒有很可怕,
link |
25:46.000
那如果我們今天常遇到的是θpoint,
link |
25:49.000
比較少遇到local minima,
link |
25:51.000
那就太好了。
link |
25:53.000
那到底θpoint跟local minima
link |
25:55.000
哪一個比較常見呢?
link |
25:58.000
那這邊呢,
link |
25:59.000
我們要講一個不相干的故事。
link |
26:02.000
先講一個故事。
link |
26:03.000
這個故事是什麼呢?
link |
26:04.000
這個故事發生在1543年。
link |
26:07.000
1543年發生了什麼事呢?
link |
26:10.000
那一年這個君士坦丁堡淪陷,
link |
26:14.000
這個是君士坦丁堡淪陷圖。
link |
26:16.000
君士坦丁堡本來是東羅馬帝國的領土,
link |
26:20.000
然後被鄂圖曼土耳其帝國佔領了,
link |
26:23.000
然後東羅馬帝國就滅亡了。
link |
26:27.000
在鄂圖曼土耳其人進攻君士坦丁堡的時候,
link |
26:31.000
那時候東羅馬帝國的國王是君士坦丁一世,
link |
26:35.000
他不知道要怎麼對抗土耳其人。
link |
26:39.000
有人就獻上了一策,
link |
26:41.000
找來了一個魔法師叫做迪奧倫馬。
link |
26:46.000
這是真實的故事,
link |
26:49.000
知道嗎?
link |
26:50.000
出自三體的故事。
link |
26:52.000
迪奧倫馬這樣說,
link |
26:54.000
迪奧倫馬是誰呢?
link |
26:56.000
他有一個能力跟張飛一樣,
link |
26:58.000
張飛不是可以萬軍從中取上將首級錄,
link |
27:02.000
探囊取錄嗎?
link |
27:04.000
迪奧倫馬也是一樣,
link |
27:06.000
他可以直接取得蘇丹的頭,
link |
27:10.000
他可以從萬軍中取得蘇丹的頭。
link |
27:13.000
大家想說迪奧倫馬怎麼這麼厲害,
link |
27:16.000
他真的有這麼強大的魔法嗎?
link |
27:18.000
所以大家就要迪奧倫馬先展示一下他的力量,
link |
27:21.000
這時候迪奧倫馬就拿出了一個聖杯,
link |
27:25.000
大家看到這個聖杯就大吃一驚,
link |
27:28.000
為什麼大家看到這個聖杯要大吃一驚呢?
link |
27:31.000
因為這個聖杯本來是放在聖索菲亞大教堂的地下室,
link |
27:36.000
而且它是被放在一個石棺裡面,
link |
27:39.000
這個石棺是密封的,
link |
27:42.000
沒有人可以打開它,
link |
27:44.000
但是迪奧倫馬他從裡面取得了聖杯,
link |
27:47.000
而且還放了一串葡萄進去。
link |
27:50.000
那君士坦丁十一世為了要驗證迪奧倫馬是不是真的有這個能力,
link |
27:55.000
就帶了一堆人真的去撬開了這個石棺,
link |
27:58.000
發現聖杯真的被拿走了,
link |
28:00.000
裡面真的有一串新鮮的葡萄,
link |
28:03.000
就知道迪奧倫馬真的有萬軍從中去上將首級的能力。
link |
28:09.000
那為什麼迪奧倫馬可以做到這件事呢?
link |
28:11.000
那是因為這個石棺你覺得它是封閉的,
link |
28:15.000
那是因為你是從三維的空間來看,
link |
28:19.000
從三維的空間來看,
link |
28:21.000
這個石棺是封閉的,
link |
28:23.000
沒有任何路可以進去。
link |
28:25.000
但是迪奧倫馬可以進入四維的空間,
link |
28:28.000
從高維的空間中,
link |
28:29.000
這個石棺是有路可以進去的,
link |
28:32.000
它並不是封閉的。
link |
28:34.000
那至於迪奧倫馬有沒有成功刺殺蘇丹呢?
link |
28:37.000
你可以想像一定是沒有嘛,
link |
28:39.000
所以君士坦丁堡才淪陷了。
link |
28:41.000
那至於為什麼沒有,
link |
28:42.000
大家請見三體,
link |
28:43.000
這樣就不雷大家了。
link |
28:45.000
那總之從三維的空間來看,
link |
28:49.000
是沒有路可以走的東西,
link |
28:51.000
在高維空間中是有路可以走的。
link |
28:55.000
Error surface會不會也一樣呢?
link |
28:58.000
所以你在一維的空間中,
link |
29:02.000
一維的一個參數的Error surface,
link |
29:04.000
你會覺得好像到處都是local minima。
link |
29:09.000
但是會不會在二維的空間來看,
link |
29:12.000
它就只是一個zero point呢?
link |
29:15.000
常常會有人畫類似這樣的圖,
link |
29:17.000
告訴你說deep learning的訓練,
link |
29:19.000
是非常的複雜的。
link |
29:21.000
如果我們移動某兩個參數,
link |
29:24.000
Error surface的變化,
link |
29:26.000
非常的複雜是這個樣子的。
link |
29:28.000
那它顯然有非常多的local minima,
link |
29:31.000
我在這邊顯然有一個local minima。
link |
29:35.000
但是會不會這個local minima,
link |
29:37.000
只是在二維的空間中,
link |
29:39.000
看起來是一個local minima,
link |
29:42.000
在更高維的空間中,
link |
29:44.000
它看起來就是zero point呢?
link |
29:47.000
在二維的空間中,
link |
29:49.000
我們沒有路可以走,
link |
29:51.000
那會不會在更高的維度上,
link |
29:53.000
因為更高的維度,
link |
29:54.000
我們沒有辦法比較來測,
link |
29:55.000
我們沒辦法真的拿出來看,
link |
29:57.000
會不會在更高維的空間中,
link |
29:59.000
其實有路可以走呢?
link |
30:02.000
那如果維度越高,
link |
30:03.000
是不是可以走的路就越多了呢?
link |
30:08.000
而今天我們在訓練一個network的時候,
link |
30:11.000
我們的參數往往動輒百萬千萬上億。
link |
30:15.000
所以我們的Error surface,
link |
30:17.000
其實是在一個非常高的維度中。
link |
30:20.000
我們參數有多少,
link |
30:21.000
就代表我們的Error surface的維度有多少。
link |
30:23.000
參數是一千萬,
link |
30:25.000
就代表Error surface的維度是一千萬。
link |
30:28.000
這樣維度這麼高,
link |
30:30.000
會不會其實根本就有非常多的路可以走呢?
link |
30:33.000
那既然有非常多的路可以走,
link |
30:35.000
會不會其實local minima根本就很少呢?
link |
30:40.000
而經驗上,
link |
30:42.000
如果你自己做一些實驗的話,
link |
30:44.000
也支持這個假說。
link |
30:47.000
這邊是訓練某一個network的結果,
link |
30:50.000
每一個點代表訓練那個network,
link |
30:53.000
訓練完之後,
link |
30:54.000
把他的hesion拿出來進行計算。
link |
30:58.000
所以這邊的每一個點都代表一個network。
link |
31:02.000
就我們訓練某一個network,
link |
31:03.000
然後把他訓練訓練訓練到,
link |
31:05.000
規律很小,
link |
31:07.000
卡在critical point,
link |
31:08.000
把那組參數拿出來分析,
link |
31:10.000
看看他比較像是saddle point,
link |
31:12.000
還是比較像是local minima。
link |
31:15.000
那這邊的縱軸跟橫軸是什麼意思呢?
link |
31:17.000
縱軸代表training的時候的loss,
link |
31:19.000
就是我們今天卡住了,
link |
31:21.000
那個loss沒辦法再下降了,
link |
31:23.000
那個loss是多少。
link |
31:24.000
那很多時候,
link |
31:25.000
你的loss在還很高的時候,
link |
31:27.000
訓練就不動了,
link |
31:28.000
就卡在critical point。
link |
31:31.000
那很多時候loss可以降得很低,
link |
31:33.000
才卡在critical point。
link |
31:35.000
這是縱軸的部分。
link |
31:37.000
橫軸的部分是什麼呢?
link |
31:38.000
橫軸的部分是minimum ratio。
link |
31:41.000
什麼叫minimum ratio呢?
link |
31:43.000
minimum ratio是eigenvalue的數目,
link |
31:47.000
分之正的eigenvalue的數目。
link |
31:51.000
如果所有的eigenvalue都是正的,
link |
31:55.000
代表我們今天的critical point,
link |
31:59.000
是local minima。
link |
32:01.000
如果有正有負,代表saddle point。
link |
32:04.000
那在實作上你會發現說,
link |
32:06.000
你幾乎找不到完全所有eigenvalue
link |
32:10.000
都是正的critical point。
link |
32:13.000
你看這邊這個例子裡面,
link |
32:14.000
這個minimum ratio代表eigenvalue的數目,
link |
32:18.000
分之正的eigenvalue的數目,
link |
32:20.000
最大也不過0.5到0.6間而已。
link |
32:24.000
代表說,
link |
32:25.000
只有一半的eigenvalue是正的,
link |
32:28.000
還有一半的eigenvalue是負的。
link |
32:31.000
所以今天雖然在這個圖上越往右,
link |
32:34.000
代表我們的critical point越像local minima,
link |
32:37.000
但是他們都沒有真的變成local minima。
link |
32:42.000
就算是在最極端的狀況,
link |
32:44.000
我們仍然有一半的case,
link |
32:47.000
我們的eigenvalue是負的,
link |
32:49.000
這一半的case,eigenvalue是正的。
link |
32:51.000
代表說在所有的維度裡面,
link |
32:53.000
有一半的路,
link |
32:54.000
其實都還可以讓Loss下降。
link |
32:58.000
這一半的路會讓Loss上升,
link |
33:00.000
還有一半的路可以讓Loss下降。
link |
33:02.000
所以從經驗上看起來,
link |
33:04.000
其實local minima並沒有那麼常見。
link |
33:08.000
多數的時候你覺得你圈到一個地方,
link |
33:10.000
你規定真的很小,
link |
33:11.000
所以你的參數不再update了,
link |
33:14.000
往往是因為你卡在了一個Zero point。
link |
33:20.000
好,那接下來我們就是要講說,
link |
33:23.000
假設你圈啊圈啊,
link |
33:25.000
也許你卡在local minima,
link |
33:27.000
雖然我剛才講說local minima
link |
33:28.000
出現的狀況也許沒有那麼多,
link |
33:30.000
或卡在Zero point,
link |
33:31.000
或甚至是在Zero point附近,
link |
33:33.000
也就是非常平坦的地方,
link |
33:35.000
那麼有什麼樣可能的解決方法?
link |
33:39.000
好,那在這邊我們還是停一下,
link |
33:42.000
看看大家有沒有問題要問的。