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

2021-10-10 23:38:51 字數 3154 閱讀 4087

一句話,有時候單獨拎出來難以理解,而放在整篇文章中,我們則容易通過聯絡上下文理解。

什麼叫聯絡上下文理解,就是把前文資訊聯絡結合到當前語句上,這也是rnn的關鍵。

基本概念:維基百科

rnn本質是乙個迴圈神經網路結構,將其展開,會得到乙個序列結構,上一次的輸出會作為下一次的輸入(即前面的輸入將會對後面的輸入產生影響)。

這種鏈式的特徵揭示了 rnn 本質上和序列相關,因而很適合處理語音,文字,這種序列資料。

基本概念:維基百科

長期依賴問題

rnn關鍵點是能夠連線先前的資訊到當前任務上,如通過前文推斷當前語句含義。但是,當相關資訊和當前語句間隔過大時候,rnn將難以學習到遠距離資訊。

lstm結構

lstm的主要結構在於使用了三個門過濾掉不需要的記憶,提取需要的記憶,產生新的記憶。讓我們圍繞這三個門進行進一步分析。

lstm:忘記門

lstm的第一步是決定要從單元格狀態丟棄什麼資訊

忘記門主要將前資訊與現資訊做線性分類,採用sigmoid將值控制在[0,1]之間,將值與前狀態相乘,這樣就可以確定哪些狀態被留下來,哪些被遺忘。

儲存門

保持門具有兩個分支,乙個分支與遺忘門相似(引數不同),同樣將值控制在[0,1]之間;另乙個分支使用的是tanh啟用函式,將值控制在[-1,1]之間,這樣做是為了選擇出需要的資訊,兩相乘後提取出現資訊狀態。

生成門

最後將前2個門的結構相加,便得到了最後產生的資訊:c

而生成門的主要是為了生成最後的結果,同樣的方法處理後,將前面得到的c進行tanh啟用函式處理(主要為了保證資料大小的一致性),兩者相乘得到最後結果。

結論綜上所述,我總結出乙個新的理解方式:

可以看到lstm的輸入為:狀態0,資訊0(由前輸出和輸入組成)lstm輸出:狀態1,資訊1.

分類器:sigmoid 資料標準化:tanh

from tensorflow.keras.models import sequential

from tensorflow.keras.layers import lstm,embedding,dense,flatten,bidirectional,dropout

from config import vocabulary,embedding_dim,word_num,state_dim

#單層單向模型

def lstm_model():

model = sequential()

#embedding函式表示將向量化,嵌入特徵。

#vocabulary:字典中詞的數量

#embedding_dim:嵌入向量的維度

#input_length:一句話的長度

model.add(embedding(vocabulary,embedding_dim,input_length=word_num))

#model.add(lstm(state_dim,return_sequences=false))

model.add(lstm(state_dim,return_sequences=true))

model.add(flatten())

model.add(dense(1,activation=『sigmoid』))

model.summary()

return model

#單層雙向模型

def bi_lstm():

model = sequential()

model.add(embedding(vocabulary,embedding_dim,input_length=word_num))

model.add(bidirectional(lstm(state_dim,recurrent_dropout=0.1)))

model.add(dropout(0.25))

model.add(dense(64))

model.add(dropout(0.3))#選擇性失效

model.add(dense(1,activation=『sigmoid』))

model.summary()

return model

#多層雙向模型

def stacked_lstm():

model = sequential()

model.add(embedding(vocabulary,embedding_dim,input_length=word_num))

model.add(bidirectional(lstm(state_dim, return_sequences=true)))

model.add(bidirectional(lstm(state_dim, return_sequences=false)))

model.add(dense(1,activation=『sigmoid』))

model.summary()

return model

ifname== 『main』:

#model = lstm_model()

model = stacked_lstm()

#model = bi_lstm()

LSTM長短期記憶人工神經網路簡述

by yang liu 1.什麼是lstm 長短期記憶網路 lstm,long short term memory 是一種時間迴圈神經網路,是為了解決一般的rnn 迴圈神經網路 存在的長期依賴問題而專門設計出來的,屬於時間遞迴神經網路 rnn 中的一種。lstm適合於處理和 時間序列中間隔和延遲非常...

長短期記憶網路 長短期記憶網路 LSTM 簡介

考慮這樣乙個場景,當我們在看乙個精彩的電影時,我們會被電影中的各個精彩情節所吸引,但是我們不能夠記住所有的電影情節。當觀影結束時,我們會立馬忘記電影裡面一些無關緊要的情節,留在我們腦海中的可能更多的是一些對劇情發展起關鍵作用的場景,這些場景可能在之後的很長一段時間後依然停留在我們的腦海中,以至於當我...

lstm原理 長短期記憶網路LSTM

上兩小節我們主要講述了迴圈神經網路rnn,但是儘管 rnn 被設計成可以利用歷史的資訊來 當前的決策,例如使用之前出現的單詞來加強對當前單詞的理解,但是 rnn決策的主要還是最後輸入的一些訊號,更早之前的訊號會隨著時間的推遲而變得強度越來越低,它對後續的影響越來越弱。這樣就會給rnn帶來了新的技術挑...