十分钟掌握RNN与LSTM原理及其结构应用

    Hello,又是一个分享的日子,今天博主给大家分享的是深度学习的RNN循环神经网络与RNN结构变种LSTM长短期记忆网络

本文内容概要:

  1. RNN原理

  2. RNN的各种结构以及应用

  3. RNN的Seq2Seq结构

  4. 加入attention机制的Seq2Seq结构

  5. LSTM原理

    RNN循环神经网络

 原理                                                                                     

简单BP神经网络结构

扫描二维码关注公众号,回复: 9296098 查看本文章

简单RNN结构

    首先我们来对比简单的BP和RNN的结构有啥异同,我们会发现RNN比BP多了参数h0,因此RNN的神经元公式会比BP神经元多一项(f为激励函数),如下图。至于训练过程,和BP神经网络并没有区别,都是是基于梯度下降的方法去不断缩小预测值与真实值之间差值的过程。

    已经关注这个公号比较久的小伙伴应该也知道博主之前写了一篇深度学习开端---BP神经网络,这是深度学习的开端课程,几乎所有的神经网络训练过程的数学核心原理(梯度下降)都与BP神经网络类似,RNN也不例外,因此还不熟悉的小伙伴可以花上几分钟去翻阅一下。

   

上面只是演示了简单的RNN结构,它的隐藏层h与输出y相同,我们常用的RNN结构当然不会这么简单,因此我们对上面的RNN结构进一步的拓展,如下图。这是一个经典的多输入单输出的结构。

多输入单输出的RNN结构

此时输出层的神经元公式为

     由结构和公式可知,整一个RNN结构共享1组(UWb),这是RNN结构最重要的特性,且每一个隐藏层神经元h的计算公式是由当前输入X上一个隐藏层神经元的输出组成。

    这里为了方便起见,博主只是画了序列长度为3的RNN结构,大家可以按照这样的结构,可以将整个RNN结构无限扩大,最后接一个分类输出层或者回归输出层即可。

   

优势                                                                                        

    到这里,RNN循环神经网络的原理也就讲完了,那么相比于BP神经网络和CNN卷积神经网络,RNN的优势又在哪呢?我们可以看到上面的RNN结构,输入是可以多个且有序的,它可以模拟人类阅读的顺序去读取文本或者别的序列化数据,且通过隐藏层神经元的编码,上一个隐藏层神经元的信息可以传递到下一个隐藏层神经元,因而形成一定的记忆能力,能够更好地理解序列化数据。

其他RNN结构                                                                                        

    

    上面这个RNN结构最经典的用途是文本(序列)分类。当然了,RNN不止这种结构,大家可以按照自己的想法去设计输入和输出,从而完成相应的任务,接下来博主就给大家介绍几种常见的RNN结构与其用途。

1.单输入多输出的RNN结构

单输入多输出的RNN结构

       

单输入多输出的RNN结构

  这种结构通常应用于输入一个图像,输出描述该图像的文本。

2.多输入多输出的RNN结构

多输入多输出的RNN结构

    由于输入与输出等长,这种结构的用途就比较狭窄,仅限于输入与输出等长的序列数据如诗词文等,作诗机器人就是这么诞生的。

3.输入输出不等长的多输入多输出的RNN结构(Seq2Seq模型)

    在此之前,我们得先了解一下自编码器的概念,自编码器的原理可以简单理解为输入等于输出的神经网络模型如下图。博主在之前的推文中详细介绍过自编码器的原理与其应用,还没了解的小伙伴可以去翻阅一波压缩去噪利器---自编码器(AutoEncoder)

BP神经网络构造的自编码器

    这次的主角当然不是BP神经网络,我们只是利用RNN和自编码器的原理构造一个翻译机器人,同样的,这个自编码器(翻译机器人)的输入也等于输出,只不过输入与输出用不同的语言去表示罢了,如下图。当然了,这个结构也可以用来完成文章摘要提取或者语音转换文字等任务。这种RNN模型业界称为Seq2Seq模型。

 Seq2Seq结构形式1      

Seq2Seq结构形式2

       

4.注意力机制下的Seq2Seq模型

    上面我们提到了Seq2Seq模型可以完成机器翻译等任务,但我们从它的结构可以看出,解码器decoder的输入都是译码器encoder的同一个输出,也就是说不过输入的语句是什么,编码器encoder都会将它转换成同一个中间语义h'。而我们知道的是每一句话都有其侧重点,那翻译当然也应该注意其侧重点,不应该是每一个词在一个句子中都具有同等地位,这样翻译出来的句子肯定效果不佳。所以,有人为此提出了注意力机制(Attention Mechanism),让我们在使用Seq2Seq的过程中,加入注意力机制,聚焦重点,提升模型效果。下面博主以机器翻译为例子,让小伙伴们对注意力机制有更加直观的认识。

注意力模型(解码器Decoder)

    如上图,注意力机制下的Seq2Seq模型的输入与输出是等长的,和上面博主介绍的多输入多输出的RNN结构一样,只是输入变了,输入不是直接的序列输入,而是经过编码器encoder转换的中间语义C,而这些输入C也各不相同,每一个C都是由权重w和译码器的隐藏层输出h加权组成,如下图。

        

