【整理】局部最優(yōu) 與 batch size

真的結束于最優(yōu)點嗎?

我們知道敷燎,在局部最優(yōu)點附近,各個維度的導數(shù)都接近0箩言,而我們訓練模型最常用的梯度下降法又是基于導數(shù)與步長的乘積去更新模型參數(shù)的硬贯,因此一旦陷入了局部最優(yōu)點,就像掉進了一口井陨收,你是無法直著跳出去的饭豹,你只有連續(xù)不間斷的依托四周的井壁努力向上爬才有可能爬出去。更何況梯度下降法的每一步對梯度正確的估計都在試圖讓你墜入井底务漩,因此勢必要對梯度“估計錯很多次”才可能僥幸逃出去拄衰。那么從數(shù)學上看,什么才是局部最優(yōu)點呢饵骨?

這個問題看似很白癡翘悉,很多人會說“局部最優(yōu)點不就是在loss曲面上某個一階導數(shù)為0的點嘛”。這就不準確啦居触,比如下面這個馬鞍形狀的中間的那個點:


(圖片來自《deep learning》)

顯然這個點也是(一階)導數(shù)為0妖混,但是肯定不是最優(yōu)點包吝。事實上,這個點就是我們常說的鞍點源葫。

顯然诗越,只用一階導數(shù)是難以區(qū)分最優(yōu)點和鞍點的。

我們想一下息堂,最優(yōu)點和鞍點的區(qū)別不就在于其在各個維度是否都是最低點嘛~只要某個一階導數(shù)為0的點在某個維度上是最高點而不是最低點嚷狞,那它就是鞍點。而區(qū)分最高點和最低點當然就是用二階導數(shù)(斜率從負變正的過程當然就是“下凸”荣堰,即斜率的導數(shù)大于0床未,即二階導數(shù)大于0。反之則為“上凹”振坚,二階導數(shù)小于0)薇搁。

也就是說,若某個一階導數(shù)為0的點在至少一個方向上的二階導數(shù)小于0渡八,那它就是鞍點啃洋。在鞍點處,橫著看的話屎鳍,鞍點就是個極小值點宏娄,但是豎著看的話,鞍點就是極大值點(線性代數(shù)和最優(yōu)化算法過關的同學應該能反應過來逮壁,鞍點處的Hessian矩陣的特征值有正有負孵坚。


二階泰勒展開式

當Hessian矩陣正定時(即對任意的u≠0,有u??2f(x)u > 0恒成立)窥淆,對于任何方向向量u卖宠,通過二階泰勒展開式,可知x必定是一個局部最小值點忧饭。同樣扛伍,當Hessian矩陣負定時,此點是一個局部最大值點眷昆;當Hessian矩陣同時具有正負特征值時蜒秤,此點便是鞍點

那么二階導數(shù)大于0和小于0的概率各是多少呢亚斋?由于我們并沒有先驗知識作媚,因此按照最大熵原理,我們認為二階導數(shù)大于和小于0的概率均為0.5帅刊!

那么對于一個有n個參數(shù)的機器學習/深度學習模型纸泡,“l(fā)oss曲面”即位于n+1維空間(loss值為縱軸,n個參數(shù)為n個橫軸)赖瞒。在這個空間里女揭,如果我們通過梯度下降法一路下滑終于滑到了一個各方向?qū)?shù)均為0的點蚤假,那么它為局部最優(yōu)點的概率即0.5^n,為鞍點的概率為1-0.5^n吧兔,顯然磷仰,當模型參數(shù)稍微一多,即n稍微一大境蔼,就會發(fā)現(xiàn)這個點為鞍點的概率會遠大于局部最優(yōu)點灶平!

所以實際中,當我們的深度學習模型收斂時箍土,幾乎沒有必要認為它收斂到了一個局部最優(yōu)點逢享,這完全等同于杞人憂天。也就是說吴藻,如果最后模型確實在梯度下降法的指引下收斂到了一個導數(shù)為0的點瞒爬,那這個點幾乎可以肯定就是一個鞍點。

