迴圈神經網路 RNN
目錄
迴圈神經網路 RNN
迴圈神經網路的主要用途是處理和預測序列資料。迴圈神經網路刻畫了一個序列當前的輸出與之前資訊的關係。從網路結構上,迴圈神經網路會記憶之前的資訊,並利用之前的資訊影響後面節點的輸出。
迴圈神經網路的一個重要的概念就是時刻。上圖中迴圈神經網路的主體結構的輸入除了來自輸入層的,還有一個自身當前時刻的狀態。在每一個時刻,會讀取t時刻的輸入,並且得到一個輸出。同時還會得到一個當前時刻的狀態,傳遞給下一時刻。將迴圈神經網路按照時間序列展開,如下圖所示:
鏈式的特徵揭示了 RNN 本質上是與序列和列表相關的。在標準的 RNN 中,這個重複的模組只有一個非常簡單的結構,例如一個tanh層。
下圖展示了一個迴圈神經網路的前向傳播演算法的具體計算過程:
在得到前向傳播計算結果之後,可以和其他網路類似的定義損失函式。神經網路的唯一區別在於它每一個時刻都有一個輸出,所以迴圈神經網路的總損失為前面所有時刻的損失函式的總和。
import numpy as np
X = [1,2,1,2,1,2,3,1]
state = [0.0,0.0]
# 定義不同輸入部分的權重
w_cell_state = np.asarray([[0.1,0.2],[0.3,0.4]])
w_cell_input = np.asarray([0.5,0.6])
b_cell = np.asarray([0.1,-0.1])
# 定義輸出層的權重
w_output = np.asarray([[0.1],[0.2]])
b_output = 0.1
# 按照時間順序執行迴圈神經網路的前向傳播過程
for i in range(len(X)):
before_activetion = np.dot(state, w_cell_state) + X[i] * w_cell_input + b_cell
state = np.tanh(before_activetion)
#計算當前時刻的最終輸出
final_output = np.dot(state,w_output) + b_output
#輸出每一時刻的資訊
print("before_activation",before_activetion)
print("state",state)
print("final_output",final_output)
長短時記憶網路 LSTM
迴圈神經網路工作的關鍵點就是使用歷史的資訊來幫助當前的決策。迴圈神經網路能很好的利用傳統的神經網路不能建模的資訊,但同時,也帶來了更大的挑戰——長期依賴的問題。在有些問題中,模型僅僅需要短期內的資訊來執行當前的任務。但同時也會有一些上下文場景更加複雜的情況。當間隔不斷增大時,簡單的迴圈神經網路可能會喪失學習到如此遠的資訊的能力。或者在複雜的語言場景中,有用的資訊的間隔有大有小,長短不一,迴圈神經網路的效能也會受限。
LSTM與單一tanh迴圈結構不同,LSTM擁有三個門:“輸入門”、“輸出門”、“遺忘門”。
細胞狀態類似於傳送帶。直接在整個鏈上執行,只有一些少量的線性互動。資訊在上面流傳保持。
LSTM 有通過精心設計的稱作為“門”的結構來去除或者增加資訊到細胞狀態的能力。門是一種讓資訊選擇式通過的方法。他們包含一個sigmod神經網路層和一個按位的乘法操作。
在我們 LSTM 中的第一步是決定我們會從細胞狀態中丟棄什麼資訊。這個決定通過一個稱為忘記門層完成。該門會讀取和,輸出一個在0到1之間的數值給每個在細胞狀態中的數字。1表示“完全保留”,0表示“完全捨棄”。例如,當我們在句子中希望通過主語選擇相應的代詞,細胞狀態可能包含當前主語的性別,因此正確的代詞可以被選擇出來。當我們看到新的主語,我們希望忘記舊的主語。
下一步是確定什麼樣的新資訊被存放在細胞狀態中。這裡包含兩個部分。第一,sigmod層稱 “輸入門層” 決定什麼值我們將要更新。然後,一個tanh層建立一個新的候選值向量,會被加入到狀態中。
這樣就把細胞狀態從更新為了。
我們把舊狀態與相乘,丟棄掉我們確定需要丟棄的資訊。接著加上。這就是新的,根據我們決定更新每個狀態的程度進行變化。
在語言模型的例子中,這裡就是實際根據前面確定的目標,丟棄舊代詞的性別資訊並新增新的資訊的地方。
最終,輸出門層需要確定輸出什麼值,這個輸出將會基於我們的細胞狀態。首先,執行一個sigmod層來確定細胞狀態的哪個部分將輸出出去。接著,把細胞狀態通過tanh進行處理(得到一個在-1到1之間的值)並將它和sigmod門的輸出相乘。
單個細胞的輸入和輸出入下圖所示:
demo參考自:
demo:github
參考文獻
相關文章
- 迴圈神經網路(RNN)神經網路RNN
- (一)線性迴圈神經網路(RNN)神經網路RNN
- 迴圈神經網路(Recurrent Neural Network,RNN)神經網路RNN
- 4.5 RNN迴圈神經網路(recurrent neural network)RNN神經網路
- (二)非線性迴圈神經網路(RNN)神經網路RNN
- 深度學習之RNN(迴圈神經網路)深度學習RNN神經網路
- 從網路架構方面簡析迴圈神經網路RNN架構神經網路RNN
- [譯] RNN 迴圈神經網路系列 2:文字分類RNN神經網路文字分類
- 迴圈神經網路LSTM RNN迴歸:sin曲線預測神經網路RNN
- RNN-迴圈神經網路和LSTM_01基礎RNN神經網路
- 迴圈神經網路神經網路
- 【神經網路篇】--RNN遞迴神經網路初始與詳解神經網路RNN遞迴
- 用於自然語言處理的迴圈神經網路RNN自然語言處理神經網路RNN
- 關於 RNN 迴圈神經網路的反向傳播求導RNN神經網路反向傳播求導
- [譯] RNN 迴圈神經網路系列 3:編碼、解碼器RNN神經網路
- 從前饋到反饋:解析迴圈神經網路(RNN)及其tricks神經網路RNN
- pytorch--迴圈神經網路PyTorch神經網路
- 迴圈神經網路介紹神經網路
- TensorFlow系列專題(七):一文綜述RNN迴圈神經網路RNN神經網路
- 吳恩達《序列模型》課程筆記(1)– 迴圈神經網路(RNN)吳恩達模型筆記神經網路RNN
- 第五週:迴圈神經網路神經網路
- 前沿高階技術之遞迴神經網路(RNN)遞迴神經網路RNN
- 動畫圖解迴圈神經網路動畫圖解神經網路
- 常見迴圈神經網路結構神經網路
- RNN神經網路模型綜述RNN神經網路模型
- YJango的迴圈神經網路——實現LSTMGo神經網路
- 深度學習迴圈神經網路詳解深度學習神經網路
- TensorFlow系列專題(八):七步帶你實現RNN迴圈神經網路小示例RNN神經網路
- 精講深度學習RNN三大核心點,三分鐘掌握迴圈神經網路深度學習RNN神經網路
- NLP與深度學習(二)迴圈神經網路深度學習神經網路
- YJango的迴圈神經網路——scan實現LSTMGo神經網路
- 一文讀懂LSTM和迴圈神經網路神經網路
- 從零開始用 Python 構建迴圈神經網路Python神經網路
- 迴圈神經網路之embedding,padding,模型構建與訓練神經網路padding模型
- 使用PyTorch從零開始構建Elman迴圈神經網路PyTorch神經網路
- 【機器學習】李宏毅——Recurrent Neural Network(迴圈神經網路)機器學習神經網路
- 十 | 門控迴圈神經網路LSTM與GRU(附python演練)神經網路Python
- [譯] 如何在 keras 中使用迴圈神經網路創作音樂Keras神經網路