我是靠谱客的博主 笨笨高跟鞋,最近开发中收集的这篇文章主要介绍lstm原理_从RNN到LSTM—原理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

6f99cca99ecc4cda6d83ebf12323dece.png

在这里给大家介绍一下RNN以及LSTM(GRU)的原理

  • RNN
  • RNN概念

循环神经网络 (Recurrent Neural Network, RNN),是一类用来处理序列数据的神经网络。类似于卷积神经网络专门用来处理网格化的数据(如一个图像),循环神经网络是专门用来处理序列(如

)的网络。同样,正如卷积神经网络可以很容易的扩展到具有较大宽度和高度的图像或者大小可变的图像,循环网络可以扩展到处理可变长的序列。
[1]
  • RNN内部结构

在RNN结构图中,比较流行的展示方法是下图(图片源于李宏毅老师的课程)。但是作为新手而言,我觉得这张图片不能很清晰的表达数据流动,因此在该图下面画出了更好理解的RNN结构。

b42972fbab25e3619452f517e88c4bb4.png
图1 RNN展开结构

bcbda5663bc773166e065d80facae499.png
图2 RNN展开结构—详细

图2中展示的公式恰好就是RNN的代表性公式:

可能你看图仍然没有看明白RNN到底是怎么一回事,没有关系,现在我们就开始一点点梳理。

首先,明确RNN网络结构有如下几个参数(也就是公式中出现的参数量):

是这个网络结构的输入,也就是序列

是隐藏层的输出(也就是数据经过RNN的输出)

是网络结构的输出

我在图中画了三个时间步,分别为

时刻,而每个时刻的输入也恰好是这个时刻的序列值,也就是说,分别对应着
的输入。

而图2的左侧,代表了RNN网络的整体结构,如图是输入层、RNN单元层、输出层。让我们专注

时刻,在这个时刻,RNN层接受的输入有两部分,一种是当前时刻的输入值
,另一部分是
时刻的RNN层输出值
。这也就对应了RNN的至关重要的公式:

其中的权重矩阵分别代表了:

:输入层到隐藏层的权重

:上一个时刻隐藏层到下一个时刻隐藏层的权重

:隐藏层到输出层的权重

这也是循环神经网络有记忆功能的原因,在每一个时刻里,它都将上一个时刻的输出考虑进来,作为自己输入的一部分,这也是它之所以叫“循环”的原因,因为在图中看来,好像是三个网络的叠加,实际上,它们只是同一个网络的不同时刻,而“循环”要做的就是将这个序列的每一个时间步的值都进行相同的运算,也是前文提到的公式。

最后,再对RNN网络层的输出进行一个维度的变换,也就是进行输出,得到

即可。

以上就是RNN的结构内容,但是由于RNN具有梯度消失等问题,现在人们应用的较多的是RNN的变化版本,例如LSTM,GRU等,下面就给大家介绍一下LSTM和在tensorflow2.0中如何使用LSTM。

  • LSTM
  • LSTM概念

LSTM是改进版本的RNN,其本质上仍然是循环神经网络,它在序列生成的任务中有很好的表现,比如说图片标题生成,情感分类,机器翻译等等。

  • LSTM内部结构

在介绍LSTM之前,依然把一张比较有代表性的图放在这里,在介绍完参数之后对这张图进行详细讲解。(图片来源李宏毅老师的课程)

996fdedca26c5e16fdf4ba95f5ee8f8d.png
图3 LSTM cell内部结构图

图3展示的公式如下:

其中,参数代表含义如下:

代表LSTM的cell值,也就是图中那个蓝色方块(记忆单元)存储的值,这个值可能会随着时间步的推进而更换。

所代表的含义和上文中RNN网络的参数相同。

LSTM与RNN不同的地方就是它增加了三个门,分别是input gate, forget gate, output gate,增加了三个门也就增加了相应的参数计算的过程,它就是利用这三个门对序列进行更加复杂的处理。而这三个门的计算公式如下:

其中

是将现在时刻的输入和上一个时刻的LSTM的输出拼接而成的向量。

而输入向量经过input layer会变成:

(以上符号和图中保持一致)

下面开始结合图3观察LSTM的数据流动。

其中
代表t时刻cell里面的值,
代表t-1时刻cell里面的值,而
代表了sigmoid激活函数,这个函数将
的值规整到0~1之间,而这个公式表明了t时刻的cell应该是什么计算值。如果经过计算,
接近于1,
的值就倾向于被“记住”,
接近于0,
就倾向于被“忘掉”,同理,
的值倾向于1,新的input值就倾向于输入,反之就相反。

则计算了LSTM的输出值,同样,output门把持这这个值,如果
接近于1,LSTM更倾向于输出这个值,反之,LSTM会输出一个接近于0的值。

以上就是关于LSTM结构的全部内容,我认为单独理解LSTM可能会比较困难,但是如果结合RNN一起理解就比较容易~

  • LSTM in keras

理解了原理,应用也是非常重要的一部分,在这里给大家简单的介绍一下LSTM在keras中的代码应用,具体的实现细节将会在以后推出(我将会在以后的文章中推出LSTM在机器翻译中的应用)。

在keras,LSTM以一个层的形式给出

lstm_layer=tf.keras.layers.LSTM(units,
                                return_sequences=False,
                                return_states=False)

在这里主要应用到的参数是这三个,units不必赘述,是LSTM单元的数量,也是图2中隐藏层单元的数量,return_sequences代表是否将LSTM的hidden vector(也就是全部时间步的

,形状应该为
,在这里形状省略了batch_size)输出,return_state代表是否将cell 里面的输出,它们结合的不同会返回不同的结果。

下表列出了返回值。

81d498377d4059fb1ff68f03815495cc.png
图4 LSTM的return_sequences & return_state

这里是全部的关于RNN和LSTM的内容,欢迎大家批评指正!

参考

  1. ^[1]深度学习

最后

以上就是笨笨高跟鞋为你收集整理的lstm原理_从RNN到LSTM—原理的全部内容,希望文章能够帮你解决lstm原理_从RNN到LSTM—原理所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部