顯然沟堡,站在馬鞍中央的時候侧但,雖然很難翻過兩邊的山坡,但是往前或者往后隨便走一步就能摔下馬鞍弦叶!我們默認使用的mini-batch梯度下降法本身就是帶有噪聲的梯度估計俊犯,哪怕我們位于梯度為0的點,也經(jīng)常在某個mini-batch下的估計把它估計偏了伤哺,導致往前或者往后挪了一步摔下馬鞍,也就是mini-batch的梯度下降法使得模型很容易逃離特征空間中的鞍點者祖。

原因如下:


樣本均值的方差

首先立莉,我們假設每個樣本相對于大自然真實分布的標準差為σ,那么根據(jù)概率統(tǒng)計的知識七问,很容易推出n個樣本的標準差為σ/sqrt(n)(如上推導)蜓耻,從這里可以看出,我們使用樣本來估計梯度的時候械巡,1個樣本帶來σ的標準差刹淌,但是使用n個樣本區(qū)估計梯度并不能讓標準差線性降低(也就是并不能讓誤差降低為原來的1/n,即無法達到σ/n)讥耗,而n個樣本的計算量卻是線性的(每個樣本都要平等的跑一遍前向算法)有勾。

因此想一想,當樣本量少的時候會帶來很大的方差古程,而這個大方差恰好會導致我們在梯度下降到很差的局部最優(yōu)點(只是微微凸下去的最優(yōu)點)和鞍點的時候不穩(wěn)定蔼卡,一不小心就因為一個大噪聲的到來導致炸出了局部最優(yōu)點,或者炸下了馬(此處請保持純潔的心態(tài)U跄ァ)雇逞,從而有機會去尋找更優(yōu)的最優(yōu)點荤懂。但是與之相反的,當樣本量很多時塘砸,方差很小(咦节仿?最開始的時候好像在說標準差來著,反正方差與標準差就差個根號掉蔬,沒影響的哈~)廊宪,對梯度的估計要準確和穩(wěn)定的多,因此反而在差勁的局部最優(yōu)點和鞍點時反而容易自信的呆著不走了眉踱,從而導致神經(jīng)網(wǎng)絡收斂到很差的點上挤忙,跟出了bug一樣的差勁。

那么問題來了谈喳,既然局部最優(yōu)點很難踩到册烈,鞍點也很容易逃離出去,那么為什么我們的模型看起來是收斂了呢婿禽?

初學者可能會說 “誒誒赏僧,會不會是學習率太大了,導致在“鞍點”附近震蕩扭倾?” 首先淀零,鞍點不像最優(yōu)點那樣容易震蕩,而且哪怕你不斷的減小學習率繼續(xù)讓模型收斂膛壹,你這時計算output層或者后幾層的梯度向量的長度時會發(fā)現(xiàn)它依然離0很遙遠驾中!

所以更令人信服的是,在高維空間里(深度學習問題上)真正可怕的不是局部最優(yōu)也不是鞍點問題模聋,而是一些特殊地形肩民。比如大面積的平坦區(qū)域:


在平坦區(qū)域,雖然導數(shù)不為0但是卻不大链方。雖然是在不斷下降但是路程卻非常長持痰。對于優(yōu)化算法來說,它需要走很多很多步才有可能走過這一片平坦區(qū)域祟蚀。甚至在這段地形的二階導數(shù)過于特殊的情況下工窍,一階優(yōu)化算法走無窮多步也走不出去(設想一下,如果終點在一米外前酿,但是你第一次走0.5米患雏,后續(xù)每一步都是前一步的一半長度,那么你永遠也走不到面前的一米終點處)薪者。

所以相比于栽到最優(yōu)點和鞍點上纵苛,優(yōu)化算法更有可能載到這種類似平坦區(qū)的地形中(如果這個平坦區(qū)又是“高原地帶”,即loss值很高的地帶,那么恭喜你悲劇了)攻人。更糟糕的是取试,由于高維地形難以可視化,還有很多更復雜的未知地形會導致假收斂怀吻,一旦陷入到這些危險地形中瞬浓,幾乎是無解的。

