上⼀节介绍的n元语法中,时间步t的词


本节介绍循环神经网络。它并非刚性地记忆所有固定长度的序列,⽽是通过隐藏状态来存储之前时间步的信息。⾸先我们回忆一下前面介绍过的多层感知机,然后描述如何添加隐藏状态来将它变成循环神经网络。
目录
1. 不含隐藏状态的神经网络
让我们考虑一个含单隐藏层的多层感知机。给定样本数为n,输入个数(特征数或特征向量维度)为d的小批量数据样本



其中隐藏层权重参数


其中输出变量



2. 含隐藏状态的循环神经网络
现在我们考虑输入数据存在时间相关性的情况。假设




与多层感知机相比,我们在这里添加了


循环神经网络有很多种不同的构造方法。含上式所定义的隐藏状态的循环神经网络是极为常⻅的一种。 若无特别说明,之后几节中的循环神经网络均基于上式中隐藏状态的循环计算。在时间步t ,输出层的输出和多层感知机中的计算类似:
循环神经网络的参数包括隐藏层的权重





下图展示了循环神经网络在3个相邻时间步的计算逻辑。在时间步t,隐藏状态的计算可以看成是将输⼊








我们刚提到,隐藏状态中




import torch print(torch.__version__)
X, W_xh = torch.randn(3, 1), torch.randn(1, 4) #(batch_size,features) H, W_hh = torch.randn(3, 4), torch.randn(4, 4) #(batch_size,hidden_units) torch.matmul(X, W_xh) + torch.matmul(H, W_hh)
将矩阵X和H按列(维度1)连结,连结后的形状为(3,5).可见,连结后的矩阵在维度1的长度为矩阵X和H在维度1的长度之和(1+4).然后将矩阵W_xh和W_hh按行(维度0)拼接,连结后的矩阵形状为(5,4).最后两个链接后的矩阵相乘,得到形状和结果相同的矩阵。
torch.matmul(torch.cat((X, H), dim=1), torch.cat((W_xh, W_hh), dim=0))
3. 应用:基于字符级循环神经网络的语言模型
最后我们介绍如何应用循环神经网络来构建一个语言模型。设⼩批量中样本数为1(batch_size=1),⽂本序列 为“想”“要”“有”“直”“升”“机”。下图演示了如何使用循环神经网络基于当前和过去的字符来预测下一个字符。在训练时,我们对每个时间步的输出层输出使用softmax运算,然后使用交叉熵损失函数来计算它与标签的误差。在下图中,由于隐藏层中隐藏状态的循环计算,时间步3的输出

因为每个输⼊词是一个字符,因此这个模型被称为字符级循环神经⽹络(character-level recurrent neural network)。因为不同字符的个数远小于不同词的个数(对于英⽂尤其如此),所以字符级循环神经网络的计算通常更加简单。在接下来的⼏节里,我们将介绍它的具体实现。
4. 小结
1)使用循环计算的网络即循环神经⽹络。
2)循环神经网络的隐藏状态可以捕捉截⾄当前时间步的序列的历史信息。
3)循环神经网络模型参数的数量不随时间步的增加而增长(参数共享)。
4)可以基于字符级循环神经网络来创建语言模型。
来源:CSDN
作者:CoreJT
链接:https://blog.csdn.net/sdu_hao/article/details/103239468