一句話,有時候單獨拎出來難以理解,而放在整篇文章中,我們則容易通過聯絡上下文理解。什麼叫聯絡上下文理解,就是把前文資訊聯絡結合到當前語句上,這也是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帶來了新的技術挑...