天天看點

#yyds幹貨盤點# RNN多層感覺機隐藏層的計算循環神經網絡隐狀态的計算

多層感覺機隐藏層的計算

#yyds幹貨盤點# RNN多層感覺機隐藏層的計算循環神經網絡隐狀态的計算

上面的圖是一個多層感覺機模型。

輸入X是四維向量,但個隐藏層是五維向量,輸出結果是三維向量。

隐藏層H的計算公式為:

$$

H = \phi(w_{1}X+b_{1})

$$

  • 其中$[H]{5 \times 1}$,$[X]{4 \times 1}$, $[w_1]{5 \times 4}$,$[b_1]{5\times 1}$
  • $\phi$為激活函數

上邊就是一個普通隐藏層的計算。

循環神經網絡隐狀态的計算

循環神經網絡(Recurrent neural networks, RNNs)是具有隐藏狀态的神經網絡。

隐狀态和隐藏層是不同的 ,隐藏層是多層網絡的一部分,隐藏在輸入和輸出之間的層。隐狀态是在時序序列中,後邊的内容要依賴于前邊的計算結果而進行的計算。

#yyds幹貨盤點# RNN多層感覺機隐藏層的計算循環神經網絡隐狀态的計算

上圖就是帶有隐狀态的RNN的模型圖。

計算方式:

$$

\

H_{t+1} = \phi(w_{xh}X_{t+1} + w_{hh}H_{t}+b_{h})

$$

  • $\phi$為激活函數

在這裡加上了一個$H_{t-1}w_{hh}$這一項,實作了在時序上延續上一步的隐狀态。計算過程就是将本部的輸入和上一步的隐狀态都考慮在内,并将其放入激活函數。

至于輸出的計算和普通的MLP沒什麼差別:

$$

O_t = w_{ho} H_t + b_o

\

O_{t+1} = w_{ho} H_{t+1} + b_o

$$

補充 隐狀态的計算化簡

$$

H_t = \phi(w_{xh}X_t + w_{hh}H_{t-1}+b_{h})

$$

這個公式可以化簡為

$$

H_t = \phi(w_{h}[X_t,H_{t-1}]+b_{h})

$$

  • 其中$w_h$是将$w_{xh}$和$w_{hh}$拼接了
  • $[X_t,H_{t-1}]$也是将$X_t$和$H_{t-1}$拼接了。

這個算一下矩陣計算就知道了。

假設每個輸入都是一個三維的one-hot向量,是以每個$[X_t]_{3\times 1}$

假設每個隐藏層都是一個四維向量,那麼$[H_t]_{4\times 1}$

這樣我們可以知道每個$[w_{xh}]{4\times3}$ ,$[w{hh}]{4\times 4}$,$[b_h]{4\times 1}$

import torch
from d2l import torch as d2l
X, W_xh = torch.normal(0, 1, (3, 1)), torch.normal(0, 1, (1, 4))
H, W_hh = torch.normal(0, 1, (3, 4)), torch.normal(0, 1, (4, 4))
print(torch.matmul(X, W_xh) + torch.matmul(H, W_hh))
print(torch.matmul(torch.cat((X, H), 1), torch.cat((W_xh, W_hh), 0)))
           
>>
tensor([[ 1.5454, -0.4014, -0.6478, -1.3016],
        [-0.5885,  0.5765,  1.6251,  0.7733],
        [ 0.9793,  0.1511,  1.0349,  0.4170]])
           

繼續閱讀