循环神经网络(RNN)
循环神经网络区别于其他神经网络在于循环
二字,这里的循环是指隐含的输出(v)
重新输入隐含权重参与模型训练,不同时刻的输入(X)
也要放入隐含层权重中。隐含权重是循环到不同时间段其参数不一样,但隐含权重是共用
的,注意在图中unfold
下隐含权重矩阵只是一个矩阵
(这里稍后解释:隐含的输出(v)和对应的输入(x)怎样共用一个矩阵),之所以呈现多个是为了对应不同的时刻。
在继续往下叙述之前,有一个优化问题要解决,即共用一个矩阵,这里可以通用一个简单的例子进行说明:
为方便理解,隐含变量为二维,输入的为一维,目的是得到新的隐含输入即二维。
我们可以发现,权重系数并排综合到一起,得到结果同样。这就提高了并行处理能力。
RNN源代码实现
import torch.nn as nn
class RNN(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super(RNN, self).__init__()
self.hidden_size = hidden_size
self.i2h = nn.Linear(input_size + hidden_size, hidden_size)
self.i2o = nn.Linear(input_size + hidden_size, output_size)
self.softmax = nn.LogSoftmax(dim=1)
def forward(self, input, hidden):
combined = torch.cat((input, hidden), 1)
hidden = self.i2h(combined)
output = self.i2o(combined)
output = self.softmax(output)
return output, hidden
def initHidden(self):
return torch.zeros(1, self.hidden_size)
复制代码
循环神经网络的特点是每次的输入都有上一刻隐含层信息的参与,但也仅仅是上一刻
,若神经网络输入不仅仅和上一刻时间的信息有关,换句话说,此刻时间的所需要训练的模型与很久之前信息也有关联,怎么让其参与进来?这就需要引入长短时记忆网络(LSTM),不过在谈论该模型之前,先研究再此基础上改进后发表的paper即GRU模型,该篇相比于LSTM模型更加容易理解。
GRU模型
GRU模型需要注意的是门控
的作用,更确定说是在公式中作为权重
的体现或者说是mask
的效果。话不多说,理解这四个公式就理解了GRU模型,这样在看图就更加容易理解。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
喜欢就支持一下吧
相关推荐