探秘LSTMs及其变体的奇妙世界(基础篇)

LSTMs

RNN具有长期依赖问题(Long-Term Dependencies) RNN 会受到短时记忆的影响。如果一条序列足够长,那它们将很难将信息从较早的时间步传送到后面的时间步。

如果你正在尝试处理一段文本进行预测,RNN 可能从一开始就会遗漏重要信息。在反向传播期间(反向传播是一个很重要的核心议题,本质是通过不断缩小误差去更新权值,从而不断去修正拟合的函数),RNN 会面临梯度消失的问题。

因为梯度是用于更新神经网络的权重值(新的权值 = 旧权值 - 学习率*梯度),梯度会随着时间的推移不断下降减少,而当梯度值变得非常小时,就不会继续学习。

在递归神经网络中,获得小梯度更新的层会停止学习------ 那些通常是较早的层。 由于这些层不学习,RNN会忘记它在较长序列中以前看到的内容,因此RNN只具有短时记忆

LSTM定义

长短期记忆网络(Long Short Term Memory networks)

它们可以学习只保留相关信息来进行预测,并忘记不相关的数据。简单说,因记忆能力有限,记住重要的,忘记无关紧要的

LSTM通过刻意的设计来避免长期依赖问题。记住长期的信息在实践中是LSTM的默认行为,而非需要付出很大代价才能获得的能力!

LSTMs核心架构

单元状态(cell state)

LSTM 的关键是单元状态,即贯穿图顶部的水平线。

单元状态可以一层一层的线性传递下去,同时可以通过各种称为 的结构来调节。门是一种选择性的让信息通过的方式,它们由sigmoid神经网络层和逐点乘法运算组成

sigmoid 层输出介于 0 和 1 之间的数字,描述每个组件应允许多少通过。值 0 表示"不让任何内容通过",而值 1 表示"让所有内容通过。

LSTMs有3个门来保护和控制单元状态!

普通LSTMs的门结构

遗忘门(forget gate layer)

LSTM 的第一步是决定要从 cell 状态中丢弃哪些信息。这个决定是由一个称为 "forget gate layer" 的 sigmoid 层做出的。

注意:其中W_f并不共享,上式可以写成f_t=\sigma(W_{f_h}h_{t-1}+W_{f_x}x_t+b_f)

输入门(input gate layer)

下一步是决定我们将在 cell state 中存储哪些新信息。这分为两部分。首先,一个名为 "input gate layer" 的 <math xmlns="http://www.w3.org/1998/Math/MathML"> s i g m o i d sigmoid </math>sigmoid 层决定了我们将更新哪些值。接下来, <math xmlns="http://www.w3.org/1998/Math/MathML"> t a n h tanh </math>tanh 层创建一个新候选值 <math xmlns="http://www.w3.org/1998/Math/MathML"> C ~ t \tilde{C}_t </math>C~t的向量,该向量可以添加到状态中。在下一步中,我们将把这两者结合起来,创建对状态的更新。

我们将旧状态乘以 <math xmlns="http://www.w3.org/1998/Math/MathML"> f t f_t </math>ft,忘记了我们之前决定忘记的事情。然后我们添加 <math xmlns="http://www.w3.org/1998/Math/MathML"> i t ∗ C ~ t i_t*\tilde{C}_t </math>it∗C~t。这是新的候选值,根据我们决定更新每个 state 值的程度进行缩放。

输出门(output gate layer)

最后,我们需要决定要输出什么。此输出将基于我们的 cell 状态,但将是过滤版本。首先,我们运行一个 sigmoid 层,它决定我们要输出的 cell state 的哪些部分。然后,我们将单元状态通过 tanh(以将值推到-1和1之间) 并将其乘以 sigmoid 门的输出,以便我们只输出我们决定的部分。

LSTMs变体

窥视孔链接(peephole connections)

让 gate layers 查看单元cell状态。

耦合门

