0
点赞
收藏
分享

微信扫一扫

#yyds干货盘点# RNN

多层感知机隐藏层的计算

image.png
上面的图是一个多层感知机模型。

输入X是四维向量,但个隐藏层是五维向量,输出结果是三维向量。

隐藏层H的计算公式为:

$$
H = \phi(w{1}X+b{1})
$$

  • 其中$[H]{5 \times 1}$,$[X]{4 \times 1}$, $[w1]{5 \times 4}$,$[b1]{5\times 1}$
  • $\phi$为激活函数

上边就是一个普通隐藏层的计算。

循环神经网络隐状态的计算

循环神经网络(Recurrent neural networks, RNNs)是具有隐藏状态的神经网络。

隐状态和隐藏层是不同的 ,隐藏层是多层网络的一部分,隐藏在输入和输出之间的层。隐状态是在时序序列中,后边的内容要依赖于前边的计算结果而进行的计算。
image.png

上图就是带有隐状态的RNN的模型图。

计算方式:

$$
\
H{t+1} = \phi(w{xh}X{t+1} + w{hh}H{t}+b{h})
$$

  • $\phi$为激活函数

在这里加上了一个$H{t-1}w{hh}$这一项,实现了在时序上延续上一步的隐状态。计算过程就是将本部的输入和上一步的隐状态都考虑在内,并将其放入激活函数。

至于输出的计算和普通的MLP没什么区别:

$$
Ot = w{ho} H_t + bo
\
O
{t+1} = w{ho} H{t+1} + b_o
$$

补充 隐状态的计算化简

$$
Ht = \phi(w{xh}Xt + w{hh}H{t-1}+b{h})
$$

这个公式可以化简为

$$
Ht = \phi(w{h}[Xt,H{t-1}]+b_{h})
$$

  • 其中$wh$是将$w{xh}$和$w_{hh}$拼接了
  • $[Xt,H{t-1}]$也是将$Xt$和$H{t-1}$拼接了。

这个算一下矩阵计算就知道了。

假设每个输入都是一个三维的one-hot向量,所以每个$[Xt]{3\times 1}$

假设每个隐藏层都是一个四维向量,那么$[Ht]{4\times 1}$

这样我们可以知道每个$[w{xh}]{4\times3}$ ,$[w{hh}]{4\times 4}$,$[bh]{4\times 1}$

这样$w_{xh}Xt$、$w{hh}H_{t-1}$计算出来应该是个四维向量。

$w{xh}$和$w{hh}$横向拼接之后变为$[wh]{4\times 7}$,$Xt$和$H{t-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]])
举报

相关推荐

0 条评论