點擊上方「MLNLP」,選擇「星標」公眾號
重磅乾貨,第一時間送達
來自 | 知乎
地址 | https://www.zhihu.com/question/290392414/answer/951298995
編輯 | 機器學習算法與自然語言處理
本文僅作學術分享,若侵權,請聯繫後臺刪文處理
https://www.zhihu.com/question/290392414/answer/951298995梯度下降作為一種最常見的迭代式優化策略,應用在神經網絡的BP算法中,由於深度神經網絡層級太深,在求導的過程中,由於鏈式法則,可能會出現梯度消失和梯度爆炸現象,為了搞清楚為什麼會出現這些情況,我們可以先從最簡單的單層神經網絡的求導過程著手,查看求導的結果。
正向傳播的公式如下:
(1)
(2)
損失函數使用均方差形式:
(3)
對x1,w1,x2,w2進行求導,為了更加清晰,我們遵循鏈式法則,一步一步進行求導:
(4)
(5)
(6)
(7)
(8)
(9)
經過上述求導,我們得到輸入x和權重w的梯度如下:
(10)
(11)
從上述式子我們知道 是sigmoid激活函數的求導,它的範圍在(0,1)之間, 和 範圍不確定,那麼在多層神經網絡中向上遊傳遞的梯度可能在(0,1)之間,如果層層之間的梯度均在(0,1)之間,層層縮小,那麼就會出現梯度消失。反之,如果層層傳遞的梯度大於1,那麼經過層層擴大,就會出現梯度爆炸,可見梯度的消失與爆炸與激活函數沒有特別大的關係,反而和權重有較大關係,因此權重的初始化對神經網絡的訓練很重要。
總之它的產生主要是由於鏈式法則的求導,梯度層層縮放導致的,因為神經網絡的不只有激活函數的作用,還有權重與神經元的相互作用。
https://www.zhihu.com/question/290392414/answer/940509039
讀論文不認真的後果……梯度消失/爆炸是激活函數和權重相互作用產生的聯合效果,不單單是激活函數的問題,不管你用 sigmoid/tanh 還是 ReLU 都有可能發生梯度消失/爆炸,只是發生的頻繁程度不同。
每層神經網絡大體是一次矩陣乘法(線性變換)再接一次激活函數,例如這樣:
求導以後是這樣:
其中第一項是每個元素都小於 1 的對角陣(假設這裡用 sigmoid 激活函數,其他激活函數可同理分析),於是特徵值也小於 1,會產生壓縮的效果;而第二項特徵值的大小與 W 本身有關,既可能收縮也可能擴張。
假如 W 的所有特徵值都小於 1,那麼此時兩項相乘也是收縮的效果;反之,兩項的乘積有可能(注意不是一定)產生擴張的效果。多層累積以後,就有可能發生梯度消失和梯度爆炸。
舉個 RNN 的例子吧:
https://link.zhihu.com/?target=http%3A//proceedings.mlr.press/v28/pascanu13.pdf
論文第二節說的很清楚:
We first prove that it is sufficient for λ1 < 1/γ , where λ1 is the largest singular value of Wrec, for the vanishing gradient problem to occur. (即當 W 滿足某種條件時,一定會發生梯度消失)
By inverting this proof we get the necessary condition for exploding gradients, namely that the largest singular value λ1 is larger than 1/γ (otherwise the long term components would vanish instead of exploding). (即當 W 滿足某種條件時,有可能會發生梯度爆炸)
https://www.zhihu.com/question/290392414/answer/550156067
是這樣的,梯度消失:主要是指激活函數的導數小於1,例如sigmoid函數,tanh
梯度爆炸:相反是指激活函數的梯度大於1,
當神經網絡層數很多的時候,因為需要反向求梯度,所以如果激活函數是sigmoid就會產生梯度消失,tanh也是一樣,他們兩個的梯度都小於1'而relu函數梯度等於1解決了梯度消失問題
你沒有理解對,梯度爆炸是指用的激活函數梯度大於1,如果使用sigmoid函數,只有梯度消失,就沒有梯度爆炸,relu函數是沒有梯度消失,應該也沒有梯度爆炸。
梯度爆炸是指用的其他激活函數,並不是sigmoid,tanh
推薦閱讀:
綜述 | 知識圖譜技術綜述(上)
一戰賺了1090億,恐怖的張一鳴!