耦合的 forget 和 input 门。我们不是单独决定要忘记什么以及应该添加新信息什么,而是一起做出这些决定。我们只会在它的位置上输入一些东西。我们只在忘记旧值时向 state 输入新值。

GRU

LSTM 的一个稍微更引人注目的变化是由 Cho 等人(2014 年)引入的门控循环单元或 GRU(Gated Recurrent Unit)。它将 forget 和 input 门合并到一个 "update gate" 中。它还合并了 cell 状态和 hidden 状态,并进行了一些其他更改。生成的模型比标准 LSTM 模型更简单,并且越来越受欢迎。

<math xmlns="http://www.w3.org/1998/Math/MathML"> z t z_t </math>zt和 <math xmlns="http://www.w3.org/1998/Math/MathML"> r t r_t </math>rt都是对 <math xmlns="http://www.w3.org/1998/Math/MathML"> h t − 1 、 x t h_{t-1}、x_t </math>ht−1、xt做的sigmoid非线性映射,那区别在哪呢?原因在于GRU把忘记门和输入门合二为一了,而 <math xmlns="http://www.w3.org/1998/Math/MathML"> z t z_t </math>zt是属于要记住的,反过来 <math xmlns="http://www.w3.org/1998/Math/MathML"> 1 − z t 1-z_t </math>1−zt则是属于忘记的,相当于对输入 <math xmlns="http://www.w3.org/1998/Math/MathML"> h t − 1 、 x t h_{t-1}、x_t </math>ht−1、xt做了一些更改,而 <math xmlns="http://www.w3.org/1998/Math/MathML"> r t r_t </math>rt则相当于先见之明的把输入 <math xmlns="http://www.w3.org/1998/Math/MathML"> h t − 1 、 x t h_{t-1}、x_t </math>ht−1、xt在 <math xmlns="http://www.w3.org/1998/Math/MathML"> z t / 1 − z t z_t/1-z_t </math>zt/1−zt对其做更改之前,先实现存一份原始的,最终在 <math xmlns="http://www.w3.org/1998/Math/MathML"> h ~ \tilde{h} </math>h~上做一个 <math xmlns="http://www.w3.org/1998/Math/MathML"> t a n h tanh </math>tanh变化。

缺点

另外需要强调的是LSTM搞的这么复杂,除了在结构上天然地克服了梯度消失的问题,更重要的是具有更多的参数来控制模型;通过四倍于RNN的参数量,可以更加精细地预测时间序列变量。

此外,我记得有一篇文章讲到,LSTM 在 200左右长度的文本上,就已经捉襟见肘了

参考:Understanding LSTMs Network

相关推荐
郭涤生2 分钟前
AWB算法基础理解
人工智能·算法·计算机视觉
hetao17338374 分钟前
2026-01-21~22 hetao1733837 的刷题笔记
c++·笔记·算法
Hcoco_me6 分钟前
大模型面试题91:合并访存是什么?原理是什么?
人工智能·深度学习·算法·机器学习·vllm
2501_901147839 分钟前
零钱兑换——动态规划与高性能优化学习笔记
学习·算法·面试·职场和发展·性能优化·动态规划·求职招聘
充值修改昵称2 小时前
数据结构基础:B树磁盘IO优化的数据结构艺术
数据结构·b树·python·算法
程序员-King.8 小时前
day158—回溯—全排列(LeetCode-46)
算法·leetcode·深度优先·回溯·递归
月挽清风9 小时前
代码随想录第七天:
数据结构·c++·算法
小O的算法实验室9 小时前
2026年AEI SCI1区TOP,基于改进 IRRT*-D* 算法的森林火灾救援场景下直升机轨迹规划,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
小郭团队10 小时前
2_1_七段式SVPWM (经典算法)算法理论与 MATLAB 实现详解
嵌入式硬件·算法·硬件架构·arm·dsp开发
充值修改昵称10 小时前
数据结构基础:从二叉树到多叉树数据结构进阶
数据结构·python·算法