快速理解RNN(LSTM,GRU)结构原理

快速理解RNN(LSTM,GRU)结构原理,第1张

RNN主要用来解决序列问题,强调的是先后顺序,在NLP中引申出上下文的概念,一个翻译问题,这个词的含义可能和前后的单词形成的这个组合有联系(Skip-gram),也可能是它之前的所有单词都有联系(Attention),并且,借助RNN的state这样的记忆单元,使得一个序列位置的输出在数学上和之前的所有序列的输入都是有关系的。当然原始的RNN由于梯度的乘性问题,前面的序列的影响近乎为0,这个后面又用LSTM来修正为加性问题。RNN的数学基础可以认为是马尔科夫链,认为后续的值是有前者和一些参数的概率决定的。

seq2seq模型,另外会有新文章介绍。

普通的RNN在长文本的情况下,会学不到之前的信息,例如:the clouds are in the sky 预测sky是可以预测准确的,但是如果是很长的文本,如:我出生在中国,......,我讲的是 中文 这个时候就存在长时依赖问题,LSTM可以通过输入们,遗忘门,输出们来解决这个问题。

刚开始接触LSTM时有点懵,这个结构怎么这么复杂,但其实先理解LSTM做了什么来解决长时依赖问题,就很容易 记住这个结构了。

LSTM通过忘记们来决定从上个隐状态记忆中忘记哪些信息,通过输入们来决定输入哪部分信息,通过输出们来决定输出哪部分信息,这样来解决长时依赖问题,下面来介绍下LSTM的具体结构信息。

LSTM相比RNN hidden status还引入了细胞状态来记录信息。细胞状态通过门结构 gate来添加新的记忆和删除旧的记忆信息

这一步是通过忘记门来忘记部分cell state中的记忆信息

将需添加的新信息加入到经过忘记门后的cell state中,生成新的cell state

GRU的结构如下,主要包含重置门和更新门,把GRU看着LSTM的变体,相当于取消了LSTM中的cell state,只使用了hidden state,并且使用update gate更新门来替换LSTM中的输入们和遗忘门,取消了LSTM中的输出门,新增了reset gate重置门。这样做的好处是在达到LSTM相近的效果下,GRU参数更少,训练的计算开销更小,训练速度更快。

由于GRU参数更少,收敛快,通常在数据集够大的情况下,选择LSTM效果应该会更好。

通常情况下LSTM和GRU两者效果相差不大,GRU训练更快,所以一般会先选择使用GRU进行训练和调参,当无法再继续优化时可以把GRU替换成LSTM来看看是否有提高。

完全图解RNN、RNN变体、Seq2Seq、Attention机制

Understanding LSTM Networks

序列预测问题,CNN、RNN各有什么优势?

循环神经网络的主要用途是处理和预测序列数据,循环神经网络的来源是为了刻画一个序列当前的输出与之前信息的关系。从网络结构上,循环神经网络会记忆之前的信息,并利用之前的信息影响后面节点的输出。也就是说,循环神经网络的隐藏层之间的节点是有连接的,隐藏层的输入不仅包括输入层的输出,还包括上一时刻隐藏层的输出。

理论上循环神经网络可以看做是同一神经网络结构被无限复制的结果,如下图等号左侧,由于目前循环神经网络无法做到真正的无限循环,所以一般将循环体展开,如下图等号右侧。

可以看到:在每一个时刻会有一个输入 ,根据循环神经网络当前的状态 提供一个输出 ,而循环神经网络当前状态 是根据上一时刻的状态 和当前的输入 共同决定的。

从这个结构来看,容易得出:循环神经网络擅于解决时间序列相关问题,对于序列数据,将序列上不同时刻的数据依次传入循环神经网络的输入层,输出可以是对序列中下一个时刻的预测。

所有 RNN 都具有一种重复神经网络模块的链式的形式。在标准的 RNN 中,这个重复的模块只有一个非常简单的结构,例如一个 tanh 层。

下图展现了一个循环神经网络前向传播的具体计算过程,可以看到每个时刻的输入会跟上一时刻的输出拼接之后进行前向算法计算,乘以权重矩阵加上偏置值,然后当前时刻的输出经过softmax+偏置等 *** 作之后产生当前单元的最终输出,另一部分送入下一个时刻重复此过程:

RNN的关键是利用历史信息来帮助当前的决策,但是不幸的是,随着序列长度的增加,RNN无法有效的利用历史信息。于是有了一种特殊的RNN——LSTM,能够学习长的依赖关系,LSTM是为了避免长依赖问题而精心设计的。 记住较长的历史信息实际上是他们的默认行为,而不是他们努力学习的东西。

LSTM 同样是重复神经网络模块的链式的形式,但是重复的模块拥有一个不同的结构。不同于 单一神经网络层,整体上除了h在随时间流动,细胞状态c也在随时间流动,细胞状态c就代表着长期记忆。

下面具体解释LSTM的内部工作机制,首先是各种图标的含义:

1. LSTM 的关键就是细胞状态,水平线在图上方贯穿运行,直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。

2. LSTM 有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个 sigmoid 神经网络层和一个 pointwise 乘法 *** 作。Sigmoid 层输出 0 到 1 之间的数值,描述每个部分有多少量可以通过。0 代表 不许任何量通过 ,1 就指 允许任意量通过;LSTM拥有三个门,来保护和控制细胞状态

3. 遗忘门

遗忘门决定我们会从细胞状态中丢弃什么信息,该门会读取 和 ,输出一个在 0 到 1 之间的数值给每个在细胞状态 中的数字。1 表示 完全保留 ,0 表示 完全舍弃 。右侧公式里的内容跟上文说到的RNN的计算细节一致。最终通过一个sigmoid实现新的取舍功能。

所说的遗忘可以理解为 之前的内容记住多少 ,其精髓在于只能输出(0,1)小数的sigmoid函数和粉色圆形的乘法 *** 作

4. 输入门

输入门确定什么样的新信息被存放在细胞状态中,这里包含两个部分:第一,sigmoid 层称 “输入门层” 决定什么值我们将要更新。然后,一个 tanh 层创建一个新的候选值向量 会被加入到状态中。

现在开始更新旧细胞状态, 更新为 ,们把旧状态与 相乘,丢弃掉我们确定需要丢弃的信息,接着加上 ,这就是新的候选值,根据我们决定更新每个状态的程度进行变化。

5. 输出门

我们需要确定输出什么值。这个输出将会基于我们的细胞状态,但是也是一个过滤后的版本。首先,我们运行一个 sigmoid 层来确定细胞状态的哪个部分将输出出去。接着,我们把细胞状态通过 tanh 进行处理(得到一个在 -1 到 1 之间的值)并将它和 sigmoid 门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。

参考:

LSTM理解


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11866184.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-19
下一篇2023-05-19

发表评论

登录后才能评论

评论列表(0条)

    保存