LSTM的計算過程,權重參數數目,weight_ih_l0,weight_hh_l0


 

一. 普通全連接神經網絡的計算過程

假設用全連接神經網絡做MNIST手寫數字分類,節點數如下:

第一層是輸入層,784個節點;

第二層是隱層,100個節點;

第三層是輸出層,10個節點。

對於這個神經網絡,我們在腦海里浮現的可能是類似這樣的畫面:

但實際上,神經網絡的計算過程,本質上是輸入向量(矩陣)在權重矩陣上的流動過程,大概就像下面這個過程:

圖中,把bias也放到權重矩陣中了,並且省略了激活函數。在反向傳播過程中,梯度矩陣和權重矩陣的大小是一致的,因為每個權重參數都需要一個梯度來更新。神經網絡的學習過程,實際上是調整權重矩陣中各個元素的大小的過程

 

二. LSTM神經網絡的參數數目

lstm的計算公式是

假設input_size=150,hidden_size=64,那么

  • $W_{ii}$、$W_{if}$、$W_{ig}$、$W_{io}$的大小都是64*150的矩陣,$b_{ii}$、$b_{if}$、$b_{ig}$、$b_{io}$都是長度為64的向量;
  • $W_{hi}$、$W_{hf}$、$W_{hg}$、$W_{ho}$的大小都是64*64的矩陣,$b_{hi}$、$b_{hf}$、$b_{hg}$、$b_{ho}$都是長度為64的向量。

在PyTorch的torch.nn.LSTM模塊中,會把幾個向量按0方向拼接在一起:

  • 把$W_{ii}$、$W_{if}$、$W_{ig}$、$W_{io}$拼接成一個大小為256*150矩陣,叫做weight_ih_l0;把$b_{ii}$、$b_{if}$、$b_{ig}$、$b_{io}$拼接成一個長度為256的向量,叫做bias_ih_l0;
  • 把$W_{hi}$、$W_{hf}$、$W_{hg}$、$W_{ho}$拼接成一個大小為256*64矩陣,叫做weight_hh_l0;把$b_{hi}$、$b_{hf}$、$b_{hg}$、$b_{ho}$拼接成一個長度為256的向量,叫做bias_hh_l0.

所以總的參數數目是256*150 + 256 + 256*64 + 256 = 55296.

歸納一下就是:

假設input_size=x,hidden_size=h,那么這個LSTM模型的參數數目就是:4*h*x + 4*h + 4*h*h + 4*h = 4*h*(x+h+2)

 

三. LSTM神經網絡的計算過程

假設input_size=150,hidden_size=64,那么單個時間步的計算過程如下:

 星號*表示逐元素相乘。

 

 

【參考資料】

LSTM的神經元個數

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM