LSTM模型原理详解及Python实现

2023-08-2209:50:06人工智能与大数据Comments1,179 views字数 3199阅读模式

深度学习和人工智能领域,处理序列数据,比如时间序列、文本或音频,是一个巨大的挑战。特别是当我们试图捕获数据中的长期模式或依赖关系时。想象一下,如果你正在阅读一篇文章,你可能需要记住文章开始的内容,以便理解结尾的内容。对于传统的神经网络来说,这是很困难的。这就是LSTM,或长短时记忆网络,发挥作用的地方。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

LSTM是循环神经网络(RNN)的一种特殊类型。与传统的神经网络不同,RNN具有循环结构,允许信息在网络中持续流动。这使得RNN理论上可以记住长期的信息。然而,实际上,标准的RNN在尝试捕获长期依赖关系时遇到了困难。LSTM正是为了解决这个问题而被设计出来的。
LSTM的核心思想是“细胞状态”——一种持续在网络中流动的信息线。这个细胞状态就像一个传送带,从网络的开始一直到结束。在传送带上,LSTM可以添加或删除信息,确保只有相关的信息被保留,不相关的信息被遗忘。
为了实现这一点,LSTM使用了三个重要的“门”结构:遗忘门、输入门和输出门。这些门决定了哪些信息应该被遗忘,哪些信息应该被存储到细胞状态中,以及哪些信息应该在输出中显示。

LSTM 架构文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

长短时记忆网络 (LSTM) 是由 Sepp Hochreiter 和 Jürgen Schmidhuber 在 1997 年设计的循环神经网络架构。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

LSTM模型原理详解及Python实现文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

LSTM 架构由一个单元组成,即记忆单元(也称为 LSTM 单元)。LSTM 单元由四个前馈神经网络组成。每个神经网络都包括一个输入层和一个输出层。在每个神经网络中,输入神经元都连接到所有输出神经元。因此,LSTM 单元具有四个完全连接的层。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

四个前馈神经网络中的三个负责选择信息。它们是遗忘门、输入门和输出门。这三个门用于执行三个典型的记忆管理操作:从记忆中删除信息(遗忘门)、在记忆中插入新信息(输入门)和使用存储在记忆中的信息(输出门)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

第四个神经网络,即候选记忆,用于创建新的候选信息以插入到记忆中。下面是几个重要环节的介绍。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

遗忘门 (Forget Gate)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

它决定了什么信息应该被遗忘或丢弃。它使用sigmoid激活函数,得到一个0到1之间的数值。这个数值决定了有多少信息会被保留。0表示“丢弃所有信息”,1表示“保留所有信息”。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

LSTM模型原理详解及Python实现文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

输入门 (Input Gate)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

- 它有两部分。第一部分是sigmoid层,它决定了我们将更新什么 值。第二部分是tanh层,它创建一个新的候选值向量,这个向量可能会被加到状态中。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

LSTM模型原理详解及Python实现

更新单元状态 (Update Cell State)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

这是LSTM的核心部分。首先,我们通过遗忘门丢弃掉不需要的信息,然后加入新的候选值。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

输出门 (Output Gate)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

它决定了基于单元状态输出什么值。首先,使用sigmoid层决定哪部分状态将输出,然后将单元状态通过tanh函数(得到值在-1到1之间)并乘以sigmoid门的输出,得到我们想要输出的最终预测。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

其中,  是sigmoid激活函数,  表示逐元素相乘,  和  是权重和 偏置,分别对应于遗忘门、输入门、更新和输出门。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

LSTM模型原理详解及Python实现文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

LSTM的主要优点是能够捕获长时间的依赖关系,避免了传统RNN中的 梯度消失问题。因此,LSTM在许多涉及时间序列和序列预测的任务中都被广泛使用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

LSTM在许多复杂的序列任务中都表现出色,如:机器翻译:将一个语言的句子翻译成另一个语言。语音识别:将人类的语音转化为文本。时间序列预测:例如,预测未来的股票价格。

代码示例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

生成一组时间序列数据。为了简单起见,我们将生成一组基于正弦波的数据,其中包含一些随机噪声。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

import numpy as np
import matplotlib.pyplot as plt

# Generate the time steps for the series
time = np.arange(0, 1000)

# Generate a sinusoidal series with some random noise
series = np.sin(0.02 * time) + np.random.normal(size=1000) * 0.2

# Visualize the series
plt.figure(figsize=(10, 6))
plt.plot(series)
plt.title("Generated Time Series Data")
plt.xlabel("Time")
plt.ylabel("Value")
plt.grid(True)
plt.show()

series.shape

LSTM模型原理详解及Python实现文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

使用LSTM模型进行预测.不过我们需要将这个时间序列转换为可以用于训练LSTM模型的形式。在处理时间序列预测问题时,我们通常使用过去的一段时间(例如,过去n个时间步)的信息来预测未来的值我们需要将我们的序列重塑为一个滑动窗口的形式。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

具体来说,使用过去20个时间步的信息来预测下一个时间步的值。这意味着我们的输入将是一个形状为20,1的数组(表示过去20个时间步的值),我们的目标将是一个单一的值(表示下一个时间步的值)。为了训练我们的模型,我们需要为序列中的每一个可能的20步窗口生成一个这样的输入/目标对。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

def create_dataset(series, window_size):
    """
    Convert a series into a dataset of input-output pairs for LSTM.
    """
    X, Y = [], []
    for i in range(len(series) - window_size):
        X.append(series[i:i+window_size])
        Y.append(series[i+window_size])
    return np.array(X), np.array(Y)

window_size = 20
X, Y = create_dataset(series, window_size)

# Reshaping X to be in the format [samples, time steps, features]
X = np.reshape(X, (X.shape[0], X.shape[1], 1))

X.shape, Y.shape

接下来,我们将使用keras库建立一个LSTM模型。此模型将包括以下层:一个LSTM层,有50个单元;一个全连接(Dense)层,输出单个预测值。
from keras.models import Sequential
from keras.layers import LSTM, Dense

# Build the LSTM model
model = Sequential()
model.add(LSTM(50, input_shape=(window_size, 1)))
model.add(Dense(1))

# Compile the model
model.compile(optimizer='adam', loss='mse')

model.summary()

LSTM模型原理详解及Python实现文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

预测并绘制对比图象文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

# Train the model
model.fit(X, Y, epochs=10)

# Predict using the model
predictions = model.predict(X)

# Plot the original data and predictions
plt.plot(series, label='Original Data')
plt.plot(np.arange(20, 1000), predictions, label='Predictions', linestyle='--')
plt.legend()
plt.show()

LSTM模型原理详解及Python实现文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

LSTM模型原理详解及Python实现文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

王海华 模型视角文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/54257.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ai/54257.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定