【小白之RNN、LSTM和GRU详解】

前言

本人是小白一枚,目前还在学习当中,文章内容仅供大家参考(部分内容和图片摘自其他文章,侵删!),若有问题欢迎大家指出!

RNN循环神经网络的诞生

上一篇文章我们介绍了一些基础知识和CNN卷积神经网络。CNN向我们展现了它所具有的强大功能,特别是在处理图像方面的领域,那么CNN有没有缺点呢?答案当然是有的,最主要的缺点有以下两点:

  • (1)不能处理时间序列
    这里的意思是说,CNN在处理输入数据时,对每次输入的数据处理是独立的。这样做的缺点之一就是不能处理时间序列,所谓时间序列就是指数据拥有时序性,某个时刻序列的输出和前面时刻的序列有关系。例如:我们在阅读文章时,经常会遇到指代词,要想知道这个指代词具体指代的是什么,我们就需要去阅读这个词前面的文章。这里不了解时间序列的小伙伴可以去查一下。

  • (2)输入数据的长度固定
    我们生活中经常会用到语音输入和机器翻译等,这些功能在使用之前并不知道即将输入数据的长度是多少。了解CNN卷积神经网络的小伙伴都知道,CNN的输入是固定的,它做不到接收任意长度的序列。

  • 为了处理上面的这两种问题,这就需要有一种能力更强的模型:该模型具有一定的记忆能力,能够按时序依次处理任意长度的信息。这个模型就是本篇文章的主角:循环神经网络(Recurrent Neural Networks,简称RNN)

深入RNN

话不多说,先上图:
RNN循环神经网络
从图中等号左边可以看到,相比于普通的神经网络,它多了一个循环圈,这代表的是这一时刻的输出会作用到下一个时刻。把左边这个图按照时间点展开就得到了右边这个图,这样更便于我们理解它,从图中我们可以看出某个时间戳的输入不仅有本时间戳的输入,还有上个时间戳的输出,计算公式如下图。
RNN计算公式
在不同的时间点,RNN 的输入都与将之前的时间状态有关,tn 时刻网络的输出结果是该时刻的输入和所有历史共同作用的结果,这就达到了对时间序列建模的目的。

如何训练RNN

对于RNN是的训练和对传统的ANN训练一样。同样使用BP误差反向传播算法,不过有一点区别。如果将RNNs进行网络展开,那么参数是共享的,而传统神经网络却不是的。并且在使用梯度下降算法中,每一步的输出不仅依赖当前步的网络,并且还以来前面若干步网络的状态。例如:对于ht时刻来说,求它的梯度需要涉及到{h0…ht-1}所有的梯度。该学习算法称为Backpropagation Through Time (BPTT)。需要意识到的是,BPTT无法解决长时依赖问题(即当前的输出与前面很长的一段序列有关,一般超过十步就无能为力了),因为BPTT会带来所谓的梯度消失或梯度爆炸问题。当然,有很多方法去解决这个问题,如LSTM便是专门应对这种问题的。

Long Short Term Memory 网络(简称 LSTM,长短期记忆网络)

LSTM 通过“门”的结构来去除或者增加信息到细胞状态,以此来解决长时间依赖问题。门是一种让信息选择式通过的方法。一个 LSTM 单元的结构示意图如下:
LSTM
通过上图我们可以看到,中间有一个 cell(细胞),这也是 LSTM 用于判断信息是否有用的 “处理器”。同时,cell 旁边被放置了三扇门,分别是输入门(Input Gate)、遗忘门(Forget Gate)和输出门(Output Gate)。一个信息进入 LSTM 的网络当中,可以根据规则来判断是否有用,只有符合要求的信息才会被留下,不符合的信息则会通过遗忘门被遗忘。
在数字电路中,门(gate)是一个二值变量 {0,1},0 代表关闭状态、不允许任何信息通过;1 代表开放状态,允许所有信息通过。而 LSTM 中的 “门” 也是类似,但它是一个 “软” 门,介于(0,1)之间,表示以一定的比例使信息通过。
下面我们依次探讨一下每个门都干了什么?

遗忘门(Forget Gate)

遗忘门
顾名思义,遗忘门就是对当前细胞状态进行选择性的遗忘,把没用的信息遗忘掉。该门会读取ht−1​​和xt​​,输出一个在 0 到 1 之间的数值给每个在细胞状态Ct−1​​中的数字。1 表示“完全保留”,0 表示“完全舍弃”。

输入门(Input Gate)

输入门
输入门的作用就是用来控制输入,具体的做法是:
(1)sigmoid用来决定我们将要更新哪些值it
(2)tanh用来创建一个新得候选值向量C~t

更新细胞状态

经过遗忘门和输出门之后,我们知道了该丢弃哪些旧信息,添加哪些新信息。现在我们来更新细胞状态。
更新细胞状态
更新的过程就是,先将Ct-1与ft相乘,丢弃我们不需要的信息,接着在与it和C~t的乘积作一个拼接,添加我们新的信息。其中ft是遗忘门的输出,it和C_t是我们输入门的输出。经过这个过程,我们该时间戳的细胞状态更新完毕。

输出门(Output Gate)

输出门
如上图所示,输出门的过程分为两部,首先通过sigmoid 来确定细胞状态的哪个部分将输出,最后把细胞状态通过 tanh 进行处理,并将它和 sigmoid 门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。

门控循环单元GRU(Gate Recurrent Unit)

GRU
知道了 LSTM 的工作原理之后,来了解一下 GRU。GRU 是新一代的循环神经网络,与 LSTM 非常相似。与 LSTM 相比,GRU 去除掉了细胞状态,使用隐藏状态来进行信息的传递。它只包含两个门:更新门和重置门。

门控循环单元GRU将计算候选隐藏状态来辅助稍后的隐藏状态计算。我们将当前时间戳重置门的输出与上一时间步隐藏状态做按元素乘法。如果重置门中元素值接近0,那么意味着重置对应隐藏状态元素为0,即丢弃上一时间步的隐藏状态。如果元素值接近1,那么表示保留上一时间步的隐藏状态。然后,将按元素乘法的结果与当前时间戳的输入连结,再通过含激活函数tanh的全连接层计算出候选隐藏状态,其所有元素的值域为 [−1,1]。

从这一步可以看出,重置门控制了上一时间戳的隐藏状态如何流入当前时间戳的候选隐藏状态。而上一时间戳的隐藏状态可能包含了时间序列截至上一时间步的全部历史信息。因此,重置门可以用来丢弃与预测无关的历史信息。有助于捕捉时间序列里短期的依赖关系。

更新门用于控制前一时刻的状态信息被带入到当前状态中的程度,也就是更新门帮助模型决定到底要将多少过去的信息传递到未来,简单来说就是用于更新记忆。作用相当于把遗忘门和输入门合并了。更新门有助于捕捉时间序列里长期的依赖关系。

最后,可以使用当前时间戳的更新门来对上一时间戳的隐藏状态和当前时间戳的候选隐藏状态做组合,计算公式如图中所示。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值