Pytorch实现简易rnn(正弦函数图像预测)

作者: 陈千鹤来源:人工智能学习圈

一、RNN是什么

循环神经网络(Recurrent Neural Network, RNN)是一类以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的递归神经网络(recursive neural network)

简单来说就是在正常的神经网络中每个节点增加一个记忆单元,存储节点间的联系性。

那么我们就实现了在层之间的神经元之间也建立权连接。

这是一个标准的RNN结构图,图中每个箭头代表做一次变换,也就是说箭头连接带有权值。左侧是折叠起来的样子,右侧是展开的样子,左侧中h旁边的箭头代表此结构中的“循环“体现在隐层。

在展开结构中我们可以观察到,在标准的RNN结构中,隐层的神经元之间也是带有权值的。也就是说,随着序列的不断推进,前面的隐层将会影响后面的隐层。图中O代表输出,y代表样本给出的确定值,L代表损失函数,我们可以看到,“损失“也是随着序列的推荐而不断积累的。

除上述特点之外,标准RNN的还有以下特点:

1、权值共享,图中的W全是相同的,U和V也一样。

2、每一个输入值都只与它本身的那条路线建立权连接,不会和别的神经元连接。

二、为什么需要RNN

比如,当我们在理解一句话时,孤立的理解这句话的每个词是不够的,我们考虑上下文的关系;当我们处理视频的时候,我们也不能只单独的去分析每一帧,而要分析视频前后的关联。

因此我们需要一种网络来处理序列信息。

三、计算

前向计算

对于t时刻:

后向传播

来源:https://blog.csdn.net/zhaojc1995/article/details/80572098

四、Pytorch实现

我们这次尝试的是根据已知的一部分sin函数值的图像,预测下一部分未知的图像

要是用的库:

参数设定:

网络结构定义:

网络的训练:

预测及绘图:

效果展示:

当然这只是一个简单的应用,看上去效果也不错可以接受,但是当遇到更复杂的问题是,又会出现梯度离散或者梯度爆炸等问题,我们下次再进行研究。

原文链接:https://zhuanlan.zhihu.com/p/147685918返回搜狐,查看更多

阅读 ()
平台声明
该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。