LSTM(Long Short-Term Memory)长短时记忆结构

        随着RNN在长序列处理中的应用深入,发现了其难以捕捉长距离依赖的问题。LSTM是传统RNN的变体,与经典RNN相比能够有效捕捉长序列之间的语义关联,通过引入了“记忆单元”(Memory Cell)和“门控机制”来控制信息的流动,解决了标准RNN中梯度消失和梯度爆炸的问题。其核心结构可以分为四个部分:遗忘门、输入门、输出门、细胞状态(记忆状态)

一. LSTM的核心思想

LSTM的“记忆”我们叫做细胞/cells,你可以直接把它们想做黑盒,这个黑盒的输入为前状态h_{t-1}和当前输入x_{t}。这些“细胞”会决定哪些之前的信息和状态需要保留/记住,而哪些要被抹去。例如当你浏览评论时,你的大脑下意识地只会记住重要的关键词,比如“amazing”和“awsome”这样的词汇,而不太会关心“this”、“give”、“all”、“should”等字样,这种无关紧要的内容自然会从记忆中逐渐消失。简言之,它可以学习只保留相关信息来进行预测,并忘记不相关的数据,因记忆能力有限,记住重要的,忘记无关紧要的。

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

激活函数Tanh作用在于帮助调节流经网络的值,使得数值始终限制在-1和1之间。

LSTM同样是这样的结构,但是重复的模块拥有一个不同的结构。具体来说,RNN是重复单一的神经网络层,LSTM中的重复模块则包含四个交互的层,三个Sigmoid和一个tanh层,并以一种非常特殊的方式进行交互。

对于图中使用的各种元素的图标中,每一条黑线传输着一整个向量,从一个节点的输出到其他节点的输入。粉色的圈代表pointwise的操作,诸如向量的和,而黄色的矩阵就是学习到的神经网络层。合在一起的线表示向量的连接,分开的线表示内容被复制,然后分发到不同的位置。

上图中,σ表示的Sigmoid激活函数与tanh函数类似,不同之处在于sigmoid是把值压缩到0~1之间而不是-1~1之间。这样的设置有助于更新或忘记信息:

  • 因为任何数乘以0都得0,这部分信息就会剔除掉;
  • 同样的,任何数乘以1都得到它本身,这部分信息就会完美地保存下来

相当于要么是1则记住,要么是0则忘掉,所以还是这个原则:因记忆能力有限,记住重要的,忘记无关紧要的。

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

LSTM有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个sigmoid神经网络层和一个pointwise乘法的非线性操作。

如此,0代表“不许任何量通过”,1就指“允许任意量通过”。

LSTM拥有三种类型的门结构:遗忘门/忘记门、输入门和输出门,来保护和控制细胞状态。

二.LSTM的结构与工作原理

LSTM的数学模型:

2.1  遗忘门(Forget Gate)

LSTM中的第一步是决定我们会从细胞状态中丢弃什么信息。这个决定通过一个称为“忘记门”的结构完成。该忘记门会读取上一个输出和当前输入,做一个Sigmoid的非线性映射,然后输出一个向量(该向量每一个维度的值都在0到1之间,1表示完全保留,0表示完全舍弃,相当于记住了重要的,忘记了无关紧要的),最后与细胞状态相乘。

语言模型的例子中,任务是基于已经看到的预测下一个词。在这个问题中,细胞状态可能包含当前主语的性别,因此正确的代词可以被选择出来。当我们看到新的主语,我们希望忘记旧的主语,进而决定丢弃信息,这里就需要遗忘门。

其中,σ是逻辑激活函数,Wf和bf分别是遗忘门的权重矩阵和偏置项,[ht−1,xt]是前一时间步的隐藏状态和当前时间步的输入。

对于上图右侧公式中的权值,准确的说其实是不共享,即是不一样的。即,过程见第五次汇报。

2.2  输入门(Input Gate)

下一步是确定什么样的新信息被存放在细胞状态中。这里包含两个部分:

  • 第一,sigmoid层称“输入门层”决定哪些值我们将要更新;
  • 第二,一个tanh层创建一个新的候选值向量,会被加入到状态中。

在语言模型的例子中,我们希望增加新的主语的性别到细胞状态中,来替代旧的需要忘记的主语,进而确定更新的信息。

这里,it是输入门的输出,是候选记忆单元状态,Wi,WC和bi,bC分别是相关权重和偏置。

我们展开右侧的两个公式的计算过程,即,过程在第五次汇报:

2.3 细胞状态

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

2.4 输出门(Output Gate)

最终,我们需要输出当前时间步的隐藏状态。这个输出将会基于我们的细胞状态,但是也是一个过滤后的版本。

首先,我们运行一个sigmoid层来确定细胞状态的哪个部分将输出出去。

接着,我们把细胞状态通过tanh进行处理(得到一个在-1到1之间的值)并将它和sigmoid门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。

展开图中右侧第一个公式,,过程.。。。

其中,ot是输出门的sigmoid函数的输出,Ct是更新后的记忆单元状态,ht是最终的隐藏状态输出。

 

在神经网络中,一个单元通常包括输入、隐藏层计算和输出这些环节。

posted @ 2025-02-07 19:46  魔魔胡胡胡萝卜  阅读(95)  评论(0编辑  收藏  举报