当前位置:   article > 正文

深度学习之RNN循环神经网络(理论+图解+Python代码部分)

rnn循环神经网络

目录

前言

一、普通神经网络

二、循环神经网络

1.前向传播

2.反向传播算法BPTT

3.自然语言处理之RNN

 4.梯度问题

4.1梯度爆炸

4.2梯度消失:

5.Keras建立RNN模型进行IMDb情感分析的Python代码

前言

前段时间实验室人手一本《Deep Learning》,本文章结合这本圣经和博客上各类知识以及我自己的理解和实践,针对RNN循环神经网络作出总结。

RNN(Recurrent Neural Network)循环神经网络是一类用于处理序列数据的神经网络。首先我们要明确什么是序列数据,摘取百度百科词条:时间序列数据是指在不同时间点上收集到的数据,这类数据反映了某一事物、现象等随时间的变化状态或程度。这是时间序列数据的定义,当然这里也可以不是时间,比如文字序列,但总归序列数据有一个特点——后面的数据跟前面的数据有关系

一、普通神经网络

 

 

在介绍RNN之前先回顾什么是普通神经网络:把每一个元素节点作为计算节点,边长作为权重,打个简单的比分:x向量作为输入,输出y比如0.5,0.7,与真实情况的y0,1对比,把损失算出来,对权重求导,乘上learningrate,,对前面的权重进行更新,w1和w1’的关系就是一段位移,更新后0.2,0.9差一点,就继续更新,直到跟真实的y一模一样(一点一点下来梯度下降的意思)。以上是普通神经网络以一般过程。这个BP反向传播算法的详细过程可参考:

https://blog.csdn.net/weixin_39441762/article/details/80446692

 

二、循环神经网络

那现在我们发现一件事儿,在普通神经网络里,x1,x2,x3是单独处理的,没有顺序关系,也就是说输入换了位置,输出也是一样的,那么信息之间的一些特征是否会在时间序列上得到体现,我们是否能够提取出时间序列的一些关系来更好的表达元数据本身。

如果我们想要处理文字或者语音的问题呢,我们需要把它看成一个连续的整体,这里呢我们就给这个神经网络加上一个反馈回路(见下图),这个回路可以把上一个时间输出的信息作为下一个时间的输入来进行处理。比如说这里有一段文字,先把它分成一个个的词,然后在把这一段词输入到这个神经网络中,第一次先输入第一个词x0,输出h0,中间隐层还有个雁过留声的信息传到下一个时间,当第二个词x1传进来的时候会结合上一个词输出的结果进行一个综合的判断,然继续输出继续传到x2…,这样会把语音或者文字这样一个序列的数据一个一个输进来进行综合的判断,它本质上来说还是一个bp神经网络,但是他们之间的一个区别呢就是这样一个反馈回路(记住上一次的输出+这一次的输入)来帮助决策。

RNN就是在x1学习完走开后雁过留声,留下自己一点点的残余遗迹,x2来的时候受一点x1残余的影响进行学习,x3来的时候受x1和x2残余的影响……使得结果与普通神经网络有点不一样。

 

 

1.前向传播

有了这样一个大概的概念之后呢我们看一下前向的计算方法

RNN和HMM在时间上的思维有一点像(就是受之前数据的影响)。多一个自我循环的过程(多一个记忆存储点)看下这个传播过程。下面st方程里,第一项是(input的量)输入,第二项是上一个隐层记忆的量,f是各种方程的代表,通常会用tanh函数,ot方程里是此刻记忆的输出。

如果时间步T=3也就是说一个句子中有一共有3个词,它们作为输入依次进入这个网络,就相当于把一个神经元拉伸成3个,s就是我们说的记忆,因为它把前面的信息都记录下来了。

 

2.反向传播算法BPTT

将RNN展开之后,前向传播就是依次按照时间的顺序计算一次就好了,反向传播就是从最后一个时间累积的损失传递回来即可,这与普通的神经网络训练本质上是相似的。

即通过梯度下降法一轮轮

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/500448
推荐阅读
相关标签
  

闽ICP备14008679号