我是靠谱客的博主 笨笨魔镜,最近开发中收集的这篇文章主要介绍深度学习 LSTM 原理介绍1. 什么是LSTM2. 网络结构3. 缺点4.参数个数计算5.参考文献,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1. 什么是LSTM

长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。

2. 网络结构

LSTM之所以能够解决RNN的长期依赖问题,是因为LSTM引入了门(gate)机制用于控制特征的流通和损失。LSTM是由一系列LSTM单元(LSTM Unit)组成,其链式结构如下图。
在这里插入图片描述

在后面的章节中我们再对LSTM的详细结构进行讲解,首先我们先弄明白LSTM单元中的每个符号的含义。每个黄色方框表示一个神经网络层,由权值,偏置以及激活函数组成;每个粉色圆圈表示元素级别操作;箭头表示向量流向;相交的箭头表示向量的拼接;分叉的箭头表示向量的复制。总结如图,
在这里插入图片描述

2.1 单元状态

LSTM的核心部分是类似于传送带的部分,这一部分一般叫做单元状态(cell state)它自始至终存在于LSTM的整个链式系统中。
在这里插入图片描述
其中,
C t = f t × C t − 1 + i t × C t ~ C_{t}=f_{t}times C_{t-1}+i_{t}times widetilde{C_{t}} Ct=ft×Ct1+it×Ct

LSTM网络能通过一种被称为门的结构对细胞状态进行删除或者添加信息。门能够有选择性的决定让哪些信息通过。其实门的结构很简单,就是一个sigmoid层和一个点乘操作的组合。如下图所示
在这里插入图片描述

2.2 忘记门

LSTM的第一步就是决定细胞状态需要丢弃哪些信息。这部分操作是通过一个称为忘记门的 s i g m o i d sigmoid sigmoid单元来处理的。它通过查看 h t − 1 h_{t-1} ht1 x t x_{t} xt信息来输出一个 0 − 1 0-1 01之间的向量,该向量里面的 0 − 1 0-1 01值表示细胞状态 C t − 1 C_{t-1} Ct1中的哪些信息保留或丢弃多少。 0 0 0表示不保留, 1 1 1表示都保留。忘记门如下图所示。
在这里插入图片描述

2.3 输入门

下一步是决定给细胞状态添加哪些新的信息。这一步又分为两个步骤,首先,利用 h t − 1 h_{t-1} ht1 x t x_{t} xt通过一个称为输入门的操作来决定更新哪些信息。然后利用 h t − 1 h_{t-1} ht1 x t x_{t} xt通过一个 t a n h tanh tanh层得到新的候选细胞信息 C ~ t tilde C_{t} C~t,这些信息可能会被更新到细胞信息中。这两步描述如下图所示。
在这里插入图片描述

2.4 更新门

下面将更新旧的细胞信息 C t − 1 C_{t-1} Ct1,变为新的细胞信息 C t C_{t} Ct。更新的规则就是通过忘记门选择忘记旧细胞信息的一部分,通过输入门选择添加候选细胞信息 C ~ t tilde C_{t} C~t的一部分得到新的细胞信息 C t C_{t} Ct。更新操作如下图所示
在这里插入图片描述

2.5 输出门

更新完细胞状态后需要根据输入的 h t − 1 h_{t-1} ht1 x t x_{t} xt来判断输出细胞的哪些状态特征,这里需要将输入经过一个称为输出门的 s i g m o i d sigmoid sigmoid层得到判断条件,然后将细胞状态经过 t a n h tanh tanh层得到一个 [ − 1 , 1 ] [-1,1] [1,1]之间值的向量,该向量与输出门得到的判断条件相乘就得到了最终该RNN单元的输出。该步骤如下图所示
在这里插入图片描述

3. 缺点

  • RNN的梯度问题在LSTM及其变种里面得到了一定程度的解决,但还是不够。它可以处理100个量级的序列,而对于1000个量级,或者更长的序列则依然会显得很棘手。
  • 计算费时。每一个LSTM的cell里面都意味着有4个全连接层(MLP),如果LSTM的时间跨度很大,并且网络又很深,这个计算量会很大,很耗时。

4.参数个数计算

LSTM 的参数很明显了,就是 A A A中的参数, A A A 内部具体是这样的:
在这里插入图片描述
这个其实就是一个简单的RNN结构,具体计算可以参考 深度学习 RNN 原理介绍
一个cell 4 4 4个这样结构相同的网络,那么一个cell的总参数量就是直接 × 4 times 4 ×4。注意这 4 4 4个权重不是共享的,都是独立的网络。
所以,一般来说,一层 LSTM 的参数量计算公式是:
4 [ d h ( d h + d x ) + d h ] , d x 表 示 输 入 维 度 , d h 表 示 输 出 维 度 4[d_h(d_h+d_x)+d_h],d_x表示输入维度,d_h表示输出维度 4[dh(dh+dx)+dh],dx,dh
那么显而易见,一层双向 LSTM 的参数量就是上述公式 × 2 times 2 ×2
下面我们看一个具体的case,如

from keras.models import Sequential, Model
from keras.layers import Dense, LSTM
model = Sequential()
model.add(Dense(108, input_shape=(32,256)))
model.add(LSTM(128))
model.add(Dense(32))
model.summary()

在这里插入图片描述

  • Dense层:Dense作为第一层,需要指定输入数据的维度,这里指定的是 256 256 256,也就是说每个神经元有 256 256 256个输入,根据神经元计算公式 y = w x + b y = w x + b y=wx+b,因为 x x x 256 256 256个,所以对应的 w w w 256 256 256个,外加偏置 b b b,每个神经元共计 ( 256 + 1 ) ( 256 + 1 ) (256+1)个参数需要训练,又因为共有 108 108 108个神经元,所以需要训练的参数共计 ( 256 + 1 ) × 108 = 27756 ( 256 + 1 ) × 108 = 27756 (256+1)×108=27756
  • LSTM层:Dense层的输出是LSTM的输入,也就是说LSTM的输入为 108 108 108,输出 128 128 128维,所以需要训练的参数共计 4 × [ 128 × ( 128 + 108 ) + 128 ] = 121344 4times[128times(128+108)+128]=121344 4×[128×(128+108)+128]=121344
  • Dense层:Dense层的输入是LSTM的输出 128 128 128,神经元 32 32 32个,所以需要训练的参数共计 32 × ( 128 + 1 ) = 4128 32times(128+1)=4128 32×(128+1)=4128

5.参考文献

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

最后

以上就是笨笨魔镜为你收集整理的深度学习 LSTM 原理介绍1. 什么是LSTM2. 网络结构3. 缺点4.参数个数计算5.参考文献的全部内容,希望文章能够帮你解决深度学习 LSTM 原理介绍1. 什么是LSTM2. 网络结构3. 缺点4.参数个数计算5.参考文献所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部