目录
前言
文献阅读:跨多个时空尺度进行预测的时空 LSTM 模型
背景
本文思路
本文解决的问题
方法论
SPATIAL
自动机器学习模型
数据处理
模型性能
代码
用Python编写的LSTM多变量预测模型
总结
This week, I studied an article that uses LSTM to solve problems related to spatiotemporal prediction.This paper presents a DL framework based on bidirectional LSTM to extend the learning of time-series signals. The resulting model provides a scalable forecasting system that adjusts naturally to spatiotemporal patterns. The cost of model training was reduced by an order of magnitude as we trained a single model for each dataset rather than each signal. SPATIAL adjusts naturally to missing data, and the random distribution of missing data between sensors can be leveraged to lessen the effect of data gaps on learning (i.e., since typically sensors exhibit data gaps at different times, combining information from multiple sensors in a single framework can improve learning on noisy and error-prone data). Finally, extending the recurrent structure of LSTM-type approaches for time series applications to the spatiotemporal direction has the potential to translate to many different industrial applications such as weather, transport, and epidemiology.In addition, in terms of coding, I am currently reviewing the foundational knowledge intensively.
本周学习了一篇用lstm来解决和时空预测有关的问题。本文提出了一种基于双向LSTM的深度学习框架,以扩展时间序列信号的学习。由此产生的模型提供了一个可扩展的预测系统,该系统可以自然地适应时空模式。模型训练的成本降低了一个数量级,因为我们为每个数据集而不是每个信号训练了一个模型。SPATIAL 自然地适应缺失的数据,并且可以利用传感器之间缺失数据的随机分布来减少数据差距对学习的影响(即,由于通常传感器在不同时间表现出数据差距,因此将来自多个传感器的信息组合在一个框架中可以改善对嘈杂和容易出错的数据的学习)。最后,将时间序列应用的LSTM型方法的循环结构扩展到时空方向,有可能转化为许多不同的工业应用,如天气、交通和流行病学。除此之外,在代码方面,我目前还在恶补基础知识。
--Fearghal O'Donncha, Yihao Hu, Paulito Palmes, Meredith Burke, Ramon Filgueira, Jon Grant,
A spatio-temporal LSTM model to forecast across multiple temporal and spatial scales,
Ecological Informatics,
Volume 69,
2022,
101687,
ISSN 1574-9541,
https://doi.org/10.1016/j.ecoinf.2022.101687.
准确预测海洋过程需要了解空间和时间的依赖性。这些关系在经典的纳维-斯托克斯方程中表示,该方程是大多数现代海洋预报系统的基础(Chorin,1968)。另一方面,机器学习(ML)在清晰的空间(例如图像处理)或时间(例如语音识别)依赖性问题上取得了巨大的成功。然而,对于时空应用,科学还不发达。
传统上,海洋过程的预测依赖于基于物理学的方法,这些方法可以解决一组控制方程。基于物理的方法的主要挑战是在广泛的空间和时间尺度上以高分辨率部署的巨大计算费用(通常需要高性能计算设施),以及通常需要专家用户的配置和参数化模型的复杂性。
用于预测海洋过程的机器学习 (ML) 方法还处于起步阶段,传统上受到数据稀疏性挑战的限制。为了规避这一限制,近年来人们对使用 ML 开发基于物理学的模型的低成本近似或替代物产生了兴趣,但由于模型本身用于训练深度学习网络,因此准确性和空间范围仅限于传统方法规定的水平。
总之,用于海洋过程的机器学习应用主要集中在处理来自数值模型输出的网格数据,或通过遥感采样的大量地表水数据。这些数据集适用于图像处理算法,这些算法广泛用于面部识别和计算机视觉等各个领域的机器学习。在原位传感器数据上训练的应用倾向于将每个时间序列信号独立地视为单变量或多变量回归问题。自然,这丢失了对全面评估自然系统至关重要的空间依赖性信息。
本文提出了一个框架,该框架通过显式学习不同但相关的时间序列信号的空间和时间组件来扩展模型精度。我们的方法源自长短期记忆(LSTM)算法,该算法是时间序列中使用最广泛的深度神经网络框架(Hochreiter和Schmidhuber,1997)。LSTM 的优势在于它能够调整到适当的内存规模,这应该被视为时间序列信号的一部分。以前的应用研究很少考虑时间和空间的依赖性。我们将我们的框架称为空间-LSTM或SPATIAL。
通过SPATIAL,我们将这些功能扩展到不同传感器之间的连接。该算法应用于三个真实世界的数据集:洋流速度、温度和溶解氧。每个数据集都呈现出完全不同的特征。洋流模式受到外部物理驱动因素的影响,例如潮汐效应和表面风应力以及温度和盐度变化产生的密度驱动流。温度的变化可以通过多种外生过程来解释,例如太阳辐射,空气温度,海床传热以及来自河流和开阔海洋的外部热通量 (Pidgeon和Winant,2005)。另一方面,海洋氧含量是受流体动力学(水平和垂直混合,停留时间等),天气(温度降低氧气溶解度),营养负荷(人为富集)和呼吸影响的生物地球化学过程(Caballero-Alfonso等人,2015)。非线性响应和对多个不透明变量的敏感性相结合,使这些成为传统物理建模方法具有挑战性的预测问题。相反,我们的方法旨在学习数据的空间和时间模式,以提供更灵活的预测框架。
本文解决了与机器学习的环境应用相关的两个基本挑战:
1)数据稀疏性,特别是在具有挑战性的海洋环境中。
2)环境数据集在空间和时间方向上固有地相互联系,而经典的ML方法一次只考虑其中一个。
SPATIAL 是在时间序列信号的空间和时间方向上使用双向 LSTM 模型的首次尝试。更具体地说,基于地理上的接近性或领域专业知识,已知我们希望预测的信号(洋流、温度和溶解氧)对相邻信号有一定的依赖性。我们在相关传感器的空间方向上实现双向LSTM模型,并训练模型以学习空间和时间结构。
循环网络支持的参数共享的扩展是双向LSTM,它以向后和向前的方向处理序列数据(Schuster和Paliwal,1997)。实际上,它在输入数据上训练两个 LSTM。第一个 LSTM 在原始输入数据上,另一个在输入数据的反向副本上(Imrana 等人,2021 年)。这自然适用于顺序或时间序列数据,并且在语言处理(Wang等人,2016)和语音识别(Graves等人,2013b)等领域证明了与单向LSTM相比的性能有所提高。直观地,双向 LSTM 使用前向隐藏层和后向隐藏层在两个方向上处理输入数据。虽然双向LSTM以前已应用于时间序列预测,但本文是第一篇应用于空间和时间维度的论文。
图1(b)提供了我们的空间实现的示意图。单向 LSTM 应用于每个传感器的时间方向,并且在各个传感器之间,一系列堆叠的双向层支持不同时间序列之间的学习。堆叠层数是在训练期间选择的超参数。网络的输入数据由一个 m × n 个 × l 数组组成(其中 m 是传感器的数量,n 是时间点的数量,l 是用于进行预测的滞后数量),标签由相应的 m × n × k 数组组成,其中 k 是预测窗口。在这项研究中,k 等于 1,因为我们使用了滚动预测实现来进行预测。也就是说,模型对指定的时间步长进行预测,然后从测试集中获取下一个小时的实际值,并将其提供给模型以预测下一个时间步长。
图 2 总结了我们的空间模型的架构。单个传感器时间序列向量组合成大小为 m × n × l 的矩阵,其中 l 表示模型用于进行预测的滞后数。 这可以被视为在模型训练期间要优化的模型超参数。数据被传递到一系列堆叠的双向 LSTM 层,并在模型设计和训练期间优化确切的数量。对于我们的实验,我们探索了 1 到 10 个 LSTM 层,同时采用了整流线性单元 (ReLU) 激活函数(Nair 和 Hinton,2010)。
可选的掩模层允许用户指定在模型训练期间屏蔽或删除某些数据点,以消除异常值。但是,在 LSTM 实现中应明智地使用此功能,因为不同点的屏蔽会影响数据的时间连续性并阻碍模型学习。出于这个原因,我们没有在模型中应用掩码,而是使用了第 3.4 节中描述的数据插值例程。
我们使用 Keras 库双向层包装器在 python 中实现了该算法。Keras允许我们使用他们的高级API有效地将常规或单向LSTM“转换”为双向LSTM(Gulli和Pal,2017)。SPATIAL 的完整源代码已在 https://github.com/IBM/spatial-lstm 的 Apache 许可下公开发布,以确保框架的可复制性。
图 1.(a)用于预测单个时间序列信号的经典LSTM架构示意图,而(b)介绍了我们的空间实现,其中空间(传感器到传感器)和时间模式由网络显式学习。在此表示中,m 是传感器的数量,n 是训练时间段,k 是我们希望预测的时间段。
图 2.SPATIAL 摄取多维输入,使深度神经网络能够从不同的传感器中提取特征,并利用学到的信息来预测每个传感器的时间序列。换句话说,对于每个传感器,预测不仅基于其先前的时间序列,还基于来自其他传感器的信息。输入数据由包含 n 个时间步长的 m 个传感器数据集组成。要生成预测,将前面 l 个时间步长的值传递给模型,以生成相应的时间 k 预测
Gartner——受人尊敬的企业研究和咨询公司——将ML模型部署的自动化确定为2020年的十大关键技术趋势之一(Cearley等人,2019)。这些方法被称为 AutoML 或 AutoAI,旨在帮助自动化创建、部署、管理和操作 AI 模型的生命周期中涉及的步骤和流程(Dickson,2020 年)。Gartner强调了其“民主化AI”的能力,它支持开发低代码ML模型,这些模型不需要高水平的数据科学经验来设置和参数化模型。(Cearley 等人,2019 年)。存在各种AutoML或AutoAI产品,其中最突出的是IBM的AutoAI,Google的autoML和H20.ai的H2O。
AutoAI方法的基本思想可以被认为是“AI的AI”。使用机器学习,它旨在查询用户数据并发现机器学习回归和分类的最佳结构、数据转换和可调参数(或超参数)。AutoAI方法对于基准研究特别有价值,因为它们可以很容易地被其他人复制,并且不需要高水平的数据科学专业知识。许多工具,如IBM AutoAI提供免费计划,特别适合科学和学术研究。
为了评估 SPATIAL 相对于现有方法的相对性能,我们纳入了 AutoML(Drori 等人,2018 年)方法生成的两个最佳基线模型:
上述 AutoML 技术生成的模型用于对 SPATIAL 框架的预测技能进行基准测试,提供对环境数据集数据特征的额外见解,并评估不同模型框架的部署难易程度。虽然 AutoML 框架提供了大量算法作为选项,但我们将所有算法限制为所有传感器的单一算法,以提供更标准化的比较,并简化解释。
基于平均性能,AutoAI和AMLP的选择模型分别为XGBoost和Random Forest。随机森林 (RF) 在以大量解释变量和非线性动力学为特征的复杂预测问题中表现出色。RF是一种基于大量决策树聚合的分类和回归方法。决策树是一种概念简单但功能强大的预测工具,它将数据集分解为越来越小的子集,同时逐步开发相关的决策树。由此产生的从解释变量到结果的直观路径有助于提供易于解释的模型。
虽然 XGBoost 与 RF 有许多共同的特征和优势(即可解释性、预测性能和简单性),但促进性能提升的一个关键区别是决策树是按顺序构建的,而不是独立构建的。XGBoost算法于2016年在华盛顿大学开发,自推出以来,一直被认为赢得了众多Kaggle比赛,并被用于多个行业应用。XGBoost 提供了算法改进,例如用于稀疏数据的稀疏感知算法和用于近似树学习的加权分位数草图,以及针对分布式计算的优化,以构建一个可扩展的树提升系统,可以处理数十亿个示例(Chen and Guestrin,2016)。
本文中使用的数据预处理和插值方法示意图。
图 4 提供了一个时间序列图,将五个模型与观测值进行比较(我们从每个数据集中选择一个传感器来说明)。所有模型都密切捕捉数据的短期波动和季节性模式。ADCP数据也是如此,尽管波动性相对较高。一般来说,深度学习模型优于机器学习模型,这可能是由于深度学习方法适应数据集非线性的能力增强所致。
图 4.空间性能(绿线)与两个基准 ML 和两个 DL 模型的比较。
基准模型由 AutoAI 配置和部署的 XGBoost 模型(粉红线)和使用 AMLP 管道生成的随机森林模型(橙色线)组成。DL模型由单变量LSTM(紫色)和CNN模型(蓝色)组成。黑色圆圈表示观测值。图为温度(顶部)、溶解氧(中)和当前速度(底部) 每个模型预测 24 小时内的 24 小时预测,步幅为 30 分钟(每 30 分钟生成一次新预测)
性能比较表明,现有算法在这些数据集上提供了强大的预测技能。我们的SPATIAL 模型广泛复制或改进了这种性能,该模型报告了所有三个数据集中最低的误差(表 3),略胜于 CNN 和 LSTM 模型。也就是说,通过采用更直接的数据预处理以及模型生成和实现管道(通过对传感器数据进行分组来支持更少的模型),我们获得了与现有最先进的性能相当的性能。与现有算法相比,我们的空间模型具有许多实际优势,特别是:
数据预处理管道得到简化,因为 SPATIAL 管道将所有数据加载到馈送到网络的单个数组中(模型不依赖于外生变量或特征转换)。
通过从地理上接近或共享某些特征的多个传感器提供数据,网络可以捕获自然界中存在的某些物理关系,并可能用于规范模型。
同时处理所有传感器可以大大提高计算效率 - 只训练一个模型,而不是每个信号的模型。
最后,随着数据集数量的增加(传感器数量和研究期的持续时间),深度学习模型有望实现更高的性能。与单个CNN或LSTM模型相比,允许单个模型从多个传感器学习的SPATIAL 方法有望放大性能提升。
上述第1点和第2点密切相关。在预测中,我们希望使用最简单的模型,它最能反映我们对系统的了解。所提出的 SPATIAL 框架通过以下方式简化了环境建模的模型训练和部署过程:
import numpy as np
import pandas as pd
from keras.models import Sequential
from keras.layers import Dense, LSTM
# 读取数据集
data = pd.read_csv('dataset.csv')
# 将数据集转换为numpy数组格式
data = np.array(data)
# 划分训练集和测试集
train_size = int(len(data) * 0.8)
train_data = data[:train_size]
test_data = data[train_size:]
# 归一化处理
max_value = np.max(data)
min_value = np.min(data)
scalar = max_value - min_value
train_data = list(map(lambda x: x / scalar, train_data))
test_data = list(map(lambda x: x / scalar, test_data))
# 定义生成多变量序列数据的函数
def generate_multivariate_sequences(dataset, num_steps):
X, y = [], []
for i in range(len(dataset)-num_steps):
X.append(dataset[i:i+num_steps, :-1])
y.append(dataset[i+num_steps, -1])
return np.array(X),np.array(y)
# 设置超参数
num_steps = 7
input_dim = 5
hidden_dim = 10
output_dim = 1
epochs = 100
batch_size = 32
# 生成训练集和测试集的序列数据
X_train, y_train = generate_multivariate_sequences(train_data, num_steps)
X_test, y_test = generate_multivariate_sequences(test_data, num_steps)
# 定义LSTM模型
model = Sequential()
model.add(LSTM(hidden_dim, input_shape=(num_steps, input_dim)))
model.add(Dense(output_dim))
# 编译模型
model.compile(loss='mse', optimizer='adam')
# 训练模型
model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, validation_data=(X_test, y_test))
# 对测试集进行预测
y_pred = model.predict(X_test)
# 反归一化处理
y_pred = y_pred * scalar + min_value
y_test = y_test * scalar + min_value
# 计算均方根误差
rmse = np.sqrt(np.mean(np.square(y_pred - y_test)))
print('RMSE:', rmse)
注释:
- 第1到4行:导入所需的库。
- 第6到10行:读取数据集并进行预处理,将数据集转换为numpy数组格式,划分训练集和测试集,进行归一化处理。
- 第13到23行:定义生成多变量序列数据的函数,输入参数包括数据集和步长,输出参数包括输入序列X和输出序列y。
- 第26到33行:设置超参数,包括步长、输入维度、隐藏层维度、输出维度、迭代次数和批大小。
- 第36到39行:生成训练集和测试集的序列数据,使用刚才定义的generate_multivariate_sequences函数。
- 第42到46行:定义LSTM模型,包括一个LSTM层和一个全连接层。
- 第49行:编译模型,使用均方误差作为损失函数,使用Adam优化器。
- 第52行:训练模型,使用训练集进行训练,同时使用测试集进行验证。
- 第55到57行:对测试集进行预测,并进行反归一化处理,得到原始数据的预测值和真实值。
- 第60行:计算均方根误差(RMSE),衡量模型的预测精度。
我觉得本周的文献阅读选材非常好,感觉上和我的论文方向非常贴合,有空的话可以多学习学习。
现在的主要方向还是在于对代码的理解和使用,这是我目前欠缺的能力,我应该花更多的时间在这里。