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

link |
接下來呢,我們要講如果optimization失敗的時候怎麼辦。
link |
所以看一下我們剛才的攻略,現在我們要講的是optimization的部分。
link |
所以等一下我們要講的東西,基本上跟比如說overfitting沒有什麼太大的關聯,
link |
我們只是討論optimization的時候,怎麼把gradient descent做得更好。
link |
好,那為什麼optimization會失敗呢?
link |
那你常常在做optimization的時候,你會發現說隨著你的參數不斷的update,
link |
你的training的loss不會再下降,但是你對這個loss仍然不滿意。
link |
就像我剛才說的,你可以把deep的network跟linear的model或比較shallow的network
link |
比較發現說它沒有做得更好,所以你覺得deep的network沒有發揮它完整的力量,
link |
所以optimization顯然是有問題。
link |
那有時候你會甚至發現說,一開始你的model就train不起來,
link |
一開始你不管怎麼update你的參數,你的loss通通都掉不下去。
link |
那過去常見的一個猜想是,因為我們現在走到了一個地方,
link |
當你的參數對loss的微分為零的時候,gradient descent就沒有辦法再update參數了。
link |
這個時候training就停下來了,你的參數不再update了,loss當然就不會再下降。
link |
那講到gradient為零的時候,大家通常最先想到的,腦海中最先浮現的,
link |
所以常有人說,我做deep learning,你用gradient descent,你會卡在local minima,
link |
所以gradient descent不work,所以deep learning不work。
link |
但是如果有一天你要寫跟deep learning相關的paper的時候,
link |
你千萬不要講什麼卡在local minima這種事情,
link |
因為不是只有local minima的gradient是零,還有其他可能會讓gradient是零,
link |
比如說saddle point,所謂的saddle point其實就是gradient是零,
link |
但是不是local minima,也不是local maxima的地方。
link |
像在這個例子裡面,紅色的這個點,它在左右這個方向是比較高的,
link |
前後這個方向是比較低的,它就像是一個馬鞍的形狀,
link |
所以叫做saddle point,中文就翻成鞍點。
link |
那像saddle point這種地方,它也是gradient為零,但它不是local minima。
link |
那像這種gradient為零的點,統稱為critical point,
link |
所以你可以說你的loss沒有辦法再下降,也許是因為卡在了critical point,
link |
但你不能說是卡在local minima,因為saddle point也是為分為零的點。
link |
好,但是如果我們今天你發現你的gradient真的很靠近零,
link |
卡在了某個critical point,我們有沒有辦法知道到底是local minima還是saddle point呢?
link |
其實是有辦法的,不是完全沒有辦法的。
link |
那為什麼我們會想要知道到底是卡在local minima還是卡在saddle point呢?
link |
因為如果是卡在local minima,那可能就沒有路可以走了,
link |
因為四周都比較高,你現在所在的位置已經是最低的點,
link |
loss最低的點了,往四周走,loss都會比較高,
link |
那saddle point就比較沒有這個問題,如果你今天是卡在saddle point的話,
link |
你今天是走到一個saddle point的話,saddle point旁邊還是有路,
link |
可以走的還是有路,可以讓你的loss更低的。
link |
你只要逃離saddle point,你就有可能讓你的loss更低。
link |
所以鑑別今天我們走到critical point的時候,
link |
到底是local minima還是saddle point是一個值得去探討的問題。
link |
那怎麼知道今天一個critical point到底是屬於local minima還是saddle point呢?
link |
就只是微積分跟線性代數,但如果你沒有聽懂的話,
link |
那怎麼知道一個點到底是local minima還是saddle point呢?
link |
你要知道我們loss function的形狀。
link |
可是我們怎麼知道loss function的形狀呢?
link |
Narrow本身很複雜,用復雜的Narrow算出來的loss function顯然也很複雜,
link |
我們怎麼知道loss function長什麼樣子呢?
link |
雖然我們沒有辦法完整知道整個loss function的樣子,
link |
但是如果給定某一組參數,比如說藍色的這個saddle point,
link |
在saddle point附近的loss function是有辦法被寫出來的,
link |
所以這個LO of saddle完整的樣子寫不出來,
link |
但是它在saddle point附近,你可以用這個式子來表示它。
link |
你可能說,哇,這個是什麼,這個還有好多種顏色啊,
link |
這個東西是Heller-Series Approximation,
link |
這個假設你在微積分的時候其實已經學過了,
link |
所以我就不會細講說這一串是怎麼來的,
link |
第一項是LO of saddle point,就告訴我們說,
link |
當saddle跟saddle point很近的時候,
link |
LO of saddle應該跟LO of saddle point還蠻靠近的。
link |
第二項是saddle-saddle point的transpose乘上G,
link |
G是什麼?G是一個向量,這個G就是我們的gradient,
link |
我們在上週已經講過gradient這個東西了,
link |
我們用綠色的這個G來代表gradient,它是一個向量。
link |
那這個gradient告訴我們什麼呢?
link |
這個gradient會來彌補saddle point跟saddle之間的差距,
link |
我們雖然剛才說saddle跟saddle point他們應該很接近,
link |
那這個差距第一項我們用這個gradient來表示他們之間的差距。
link |
那這個G呢,就是有時候gradient會寫成倒三角形of L,
link |
它是由saddle point這個地方的G,
link |
然後G是一個向量,它的第一個component就是saddle的第一個component,
link |
好,光是看G還是沒有辦法完整的描述LO of saddle,
link |
這邊有一個H,這個H叫做hesion,它是一個矩陣。
link |
這個第三項是saddle-saddle point的全後乘上H再乘上saddle-saddle point。
link |
第三項會再補足再加上gradient以後跟真正的LO of saddle之間的差距。
link |
這個H它的第i個row,第j個column的值是什麼呢?
link |
它第i個row,第j個column的值就是把saddle的第i個component對L做微分。
link |
再把saddle的第j個component對L做微分。
link |
再把saddle的第i個component對L做微分。
link |
好,如果這邊你覺得有點聽不太懂的話也沒有關係,
link |
反正你就記得說這個LO of saddle,這個Loss function,
link |
這個Loss surface在saddle point附近可以寫成這個樣子。
link |
這個式子跟兩個東西有關係,跟gradient有關係,跟Hij有關係。
link |
Gradient就是一次微分,Hij就是裡面有二次微分的項目。
link |
好,那如果我們今天走到了一個critical point,那意味著什麼?
link |
意味著gradient為0,也就是綠色的這一項完全都不見了。
link |
即使一個zero vector,綠色的這一項完全都不見了,只剩下紅色的這一項。
link |
所以當在critical point的時候,這個Loss function,
link |
它可以被近似為L of saddle point加上紅色的這一項。
link |
在saddle point附近的arrow surface到底長什麼樣子。
link |
知道arrow surface長什麼樣子,我們就可以判斷說,
link |
saddle point它是一個local minima,是一個local maxima,還是一個saddle point。
link |
我們可以靠這一項來了解這個arrow surface的地貌大概長什麼樣子,
link |
知道它地貌長什麼樣子,我們就可以知道說現在是在什麼樣的狀態。
link |
好,那我們就來看一下怎麼根據Hij,怎麼根據紅色的這一項來判斷saddle point附近的地貌。
link |
我們現在為了等一下符號方便起見,我們把saddle-saddle point用V這個向量來表示。
link |
saddle是一個向量,saddle point也是一個向量,這兩個向量相減,我們用V這個向量來表示它。
link |
如果今天對任何可能的V,V的control H乘上V都大於0,
link |
也就是說現在saddle不管帶任何值,V可以是任何的V,
link |
就代表說saddle-saddle point可以是任何值,也就是saddle可以是任何值。
link |
不管saddle帶任何值,紅色框框裡面通通都大於0。
link |
那意味著什麼?意味著說紅色框框裡面都大於0,
link |
換言之,意味著說L of saddle大於L of saddle point。
link |
比如說saddle不管帶多少,只要在saddle point附近,saddleL of saddle都大於L of saddle point。
link |
那代表什麼?代表L of saddle point是附近的一個最低點,所以它是local minima。
link |
如果今天反過來說對所有的V而言,V transpose H乘上V都小於0,
link |
也就是saddle不管帶什麼,什麼值,紅色框框裡面都小於0,那意味著什麼?
link |
意味著紅色框框裡面都小於0,意味著說L of saddle point都是大於L of saddle,
link |
L of saddle小於L of saddle point。
link |
代表說L of saddle point是附近最高的一個點,所以它是local maxima。
link |
第三個可能是假設V transpose HV有時候大於0有時候小於0,
link |
帶不同的V進去,也就是帶不同的saddle進去,
link |
紅色這個框框裡面有時候大於0有時候小於0,
link |
意味著說在saddle point附近有時候有些Loss比L of,
link |
有時候L of saddle大於L of saddle point,有時候L of saddle小於L of saddle point。
link |
在L of saddle point附近有些地方高有些地方低,這意味著什麼?
link |
這意味著這是一個saddle point。
link |
這邊你會有的接下一個問題是,我們看紅色這一項,
link |
我們現在可以判斷它是local minima還是saddle point還是local maxima,
link |
但是你這邊是說我們要帶所有的V去看V transpose HV是大於0還是小於0,
link |
我們怎麼有可能把所有的V都拿來試試看呢?
link |
所以有一個更簡便的方法去確認說這一個條件或這一個條件會不會發生,
link |
這個就直接告訴你結論,先進代數理論上是有教過這件事情的。
link |
如果今天對所有的V而言,V transpose HV都大於0,
link |
那這種矩陣叫做positive definite。
link |
Positive definite的矩陣有什麼特性呢?
link |
它所有的Eigenvalue都是真的。
link |
所以如果你今天算出一個Hesitant,你不需要把它跟所有的V都乘看看,
link |
你只要去直接看這個H的Eigenvalue,
link |
如果你發現說所有Eigenvalue都是真的,
link |
那就代表說這一個條件成立,V transpose HV會大於0,
link |
也就代表說是一個local minima。
link |
所以你從Hesitant metric可以看出它是不是local minima,
link |
你只要算出Hesitant metric,算完以後,
link |
看它的Eigenvalue發現都是真的,它就是local minima,就結束了。
link |
那反過來說也是一樣,如果今天在這個狀況,
link |
對所有的V而言,V transpose HV小於0,
link |
那H是negative definite,那就代表所有的Eigenvalue都是負的。
link |
所有的Eigenvalue都是負的,就保證它是local maxima。
link |
那如果Eigenvalue有正有負,那就代表是stable point。
link |
那假設講到這邊,你沒有聽得很懂的話,
link |
你就可以記得結論,你只要算出一個東西,
link |
這個東西的名字叫做hesion,它是一個矩陣。
link |
這個矩陣,如果它所有的Eigenvalue都是正的,
link |
那就代表我們現在在local minima。
link |
如果它有正有負,就代表還是stable point。
link |
所以我們是有辦法判斷說是local minima還是stable point。
link |
那如果剛才講的,你覺得你沒有聽得很懂的話,
link |
我們現在有一個史上最廢的Neuron,它廢到什麼程度呢?
link |
輸入一個X,它只有一個Neuron乘上W1,
link |
而且這個Neuron還沒有activation function,
link |
所以X乘上W1以後,之後就輸出,然後再乘上W2,
link |
然後就再輸出,就得到最終的數值就是Y。
link |
總之這一個function非常的簡單,
link |
這是一個史上最廢的Neuron network。
link |
那我們有一個史上最廢的training dataset,
link |
這個dataset說我們只有一筆data,
link |
這筆data是X是1的時候,它的label是1,
link |
所以輸入1進去,你希望最終的輸出跟1越接近越好。
link |
這個史上最廢的training它的error surface,
link |
因為反正只有兩個參數W1、W2嘛,連bias都沒有。
link |
假設沒有bias,只有W1跟W2兩個參數,
link |
這個Neuron只有兩個參數W1跟W2。
link |
那我們可以窮取所有W1跟W2的數值,
link |
算出所有W1、W2的數值所帶來的loss,
link |
然後就畫出error surface,長這個樣子。
link |
所以這邊是高的,這邊loss是高的,
link |
這邊loss是高的,這邊loss也是高的。
link |
這個圖上你可以看出來說有一些critical point,
link |
哪些地方critical point呢?
link |
這個黑點點的地方,這個0,0啊,圓點的地方是critical point。
link |
然後事實上呢,這一條線這邊也是一排critical point,
link |
也是一排critical point。
link |
如果你更進一步要分析它們是saddle point還是local minimum的話,
link |
那圓心這個地方,圓點這個地方,它是saddle point。
link |
為什麼它是saddle point呢?
link |
往這個方向走loss會變大,往這個方向走loss會變小,
link |
往這個方向走loss會變小,它是一個saddle point。
link |
而這兩群critical point,它們都是local minimum。
link |
所以這個三溝裡面有一排local minimum,
link |
這一排三溝裡面有一排local minimum,
link |
然後在圓點的地方有一個saddle point。
link |
這個是我們把error surface報收以後,
link |
報收所有的參數得到的loss function以後,
link |
得到的loss的值以後,畫出error surface,
link |
那現在假設如果不報收所有可能的loss,
link |
是local minimum還是saddle point的話,
link |
我們可以把loss的function寫出來,
link |
這個loss的function,這個l呢,
link |
是正確答案y hat減掉model的輸出,
link |
那這邊取這個square error,
link |
所以就不會submention over所有的training data,
link |
x代1,y hat代1,我剛才說過,
link |
所以loss function就是1減w1,w2的平方。
link |
那你可以把這個loss function,
link |
反正w1對l的微分寫出來是這個樣子,
link |
什麼時候會到一個critical point呢?
link |
舉例來說,如果w1等於0,w2等於0,
link |
原點是一個critical point。
link |
但是它是一個critical point,
link |
它是local minima,還是settled point呢?
link |
那你就要看Hessian才能夠知道了。
link |
它顯然是一個settled point,
link |
用Hessian看出它是什麼樣的critical point。
link |
第一個row,第一個column的位置,
link |
第一個row,第二個column的位置,
link |
Hessian是0,w2,w2,0,
link |
它是local minima還是saddle point呢?
link |
那就要看這個矩陣的eigenvalue了。
link |
這個矩陣有兩個eigenvalue,
link |
代表saddle point,對不對?
link |
就代表的是saddle point。
link |
它一個critical point,
link |
它是saddle point還是local minima。
link |
你卡的地方是saddle point,
link |
是因為saddle point停下來的,
link |
現在是不是在一個saddle point,
link |
但如果是一個saddle point的話,
link |
就H有一個eigenvalue叫λ,
link |
它的對應的eigenvector叫做U。
link |
因為U是一個eigenvector啊,
link |
會得到λeigenvalue乘上eigenvector,
link |
放的是一個eigenvector的話,
link |
如果eigenvalue小於0的話,
link |
本來參數在θpoint的位置加上U,
link |
所以你今天只要讓θ等於θpoint加U,
link |
也就是eigenvector的方向,
link |
所以雖然在critical point沒有gradient,
link |
如果我們今天是在一個theta point,
link |
你只要找出負的eigenvalue,
link |
再找出它對應的eigenvector,
link |
用這個eigenvector去加θpoint,
link |
原點是一個critical point,
link |
這個hesion有一個負的eigenvalue,
link |
那它對應的eigenvector長什麼樣子呢?
link |
其實是無窮多個對應的eigenvector。
link |
我們取11,11是它對應的一個eigenvector。
link |
你就可以找到一個比θpoint的loss,
link |
hesion的eigenvector告訴我們說,
link |
只要往u這個eigenvector的方向更新,
link |
也就是說你可以逃離你的θpoint,
link |
如果你今天在training的時候,
link |
在實際的implementation裡面,
link |
你幾乎不會真的把hesion算出來。
link |
要計算這個矩陣的computation,
link |
更遑論你還要把它的eigenvalue
link |
他們的運算量都比要算這個h還要小很多。
link |
θpoint跟eigenvector,
link |
跟hesion的eigenvector拿出來講,
link |
那到底θpoint跟local minima
link |
我們說θpoint其實並沒有很可怕,
link |
那如果我們今天常遇到的是θpoint,
link |
比較少遇到local minima,
link |
那到底θpoint跟local minima
link |
在鄂圖曼土耳其人進攻君士坦丁堡的時候,
link |
那時候東羅馬帝國的國王是君士坦丁一世,
link |
所以大家就要迪奧倫馬先展示一下他的力量,
link |
為什麼大家看到這個聖杯要大吃一驚呢?
link |
因為這個聖杯本來是放在聖索菲亞大教堂的地下室,
link |
那君士坦丁十一世為了要驗證迪奧倫馬是不是真的有這個能力,
link |
就知道迪奧倫馬真的有萬軍從中去上將首級的能力。
link |
那至於迪奧倫馬有沒有成功刺殺蘇丹呢?
link |
Error surface會不會也一樣呢?
link |
一維的一個參數的Error surface,
link |
你會覺得好像到處都是local minima。
link |
它就只是一個zero point呢?
link |
告訴你說deep learning的訓練,
link |
那它顯然有非常多的local minima,
link |
我在這邊顯然有一個local minima。
link |
但是會不會這個local minima,
link |
看起來是一個local minima,
link |
它看起來就是zero point呢?
link |
而今天我們在訓練一個network的時候,
link |
所以我們的Error surface,
link |
就代表我們的Error surface的維度有多少。
link |
就代表Error surface的維度是一千萬。
link |
會不會其實根本就有非常多的路可以走呢?
link |
會不會其實local minima根本就很少呢?
link |
這邊是訓練某一個network的結果,
link |
每一個點代表訓練那個network,
link |
所以這邊的每一個點都代表一個network。
link |
看看他比較像是saddle point,
link |
還是比較像是local minima。
link |
縱軸代表training的時候的loss,
link |
就卡在critical point。
link |
才卡在critical point。
link |
橫軸的部分是minimum ratio。
link |
什麼叫minimum ratio呢?
link |
minimum ratio是eigenvalue的數目,
link |
分之正的eigenvalue的數目。
link |
如果所有的eigenvalue都是正的,
link |
代表我們今天的critical point,
link |
如果有正有負,代表saddle point。
link |
你幾乎找不到完全所有eigenvalue
link |
都是正的critical point。
link |
這個minimum ratio代表eigenvalue的數目,
link |
分之正的eigenvalue的數目,
link |
只有一半的eigenvalue是正的,
link |
還有一半的eigenvalue是負的。
link |
代表我們的critical point越像local minima,
link |
但是他們都沒有真的變成local minima。
link |
這一半的case,eigenvalue是正的。
link |
其實local minima並沒有那麼常見。
link |
往往是因為你卡在了一個Zero point。
link |
也許你卡在local minima,
link |
雖然我剛才講說local minima
link |
或甚至是在Zero point附近,