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

目录

前言

一、普通神经网络

二、循环神经网络

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

即通过梯度下降法一轮轮的迭代,得到合适的RNN模型参数U,W,V,b,c。由于我们是基于时间反向传播,所以RNN的反向传播有时也叫做BPTT(back-propagation through time)。当然这里的BPTT和普通神经网络也有很大的不同点,即这里所有的U,W,V,b,c在序列的各个位置是共享的,反向传播时我们更新的是相同的参数

如图,计算图的节点包括U、V、W、b、c,以及以t为索引节点序列对于每一个节点N,我们需要基于N后面的节点的梯度,递归的计算梯度.

我们从序列的末尾开始,反向进行计算。在最后的时间步T,只有 作为后续节点,因此这个梯度很简单

然后,我们可以从时刻t=T-1到t=1反向迭代,通过时间反向传播梯度,注意同时具有两个后续节点

  • 52
    点赞
  • 437
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值