梯度消失,梯度爆炸_解決辦法
梯度消失,梯度爆炸_解決辦法
本文主要參考:詳解機器學習中的梯度消失、爆炸原因及其解決方法
在上一篇博文中分析了,梯度消失與梯度爆炸的原因,其問題主要出現在誤差反向傳播上,如下:
對於
層神經網路,根據反向傳播的公式,到第
層的權重
更新規則為:
也就是說問題出現在啟用函式的導數 還有權重 上,下面從就從這兩方面入手,來解決梯度消失,梯度爆炸問題.
啟用函式方面
如果啟用函式選擇不合適,比如使用sigmoid,梯度消失就會很明顯了,原因看下圖,左圖是sigmoid的損失函式圖,右邊是其導數的影象,如果使用sigmoid作為損失函式,其梯度是不可能超過0.25的,這樣經過連乘之後,很容易發生梯度消失. sigmoid函式數學表示式為:
relu啟用函式
如果啟用函式的導數為1,那麼就不存在梯度消失爆炸的問題了,每層的網路都可以得到相同的更新速度,relu就這樣應運而生。先看一下relu的數學表示式:
其函式影象為:
優點:
- 解決了梯度消失、爆炸的問題
- 計算方便,計算速度快
- 加速了網路的訓練
缺點
- 由於負數部分恆為0,會導致一些神經元無法啟用(可通過設定小學習率部分解決)
- 輸出不是以0為中心的
leakrelu啟用函式
leakrelu就是為了解決relu的0區間帶來的影響,其數學表達為: 其中k是leak係數,一般選擇0.01或者0.02,或者通過學習而來.
elu啟用函式
elu啟用函式也是為了解決relu的0區間帶來的影響,但是elu相對於leakrelu來說,計算要更耗時間一些,其函式及其導數數學形式為:
權重 方面
批規範化Batchnorm
Batchnorm是深度學習發展以來提出的最重要的成果之一了,目前已經被廣泛的應用到了各大網路中,具有加速網路收斂速度,提升訓練穩定性的效果。batchnorm全名是batch normalization,簡稱BN,即批規範化,通過規範化操作將輸出訊號x規範化保證網路的穩定性。
反向傳播式子中有
的存在,所以
的大小影響了梯度的消失和爆炸,batchnorm就是通過對每一層的輸出規範為均值和方差一致的方法,消除了
帶來的放大縮小的影響,進而解決梯度消失和爆炸的問題,或者可以理解為BN將輸出從飽和區拉倒了非飽和區。有關batch norm詳細的內容可以參考部落格
權重正則化(weithts regularization)
正則化是通過對網路權重做正則限制過擬合,如果發生梯度爆炸,權值的範數就會變的非常大,通過正則化項,可以部分限制梯度爆炸的發生.關於正則化的解釋見機器學習之正則化(Regularization),機器學習中 L1 和 L2 正則化的直觀解釋.
其它方面
梯度剪下
梯度剪下這個方案主要是針對梯度爆炸提出的,其思想是設定一個梯度剪下閾值,然後更新梯度的時候,如果梯度超過這個閾值,那麼就將其強制限制在這個範圍之內。這可以防止梯度爆炸。
殘差結構
事實上,就是殘差網路的出現導致了image net比賽的終結,自從殘差提出後,幾乎所有的深度網路都離不開殘差的身影,相比較之前的幾層,幾十層的深度網路,在殘差網路面前都不值一提,殘差可以很輕鬆的構建幾百層,一千多層的網路而不用擔心梯度消失過快的問題,原因就在於殘差的捷徑(shortcut)部分,其中殘差單元如下圖所示:
相比較於以前網路的直來直去結構,殘差中有很多這樣的跨層連線結構,這樣的結構在反向傳播中具有很大的好處,見下式:
式子的第一個因子 表示的損失函式到達 的梯度,小括號中的1表明短路機制可以無損地傳播梯度,而另外一項殘差梯度則需要經過帶有weights的層,梯度不是直接傳遞過來的。殘差梯度不會那麼巧全為-1,而且就算其比較小,有1的存在也不會導致梯度消失。所以殘差學習會更容易。