rnn主要用來處理序列資料,在傳統的神經網路模型中,是從輸入層到隱含層再到輸出層,每層內的節點之間無連線,迴圈神經網路中乙個當前神經元的輸出與前面的輸出也有關,網路會對前面的資訊進行記憶並應用於當前神經元的計算中,隱藏層之間的節點是有連線的,並且隱藏層的輸入不僅包含輸入層的輸出還包含上一時刻隱藏層的輸出。理論上,rnn可以對任意長度的序列資料進行處理。
乙個經典的rnn網路:
rnn採用引數共享的機制,在時間維度上共享權重u、v、w乙個簡單的前向傳播過程入下圖所示:
ht是t時刻隱藏層的值,y
ty_t
yt是t時刻輸出層的值,也就是最終的標籤,其中引數whh
w_wh
h、w xh
w_wx
h、w hy
w_wh
y是需要通過訓練學習到的引數。
通常我們這樣定義乙個rnn模型:
x
xx是輸入,h
hh是隱層單元,o
oo為輸出,l
ll為損失函式,y
yy為訓練集的標籤。下標t
tt代表t
tt時刻的狀態,其中需要注意的是,隱藏單元h
hh在t
tt時刻的表現不僅由此刻的輸入決定,還受t
tt時刻之前時刻的影響。v
vv、w
ww、u
uu是權值。
h t=
ϕ(ux
i+wh
t−1+
b)h_t=\phi(ux_i+wh_+b)
ht=ϕ(
uxi
+wht
−1+
b)ϕ
\phi
ϕ是啟用函式,一般為tan
htanh
tanh
函式,b
bb是偏置。
t
tt時刻的輸出為:(c
cc是偏置)
o t=
vht+
co_t=vh_t+c
ot=vh
t+c
模型的輸出:y^t
=σ(o
t)\hat y_t=\sigma(o_t)
y^t=
σ(ot
)這裡σ
\sigma
σ是啟用函式,通常rnn用於分類,所以常為softmax函式。
rnn使用反向傳播梯度下降法更新權重。
上圖的損失函式的定義針對機器翻譯,不同的任務,損失函式的設定不同。
由上圖可知,對於較大程度的序列,使用rnn的訓練過程容易出現梯度消失的現象。因為求到的偏導數本身就是乙個比較小的值,較長的鏈式求導,易導致梯度幾乎為0,導致系統誤差仍是乙個較大的值,最終導致訓練失敗。對於較長的序列,我們通常使用lstm模型。
參考:[1]趙衛東《機器學習》
RNN迴圈神經網路
評測乙個句子出現的可能性 文字自動生成 rnn迴圈處理相同的任務,就是 句子接下來的單詞是什麼。rnn迴圈記錄前面所有文字的資訊 也叫做記憶 作為 當前詞的乙個輸入 1.語言模型和文字生成 語言模型中,輸入是經過編碼的詞向量序列,輸出是一系列 的詞 2.機器翻譯 機器翻譯必須等待所有輸入結束後才能輸...
迴圈神經網路 RNN
from torchnlp.word to vector import glove vectors glove vectors hello torch.nn.utils.clip grad norm p,10 10就是最大梯度的模閾值,即保留原來梯度的方向,但梯度大小縮放至10對與梯度瀰散現象,考慮...
RNN迴圈神經網路
神經網路基礎 神經網路可以當做是擬合任意函式的黑盒子,給定特定的輸入x,就能夠的得到希望的輸出y。神經網路結構如下圖 將神經網路模型訓練好之後,輸入層輸入乙個x,通過網路之後就能夠在輸出層輸出特定的y.有了這麼強大的模型,為什麼會出現rnn 迴圈神經網 它們單獨的乙個個的輸入,前乙個輸入和後乙個輸入...