目录
一、什么是 LSTM
LSTM,全称 Long Short-Term Memory,即长短时记忆网络,是一种特殊的循环神经网络(RNN) ,在处理序列数据方面表现卓越。传统的 RNN 虽然能够处理序列数据,但其在捕捉长距离依赖关系时存在显著缺陷,随着序列长度的增加,RNN 会面临梯度消失或梯度爆炸的问题,使得模型难以学习到远距离的信息。
LSTM 的诞生正是为了解决这一难题。它通过引入门(gate)机制,能够有效地控制信息的流入、流出和保留,从而在长时间内记住重要信息,成功克服了传统 RNN 的长距离依赖问题。这一独特的设计,使得 LSTM 在自然语言处理、语音识别、时间序列预测等众多领域都取得了显著的成果 ,成为深度学习领域中不可或缺的重要模型。
二、LSTM 与 RNN 的区别
RNN 作为最早被广泛应用的处理序列数据的神经网络,通过循环连接的神经元来处理序列中的每个时间步,将上一个时间步的隐藏状态与当前时间步的输入相结合,从而捕捉序列中的依赖关系 。例如在语言模型中,RNN 可以根据前文的单词预测下一个可能出现的单词。
然而,随着序列长度的增加,RNN 在反向传播过程中会出现梯度消失或梯度爆炸问题。当梯度消失时,早期时间步的信息对当前时间步的影响会变得微乎其微,导致模型无法学习到长距离依赖关系;而梯度爆炸则会使梯度值变得非常大,导致模型参数更新不稳定,难以收敛。比如在处理一个较长的句子时,RNN 可能无法很好地记住句子开头的信息,从而影响对后续内容的理解和处理。
LSTM 正是为了解决 RNN 的这些问题而设计的。它引入了门机制和细胞状态 。门机制包括输入门、遗忘门和输出门。输入门决定了当前输入信息有多少将被存入细胞状态;遗忘门控制着细胞状态中哪些信息将被保留或丢弃;输出门则决定了细胞状态中的哪些信息将被输出用于当前时间步的计算。
细胞状态就像一条传送带,直接在整个链上运行,只有一些简单的线性操作,使得信息可以在长时间内稳定传递,不易受到梯度消失或爆炸的影响。通过这些门机制和细胞状态,LSTM 能够有选择性地记忆和遗忘信息,从而有效地处理长序列数据,成功克服了 RNN 在捕捉长距离依赖关系上的局限 。例如在机器翻译任务中,LSTM 能够更好地记住源语言句子中的关键信息,从而实现更准确的翻译。
三、LSTM 的核心结构与原理
3.1 门控机制详解
LSTM 的门控机制是其核心所在,主要由输入门、遗忘门和输出门组成 。输入门负责控制当前输入信息进入细胞状态的程度。在处理文本时,当遇到新的单词,输入门会根据该单词与当前上下文的相关性,决定将多少关于这个单词的信息存入细胞状态。如果是一个关键的实词,输入门可能会允许较多信息进入;若是一个常见的虚词,输入门可能会限制其进入细胞状态的信息。其计算过程是将当前输入\(x_t\)与前一时刻隐藏状态\(h_{t-1}\)进行拼接,然后通过一个 Sigmoid 函数,输出一个介于 0 到 1 之间的值\(i_t\) ,这个值就表示当前输入信息被保留的程度。公式为:\(i_t = \sigma(W_{i} \cdot [h_{t-1}, x_t] + b_{i})\) ,其中\(W_{i}\)是权重矩阵,\(b_{i}\)是偏置项,\(\sigma\)是 Sigmoid 函数。
遗忘门则决定了细胞状态中哪些旧信息需要被丢弃。在语言模型中,随着句子的推进,一些之前的信息可能不再与当前语境相关,遗忘门就会发挥作用,将这些不再重要的信息从细胞状态中删除。比如在处理完一个从句后,从句中的一些细节信息对于理解主句可能不再关键,遗忘门会降低这些信息在细胞状态中的保留程度。遗忘门同样将\(x_t\)与\(h_{t-1}\)拼接后,经过 Sigmoid 函数得到\(f_t\) ,表示对前一时刻细胞状态\(C_{t-1}\)中各元素的保留程度,公式为:\(f_t = \sigma(W_{f} \cdot [h_{t-1}, x_t] + b_{f})\) 。
输出门决定了细胞状态中的哪些信息将被输出用于当前时间步的计算,以及传递到下一个时间步的隐藏状态。它根据当前输入和隐藏状态,先通过 Sigmoid 函数计算出一个输出控制值\(o_t\) ,然后将细胞状态经过 tanh 函数变换后与\(o_t\)相乘,得到最终的输出\(h_t\) 。在图像描述生成任务中,输出门会根据对图像特征的理解和已生成的描述,决定输出哪些信息来生成下一个单词。计算公式为:\(o_t = \sigma(W_{o} \cdot [h_{t-1}, x_t] + b_{o})\) ,\(h_t = o_t \cdot \tanh(C_t)\) 。
3.2 隐藏状态与细胞状态
隐藏状态\(h_t\)和细胞状态\(C_t\)是 LSTM 中两个重要的状态变量,它们在 LSTM 处理序列数据的过程中协同工作,扮演着关键角色。
细胞状态\(C_t\)就像是一个长期记忆的载体,它贯穿于 LSTM 的整个处理过程。细胞状态的更新依赖于遗忘门和输入门。首先,遗忘门根据当前输入和前一时刻的隐藏状态,决定保留细胞状态\(C_{t - 1}\)中的哪些信息,通过\(f_t\)与\(C_{t - 1}\)逐元素相乘,实现对旧信息的选择性保留 。然后,输入门通过\(i_t\)与候选细胞状态\(\tilde{C}_t\)逐元素相乘,生成新的信息,其中候选细胞状态\(\tilde{C}_t\)是通过对当前输入和前一时刻隐藏状态进行变换得到的 。最后,将保留的旧信息和新生成的信息相加,得到更新后的细胞状态\(C_t\) ,即\(C_t = f_t \cdot C_{t - 1} + i_t \cdot \tilde{C}_t\) 。这种更新方式使得细胞状态能够在长时间内保存重要信息,同时又能根据新的输入进行灵活调整。
隐藏状态\(h_t\)则更多地反映了当前时间步的短期信息 ,它不仅包含了当前输入的部分信息,还融合了细胞状态中的相关内容 。隐藏状态在每一个时间步都会被更新,并且会参与到下一个时间步的计算中,包括门控的计算以及与当前输入的结合等。它作为 LSTM 的输出之一,会被传递到下一个时间步,用于处理序列中的后续元素,同时也可以作为当前时间步的最终输出,用于模型的预测或其他任务 。例如在语音识别中,隐藏状态可以表示当前语音片段的特征信息,随着语音的持续输入,隐藏状态不断更新,逐步积累对整个语音内容的理解。