干货|使用PyTorch从零开始构建Elman循环神经网络

Posted 全球人工智能

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了干货|使用PyTorch从零开始构建Elman循环神经网络相关的知识,希望对你有一定的参考价值。

!


摘要: 循环神经网络是如何工作的?如何构建一个Elman循环神经网络?在这里,教你手把手创建一个Elman循环神经网络进行简单的序列预测。


本文以最简单的RNNs模型为例:Elman循环神经网络,讲述循环神经网络的工作原理即便是你没有太多循环神经网络(RNNs)的基础知识,也可以很容易的理解。为了让你更好的理解RNNs我们使用Pytorch张量包和autograd从头开始构建Elman循环神经网络。该文中完整代码在Github上是可实现的。

在这里,假设你对前馈神经网络略有了解。Pytorchautograd更为详细的内容请查看我的其他教程

干货|使用PyTorch从零开始构建Elman循环神经网络

Elman循环神经网络

Jeff Elman首次提出了Elman循环神经网络,并发表在论文《Finding structure in time》中:它只是一个三层前馈神经网络,输入层由一个输入神经元x1一组上下文神经元单元{c1 ... cn}组成隐藏层前一时间步的神经元作为上下文神经元的输入在隐藏层中每个神经元有一个上下文神经元。由于前一时间步的状态作为输入的一部分,因此我们可以说Elman循环神经网络拥有一定的内存——上下文神经元代表一个内存。

预测正弦波

现在,我们来训练RNNs学习正弦函数。在训练过程中,一次为模型提供一个数据,这就是为什么我们只需要一个输入神经元x1,并且我们希望在下一时间步预测该值。输入序列x20个数据组成,并且目标序列与输入序列相同。

干货|使用PyTorch从零开始构建Elman循环神经网络 

模型实现

首先导入包。

干货|使用PyTorch从零开始构建Elman循环神经网络

接下来,设置模型的超参数。设置输入层的大小为76个上下文神经元和1个输入神经元),seq_length用来定义输入和目标序列的长度。

干货|使用PyTorch从零开始构建Elman循环神经网络

生成训练数据:x是输入序列,y是目标序列。

干货|使用PyTorch从零开始构建Elman循环神经网络

创建两个权重矩阵。大小为(input_sizehidden_size)的矩阵w1用于隐藏连接的输入,大小为(hidden_sizeoutput_size)的矩阵w2用于隐藏连接的输出。 用零均值的正态分布对权重矩阵进行初始化。

干货|使用PyTorch从零开始构建Elman循环神经网络

定义forward方法,其参数为input向量、context_state向量和两个权重矩阵,连接inputcontext_state创建xh向量。对xh向量和权重矩阵w1执行点积运算,然后用tanh函数作为非线性函数,在RNNstanhsigmoid效果要好。 然后对新的context_state和权重矩阵w2再次执行点积运算。 我们想要预测连续值,因此这个阶段不使用任何非线性。

请注意,context_state向量将在下一时间步填充上下文神经元。 这就是为什么我们要返回context_state向量和out

干货|使用PyTorch从零开始构建Elman循环神经网络

训练

训练循环的结构如下:

1.外循环遍历每个epochepoch被定义为所有的训练数据全部通过训练网络一次。在每个epoch开始时,将context_state向量初始化为0

2.内部循环遍历序列中的每个元素。执行forward方法进行正向传递,该方法返回predcontext_state,将用于下一个时间步。然后计算均方误差(MSE)用于预测连续值。执行backward()方法计算梯度,然后更新权重w1w2。每次迭代中调用zero_()方法清除梯度,否则梯度将会累计起来。最后将context_state向量包装放到新变量中,以将其与历史值分离开来。

干货|使用PyTorch从零开始构建Elman循环神经网络 

训练期间产生的输出显示了每个epoch的损失是如何减少的,这是一个好的衡量方式。损失的逐渐减少则意味着我们的模型正在学习。

干货|使用PyTorch从零开始构建Elman循环神经网络 

预测

一旦模型训练完毕,我们就可以进行预测。在序列的每一步我们只为模型提供一个数据,并要求模型在下一个步预测一个值。

干货|使用PyTorch从零开始构建Elman循环神经网络

预测结果如下图所示:黄色圆点表示预测值,蓝色圆点表示实际值,二者基本吻合,因此模型的预测效果非常好。

结论

在这里,我们使用了Pytorch从零开始构建一个基本的RNNs模型,并且学习了如何将RNNs应用于简单的序列预测问题。

原文:https://www.cpuheater.com/deep-learning/introduction-to-recurrent-neural-networks-in-pytorch/?spm=a2c4e.11153959.blogcont573311.12.75d2668ccjJf5x

-马上学习AI挑战百万年薪-

点击“阅读原文”,查看详情

以上是关于干货|使用PyTorch从零开始构建Elman循环神经网络的主要内容,如果未能解决你的问题,请参考以下文章

循环神经网络 RNN 从零开始实现 动手学深度学习v2 pytorch

零基础构建神经网络:使用PyTorch从零编写前馈神经网络代码

从零开始学习深度学习35. 门控循环神经网络之门控循环单元(gated recurrent unit,GRU)介绍Pytorch实现GRU并进行训练预测

万字干货:如何从零开始构建企业级推荐系统?

从零开始学习YOLOv36. 模型构建中的YOLOLayer

从零开始学PyTorch:一文学会线性回归逻辑回归及图像分类