李弘毅老師機器學習2021心得-4,強化Optimization的方式
Optimization
為什麼我們優化會遇到問題呢,不是就gradient descent慢慢地滑下去就好了? 那是因為我們在往下滑的過程會卡住,卡在critival point(gradient 為0,所以不會在下降了),也就是下面兩個點。兩者的差距為saddle point還有方向可以往下滑,但是local minima就沒方向可以再往下滑了。
所以我們要知道我們到底卡在哪裡呢?
這就要用到數學相關的東西,Tayler Series Approximation。
我在微積分學過這個東西,但從來沒看過這樣的形式,但其實這只是用線性代數來表示,gradient就類似微積分的一次微分,Hession就類似微積分的二次微分,所以這邊就只是到2次微分的泰勒展開式。
有關於泰勒展開式可以看這篇文章: 1 泰勒展開:多項式逼近函數
有關Gradient and Hession可以看這篇文章: 矩陣導數。
至於泰勒展開式與Hession有關的文章有這篇: 答張盛東──關於 Hessian 矩陣與多變量函數的泰勒展開式
回到我們主題來,所以我們可以透過這個function來看critical point附近是大還是小。例如,我們透過這個近似function知道critical point附近都是大於critical point的值,我們就知道他是local minima。
因為在critical point,所以gradient = 0,所以影響我們的只有Hession。我們透過設定變數v,把紅色這項簡化為這樣。
紅色框框簡化
所以我們現在是要把所有可能的v都帶入嗎,算算看critical point附近所有點的值嗎? 一定不可能,這時候線性代數拯救了我們,我們可以透過確認Hession 的 eigen value 來得知是哪個點,如上圖所示。
有關eighen value的教學同樣可以看老師的線性代數: Linear Algebra Lecture 25: Eigenvalues and Eigenvector
Saddle point繼續更新
當我們知道此點是saddle point時,我們知道這個還有救,但我們以前都是更具gradient point的方向來繼續更新,現在gradient point等於0,我們要透過哪一個來幫我們繼續在saddle point update參數呢? 透過Hession可以幫助我們在Saddle point上面繼續更新。
我們可以先把原本的v假設成eigen vector,把它乘開來,就變成右上了的形式,又此時剛來eighen value等於負,那個紅色那項就會變成負的。簡單說,就是先找saddle point的負值eigen value,再找他的eigen vector,沿者此vector update,就可以了。
Saddle point vs Local Minima
最常問的是,請問哪一個比較常出現呢? 一個點或許在低維度看起來是local minima,但在高維度其實是saddle point,而我們在訓練的時候,參數都是幾千萬以上,所以維度幾千萬以上,這樣是不是有超級多路走呢?
2維 and 三維
經驗上是對的,基本上都是saddle point。