1. 程式人生 > >RNN梯度消失和爆炸

RNN梯度消失和爆炸

原文:連結

建議先看第一個

一,經典的RNN結構如下圖所示:

假設我們的時間序列只有三段, S_{0} 為給定值,神經元沒有啟用函式,則RNN最簡單的前向傳播過程如下:

S_{1}=W_{x}X_{1}+W_{s}S_{0}+b_{1}O_{1}=W_{o}S_{1}+b_{2}

S_{2}=W_{x}X_{2}+W_{s}S_{1}+b_{1}O_{2}=W_{o}S_{2}+b_{2}

S_{3}=W_{x}X_{3}+W_{s}S_{2}+b_{1}O_{3}=W_{o}S_{3}+b_{2}

假設在t=3時刻,損失函式為 L_{3}=\frac{1}{2}(Y_{3}-O_{3})^{2} 。

則對於一次訓練任務的損失函式為 L=\sum_{t=0}^{T}{L_{t}} ,即每一時刻損失值的累加。

使用隨機梯度下降法訓練RNN其實就是對 W_{x} 、 W_{s} 、 W_{o} 以及 b_{1}b_{2} 求偏導,並不斷調整它們以使L儘可能達到最小的過程。

二,現在假設我們我們的時間序列只有三段,t1,t2,t3。

我們只對t3時刻的 W_{x}、W_{s}、W_{0} 求偏導(其他時刻類似):

\frac{\partial{L_{3}}}{\partial{W_{0}}}=\frac{\partial{L_{3}}}{\partial{O_{3}}}\frac{\partial{O_{3}}}{\partial{W_{o}}}

\frac{\partial{L_{3}}}{\partial{W_{x}}}=\frac{\partial{L_{3}}}{\partial{O_{3}}}\frac{\partial{O_{3}}}{\partial{S_{3}}}\frac{\partial{S_{3}}}{\partial{W_{x}}}+\frac{\partial{L_{3}}}{\partial{O_{3}}}\frac{\partial{O_{3}}}{\partial{S_{3}}}\frac{\partial{S_{3}}}{\partial{S_{2}}}\frac{\partial{S_{2}}}{\partial{W_{x}}}+\frac{\partial{L_{3}}}{\partial{O_{3}}}\frac{\partial{O_{3}}}{\partial{S_{3}}}\frac{\partial{S_{3}}}{\partial{S_{2}}}\frac{\partial{S_{2}}}{\partial{S_{1}}}\frac{\partial{S_{1}}}{\partial{W_{x}}}

\frac{\partial{L_{3}}}{\partial{W_{s}}}=\frac{\partial{L_{3}}}{\partial{O_{3}}}\frac{\partial{O_{3}}}{\partial{S_{3}}}\frac{\partial{S_{3}}}{\partial{W_{s}}}+\frac{\partial{L_{3}}}{\partial{O_{3}}}\frac{\partial{O_{3}}}{\partial{S_{3}}}\frac{\partial{S_{3}}}{\partial{S_{2}}}\frac{\partial{S_{2}}}{\partial{W_{s}}}+\frac{\partial{L_{3}}}{\partial{O_{3}}}\frac{\partial{O_{3}}}{\partial{S_{3}}}\frac{\partial{S_{3}}}{\partial{S_{2}}}\frac{\partial{S_{2}}}{\partial{S_{1}}}\frac{\partial{S_{1}}}{\partial{W_{s}}}

可以看出對於 W_{0} 求偏導並沒有長期依賴,但是對於 W_{x}、W_{s} 求偏導,會隨著時間序列產生長期依賴。因為 S_{t}

 隨著時間序列向前傳播,而 S_{t} 又是 W_{x}、W_{s}的函式。

根據上述求偏導的過程,我們可以得出任意時刻對 W_{x}、W_{s} 求偏導的公式:

\frac{\partial{L_{t}}}{\partial{W_{x}}}=\sum_{k=0}^{t}{\frac{\partial{L_{t}}}{\partial{O_{t}}}\frac{\partial{O_{t}}}{\partial{S_{t}}}}(\prod_{j=k+1}^{t}{\frac{\partial{S_{j}}}{\partial{S_{j-1}}}})\frac{\partial{S_{k}}}{\partial{W_{x}}}

 (覺得k應該從k=1開始)

任意時刻對W_{s} 求偏導的公式同上。

三,如果加上啟用函式, S_{j}=tanh(W_{x}X_{j}+W_{s}S_{j-1}+b_{1}) ,

其中tanh' = [0,1]

這裡的tanh^{'} = (tanh(...))^',其中

啟用函式tanh和它的導數影象如下。

1)由上圖可以看出 tanh'\in [0,1],對於訓練過程大部分情況下tanh的導數是小於1的,只有當W_{x}X_{j}+W_{s}S_{j-1}+b_{1}=0 ,此時導數等於1;