中间语义转换示意图

    在解码器decoder部分,由于输入的顺序不同,中间语义C1,C2,C3之间的权值表征也不同,这也就是我们所说的注意力机制。换言之,随着不同时刻,重点一直在变化,而这些变化则由上图的权重w去表示,比如C1的重点在‘中’这个字,那么中间语义可以表示为C1=0.6 * h1 + 0.2 * h2 + 0.1 * h3 + 0.1 * h4 (权值可以看成概率,且概率加起来为1)。

中间语义转换公式

    此时,我们唯一要解决的是,如何去求中间语义C的权值w表征。这就涉及到注意力模型的另一部分(译码器Encoder),如下图。F函数和softmax函数,大家可以理解为我们要计算当前的hi与全部h(包括hi)之间的差别,从而计算出在i时刻下,每一个h对应的权值(即概率)。换言之,大家可以将下图看成分类问题,与hi越相近的,输出的概率也就越大。

注意力模型(编码器Encoder)

    到这里,几种常见的RNN结构也就介绍完了,它们的训练过程与之前讲的多输入单输出的RNN结构训练过程并没有太多的区别,也是基于梯度下降原则去不断缩小真实值与预测值之间的差值,只不过有些结构的输出值多了一点罢了。

LSTM长短期记忆网络

RNN结构的劣势                                                                                     

    上文博主提过RNN结构共享1组(UWb),这是RNN结构最重要的特性,不过也是由于这个特性,才导致了LSTM长短期记忆网络的诞生。

    因为 在(UWb)不变的情况下,梯度在反向传播过程中,不断连乘,数值不是越来越大就是越来越小,这样就出现了梯度爆炸或梯度消失的情况,所以往往用RNN去训练模型得不到预期的效果。

    

LSTM原理                                                                                     

    由上文可知,RNN结构之所以出现梯度爆炸或者梯度消失,最本质的原因是因为梯度在传递过程中存在极大数量的连乘,为此有人提出了LSTM模型,它可以对有价值的信息进行记忆,放弃冗余记忆,从而减小学习难度。与RNN相比,LSTM的神经元还是基于输入X上一级的隐藏层输出h来计算,只不过内部结构变了,也就是神经元的运算公式变了,而外部结构并没有任何变化,因此上面提及的RNN各种结构都能用LSTM来替换。

相对于RNN,LSTM的神经元加入了输入门i、遗忘门f、输出门o 和内部记忆单元c。博主这里先给上一个整体的LSTM结构图如下图,之后再对它内部结构的运算逻辑进行详细的解释。

LSTM整体结构

     

遗忘门f:控制输入X和上一层隐藏层输出h被遗忘的程度大小

遗忘门(forget gate)

  

遗忘门公式

       

输入门i:控制输入X和当前计算的状态更新到记忆单元的程度大小。

输入门(input gate)

输入门公式

内部记忆单元c:

内部记忆单元

内部记忆单元公式

输出门o:控制输入X和当前输出取决于当前记忆单元的程度大小

输出门(output gate)

输出门公式

    其中σ一般选择Sigmoid作为激励函数,主要是起到门控作用。因为Sigmoid函数的输出为0~1,当输出接近0或1时,符合物理意义上的关与开。tanh函数作为生成候选记忆C的选项,因为其输出为-1~1,符合大多数场景下的0中心的特征分布,且梯度(求导)在接近0处,收敛速度比sigmoid函数要快,这也是选择它的另外一个原因。不过LSTM的激励函数也不是一成不变的,大家可以根据自己的需求去更改,只要能更好地解决自己的问题即可。

    对于一个训练好的LSTM模型,我们要知道它的每一个门(遗忘门、输出门和输入门)都有各自的(UWb),上述公式也有所体现,这是在训练过程中得到的。而且当输入的序列不存在有用信息时,遗忘门f的值就会接近1,那么输入门i的值接近0,这样过去有用的信息就会被保存。当输入的序列存在重要信息时,遗忘门f的值就会接近0,那么输入门i的值接近1,此时LSTM模型遗忘过去的记忆,记录重要记忆。

    因此我们可以看出由遗忘门、输出门、输入门和内部记忆单元共同控制LSTM的输出h的设计,使得整个网络更好地把握序列信息之间的关系。

    当然,博主在上文中所提及的LSTM模型只是一种经典的结构,它有各种各样的变种,因此小伙伴们需要熟悉它的原理,并在实际工作中要结合问题去选择合适的LSTM结构,做到具体问题具体分析,切忌死记硬背。                                     

原理讲解-视频版                                                                                     

bilibili值得拥有~(っ•̀ω•́)っ✎⁾⁾ 我爱学习

https://space.bilibili.com/299585150

总结

        好了,到这里,我们就已经将RNN与其变种LSTM的知识点讲完了。而且我们要知道的是,由于RNN存在梯度爆炸和梯度消失的缺点,现在LSTM的应用范围会比RNN广阔得多,所以提及RNN,一般指的都是它的变种LSTM。不过讲了这么多,我们在神经网络框架Keras或者Tensorflow上使用它们也就两三行代码,但是只有当我们熟悉原理,才能更加好地使用它们去完成相应的任务。

       下一期,博主就带领大家使用LSTM来完成一些小任务,敬请期待吧~

        如果本期推文有用,那就点个赞吧,你们的点赞是博主持续更新的动力,感谢每一位小伙伴的关注~

图片来源于网络,侵删

    

发布了3363 篇原创文章 · 获赞 36 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/cpongo9/article/details/103351142