(一)神经网络训练不起来怎么办:局部最小值(local minia)与鞍点(saddle point)
Optimization的時(shí)候,怎么把gradient descent做的更好?
1、局部最小值(Local minima)與鞍點(diǎn)(saddle point)
所謂的saddle point其實(shí)就是gradient是零,但是不是local minima,也不是local maxima;比如下面的saddle point,他在左右方向上是比較高的,前后的方向上是比較高的,他是一個(gè)馬鞍的形狀,所以叫做saddle point;
?像saddle point這種地方,他也是gradient為零,但他不是local minima,像這種gradient為0的點(diǎn)統(tǒng)稱為critical point,所以你可以說(shuō)你的loss沒有辦法再下降,也許是因?yàn)榭ㄔ诹薱ritical point,但你不能說(shuō)是卡在了local minima,因?yàn)閟addle point也是微分為零的點(diǎn);
所以當(dāng)gradient為0的時(shí)候,我們就要搞清楚是卡在了local minima上還是saddle point上,如果是卡在了local minima上的話,因?yàn)樗闹芏急容^高,你現(xiàn)在所在的位置已經(jīng)是loss最低點(diǎn),往四周走loss都比較高,你會(huì)不知道怎么走到其他的地方去;但是saddle point就比較沒有這個(gè)問題,如果你是卡在saddle point上的話,saddle point旁邊還是有路可以讓你的loss更低,只要逃離saddle point,就有可能讓你的loss更低,所以當(dāng)你走到critical point的時(shí)候,我們到底是在local minima上還是saddle point上,是一個(gè)值得去探討的問題;
?判斷該點(diǎn)到底是local minima還是saddle point,需要用到數(shù)學(xué)的微積分和線性代數(shù):
?
?
When gradient is small
Critical Point
Training Fails because
? 現(xiàn)在我們要講的是Optimization的部分,所以我們要講的東西基本上跟Overfitting沒有什麼太大的關(guān)聯(lián),我們只討論Optimization的時(shí)候,怎麼把gradient descent做得更好,那為什麼Optimization會(huì)失敗呢?
? 你常常在做Optimization的時(shí)候,你會(huì)發(fā)現(xiàn),隨著你的參數(shù)不斷的update,你的training的loss不會(huì)再下降,但是你對(duì)這個(gè)loss仍然不滿意,就像我剛才說(shuō)的,你可以把deep的network,跟linear的model,或比較shallow network 比較,發(fā)現(xiàn)說(shuō)它沒有做得更好,所以你覺得deepnetwork,沒有發(fā)揮它完整的力量,所以O(shè)ptimization顯然是有問題的
? 但有時(shí)候你會(huì)甚至發(fā)現(xiàn),一開始你的model就train不起來(lái),一開始你不管怎麼update你的參數(shù),你的loss通通都掉不下去,那這個(gè)時(shí)候到底發(fā)生了什麼事情呢?
? 過(guò)去常見的一個(gè)猜想,是因?yàn)槲覀儸F(xiàn)在走到了一個(gè)地方,這個(gè)地方參數(shù)對(duì)loss的微分為零,當(dāng)你的參數(shù)對(duì)loss微分為零的時(shí)候,gradient descent就沒有辦法再update參數(shù)了,這個(gè)時(shí)候training就停下來(lái)了,loss當(dāng)然就不會(huì)再下降了。
? 講到gradient為零的時(shí)候,大家通常腦海中最先浮現(xiàn)的,可能就是local minima,所以常有人說(shuō)做deep learning,用gradient descent會(huì)卡在local minima,然后所以gradient descent不work,所以deep learning不work。
? 但是如果有一天你要寫,跟deep learning相關(guān)paper的時(shí)候,你千萬(wàn)不要講卡在local minima這種事情,別人會(huì)覺得你非常沒有水準(zhǔn),為什麼
? 因?yàn)?strong>不是只有l(wèi)ocal minima的gradient是零,還有其他可能會(huì)讓gradient是零,比如說(shuō)?saddle point,所謂的saddle point,其實(shí)就是gradient是零,但是不是local minima,也不是local maxima的地方,像在右邊這個(gè)例子裡面 紅色的這個(gè)點(diǎn),它在左右這個(gè)方向是比較高的,前后這個(gè)方向是比較低的,它就像是一個(gè)馬鞍的形狀,所以叫做saddle point,那中文就翻成鞍點(diǎn)
? 像saddle point這種地方,它也是gradient為零,但它不是local minima,那像這種gradient為零的點(diǎn),統(tǒng)稱為critical point,所以你可以說(shuō)你的loss,沒有辦法再下降,也許是因?yàn)榭ㄔ诹薱ritical point,但你不能說(shuō)是卡在local minima,因?yàn)閟addle point也是微分為零的點(diǎn)
? 但是今天如果你發(fā)現(xiàn)你的gradient,真的很靠近零,卡在了某個(gè)critical point,我們有沒有辦法知道,到底是local minima,還是saddle point?其實(shí)是有辦法的
??為什麼我們想要知道到底是卡在local minima,還是卡在saddle point呢
- 因?yàn)槿绻?strong>卡在local minima,那可能就沒有路可以走了,因?yàn)樗闹芏急容^高,你現(xiàn)在所在的位置已經(jīng)是最低的點(diǎn),loss最低的點(diǎn)了,往四周走 loss都會(huì)比較高,你會(huì)不知道怎麼走到其他的地方去
- 但saddle point就比較沒有這個(gè)問題,如果你今天是**卡在saddle point的話,saddle point旁邊還是有路可以走的,**還是有路可以讓你的loss更低的,你只要逃離saddle point,你就有可能讓你的loss更低
? 所以鑒別今天我們走到,critical point的時(shí)候,到底是local minima,還是saddle point,是一個(gè)值得去探討的問題,那怎麼知道今天一個(gè)critical point,到底是屬於local minima,還是saddle point呢?
Warning of Math
? 這邊需要用到一點(diǎn)數(shù)學(xué),以下這段其實(shí)沒有很難的數(shù)學(xué),就只是微積分跟線性代數(shù),但如果你沒有聽懂的話,以下這段skip掉是沒有關(guān)係的
? 那怎麼知道說(shuō)一個(gè)點(diǎn),到底是local minima,還是saddle point呢?
? 你要知道我們loss function的形狀,可是我們?cè)觞N知道,loss function的形狀呢,network本身很復(fù)雜,用復(fù)雜network算出來(lái)的loss function,顯然也很復(fù)雜,我們?cè)觞N知道loss function,長(zhǎng)什麼樣子,雖然我們沒有辦法完整知道,整個(gè)loss function的樣子
Tayler Series Approximation
但是如果給定某一組參數(shù),比如說(shuō)藍(lán)色的這個(gè)θ ′ ,在θ ′ 附近的loss function,是有辦法被寫出來(lái)的,它寫出來(lái)就像是這個(gè)樣子
? 所以這個(gè)L ( θ ) 完整的樣子寫不出來(lái),但是它在θ ′ 附近,你可以用這個(gè)式子來(lái)表示它,這個(gè)式子是,Tayler Series Appoximation泰勒級(jí)數(shù)展開,這個(gè)假設(shè)你在微積分的時(shí)候,已經(jīng)學(xué)過(guò)了,所以我就不會(huì)細(xì)講這一串是怎麼來(lái)的,但我們就只講一下它的概念,這一串裡面包含什麼東西呢?
-
第一項(xiàng)是L ( θ ′ ) ,就告訴我們說(shuō),當(dāng)θ跟θ ′ 很近的時(shí)候,L ( θ ) 應(yīng)該跟L ( θ ′ ) 還蠻靠近的
-
第二項(xiàng)是
?
-
g是一個(gè)向量,這個(gè)g就是我們的gradient,我們用綠色的這個(gè)g來(lái)代表gradient,這個(gè)gradient會(huì)來(lái)彌補(bǔ),θ ′ 跟θ 之間的差距,我們雖然剛才說(shuō)θ ′ 跟θ ,它們應(yīng)該很接近,但是中間還是有一些差距的,那這個(gè)差距,第一項(xiàng)我們用這個(gè)gradient,來(lái)表示他們之間的差距,有時(shí)候gradient會(huì)寫成? L ( θ ′ ) ,這個(gè)地方的g 是一個(gè)向量,它的第i個(gè)component,就是θ的第i個(gè)component對(duì)L的微分,光是看g還是沒有辦法,完整的描述L(θ),你還要看第三項(xiàng)
-
第三項(xiàng)跟Hessian有關(guān),這邊有一個(gè)$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
總結(jié)
以上是生活随笔為你收集整理的(一)神经网络训练不起来怎么办:局部最小值(local minia)与鞍点(saddle point)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Gradient Descent和Bac
- 下一篇: 台大李宏毅机器学习2021