2)如果 W_{s} 也是一個大於0小於1的值,則當t很大時,使得tanh' * W_s < 1

 \prod_{j=k+1}^{t}{tanh^{'}}W_{s} 

就會趨近於0,和 (0.9*0.8)^50趨近與0是一個道理。

3)同理當 W_{s} 很大時,具體指(比如tanh' = 0.1,而W_s

=99,則相乘為9.9),使得tanh' * W_s > 1

 \prod_{j=k+1}^{t}{tanh^{'}}W_{s} 

就會趨近於無窮,這就是RNN中梯度消失和爆炸的原因。

至於怎麼避免這種現象,讓我在看看 \frac{\partial{L_{t}}}{\partial{W_{x}}}=\sum_{k=0}^{t}{\frac{\partial{L_{t}}}{\partial{O_{t}}}\frac{\partial{O_{t}}}{\partial{S_{t}}}}(\prod_{j=k+1}^{t}{\frac{\partial{S_{j}}}{\partial{S_{j-1}}}})\frac{\partial{S_{k}}}{\partial{W_{x}}} 梯度消失和爆炸的根本原因就是 \prod_{j=k+1}^{t}{\frac{\partial{S_{j}}}{\partial{S_{j-1}}}} 這一坨,要消除這種情況就需要把這一坨在求偏導的過程中去掉,至於怎麼去掉,一種辦法就是使 {\frac{\partial{S_{j}}}{\partial{S_{j-1}}}}\approx1 另一種辦法就是使 {\frac{\partial{S_{j}}}{\partial{S_{j-1}}}}\approx0 。其實這就是LSTM做的事情,至於細節問題我在LSTM如何解決梯度消失問題這篇文章中給出了介紹。

總結:

梯度消失:一句話,RNN梯度消失是因為啟用函式tanh函式的倒數在0到1之間,反向傳播時更新前面時刻的引數時,當引數W初始化為小於1的數,則多個(tanh函式’ * W)相乘,將導致求得的偏導極小(小於1的數連乘),從而導致梯度消失。

梯度爆炸:當引數初始化為足夠大,使得tanh函式的倒數乘以W大於1,則將導致偏導極大(大於1的數連乘),從而導致梯度爆炸。

相關推薦

RNN梯度消失爆炸

原文:連結 建議先看第一個 一,經典的RNN結構如下圖所示: 假設我們的時間序列只有三段,  為給定值,神經元沒有啟用函式,則RNN最簡單的前向傳播過程如下: 假設在t=3時刻,損失函式為  。 則對於一次訓練任務的損失函式為  ,即每一時刻

RNN梯度消失爆炸的問題公式推導

RNN 首先來看一下經典的RRN的結構圖,這裡 x x x 是輸入

RNN 梯度消失梯度爆炸

為什麼會梯度爆炸或梯度消失: 梯度爆炸指的是在訓練時,累計了很大的誤差導數,導致神經網路模型大幅更新。這樣模型會變得很不穩定,不能從訓練資料中很好的進行學習。極端情況下會得到nan. 會發生這個的原因是在神經網路層間不斷的以指數級在乘以導數。 補充:雅克比矩陣 -- 函式的一階偏導數以一

LSTM解決梯度消失爆炸情況

1. LSTM避免RNN的梯度消失(gradient vanishing) RNN的本質是在網路內部維護了一個狀態 StSt,其中 tt 表示時間且 StSt 可遞迴計算。 傳統的RNN總是用“覆寫”的方式計算狀態:St=f(St−1,xt)St=f(St−1,xt)

RNN神經網路產生梯度消失梯度爆炸的原因及解決方案

1、RNN模型結構   迴圈神經網路RNN(Recurrent Neural Network)會記憶之前的資訊,並利用之前的資訊影響後面結點的輸出。也就是說,迴圈神經網路的隱藏層之間的結點是有連線的,隱藏層的輸入不僅包括輸入層的輸出,還包括上時刻隱藏層的輸出。下圖為RNN模型結構圖:   2、R

對於梯度消失梯度爆炸的理解

分享 之間 family -s info 小數 right 也會 使用 一、梯度消失、梯度爆炸產生的原因   假設存在一個網絡結構如圖:   其表達式為:   若要對於w1求梯度,根據鏈式求導法則,得到的解為:   通常,若使用的激活函數為sigmoid函數,其

梯度消失梯度爆炸問題詳解

1.為什麼使用梯度下降來優化神經網路引數? 反向傳播(用於優化神網引數):根據損失函式計算的誤差通過反向傳播的方式,指導深度網路引數的更新優化。 採取反向傳播的原因:首先,深層網路由許多線性層和非線性層堆疊而來,每一層非線性層都可以視為是一個非線性函式

梯度消失梯度爆炸

1.梯度爆炸 1)原因 在深層網路或遞迴神經網路中,誤差梯度在更新中累積得到一個非常大的梯度,這樣的梯度會大幅度更新網路引數,進而導致網路不穩定。在極端情況下,權重的值變得特別大,以至於結果會溢位(

神經網路梯度消失梯度爆炸及解決辦法

關注微信公眾號【Microstrong】,我現在研究方向是機器學習、深度學習,分享我在學習過程中的讀書筆記!一起來學習,一起來交流,一起來進步吧!目錄:(1)神經網路梯度消失與梯度爆炸(2)幾種啟用函式的比較一、神經網路梯度消失與梯度爆炸(1)簡介梯度消失與梯度爆炸層數比較多

深度學習:梯度消失梯度爆炸

梯度消失 主要是因為網路層數太多,太深,導致梯度無法傳播。本質應該是啟用函式的飽和性。 DNN結果出現nan值? 梯度爆炸,導致結果不收斂。都是梯度太大惹的禍,所以可以通過減小學習率(梯度變化直接變小)、減小batch size(累積梯度更小)、 features規格化(避

機器學習總結(二):梯度消失梯度爆炸

神經網路的訓練過程通常分為兩個階段:前向傳播和反向傳播。 前向傳播如下圖所示,原理比較簡單 上一層的神經元與本層的神經元有連線,那麼本層的神經元的啟用等於上一層神經元對應的權值進行加權和運算,最後通過一個非線性函式(啟用函式)如ReLu,sigmoid等

深度神經網路為何很難訓練(包含梯度消失梯度爆炸等)

我選取了原文的部分內容進行轉載。之前我搜索”梯度消失和梯度爆炸“的相關部落格,發現很多都解釋的不是很好,然後看到了 極客學院 的這篇介紹,感覺介紹的挺詳細,轉載一下,大家一起分享一下~ 到現在為止,本書講神經網路看作是瘋狂的客戶。幾乎我們遇到的所有的網路

梯度消失梯度爆炸情況詳解

前言 本文主要深入介紹深度學習中的梯度消失和梯度爆炸的問題以及解決方案。本文分為三部分,第一部分主要直觀的介紹深度學習中為什麼使用梯度更新,第二部分主要介紹深度學習中梯度消失及爆炸的原因,第三部分對提出梯度消失及爆炸的解決方案。有基礎的同鞋可以跳著閱讀。  其中,梯度消失爆

梯度消失梯度爆炸的原因解決方案

產生消失的梯度問題的原因 注:實際上就是梯度計算過程中,w值和啟用函式的導數值相乘大於1或者小於1的問題,如果是大於1,那麼經歷過很多個隱藏層梯度就會越來越大,即梯度爆炸,如果是小於1當然就是梯度消失啦!!! 所以w初始化大,w值和啟用函式的導數值相乘可能越來越大,造成梯

梯度消失梯度爆炸的解答

層數比較多的神經網路模型在訓練時也是會出現一些問題的,其中就包括梯度消失問題(gradient vanishing problem)和梯度爆炸問題(gradient exploding problem)。梯度消失問題和梯度爆炸問題一般隨著網路層數的增加會變得越來越明顯。 例

深度神經網路-消失梯度問題爆炸梯度問題

    根本問題其實並非是消失的梯度問題或者爆炸的梯度問題,而是在前面的層上的梯度是來自後面的層上項的乘積。當存在過多 的層次時,就出現了內在本質上的不穩定場景。唯一讓所有層都接近相同的學習速度的方式是所有這些項的乘積都能得到一種平衡。 如果沒有某種機制或者更加本質的保證來

梯度消失梯度爆炸及解決方案

# 梯度在神經網路中的作用 在談梯度消失和梯度爆炸的問題之前,我們先來考慮一下為什麼我們要利用梯度,同時鋪墊一些公式,以便於後面的理解。 存在梯度消失和梯度爆炸問題的根本原因就是我們在深度神網路中利用反向傳播的思想來進行權重的更新。即根據損失函式計算出的誤差,然後通過梯度反向傳播來減小誤差、更新權重。

機器學習中的梯度消失爆炸原因及其解決方法(筆記1)

前言         本文主要深入介紹深度學習中的梯度消失和梯度爆炸的問題以及解決方案。本文分為三部分,第一部分主要直觀的介紹深度學習中為什麼使用梯度更新,第二部分主要介紹深度學習中梯度消失及爆炸的原因,第三部分對提出梯度消失

梯度消失爆炸原因及其解決方法

一、梯度不穩定問題: 什麼是梯度不穩定問題:深度神經網路中的梯度不穩定性,前面層中的梯度或會消失,或會爆炸。 原因:前面層上的梯度是來自於後面層上梯度的乘乘積。當存在過多的層次時,就出現了內在本質上的不穩定場景,如梯度消失和梯度爆炸。 二、梯度消失(vanishing gradient problem)

深度學習 --- 優化入門三(梯度消失啟用函式ReLU)

前兩篇的優化主要是針對梯度的存在的問題,如鞍點,區域性最優,梯度懸崖這些問題的優化,本節將詳細探討梯度消失問題,梯度消失問題在BP的網路裡詳細的介紹過(興趣有請的檢視我的這篇文章),然後主要精力介紹RuLU啟用函式,本篇還是根據國外的文章進行翻譯,然後再此基礎上補充,這樣使大家更容易理解,好,那