长短时记忆神经网络LSTM

循环神经网络(Recurrent Neural Network,RNN)是一类专门用于处理时间序列性数据的神经网络,它的每一层网络在输出时不仅会输出到下一层,同时还会输出一个隐藏状态,用于在当前层处理下一个数据样本的时候使用。因此循环神经网络当前状态的方法为:𝑠𝑡 = 𝑓(𝑈𝑥𝑡 + 𝑊𝑠𝑡−1)。但是由于存在梯度消失的原因,在时刻 t 产生的梯度仅仅能够在时间层上传播几层就会消失,从而使得循环神经网络无法捕捉到长距离的影响。
长短时记忆网络(Long Short Term Memory Network, LSTM)是循环神经网络的一种变体,针对循环网络的缺陷进行了改进,LSTM解决了传统循环神经网络无法处理长距离的依赖问题。原始的循环神经网络只有隐藏状态,使得循环神经网络对于短期内的输入变得十分的敏感。而长短期记忆
神经网络相对于循环神经网络添加了细胞状态(cell state),利用细胞来保存长期状态。细胞状态非常类似于传送带,它可以直接在整个链上运行,除了一些少量的线性交互,这就使得信息能够很容易的在链上流传并保持不变。对于细胞状态的控制能够有效的保存长期状态。因此,长短期记忆神经网络添加了三个控制开关,
分别为输入门、遗忘门以及输出门。一个 LSTM 单元的网络结构的如图 :
在这里插入图片描述
遗忘门𝑓𝑡,用来控制上一个时刻的单元状态C𝑡−1有多少能够保留到当前状态。
遗忘门的计算见公式
f𝑡 = 𝜎(𝑊𝑓 ∙ [ℎ𝑡−1, 𝑥𝑡] + 𝑏𝑓)
其中𝑊𝑓为遗忘门的权重矩阵,[ℎ𝑡−1, 𝑥𝑡]表示将前一个时刻的输出和当前时刻的输入拼接为一个的向量。𝑏𝑓遗忘门的偏置项。 输入门i𝑡,用来控制把即时状态输入到长期状态C。其输入门的计算方式见公式
i𝑡 = 𝜎(𝑊𝑖 ∙ [ℎ𝑡−1, 𝑥𝑡] + 𝑏𝑖)
其中𝑊𝑖为输入门的权重矩阵,𝑏𝑖为输入门偏置项。
c𝑡为当前时刻的单元状态,当前时刻状态的计算见公式
c𝑡 = 𝑓𝑡°𝑐𝑡−1 + 𝑖𝑡°𝑐̃𝑡
这个公式表示当前时刻的单元状态c𝑡,由上一次单元状态c𝑡−1按元素乘以遗忘门𝑓𝑡,与当前时刻单元输入的状态𝑐̃𝑡按元素乘以输入门i𝑡,两者相加产生。由此,可以将长期记忆状态c𝑡−1和当前记忆𝑐̃𝑡结合到一起,形成新的单元状态c𝑡。得益于遗忘门的控制,单元状态可以保存很久之前的信息,同时,又由于输入门的作用,又可以避免无关紧要的信息进入记忆。 输出门为O𝑡,用来控制长期记忆对当前输出的影响。其输出门的计算方式见
公式
O𝑡 = 𝜎(W𝑜 ∙ [h𝑡−1, x𝑡] + b𝑜)
因此,LSTM 网络最终的输出计算见公式
h𝑡 = 𝑂𝑡°𝜎(𝑐𝑡)

LSTM 两个激励函数区别sigmoid 和tanh
【此部分转载 https://blog.csdn.net/IAlexanderI/article/details/87866898】
1)sigmoid 用在了各种gate上,产生0~1之间的值,这个一般只有sigmoid最直接了。
2)tanh 用在了状态和输出上,是对数据的处理,这个用其他激活函数或许也可以。
1、sigmoid激活函数
sigmoid将一个实数输入映射到[0,1]范围内,如下图(左)所示。使用sigmoid作为激活函数存在以下几个问题:

梯度饱和。当函数激活值接近于0或者1时,函数的梯度接近于0。在反向传播计算梯度过程中:,每层残差接近于0,计算出的梯度也不可避免地接近于0。这样在参数微调过程中,会引起参数弥散问题,传到前几层的梯度已经非常靠近0了,参数几乎不会再更新。
函数输出不是以0为中心的。我们更偏向于当激活函数的输入是0时,输出也是0的函数。
因为上面两个问题的存在,导致参数收敛速度很慢,严重影响了训练的效率。因此在设计神经网络时,很少采用sigmoid激活函数。
在这里插入图片描述
2. tanh激活函数
tanh函数将一个实数输入映射到[-1,1]范围内,如上图(右)所示。当输入为0时,tanh函数输出为0,符合我们对激活函数的要求。然而,tanh函数也存在梯度饱和问题,导致训练效率低下。

3.Relu激活函数
Relu激活函数(The Rectified Linear Unit)表达式为:。如下图(左)所示:
在这里插入图片描述
相比sigmoid和tanh函数,Relu激活函数的优点在于:

梯度不饱和。梯度计算公式为:。因此在反向传播过程中,减轻了梯度弥散的问题,神经网络前几层的参数也可以很快的更新。
计算速度快。正向传播过程中,sigmoid和tanh函数计算激活值时需要计算指数,而Relu函数仅需要设置阈值。如果,如果。加快了正向传播的计算速度。
因此,Relu激活函数可以极大地加快收敛速度,相比tanh函数,收敛速度可以加快6倍(如上图(右)所示)。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页