AI在线 AI在线

终于把 LSTM 算法搞懂了!!!

今天给大家分享一个强大的算法模型,LSTMLSTM(长短期记忆网络)是一种特殊类型的循环神经网络(RNN),它能够有效地解决传统 RNN 在处理长序列时遇到的梯度消失和梯度爆炸问题。 LSTM 的核心思想是通过多个门控机制来控制信息的流动,这些门控机制可以选择性地保留或丢弃输入数据,从而帮助网络捕捉长时间跨度的依赖关系。 LSTM的工作原理LSTM 的核心思想是通过引入记忆单元来存储信息,并使用三个主要的门(输入门、遗忘门、输出门)来决定哪些信息应该保留,哪些信息应该遗忘,以及哪些信息应该更新。

今天给大家分享一个强大的算法模型,LSTM

LSTM(长短期记忆网络)是一种特殊类型的循环神经网络(RNN),它能够有效地解决传统 RNN 在处理长序列时遇到的梯度消失和梯度爆炸问题。

LSTM 的核心思想是通过多个门控机制来控制信息的流动,这些门控机制可以选择性地保留或丢弃输入数据,从而帮助网络捕捉长时间跨度的依赖关系。

图片

LSTM的工作原理

LSTM 的核心思想是通过引入记忆单元来存储信息,并使用三个主要的门(输入门、遗忘门、输出门)来决定哪些信息应该保留,哪些信息应该遗忘,以及哪些信息应该更新。

遗忘门(Forget Gate)

遗忘门决定了哪些信息将从记忆单元中丢弃,它的输出是一个0到1之间的值,0表示完全丢弃信息,1表示完全保留信息。

图片

终于把 LSTM 算法搞懂了!!!

图片

终于把 LSTM 算法搞懂了!!!

更新记忆单元状态

记忆单元通过遗忘门和输入门的输出进行更新。

图片

终于把 LSTM 算法搞懂了!!!

输出门(Output Gate)

终于把 LSTM 算法搞懂了!!!

LSTM的优势

  1. 避免梯度消失/爆炸LSTM能够通过门控机制,有效地保存和更新记忆信息,避免了传统RNN中由于长时间步的反向传播导致的梯度消失和梯度爆炸问题。
  2. 适应长期记忆LSTM 可以根据需求保留长期记忆(通过记忆单元状态),使得它在处理长序列任务时更加高效。
  3. 灵活性强LSTM不仅适用于标准的时间序列任务,还能够处理文本、语音等多种任务,应用非常广泛。

案例分享

下面是一个使用 LSTM(长短期记忆网络)进行苹果公司股价预测的示例代码。

我们将使用  yfinance 库获取苹果公司历史股价数据, 并通过 TensorFlow 库来构建 LSTM 模型。

复制
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import yfinance as yf
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout

ticker = 'AAPL'  # 苹果的股票代码
start_date = '2010-01-01'
end_date = '2024-11-01'

data = yf.download(ticker, start=start_date, end=end_date)

data = data[['Close']]

scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(data)

def create_dataset(data, time_step=60):
    X, y = [], []
    for i in range(len(data) - time_step - 1):
        X.append(data[i:(i + time_step), 0])
        y.append(data[i + time_step, 0])
    return np.array(X), np.array(y)

time_step = 60  # 使用过去60天的数据来预测下一天的股价
X, y = create_dataset(scaled_data, time_step)

train_size = int(len(X) * 0.8)
X_train, X_test = X[:train_size], X[train_size:]
y_train, y_test = y[:train_size], y[train_size:]


X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1)
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1)

# 构建LSTM模型
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(X_train.shape[1], 1)))
model.add(Dropout(0.2))  # Dropout层防止过拟合
model.add(LSTM(units=50, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(units=1))  # 输出预测的股价


model.compile(optimizer='adam', loss='mean_squared_error')

model.fit(X_train, y_train, epochs=10, batch_size=32)

predictions = model.predict(X_test)

predictions = scaler.inverse_transform(predictions)
y_test_actual = scaler.inverse_transform(y_test.reshape(-1, 1))

plt.figure(figsize=(14, 6))
plt.plot(data.index[train_size+time_step+1:], y_test_actual, color='blue', label='Real Price')
plt.plot(data.index[train_size+time_step+1:], predictions, color='red', label='Predicted Price')
plt.title('Apple Stock Price Prediction using LSTM')
plt.xlabel('Time')
plt.ylabel('Stock Price (USD)')
plt.legend()
plt.show()

图片

相关资讯

终于把 Seq2Seq 算法搞懂了!!

Seq2Seq(Sequence-to-Sequence)模型是一种用于处理序列数据的神经网络架构,广泛应用于自然语言处理(NLP)任务,如机器翻译、文本生成、对话系统等。 它通过编码器-解码器架构将输入序列(如一个句子)映射到输出序列(另一个句子或序列)。 图片模型结构Seq2Seq 模型由两个主要部分组成。
11/14/2024 12:16:46 AM
程序员小寒

终于把 LSTM 算法搞懂了!!

大家好,我是小寒今天给大家分享一个超强的算法模型,LSTM。 LSTM(长短期记忆网络,Long Short-Term Memory)是一种特殊的循环神经网络(RNN)算法,专门设计用来解决传统RNN在处理长序列数据时存在的梯度消失和梯度爆炸问题。 它通过引入细胞状态和门控机制,使得模型能够捕捉和保存长期依赖信息,从而有效地处理序列数据中的长期依赖关系。
7/15/2025 10:41:44 AM
程序员小寒

Bengio等人新作:注意力可被视为RNN,新模型媲美Transformer,但超级省内存

序列建模的进展具有极大的影响力,因为它们在广泛的应用中发挥着重要作用,包括强化学习(例如,机器人和自动驾驶)、时间序列分类(例如,金融欺诈检测和医学诊断)等。在过去的几年里,Transformer 的出现标志着序列建模中的一个重大突破,这主要得益于 Transformer 提供了一种能够利用 GPU 并行处理的高性能架构。然而,Transformer 在推理时计算开销很大,主要在于内存和计算需求呈二次扩展,从而限制了其在低资源环境中的应用(例如,移动和嵌入式设备)。尽管可以采用 KV 缓存等技术提高推理效率,但 T
5/25/2024 6:19:00 PM
机器之心
  • 1