簡體   English   中英

TensorFlow for LSTM 中的權重和偏差維度

[英]Weights and Bias dimensions in TensorFlow for LSTM

我對 LSTM 的隱藏權重數組的尺寸感到困惑。 我理解輸入權重和偏差維度就好了。 現在我最近才開始學習 RNN 和 LSTM,所以我可能還沒有完全理解它們的操作。 這是我的理解。 LSTM 層有許多單元格,這些單元格持有與門對應的權重和偏差。 將數據序列逐個時間步輸入到第一個單元。 在這個過程中,隱藏狀態會在序列的每一步創建,這些狀態會被傳遞回單元格。 在序列結束時,計算一個單元格狀態並將其傳遞給下一個單元格,並在具有相同輸入數據的下一個單元格上重復該過程。 我希望我有這個權利。 現在舉一個例子來解釋我的困惑。

inputs = Input(shape=(100,4))
x = LSTM(2)(x)
outputs = Dense(1)(x)

model = Model(inputs=inputs, outputs=outputs)

這個 LSTM 會有這個總結:


Model: "model"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 input_1 (InputLayer)        [(None, 100, 4)]            0         
                                                                 
 lstm (LSTM)                 (None, 2)                 56        
                                                                 
 dense (Dense)               (None, 1)                 3        
                                                                 
=================================================================
Total params: 59
Trainable params: 59
Non-trainable params: 0
_________________________________________________________________

據我了解,每個 LSTM 單元都有 8 個權重和 4 個偏差。 其中 4 個權重應用於輸入,另外 4 個應用於單元格的隱藏狀態。 這些權重和偏差在整個輸入序列中是恆定的。 從偏見開始。 每個單元格有 4 個偏差,因此 LSTM 層的偏差總數等於 (number_of_cells*4)。 在這種情況下 (2*4)=8。

print(model.layers[1].get_weights()[2].shape)

(8,)

檢查出來。

現在輸入權重。 每個單元格有 4 個輸入權重,它們本身由與輸入特征相同數量的權重組成。 這需要乘以單元格的數量。 所以輸入權重的總數是(number_of_features*4*number_of_cells)。 在這種情況下 (4*4*2)=32。

print(model.layers[1].get_weights()[0].shape)

(4, 8)

這也檢查出來。

現在這是令人困惑的部分。 每個單元格還有 4 個隱藏權重。 並且隱藏狀態的數量等於序列長度。 但是序列長度並不重要,因為權重在整個過程中保持不變。 我發現隱藏權重的總數是(number_of_cells*4*number_of_cells)。 在這種情況下 (2*4*2)=16。

print(model.layers[1].get_weights()[1].shape)

(2, 8)

考慮到有 2 個單元,這意味着每個單元必須有 8 個隱藏權重。 但這與我所知道的相沖突。 每個單元格只有 4 個隱藏權重。 每個單元格額外的 4 個隱藏權重是什么原因? 據我了解,單元格的最后一個隱藏狀態對網絡單元格沒有影響。 但是,有一個單元狀態會在序列結束時傳遞給下一個單元。 但是我在網上找不到任何提到細胞狀態權重的地方。

我希望我能說清楚我的困惑在哪里。 謝謝你。

以下是LSTM上 Wiki 中的相關方程式

請注意,正如您所說,有 4 組輸入 (W)、隱藏 (U) 權重和偏差 (b)。 請注意,由於 Hadamard 積, i、fo、c、h和所有偏差應具有相同的尺寸。

輸入向量的維度是 (4,),隱藏向量 - (2,)。

每個輸入權重矩陣為 (4, 2),共有 4 個,因此 4x2x4 = 32 個輸入權重。

使用隱藏權重,它們是 (2, 2),其中有 4 個,所以 2x2x4 = 16 個隱藏權重。

每個偏差都是 (2,) 向量,所以 2x4 = 8 個偏差。

單元狀態由隱藏狀態和輸入門控。 它用作長記憶(L),而隱藏狀態是短記憶(S)。 注意第 4 個等式,它是一個簡單的線性更新 C[t] = F[t] x C[t-1] + K[t],隱藏狀態不是這種情況。

我建議你查看 Colah 關於LSTM 主題的博客。 這可能是我偶然發現的關於該主題的最佳資源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM