長短期記憶網路(LSTM)的基礎知識、邏輯結構、實際物理結構
一、LSTM的基礎知識
輸入層:(batch_size, time_steps, input_dim)
LSTM輸入層的維度是3
(1)batch_size:量級——每次訓練輪次(batch)中資料量大小
(2)time_steps:時間維度——每個訓練批次(batch)中單個輸入資料所持續的時間步長(一個數據視窗的長度)
(3)input_dim:資料維度——每個訓練批次(batch)中單個輸入資料的維度
隱含層:num_units
用於記憶過去時刻網路狀態的節點數量
輸出層:output_dim
輸出資料的維度,如:類別個數
訓練方式:
二、LSTM的邏輯結構
圖1[1]和圖2[1]是目前最流行的理解LSTM等遞迴神經網路(RNN)的一種講解方式,初學者卡到這幅圖確實很容易理解LSTM的展開形式,但也是最誤導初學者的圖示。作為初學者,看完這幅圖你是否也是這樣理解的呢?
(1)設定LSTM網路引數中的隱層單元個數就是為展開後的LSTM模組的數量(即圖2中的展開後的t個LSTM單元)
(2)輸入資料在每個訓練輪次中分別對應輸入到展開後t個相應的LSTM單元
(3)LSTM網路包括圖2所示的t個模組/單元
展開後的效果
然而,以上理解其實是錯誤的,這種展開效果僅僅只是一個LSTM模組的一種時間維度上一種計算效果圖
實際上,LSTM都沒有展開效果圖上的這t個單獨的模組,而僅僅只有一個,所有的資料訓練都是在訓練一個LSTM模組/單元,並在每一個批次所有資料完成訓練後更新一次網路引數。
三、LSTM的實際物理結構
圖3[2] 和圖4[2] 則是LSTM實際物理結構圖
由圖3[2] 可以看出,事實上只有一個LSTM模組自己環繞自己來完成上面的時間維度上的展開效果
輸入:上一時刻的網路狀態向量、上一時刻網路輸出向量、當前時刻
輸出:的網路狀態向量、網路輸出向量
由圖4[2] 則進一步詳細揭示了LSTM模組內部的實際物理結構,我們設定LSTM的引數hidden_size或者num_units(不同的深度學習框架引數名稱不一樣)是設定了一個LSTM模組內部的狀態向量和輸出向量的維度,而不是LSTM模組/單元的數量。
圖示例項講解:
batch_size = 1
time_steps = 6
input_dim = 1
一個批次的數量資料只有一條,該條資料的時間跨度為6(對應圖3中的X(t),一個時間窗中的數量,如:感測器的取樣頻率——每秒取樣的資料量)、維度為1(如:1軸感測器資料)
num_units = 128
圖3和圖4中不同顏色分別對應一層不同啟用函式的神經網路,這裡num_units=128就設定了每一層網路的神經元個數,也就對應圖4所示的每一個層神經網路、整個LSTM網路輸出向量和狀態向量的維度。
四、LSTM中的門控(結合上圖例項)
LSTM網路主要包括:輸入門、輸出門、遺忘門
每一個門控邏輯/函式都是由num_units = 128個的隱含層神經元來實現相關功能
隱含層中的num_units = 128個隱層神經元與輸入向量x之間是全連線關係,即完成 非線性對映函式功能,本質上就是通過引數矩陣 對輸入向量 進行不同維度上的資料篩選。
五、總結
對於很多像我這樣的初學者來說,看 [1] 所給出的LSTM原理效果圖,在一定程度上有利於理解LSTM的時間維度上的相關原理,但是也很容易被誤導以為LSTM網路有多個LSTM單元構成!
實際上,
(1)LSTM網路僅有一個LSTM邏輯單元/模組
(2)每個LSTM網路中的門控邏輯都是由多個隱層神經元構成,每一層的隱層神經元個數是由LSTM網路引數num_units = 128控制的
(3)LSTM網路的輸入是3維的
(4)LSTM輸入引數time_steps是控制時間維度上執行幾次自身狀態向量和輸出向量的自我傳遞和利用
(5)LSTM的輸入層與LSTM內部門控邏輯中的隱含層之間是全連線關係,因此不要被圖2誤導認為輸入層引數time_steps與LSTM單元/模組的個數是一樣的,整個LSTM網路就只有一個LSTM功能單元/模組。
參考文獻:
(1)http://colah.github.io/posts/2015-08-Understanding-LSTMs/
(2)https://blog.csdn.net/shenxiaoming77/article/details/79390595