目錄:
1.LSTM簡單介紹

紅框從左到右,依次是:
忘記門層: 決定從細胞狀態中丟棄什么信息,通過當前時刻輸入和前一個時刻輸出決定
細胞狀態: 確定並更新新信息
到當前時刻的細胞狀態中
輸出門層: 基於目前的細胞狀態決定該時刻的輸出
2.簡單假設樣例
假設現有一個樣本,Shape=(13,5),時間步是13,每個時間步的特征長度是5.形象點,我把一個樣本畫了出來:

使用Keras框架添加LSTM層時,我的設置是這樣的keras.layers.LSTM(10)
,也就是我現在設定,每個時間步經過LSTM后,得到的中間隱向量是10維(意思是5->10維),13個時間步的數據進去得到的是(13*10)的數據.
每個時間步對應神經元個數(參數個數)一樣.也就是算一個LSTM中神經元個數,算一個時間步中參與的神經元個數即可.下面將對LSTM每個計算部分進行神經元分析.
3.神經元分析
3.1忘記門層

圖中公式的是上一個狀態的隱向量(已設定隱向量長度為10),
為當前狀態的輸入(長度為5),那么
的長度就是10+5=15了.
和
為該層的參數.
該層輸出是中間隱向量的長度(10),經過激活前后的長度不變.只需要考慮
里面的操作得到10維特征即可.
是(1,15)的向量,與
相乘得到(1,10)的向量,根據矩陣相乘規律,得到
是(15,10)的矩陣,得到(1,10)矩陣后,與該門層偏置相加,偏置也應該有相同的形狀,即
是(1,10)的矩陣.
即:該層神經元為:

3.2細胞狀態
(1)確定更新信息過程

可以看到,這里公式和前面的一樣的,和
都是激活函數,不影響參數個數.
同理這過程的神經元個數是:

(2)更新過程

公式中的四個值,均是前面計算得到的結果,因此該過程沒有參數需要學習.
3.3輸出層

一樣的公式,神經元個數一樣.即個數為:

3.4總結
把公式(1),(2),(3)的神經元加起來,就是該LSTM的神經元個數了.

其實,我們可以把這個問題一般化,不看這個例子,假設你一個時間步的特征長度是n,經過該LSTM得到的長度是m,這樣就可以算出該LSTM層的神經元個數為:

4.測試
- from keras.layers import LSTM
- from keras.models import Sequential
- time_step=13
- featrue=5
- hidenfeatrue=10
- model=Sequential()
- model.add( LSTM(hidenfeatrue,input_shape=(time_step,featrue)))
- model.summary()
輸出是:
- _________________________________________________________________________________
- Layer (type) Output Shape Param #
- =================================================================================
- lstm_8 (LSTM) (None, 10) 640
- =================================================================================
- Total params: 640
- Trainable params: 640
- Non-trainable params: 0
- _________________________________________________________________________________