趋近智
循环神经网络 (neural network)(RNN)如SimpleRNN层,经常面临梯度消失问题,这使得网络难以学习长序列中的依赖关系。为了解决这一局限性,研究人员开发了更精巧的循环架构。其中,长短期记忆(LSTM)网络是最成功且广泛使用的一种。
LSTM引入了一种机制,可以明确地管理信息随时间流动,使其能够选择性地记忆或遗忘信息。这是通过一个门控系统实现的,该系统控制着一个专门的细胞状态(),该状态就像一条贯穿整个序列的传送带,以最少处理传输信息。
一个LSTM单元处理当前时间步的输入()以及前一时间步的隐藏状态()。与SimpleRNN不同,它使用三个主要的门,并同时更新隐藏状态()和细胞状态()。
tanh层()创建一个新的候选值向量 (vector),以添加到状态中。
tanh函数(将值推到-1到1之间),并乘以sigmoid门的输出。这个过滤后的版本成为新的隐藏状态。
隐藏状态是当前时间步LSTM单元的输出。细胞状态和门的结合使得LSTM能够处理比SimpleRNN长得多的序列并保持相关信息,从而缓解了梯度消失问题。
一个LSTM单元的图示,呈现了信息如何通过遗忘门、输入门和输出门流动,并联系着细胞状态和隐藏状态。
在Keras中使用LSTM简单直接,这多亏了keras.layers.LSTM层。它的功能类似于SimpleRNN,但融入了上面描述的更复杂的内部逻辑。
import keras
from keras import layers
# 定义一个包含64个单元的LSTM层
# 假设输入形状为 (批量大小, 时间步, 特征)
# 例如,(32, 10, 8) 表示32个序列,每个序列10个时间步,每个时间步8个特征
lstm_layer = layers.LSTM(units=64)
# 您可以将其添加到Sequential模型中:
model = keras.Sequential([
# 第一层需要输入形状
layers.Input(shape=(None, 8)), # (时间步, 特征) - None允许变长的序列
layers.LSTM(units=64, return_sequences=True), # 返回完整的序列输出
layers.LSTM(units=32), # 只返回最后一个输出
layers.Dense(units=10) # 示例最终分类层
])
model.summary()
keras.layers.LSTM的重要参数 (parameter):
units:这是输出空间的维度,也对应着隐藏状态和细胞状态的维度。这是一个必需的参数。activation:应用于候选细胞状态()和最终隐藏状态输出计算()的激活函数 (activation function)。默认是'tanh'。recurrent_activation:用于三个门(遗忘、输入、输出)的激活函数。默认是'sigmoid'。return_sequences:一个布尔值。
False(默认),该层只返回输入序列中最后一个时间步的隐藏状态()。当LSTM层是Dense层之前的最终循环层,用于序列分类等任务时,这非常适合。True,该层返回每个时间步的隐藏状态()。这在堆叠LSTM层(以便下一个LSTM层接收序列作为输入)或在需要每个时间步都有输出的序列到序列任务中是必需的。input_shape:与其他Keras层一样,您需要为模型中的第一层指定输入的形状。对于循环层,这通常是(时间步, 特征)。如果您的序列长度可变,可以将时间步维度设置为None。默认情况下,当在兼容的GPU上运行时,LSTM层使用优化的CuDNN核,从而大幅加快训练速度。
与SimpleRNN相比,LSTM层由于其内部门控机制,每个时间步涉及更多计算。然而,正是这种复杂性使其能够有效学习长距离依赖关系,从而使其成为许多序列建模任务的强大工具。在本章后面的实践部分,您将实现一个用于文本分类的LSTM模型。
这部分内容有帮助吗?
keras.layers.LSTM, Keras Team, 2024 - Keras LSTM层的官方文档,提供其参数和实现用法的具体说明。© 2026 ApX Machine Learning用心打造