我是靠谱客的博主 平淡日记本,最近开发中收集的这篇文章主要介绍循环神经网络详解(RNN + LSTM)(一),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、什么是循环神经网络:

  • 循环神经网络(Rerrent Neural Network, RNN),对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,利用了RNN的这种能力,使深度学习模型在解决语音识别、语言模型、机器翻译以及时序分析等NLP领域的问题时有所突破。
  • 我们需要重点来了解一下RNN的特点这句话,什么是序列特性呢?就是符合时间顺序,逻辑顺序,或者其他顺序就叫序列特性,举几个例子:
  • 拿人类的某句话来说,也就是人类的自然语言,是不是符合某个逻辑或规则的字词拼凑排列起来的,这就是符合序列特性。
  • 语音,我们发出的声音,每一帧每一帧的衔接起来,才凑成了我们听到的话,这也具有序列特性、
  • 股票,随着时间的推移,会产生具有顺序的一系列数字,这些数字也是具有序列特性。

二、为什么要发明循环神经网络:

我们先来看一个NLP很常见的问题,命名实体识别,举个例子,现在有两句话:

  • 第一句话:I like eating apple!(我喜欢吃苹果!)

  • 第二句话:The Apple is a great company!(苹果真是一家很棒的公司!)

    现在的任务是要给apple打Label,我们都知道第一个apple是一种水果,第二个apple是苹果公司,假设我们现在有大量的已经标记好的数据以供训练模型,当我们使用全连接的神经网络时,我们做法是把apple这个单词的特征向量输入到我们的模型中(如下图),在输出结果时,让我们的label里,正确的label概率最大,来训练模型,但我们的语料库中,有的apple的label是水果,有的label是公司,这将导致,模型在训练的过程中,预测的准确程度,取决于训练集中哪个label多一些,这样的模型对于我们来说完全没有作用。问题就出在了我们没有结合上下文去训练模型,而是单独的在训练apple这个单词的label,这也是全连接神经网络模型所不能做到的,于是就有了我们的循环神经网络。
    在这里插入图片描述

三、循环神经网络的结构及原理:

在这里插入图片描述

  • 我们现在这样来理解,如果把上面有W的那个带箭头的圈去掉,它就变成了最普通的全连接神经网络。x是一个向量,它表示输入层的值(这里面没有画出来表示神经元节点的圆圈);s是一个向量,它表示隐藏层的值(这里隐藏层面画了一个节点,你也可以想象这一层其实是多个节点,节点数与向量s的维度相同);U是输入层到隐藏层的权重矩阵,o也是一个向量,它表示输出层的值;V是隐藏层到输出层的权重矩阵。
  • 那么,现在我们来看看W是什么。循环神经网络的隐藏层的值s不仅仅取决于当前这次的输入x,还取决于上一次隐藏层的值s。权重矩阵 W就是隐藏层上一次的值作为这一次的输入的权重。

我们给出这个抽象图对应的具体图:在这里插入图片描述
我们从上图就能够很清楚的看到,上一时刻的隐藏层是如何影响当前时刻的隐藏层的。

如果我们把上面的图展开,循环神经网络也可以画成下面这个样子:在这里插入图片描述

  • 现在看上去就比较清楚了,这个网络在t时刻接收到输入X(t)之后,隐藏层的值是S(t),输出值是O(t) 。关键一点是, S(t)的值不仅仅取决于 X(t) ,还取决于 S(t-1) 。我们可以用下面的公式来表示循环神经网络的计算方法:
    RNN公式

  • 注意:

    • 为了简单说明问题,偏置都没有包含在公式里面。

四、什么是LSTM:

  • Long short-term memory,翻译过来就是长短期记忆,是RNN的一种,比普通RNN高级,基本一般情况下说使用RNN都是使用LSTM,现在很少有人使用上面讲的那个最基础版的RNN,因为那个存在一些问题,LSTM效果好,当然会选择它了!

五、为什么LSTM比普通RNN效果好?

  • 这里就牵扯到梯度消失和爆炸的问题了,上面那个最基础版本的RNN,我们可以看到,每一时刻的隐藏状态都不仅由该时刻的输入决定,还取决于上一时刻的隐藏层的值,如果一个句子很长,到句子末尾时,它将记不住这个句子的开头的详细内容。LSTM通过它的“门控装置”有效的缓解了这个问题,这也就是为什么我们现在都在使用LSTM而非普通RNN。

六、揭开LSTM神秘的面纱:

既然前面已经说了,LSTM是RNN的一种变体,更高级的RNN,那么它的本质还是一样的,还记得RNN的特点吗,可以有效的处理序列数据,当然LSTM也可以,还记得RNN是如何处理有效数据的吗,是不是每个时刻都会把隐藏层的值存下来,到下一时刻的时候再拿出来用,这样就保证了,每一时刻含有上一时刻的信息,我们把存每一时刻信息的地方叫做Memory
Cell,中文就是记忆细胞,可以这么理解。

