了解长短期记忆 (LSTM) 网络:穿越时间和记忆的旅程

2024年01月03日 由 alex 发表 206 0

介绍


在充满魅力的人工智能和机器学习世界中,长短期记忆(LSTM)网络作为一项开创性的创新突显出来。它旨在解决传统递归神经网络(RNN)的局限性,尤其是在学习长期依赖方面。LSTM彻底改变了我们在各个领域建模和预测序列的能力。本文深入探讨了LSTM网络的核心机制、其独有特性,以及彻底转型行业的应用。


1


序列挑战


在了解长短时记忆(LSTM)之前,必须先理解为何对序列进行建模(如时间序列数据或语言数据)是一项挑战。传统神经网络,包括递归神经网络(RNN),很难处理“长期依赖性”。本质上,它们难以记住并连接序列中相隔太远的信息。想象一下,如果尝试理解一部小说的情节,但只记得最近读过的几页内容——这就是RNN在处理长序列时面临的问题。


LSTM的出现


1997年,Sepp Hochreiter和Jürgen Schmidhuber开发了LSTM网络。他们的创新在于设计了一种能够学习哪些信息需要存储、存储多久以及应当舍弃哪些信息的神经网络。这项能力对于处理相关信息跨越大时间间隔的序列来说至关重要。


LSTM的核心组成部分


LSTM引入了几个关键组件:


  1. 记忆单元:LSTM单元的核心,记忆单元能够长时间保留信息。它类似于人类记忆的数字形式。
  2. 门:它们是LSTM网络的调节器,包含遗忘门、输入门和输出门。门是决定允许多少信息通过的神经网络。


  • 遗忘门:确定记忆单元中哪些部分应该被抹去。
  • 输入门:用当前输入的新信息更新记忆单元。
  • 输出门:基于当前输入和单元的记忆决定输出内容。


LSTM的工作流程


在处理序列过程中,LSTM单元内的过程可描述如下:


  1. 忘记无关数据:遗忘门评估新输入和之前的隐藏状态,决定哪些信息不再相关,应当丢弃。
  2. 存储重要信息:输入门识别有价值的新信息,并相应更新单元状态。
  3. 计算输出:输出门使用更新后的单元状态来计算将作为该时间步骤的隐藏状态输出的单元状态的部分。


LSTM网络的应用


LSTM广泛应用,证明了它们的多功能性和有效性:


  1. 自然语言处理(NLP):从生成文本到语言翻译和驱动会话代理,LSTM在理解和生成人类语言方面发挥了关键作用。
  2. 时间序列预测:在金融、天气预报和能源需求预测等领域,LSTM能够为准确预测建模复杂的时间模式。
  3. 音乐和艺术创作:LSTM可以在创意领域生成序列,通过学习现有作品中的模式来生成音乐甚至是艺术品。
  4. 医疗保健:它们被用于通过分析患者序列数据来预测疾病进展的预测性诊断。


代码


创建一个完整的Python示例来使用长短时记忆(LSTM)网络涉及几个步骤:生成合成数据集、构建LSTM模型、在数据集上训练模型,最后绘制结果。我们将使用numpy、tensorflow和matplotlib等库来完成这一目的。


首先,确保你已经安装了所需的库:


pip install numpy tensorflow matplotlib


这是完整的代码:


import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
import matplotlib.pyplot as plt
# Parameters
n_steps = 50
n_features = 1
# 1. Generate Synthetic Dataset
def generate_sine_wave_data(steps, length=1000):
    x = np.linspace(0, length * np.pi, length)
    y = np.sin(x)
    sequences = []
    labels = []
    for i in range(length - steps):
        sequences.append(y[i:i+steps])
        labels.append(y[i+steps])
    return np.array(sequences), np.array(labels)
X, y = generate_sine_wave_data(n_steps)
X = X.reshape((X.shape[0], X.shape[1], n_features))
# 2. Build LSTM Model
model = Sequential()
model.add(LSTM(50, activation='relu', input_shape=(n_steps, n_features)))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')
# 3. Train the Model
model.fit(X, y, epochs=20, verbose=1)
# Predictions for plotting
x_input = np.array(y[-n_steps:])
x_input = x_input.reshape((1, n_steps, n_features))
yhat = model.predict(x_input, verbose=1)
# 4. Plot the Results
plt.plot(y[-100:], label='Actual')  # Plot the last 100 actual values
next_time_step = len(y)  # Next time step after the last actual value
plt.scatter(next_time_step, yhat[0], color='red', label='Predicted')  # Plot the predicted value
plt.title("LSTM Model Predictions vs Actual Data")
plt.legend()
plt.show()


  • 合成数据生成:我们生成一个正弦波作为我们的数据集。
  • LSTM模型构建:一个简单的LSTM模型,包含一个LSTM层和一个密集层(Dense layer)。
  • 训练:该模型在合成数据上进行训练。
  • 绘制结果:我们绘制数据集的最后一部分以及模型对下一个时间步骤的预测。


2


请注意,这段代码只是一个基本示例。现实世界中的应用程序会需要更复杂的数据处理、模型调整和验证技术。另外,运行这段代码需要一个安装了必要库的Python环境。


结论


LSTM的发展代表了我们朝向更智能、更有能力的人工智能系统旅程中的一个重要里程碑。通过模拟人脑记忆的选择性保留和回忆,长短期记忆网络为我们以一种深度和时序的方式理解我们周围的世界提供了一个强大的工具。随着我们继续完善和构建这些网络,它们的潜在应用范围就像它们旨在模拟的序列一样广泛。在人工智能领域,长短期记忆网络不仅仅是关于记忆;它们关于以一种之前难以实现的方式理解世界的连续性和上下文。

文章来源:https://medium.com/the-modern-scientist/understanding-long-short-term-memory-lstm-networks-a-journey-through-time-and-memory-57e3c947fc63
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消