自然语言处理11——RNN与LSTM

1. 循环神经网络RNN(Recurrent Neural Network)

1.1 循环神经网络的提出背景

既然我们已经有了人工神经网络和卷积神经网络,为什么还要循环神经网络?
原因很简单,无论是卷积神经网络,还是人工神经网络,他们的前提假设都是:元素之间是相互独立的,输入与输出也是独立的,比如猫和狗。 但现实世界中,很多元素都是相互连接的,比如股票随时间的变化,因为我们是根据上下文的内容推断出来的,但机器要做到这一步就相当得难了。因此,就有了现在的循环神经网络,他的本质是:像人一样拥有记忆的能力。因此,他的输出就依赖于当前的输入和记忆。

1.2 循环神经网络的结构

首先,我们来看一下RNN的整体结构,是由一个个得到RNN单元依次连接形成的,因为每个单元的工作完全一致,所以可以简化为一个循环结构,这也是RNN名字的由来。“循环“体现在隐层,在隐层之间的神经元之间也建立的权连接。这里借用吴恩达DeepLearning第五课中的结构图示意:
在这里插入图片描述
那么,RNN单元究竟是什么样的呢?下面就是RNN单元的结构及其运算公式。
在这里插入图片描述
RNN反向传播算法的思路和DNN是一样的,即通过梯度下降法一轮轮的迭代,得到合适的RNN模型参数,由于我们是基于时间反向传播,所以RNN的反向传播有时也叫做BPTT(back-propagation through time)。
在这里插入图片描述
RNN反向传播算法详见:https://www.cnblogs.com/pinard/p/6509630.html

1.3. 双向RNN

Bidirectional RNN(双向RNN)假设当前t的输出不仅仅和之前的序列有关,并且 还与之后的序列有关。在有些情况,比如有一部电视剧,在第三集的时候才出现的人物,现在让预测一下在第三集中出现的人物名字,你用前面两集的内容是预测不出来的,所以你需要用到第四,第五集的内容来预测第三集的内容,这就是双向RNN通俗的想法。

1.4 RNN存在的问题

RNN受到短期记忆的影响。如果序列很长,他们将很难将信息从较早的时间步传送到后面的时间步。因此,如果你尝试处理一段文本进行预测,RNN可能会遗漏开头的重要信息。

在反向传播期间,RNN存在梯度消失的问题(梯度用于更新神经网络权重的值)。梯消失度问题是当梯度反向传播随着时间的推梯度逐渐收缩。如果梯度值变得非常小,则不会产生太多的学习。

因此,在递归神经网络中,获得小梯度更新的层会停止学习。那些通常是较早的层。因为这些层不再学习,RNN会忘记它在较长序列中看到的内容,因此只有短期记忆。

2. LSTM与GRU

LSTM和GRU是作为短期记忆的解决方案而创建的。它们具有称为门(gate)的内部机制,它可以调节信息流。这些门可以了解序列中哪些数据重要以进行保留或丢弃。这样,它可以将相关信息传递到长序列中进行预测。

2.1 LSTM

LSTM整体结构与RNN相似,只是在每个单元中加入了三个门控单元,分别是:
遗忘门:用来让RNN“忘记”之前没有用的信息。
更新门:用来让RNN决定当前输入数据中哪些信息将被留下来。
输出门:LSTM在得到最新节点状态 c c c后,结合上一时刻节点的输出 y ( t − 1 ) y^{(t-1)} y(t1)和当前时刻节点的输入 x t x^t xt来决定当前时刻节点的输出。
具体的单元结构如下图所示:
在这里插入图片描述
那么,将这些细胞单元如RNN那样连接起来,就形成了LSTM的网络结构
在这里插入图片描述

2.2 GRU

GRU作为LSTM的一种变体,将忘记门和输入门合成了一个单一的更新门。最终的模型比标准的 LSTM 模型要简单,也是非常流行的变体。
在这里插入图片描述

LSTM只能避免RNN的梯度消失(gradient vanishing),但是不能对抗梯度爆炸问题(Exploding Gradient)。梯度膨胀(gradient explosion)不是个严重的问题,一般靠裁剪后的优化算法即可解决,比如gradient clipping(如果梯度的范数大于某个给定值,将梯度同比收缩)。

梯度剪裁的方法一般有两种:
一种是当梯度的某个维度绝对值大于某个上限的时候,就剪裁为上限。
另一种是梯度的L2范数大于上限后,让梯度除以范数,避免过大。

3. Text-RNN

3.1 Text-RNN的原理

Text-RNN其实就是RNN用于文本分类的情况,TextRNN擅长捕获更长的序列信息。具体到文本分类任务中,BiLSTM从某种意义上可以理解为可以捕获变长且双向的N-Gram信息。

3.2 利用Text-RNN模型来进行文本分类

参考

[1]https://www.cnblogs.com/pinard/p/6509630.html
[2]自然语言处理之循环神经网络 - CSDN - https://blog.csdn.net/herosunly/article/details/89554214

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Growing_Snake

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值