迴圈神經網路與LSTM

2021-08-16 19:48:58 字數 1611 閱讀 4186

**

是t時刻的輸入,例如單詞中相應的one-hot向量st

st是t時刻的隱狀態(memory),基於上一時刻的隱狀態和當前輸入得到:st=

f(ux

t+ws

t−1)

st=f(uxt+wst−1)

,其中f

f一般是非線性的啟用函式,在計算s0s0

時,即第乙個單詞的隱藏層狀態,需要用到s−1

s−1,但是其並不存在,在實現中一般置為0ot

ot表示t時刻的輸出,如下個單詞的向量表示,ot=

soft

max(

vst)

ot=softmax(vst)

需要注意的是:在傳統神經網路中,每乙個網路層的引數是不共享的。而在rnn中,所有層次均共享同樣的引數(例如上例中的u,v

,wu,v,w

)。其反應出rnn中的每一步都在做相同的事,只是輸入不同,因此大大地降低了網路中需要學習的引數。

輸出是序列(例如影象標註:輸入是一張影象,輸出是單詞的序列)。

輸入是序列(例如情緒分析:輸入是乙個句子,輸出是對句子屬於正面還是負面情緒的分類)。

輸入輸出都是序列(比如機器翻譯:rnn輸入乙個英文句子輸出乙個法文句子)。

反向計算每個神經元的誤差項值,它是誤差函式e對神經元j的加權輸入的偏導數;

計算每個權重的梯度,最後再用隨機梯度下降演算法更新權重。=|

|wdi

ag[f

′(ne

ti)]

||γ=||wdiag[f′(neti)]||

,如果 γ

>

1γ>1

,當k−t

+1→∞

k−t+1→∞

會造成梯度**問題;相反,如果 γ

<

1γ<1

,當k−t

+1→∞

k−t+1→∞

時會出現和深度前饋神經網路類似的梯度消失問題。換而言之,導數的鏈式法則導致了連乘的形式,從而造成梯度消失與梯度**。而lstm能避免rnn的梯度消失問題,其使用「累加」的形式計算狀態,這種累加形式導致導數也是累加形式,因此避免了梯度消失。t−

1ht−1

和 xt

xt,輸出乙個在 0 到 1 之間的數值給每個在細胞狀態 ct−

1ct−1

中的數字。1 表示「完全保留」,0 表示「完全捨棄」。 

讓我們回到語言模型的例子中來基於已經看到的**下乙個詞。在這個問題中,細胞狀態可能包含當前主語的性別,因此正確的代詞可以被選擇出來。當我們看到新的主語,我們希望忘記舊的主語。~t

c~t,會被加入到狀態中。下一步,我們會講這兩個資訊來產生對狀態的更新。 

在我們語言模型的例子中,我們希望增加新的主語的性別到細胞狀態中,來替代舊的需要忘記的主語。t−

1ct−1

更新為 ctct

。前面的步驟已經決定了將會做什麼,我們現在就是實際去完成。 

我們把舊狀態與 ftft

相乘,丟棄掉我們確定需要丟棄的資訊。接著加上 it∗

c~tit∗c~t

。這就是新的候選值,根據我們決定更新每個狀態的程度進行變化。 

在語言模型的例子中,這就是我們實際根據前面確定的目標,丟棄舊代詞的性別資訊並新增新的資訊的地方。

迴圈神經網路與LSTM

txt 是t時刻的輸入,例如單詞中相應的one hot向量st st是t時刻的隱狀態 memory 基於上一時刻的隱狀態和當前輸入得到 st f ux t ws t 1 st f uxt wst 1 其中f f一般是非線性的啟用函式,在計算s0s0 時,即第乙個單詞的隱藏層狀態,需要用到s 1 s ...

LSTM神經網路

在傳統神經網路中,模型不會關注上一時刻的處理會有什麼資訊可以用於下一時刻,每一次都只會關注當前時刻的處理。舉個例子來說,我們想對一部影片中每一刻出現的事件進行分類,如果我們知道電影前面的事件資訊,那麼對當前時刻事件的分類就會非常容易。實際上,傳統神經網路沒有記憶功能,所以它對每一刻出現的事件進行分類...

LSTM長短期記憶迴圈神經網路詳解

一句話,有時候單獨拎出來難以理解,而放在整篇文章中,我們則容易通過聯絡上下文理解。什麼叫聯絡上下文理解,就是把前文資訊聯絡結合到當前語句上,這也是rnn的關鍵。基本概念 維基百科 rnn本質是乙個迴圈神經網路結構,將其展開,會得到乙個序列結構,上一次的輸出會作為下一次的輸入 即前面的輸入將會對後面的...