TimesLM时间序列预测基础模型
时间序列预测一直是金融、医疗保健和零售等行业决策的基石。从预测股票价格到优化能源消耗,挑战始终在于开发能够很好地适用于各种数据集和时间模式的模型。
TimesLM 是一款用于时间序列预测的开创性大型语言模型 (LLM),其灵感来自基于 NLP 的基础模型的进步。TimesLM 具有零样本预测功能,无需特定任务的训练即可提供接近最先进监督模型的性能。
本文将解开 TimesLM 的架构、数学和实际实现,展示它如何在时间序列预测中树立新的标杆。
1、TimesLM 的核心设计
TimesLM 的架构是一个仅解码器的转换器,这种方法大量借鉴了基于 NLP 的 LLM。但是,它经过量身定制,以满足时间序列预测的独特需求。让我们来分析一下:
补丁解码器风格
在 NLP 中,模型处理连续的标记(例如单词或子单词)。TimesLM 类似地将时间序列数据划分为补丁——连续的数据点段。每个补丁都相当于一个标记,在处理长时间序列时大大减少了计算负担。
例如,1024 个数据点的时间序列可以分解为长度为 32 的补丁,从而得到 32 个补丁。
优点:
- 效率:减少输入到转换器层的标记数量,从而实现更快的训练和推理。
- 稳健性:通过关注较小数据块中的模式,帮助模型更好地泛化。
代码示例:
def create_patches(time_series, patch_size):
return [time_series[i:i+patch_size] for i in range(0, len(time_series), patch_size)]
灵活的输入和输出补丁长度
输入补丁用于捕获历史上下文,而输出补丁则预测未来值。与标准 LLM 不同,TimesLM 支持更长的输出补丁(例如,一次预测 128 个时间点),从而减少推理过程中所需的自回归步骤数。
为什么这很重要:
- 对于需要长期预测的任务,更少的步骤可以减少错误传播并提高效率。
掩蔽策略
为了增强泛化能力,TimesLM 在训练期间应用随机掩蔽。它掩蔽补丁的部分或整个补丁,迫使模型适应不同的上下文长度。此策略可确保模型学会使用不完整的数据进行有效预测——这对于实际应用至关重要。
数学表示:
对于输入补丁 yj 和掩码 mj
t_j = ResidualBlock(y_j * (1 - m_j)) + PositionalEncoding(j)
堆叠的 Transformer 层
TimesLM 架构的核心包括多层因果自注意力和前馈网络。与标准 Transformer 中的双向注意力不同,因果注意力确保对未来补丁的预测仅依赖于过去的数据。
公式:
o_j = SelfAttention(t_1, ..., t_j)
这里, o_j
是第 j 个补丁的输出标记,然后将其输入到残差块中进行预测。
残差块和位置编码
- 每个补丁都通过残差块进行转换,从而确保训练期间的稳定性。
- 位置编码为模型增加了时间感知,这对于处理时间序列数据至关重要。
2、训练策略
训练通用时间序列基础模型绝非易事。 TimesLM 的训练策略取决于两个关键要素:数据多样性和高效处理。
多样化的预训练语料库
为了确保稳健性,TimesLM 在现实世界和合成数据集的混合上进行训练,捕获了各种各样的模式、粒度和领域。
数据来源:
- Google Trends:涵盖 15 年的每小时、每日、每周和每月粒度的数据。
- Wiki 页面浏览量:提供数百万个跨小时、天和周聚合的时间序列。
- 合成数据:包括 ARMA 过程、季节性模式和阶跃函数,允许模型从人工生成的趋势和异常中学习。
合成数据生成:
import numpy as np
def generate_seasonal_series(length, freq):
return np.sin(np.linspace(0, freq * np.pi, length))
def add_trend(series, trend_factor):
return series + np.linspace(0, trend_factor, len(series))
synthetic_series = add_trend(generate_seasonal_series(1024, 5), 10)
修补输入处理
- 时间序列被分割成不重叠的补丁,每个补丁都转换为嵌入。
- 这种分割确保了可扩展性,即使对于海量数据集也是如此。
训练期间屏蔽
- 为了支持不同的上下文长度,模型在训练期间随机屏蔽部分输入。
- 例如,如果最大上下文长度为 512,则可以应用掩码来模拟较短的上下文(例如 128 或 256 个时间点)。
损失函数
- 主要训练目标是最小化预测值和实际值之间的均方误差 (MSE)。
数学表示:
MSE = (1 / H) * sum((y[L + i] - y_hat[L + i]) ** 2 for i in range(1, H + 1))
其中:
- H 是预测范围。
- y[L + i] 是步骤 L + i 处的实际值。
- y_hat[L + i] 是步骤 L + i 处的预测值。
该模型使用小批量梯度下降进行训练,确保跨时间序列批次进行高效处理。
数据集混合策略
- 为了避免过度拟合单一类型的数据集,TimesLM 在真实数据和合成数据之间使用 50-50 的分割。
- 在真实数据中,权重在每小时、每日、每周和每月数据集之间平均分配。
3、零样本能力
TimesLM 最令人印象深刻的功能之一是其零样本预测能力 — 能够在训练期间从未见过的数据集上表现良好。此功能根据三个基准组进行评估:
- 莫纳什档案
30 个数据集的多样化集合,包括财务、天气和需求预测。TimesLM 实现了具有竞争力的性能,通常超越 DeepAR 和 FFNN 等监督基线。关键结果:TimesLM 的缩放平均绝对误差 (MAE) 平均在最佳模型的 10% 以内
- Darts 基准
专注于具有强烈季节性和趋势成分的数据集,例如每月牛奶产量和航空旅客数据。TimesLM 有效地捕捉了加法和乘法模式,其性能与 ARIMA 等最先进的统计方法相当。
- Informer 数据集
这些长视界数据集测试模型预测延长时间间隔(例如 192 个时间步长)的能力。 TimesLM 凭借其补丁解码器架构脱颖而出,其表现通常优于 PatchTST 等专用长视界模型。
4、缩放定律
- TimesLM 等基础模型的性能通常受模型大小、数据量和训练计算之间的相互作用影响。受 NLP 中建立的缩放定律的启发,TimesLM 探索了参数数量与预测准确度之间的关系。
- 模型缩放实验:TimesLM 在具有 17M、70M 和 200M 个参数的配置下进行训练。在这些实验中,增加参数数量可带来准确度的持续提升,验证了 Kaplan 等人的观察结果,即较大的模型在数据充足的情况下往往表现更好。
- 计算优化训练:Hoffmann 等人引入了计算优化模型的概念,在参数大小和数据可用性之间取得平衡。TimesLM 采用了类似的理念,利用其预训练语料库来实现高精度,而无需过多的计算开销。
- 经验见解:在莫纳什数据集上,TimesLM 的缩放平均绝对误差 (MAE) 随着模型尺寸的增加而单调下降。这些结果凸显了在实际计算限制内扩展的好处。
- 可视化扩展影响:
参数计数 | 扩展MAE |
---|---|
17M | 1.25 |
70M | 1.10 |
200M | 0.98 |
5、实际代码
要探索 TimesLM 的实际应用,请考虑使用 GitHub 实现预测电力需求的以下示例:
from timeslm import TimesModel
# Load preprocessed dataset
data = load_dataset("electricity")
# Initialize the model
model = TimesModel(input_patch_len=32, output_patch_len=128)
# Generate predictions
predictions = model.predict(data["context"], horizon=96)
# Evaluate performance
mse = evaluate_metric(data["ground_truth"], predictions, metric="mse")
print(f"Mean Squared Error: {mse}")
此示例演示了 TimesLM 如何轻松适应新数据集,以最小的努力提供可靠的预测。
6、TimesLM 脱颖而出的原因
- 效率:TimesLM 仅使用 2 亿个参数,在计算效率高的同时,实现了接近最先进的性能。
- 可扩展性:无缝处理不同的历史和预测长度。
- 领域无关:经过多样化数据训练,可很好地跨领域推广。
未来方向:
- 概率预测:结合不确定性估计进行关键决策。
- 小样本学习:对特定领域的数据集进行微调以提高性能。
- 可解释性:增强模型可解释性以在高风险应用中建立信任。
7、结束语
TimesLM 通过将大型语言模型的原理应用于时间数据,在时间序列预测方面取得了重大进展。凭借其仅解码器的架构、高效的基于补丁的处理和强大的零样本能力,TimesLM 成为应对各种预测挑战的实用而强大的解决方案。
探索 GitHub 存储库以获取实施细节,并通过阅读完整的 TimesLM 论文深入了解研究。
原文链接:TimesLM: A Foundation Model for Time Series Forecasting
汇智网翻译整理,转载请标明出处