打个比喻吧,普通RNN就像一个乞丐,路边捡的,别人丢的,什么东西他都想要,什么东西他都不嫌弃,LSTM就像一个贵族,没有身份的东西他不要,他会精心挑选符合自己身份的物品。这是为什么呢?有没有思考过,原因很简单,乞丐没有选择权,他的能力注定他只能当一个乞丐,因此他没有挑选的权利,而贵族不一样,贵族能力比较强,经过自己的打拼,终于有了地位和身份,所以可以选择舍弃一些低档的东西,这也是能力的凸显。

LSTM和普通RNN正是贵族和乞丐,RNN什么信息它都存下来,因为它没有挑选的能力,而LSTM不一样,它会选择性的存储信息,因为它能力强,它有门控装置,它可以尽情的选择。普通RNN只有中间的Memory用来存所有的信息,而从下图我们可以看到,LSTM多了三个Gate,也就是三个门,什么意思呢?在现实生活中,门就是用来控制进出的,门关上了,你就进不去房子了,门打开你就能进去,同理,这里的门是用来控制每一时刻信息记忆与遗忘的。

依次来解释一下这三个门:

Input Gate:中文是输入门,在每一时刻从输入层输入的信息会首先经过输入门,输入门的开关会决定这一时刻是否会有信息输入到Memory Cell。
Output Gate:中文是输出门,每一时刻是否有信息从Memory Cell输出取决于这一道门。
Forget Gate:中文是遗忘门,每一时刻Memory Cell里的值都会经历一个是否被遗忘的过程,就是由该门控制的,如果打卡,那么将会把Memory Cell里的值清除,也就是遗忘掉。
在这里插入图片描述

  • 按照上图的顺序,信息在传递的顺序,是这样的:先经过输入门,看是否有信息输入,再判断遗忘门是否选择遗忘Memory Cell里的信息,最后再经过输出门,判断是否将这一时刻的信息进行输出。

七、LSTM内部结构

在这里插入图片描述

  • 首先看图中最中间的地方,Cell,我们上面也讲到了memory cell,也就是一个记忆存储的地方,这里就类似于普通RNN的S(t) ,都是用来存储信息的,这里面的信息都会保存到下一时刻,其实标准的叫法应该是 h(t) ,因为这里对应神经网络里的隐藏层,所以是hidden的缩写,无论普通RNN还是LSTM其实t时刻的记忆细胞里存的信息,都应该被称为h(t) 。再看最上面的a ,是这一时刻的输出,也就是类似于普通RNN里的 O(t) 。最后,我们再来看这四个Z(o), Z(f), Z(i), Z,这四个相辅相成,才造就了中间的Memory Cell里的值,普通RNN里有个 X(t)作为输入,那LSTM的输入在哪?别着急,其实这四个 Z(o), Z(f), Z(i), Z 都有输入向量X(t)的参与。对了,在解释这四个分别是什么之前,我要先解释一下上图的所有这个符号,
    在这里插入图片描述
    都代表一个激活函数,LSTM里常用的激活函数有两个,一个是tanh,一个是sigmoid。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 其中 Z是最为普通的输入,可以从上图中看到, Z 是通过该时刻的输入X(t)和上一时刻存在memory
    cell里的隐藏层信息h(t-1) 向量拼接,再与权重参数向量 W点积,得到的值经过激活函数tanh最终会得到一个数值,也就是Z,注意只有Z的激活函数是tanh,因为 Z是真正作为输入的,其他三个都是门控装置。
  • 再来看 Z(i),input gate的缩写i,所以也就是输入门的门控装置,Z(i)同样也是通过该时刻的输入X(t)和上一时刻隐藏状态,也就是上一时刻存下来的信息 h(t-1)向量拼接,在与权重参数向量w(i)点积(注意每个门的权重向量都不一样,这里的下标i代表input的意思,也就是输入门)。得到的值经过激活函数sigmoid的最终会得到一个0-1之间的一个数值,用来作为输入门的控制信号。
  • 以此类推,Z(f),Z(o) 分别是缩写forget和output的门控装置,原理与上述输入门的门控装置类似。
  • 上面说了,只有 Z是输入,其他的三个都是门控装置,负责把控每一阶段的信息记录与遗忘,具体是怎样的呢?我们先来看公式:

首先解释一下,经过这个sigmod激活函数后,得到的 Z(i), Z(f) Z(o) 都是在0到1之间的数值,1表示该门完全打开,0表示该门完全关闭。

参考资料

https://zhuanlan.zhihu.com/p/123211148

最后

以上就是平淡日记本为你收集整理的循环神经网络详解(RNN + LSTM)(一)的全部内容,希望文章能够帮你解决循环神经网络详解(RNN + LSTM)(一)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部