> ## Content Index
> Fetch the complete content index at: https://www.hubwiz.com/blog/llms.txt
> Use this file to discover other available public pages before exploring further.

# TimesLM时间序列预测基础模型
- URL: https://www.hubwiz.com/blog/timeslm-time-series-forecasting-foundation-model/
- Published: 2024-11-30T12:57:32.000Z
- Updated: 2024-11-30T12:57:32.000Z
- Description: TimesLM 是一款用于时间序列预测的开创性大型语言模型 (LLM)，其灵感来自基于 NLP 的基础模型的进步。
- Author: admin
- Tags: MODEL-ZOO, TIMESLM, #Import 2026-10-14 14:41

时间序列预测一直是金融、医疗保健和零售等行业决策的基石。从预测股票价格到优化能源消耗，挑战始终在于开发能够很好地适用于各种数据集和时间模式的模型。

TimesLM 是一款用于时间序列预测的开创性大型语言模型 (LLM)，其灵感来自基于 NLP 的基础模型的进步。TimesLM 具有零样本预测功能，无需特定任务的训练即可提供接近最先进监督模型的性能。

本文将解开 TimesLM 的架构、数学和实际实现，展示它如何在时间序列预测中树立新的标杆。

## 1、TimesLM 的核心设计

![](https://www.hubwiz.com/blog/content/images/2024/11/image-1777.png)

图 1：TimesFM 架构概览（

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 存储库](https://github.com/google-research/timesfm?ref=hubwiz.com)以获取实施细节，并通过阅读完整的 [TimesLM 论文](https://arxiv.org/pdf/2310.10688v2?ref=hubwiz.com)深入了解研究。

---

原文链接：[TimesLM: A Foundation Model for Time Series Forecasting](https://medium.com/@tejaswi%5Fkashyap/timeslm-a-foundation-model-for-time-series-forecasting-64d4756b6500?ref=hubwiz.com)

汇智网翻译整理，转载请标明出处