迴圈神經網路(rnn)是用來建模序列化資料的一種主流深度學習模型。
##迴圈神經網路和卷積神經網路
速記:迴圈聖經網路可以很好地處理文字資料變長並且有序的輸入序列
rnn的前向傳播公式
n et
t=ux
t+wh
t−
1net_t=ux_t+wh_
nett=
uxt
+wht
−1
h t=
f(ne
tt
)h_t=f(net_t)
ht=f(
nett
)y =g
(vht
)y=g(vh_t)
y=g(vh
t)速記:使用bptt(基於時間的反向傳播)來求解時,純銅的迴圈神經網路梯度可以表示成連城的形式,原因和普通神經網路相似。改進方法為lstm,gru等變種模型。
在迴圈神經網路中能否使用relu作為啟用函式?
速記:可以,但是需要對矩陣的初值做一定限制,否則容易引發數值問題。
詳細:為解釋這個問題,先給出rnn的前向傳播公式
n et
t=ux
t+wh
t−
1net_t=ux_t+wh_
nett=
uxt
+wht
−1
h t=
f(ne
tt
)h_t=f(net_t)
ht=f(
nett
)根據前向傳播公式向前傳遞一層,可以得到
n et
t=ux
t+wh
t−1=
uxt+
wf(u
xt−1
+wht
−2
)net_t=ux_t+wh_=ux_t+wf(ux_+wh_)
nett=
uxt
+wht
−1=
uxt
+wf(
uxt−
1+w
ht−2
)如果採用relu替代公式中的啟用函式f
ff,並且假設relu函式一直處於啟用區域(即輸入大於0),則有f(x
)=x,
nett
=uxt
+w(u
xt−1
+wht
−2
)f(x)=x,net_t=ux_t+w(ux_+wh_)
f(x)=x
,net
t=u
xt+
w(ux
t−1
+wht
−2)
,繼續將其展開,net
tnet_t
nett
的表示式中最終會包含t個w連乘。如果w不是單位矩陣,最終結果將會居於0或者無窮,依法嚴重的數值問題。即使採用了relu啟用函式,只要w不是單位矩陣梯度還是會消失或者**。
綜上所述,當採用relu作為迴圈神經網路中隱含層的啟用函式時,只有當w 的取值在單位矩陣附近時才能取得比較好的效果,因此需要將w初始化為單位矩 陣。實驗證明,初始化w為單位矩陣並使用relu啟用函式在一些應用中取得了與 長短期記憶模型相似的結果,並且學習速度比長短期記憶模型更快,是乙個值得 嘗試的小技巧。
##長短時記憶網路(lstm)
速記:加入乙個遺忘門和輸入門以及輸出門。輸入門控制當前計算的新狀態以多大程度更新到記憶單元中;以往門控制前一步記憶單元的資訊有多大程度被遺忘掉;輸出門控制當前的輸出有多大程度上取決於當前的記憶單元。
速記:在lstm中,遺忘門、輸入門和輸出門都是用sigmoid函式作為啟用函式;在生成候選記憶時,使用雙曲正切函式tanh作為啟用函式. 可以使用別的啟用函式,最開始的時候用的就是sigmoid的變種。
##seq2seq 模型
在後面的文章裡再具體寫下去。
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 迴圈神經網 它們單獨的乙個個的輸入,前乙個輸入和後乙個輸入...