(一)神经网络训练不起来怎么办:局部最小值(local minia)与鞍点(saddle point)
Optimization的時候,怎么把gradient descent做的更好?
1、局部最小值(Local minima)與鞍點(saddle point)
所謂的saddle point其實就是gradient是零,但是不是local minima,也不是local maxima;比如下面的saddle point,他在左右方向上是比較高的,前后的方向上是比較高的,他是一個馬鞍的形狀,所以叫做saddle point;
?像saddle point這種地方,他也是gradient為零,但他不是local minima,像這種gradient為0的點統稱為critical point,所以你可以說你的loss沒有辦法再下降,也許是因為卡在了critical point,但你不能說是卡在了local minima,因為saddle point也是微分為零的點;
所以當gradient為0的時候,我們就要搞清楚是卡在了local minima上還是saddle point上,如果是卡在了local minima上的話,因為四周都比較高,你現在所在的位置已經是loss最低點,往四周走loss都比較高,你會不知道怎么走到其他的地方去;但是saddle point就比較沒有這個問題,如果你是卡在saddle point上的話,saddle point旁邊還是有路可以讓你的loss更低,只要逃離saddle point,就有可能讓你的loss更低,所以當你走到critical point的時候,我們到底是在local minima上還是saddle point上,是一個值得去探討的問題;
?判斷該點到底是local minima還是saddle point,需要用到數學的微積分和線性代數:
?
?
When gradient is small
Critical Point
Training Fails because
? 現在我們要講的是Optimization的部分,所以我們要講的東西基本上跟Overfitting沒有什麼太大的關聯,我們只討論Optimization的時候,怎麼把gradient descent做得更好,那為什麼Optimization會失敗呢?
? 你常常在做Optimization的時候,你會發現,隨著你的參數不斷的update,你的training的loss不會再下降,但是你對這個loss仍然不滿意,就像我剛才說的,你可以把deep的network,跟linear的model,或比較shallow network 比較,發現說它沒有做得更好,所以你覺得deepnetwork,沒有發揮它完整的力量,所以Optimization顯然是有問題的
? 但有時候你會甚至發現,一開始你的model就train不起來,一開始你不管怎麼update你的參數,你的loss通通都掉不下去,那這個時候到底發生了什麼事情呢?
? 過去常見的一個猜想,是因為我們現在走到了一個地方,這個地方參數對loss的微分為零,當你的參數對loss微分為零的時候,gradient descent就沒有辦法再update參數了,這個時候training就停下來了,loss當然就不會再下降了。
? 講到gradient為零的時候,大家通常腦海中最先浮現的,可能就是local minima,所以常有人說做deep learning,用gradient descent會卡在local minima,然后所以gradient descent不work,所以deep learning不work。
? 但是如果有一天你要寫,跟deep learning相關paper的時候,你千萬不要講卡在local minima這種事情,別人會覺得你非常沒有水準,為什麼
? 因為不是只有local minima的gradient是零,還有其他可能會讓gradient是零,比如說?saddle point,所謂的saddle point,其實就是gradient是零,但是不是local minima,也不是local maxima的地方,像在右邊這個例子裡面 紅色的這個點,它在左右這個方向是比較高的,前后這個方向是比較低的,它就像是一個馬鞍的形狀,所以叫做saddle point,那中文就翻成鞍點
? 像saddle point這種地方,它也是gradient為零,但它不是local minima,那像這種gradient為零的點,統稱為critical point,所以你可以說你的loss,沒有辦法再下降,也許是因為卡在了critical point,但你不能說是卡在local minima,因為saddle point也是微分為零的點
? 但是今天如果你發現你的gradient,真的很靠近零,卡在了某個critical point,我們有沒有辦法知道,到底是local minima,還是saddle point?其實是有辦法的
??為什麼我們想要知道到底是卡在local minima,還是卡在saddle point呢
- 因為如果是卡在local minima,那可能就沒有路可以走了,因為四周都比較高,你現在所在的位置已經是最低的點,loss最低的點了,往四周走 loss都會比較高,你會不知道怎麼走到其他的地方去
- 但saddle point就比較沒有這個問題,如果你今天是**卡在saddle point的話,saddle point旁邊還是有路可以走的,**還是有路可以讓你的loss更低的,你只要逃離saddle point,你就有可能讓你的loss更低
? 所以鑒別今天我們走到,critical point的時候,到底是local minima,還是saddle point,是一個值得去探討的問題,那怎麼知道今天一個critical point,到底是屬於local minima,還是saddle point呢?
Warning of Math
? 這邊需要用到一點數學,以下這段其實沒有很難的數學,就只是微積分跟線性代數,但如果你沒有聽懂的話,以下這段skip掉是沒有關係的
? 那怎麼知道說一個點,到底是local minima,還是saddle point呢?
? 你要知道我們loss function的形狀,可是我們怎麼知道,loss function的形狀呢,network本身很復雜,用復雜network算出來的loss function,顯然也很復雜,我們怎麼知道loss function,長什麼樣子,雖然我們沒有辦法完整知道,整個loss function的樣子
Tayler Series Approximation
但是如果給定某一組參數,比如說藍色的這個θ ′ ,在θ ′ 附近的loss function,是有辦法被寫出來的,它寫出來就像是這個樣子
? 所以這個L ( θ ) 完整的樣子寫不出來,但是它在θ ′ 附近,你可以用這個式子來表示它,這個式子是,Tayler Series Appoximation泰勒級數展開,這個假設你在微積分的時候,已經學過了,所以我就不會細講這一串是怎麼來的,但我們就只講一下它的概念,這一串裡面包含什麼東西呢?
-
第一項是L ( θ ′ ) ,就告訴我們說,當θ跟θ ′ 很近的時候,L ( θ ) 應該跟L ( θ ′ ) 還蠻靠近的
-
第二項是
?
-
g是一個向量,這個g就是我們的gradient,我們用綠色的這個g來代表gradient,這個gradient會來彌補,θ ′ 跟θ 之間的差距,我們雖然剛才說θ ′ 跟θ ,它們應該很接近,但是中間還是有一些差距的,那這個差距,第一項我們用這個gradient,來表示他們之間的差距,有時候gradient會寫成? L ( θ ′ ) ,這個地方的g 是一個向量,它的第i個component,就是θ的第i個component對L的微分,光是看g還是沒有辦法,完整的描述L(θ),你還要看第三項
-
第三項跟Hessian有關,這邊有一個$H $
https://www.bilibili.com/video/BV1Wv411h7kN?p=11
筆記:
https://blog.csdn.net/pigpigpig64/article/details/119061752
https://zhuanlan.zhihu.com/p/437609102
泰勒展開式:https://www.zhihu.com/question/25627482/answer/313088784
總結
以上是生活随笔為你收集整理的(一)神经网络训练不起来怎么办:局部最小值(local minia)与鞍点(saddle point)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Gradient Descent和Bac
- 下一篇: 台大李宏毅机器学习2021