所以說蓬坡,在深度學習中猿棉,與其擔憂模型陷入局部最優(yōu)點怎么跳出來,更不如去好好考慮:

1屑咳、如何去設計一個盡量沒有“平坦區(qū)”等危險地形的loss空間萨赁,即著手于loss函數(shù)的設計以及深度學習模型的設計

2兆龙、盡量讓模型的初始化點遠離空間中的危險地帶杖爽,讓最優(yōu)化游戲開始于簡單模式,即著手于模型參數(shù)的初始化策略紫皇;

3慰安、讓最優(yōu)化過程更智能一點,該加速沖時加速沖聪铺,該大膽跳躍時就大膽跳化焕,該慢慢踱步時慢慢走,對危險地形有一定的判斷力铃剔,如梯度截斷策略撒桨;

4、開外掛键兜,本來下一步要走向死亡的元莫,結果被外掛給拽回了安全區(qū),如batch normalization策略等蝶押。

針對 batch size,不能設置的太大也不能太小火欧,實際工程中最常用 mini-batch棋电,一般size設置為幾十或者幾百;另外苇侵,聽說GPU對2的冪次的batch可以發(fā)揮更佳的性能赶盔,但是:

這之前我們的討論是基于梯度下降的,而且默認是一階的(即沒有利用二階導數(shù)信息榆浓,僅僅使用一階導數(shù)去優(yōu)化)于未。因此對于SGD(隨機梯度下降)及其改良的一階優(yōu)化算法如AdagradAdam等是沒問題的,但是對于強大的二階優(yōu)化算法如共軛梯度法烘浦、L-BFGS來說抖坪,如果估計不好一階導數(shù),那么對二階導數(shù)的估計會有更大的誤差闷叉,這對于這些靠二階導數(shù)吃飯的算法來說是致命的擦俐。

因此,對于二階優(yōu)化算法握侧,減小 batch size 帶來的收斂速度提升遠 < 引入大量誤差導致的性能下降蚯瞧,因此在使用二階優(yōu)化算法時,往往要采用大batch哦品擎。此時往往batch設置成幾千甚至一兩萬才能發(fā)揮出最佳性能(比如 batch size?設置的 2048 配合 L-BFGS 取得了比 SGD 好得多的效果埋合,無論是收斂速度還是最終的準確率)。

算法優(yōu)化之道:避開鞍點-CSDN.NET

訓練神經(jīng)網(wǎng)絡時如何確定batch的大小

你的模型真的陷入局部最優(yōu)點了嗎

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末萄传,一起剝皮案震驚了整個濱河市甚颂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌盲再,老刑警劉巖西设,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異答朋,居然都是意外死亡贷揽,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門梦碗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來禽绪,“玉大人,你說我怎么就攤上這事洪规∮∑ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵斩例,是天一觀的道長雄人。 經(jīng)常有香客問我,道長念赶,這世上最難降的妖魔是什么础钠? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮叉谜,結果婚禮上旗吁,老公的妹妹穿的比我還像新娘。我一直安慰自己停局,他們只是感情好很钓,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布香府。 她就那樣靜靜地躺著,像睡著了一般码倦。 火紅的嫁衣襯著肌膚如雪企孩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天叹洲,我揣著相機與錄音柠硕,去河邊找鬼。 笑死运提,一個胖子當著我的面吹牛蝗柔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播民泵,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼癣丧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了栈妆?” 一聲冷哼從身側響起胁编,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鳞尔,沒想到半個月后嬉橙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡寥假,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年市框,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片糕韧。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡枫振,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出萤彩,到底是詐尸還是另有隱情粪滤,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布雀扶,位于F島的核電站杖小,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏愚墓。R本人自食惡果不足惜窍侧,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望转绷。 院中可真熱鬧,春花似錦硼啤、人聲如沸议经。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽煞肾。三九已至咧织,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間籍救,已是汗流浹背习绢。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蝙昙,地道東北人闪萄。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像奇颠,于是被迫代替她去往敵國和親败去。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容