当前位置:AIGC资讯 > AIGC > 正文

Lag-Llama:时间序列大模型开源了!

之前我们介绍过TimeGPT,它是第一个时间序列的大模型,具有零样本推理、异常检测等能力。TimeGPT引发了对时间序列基础模型的更多研究,但是它是一个专有模型,只能通过API访问。

如今,终于出现一个用于时间序列预测的开源大模型:Lag-Llama

在原论文《Lag-Llama: Towards Foundation Models for Probabilistic Time Series Forecasting》中,Lag-Llama作为单变量概率预测的通用大模型提出。

在本文中,我们将探讨Lag-Llama的架构、功能以及训练方式。还会通过代码将lagllama应用于一个预测项目中,并将其与其他深度学习方法Temporal Fusion Transformer (TFT) 和DeepAR进行性能比较。

Lag-Llama

lagllama是为单变量概率预测而构建的,它使用不依赖于频率的通用方法来标记时间序列数据。这样模型可以很好地泛化到不可见的频率。

1、时间序列数据处理

laglllama的标记策略是使用一组指定的滞后特征。

它将从这个列表中为给定的数据集选择所有合适的频率: 季度、月、周、天、小时、秒

也就是说,如果以每日频率提供数据集,lag - llama将尝试使用每日滞后(t-1),每周滞后(t-7),每月滞后(t-30)等构建特征。

策略如下图所示。

从上图中,我们还可以看到模型构建了其他静态协变量,例如秒/分、小时/天等等,直到季度/年。虽然这可以很好地推广到所有类型的时间序列,但它有一个致命的缺点:由于固定的滞后指数列表,输入令牌可能会变得非常大。

例如,查看每小时数据的每月频率需要730个时间步。这意味着除了所有静态协变量之外,输入令牌的长度至少为730。

2、Lag-Llama架构

Lag-Llama是一个基于transformer的纯解码器模型,其灵感来自大型语言模型LLaMA的体系结构。它利用Transformer体系结构来解析输入token,并将它们映射到具有置信区间的未来预测。

从图中可以看到输入标记是滞后时间步长和静态协变量的拼接。输入序列通过线性投影层将特征映射到解码器内部注意力模块的隐藏维度。另外就是在最后的输出,序列被发送到一个分布头负责输出一个概率分布。

在推理过程中,输入序列生成下一个时间点的分布。然后通过自回归,模型逐个生成剩余的预测序列,直到达到设置的长度。

生成预测的自回归过程有效地允许模型为其预测生成不确定性区间。但是这里的问题就是如果序列很长,自回归的方式会将错误扩大。

3、Lag-Llama的训练

作为一个基础模型,Lag-Llama显然是在大量的时间序列数据语料库上训练的,因此该模型可以很好地泛化未见过的时间序列并进行零样本预测。

论文中说:Lag-Llama在来自不同领域的27个时间序列数据集上进行了训练,如能源、交通、经济等。

数据包含7965个单变量时间序列,总计约3.52亿个令牌。

所有数据集都是开源的,包括ethth, Exchange和Weather等。

Lag-Llama实践及测试

因为代码已经开源,所以我们可以直接测试,我们首先使用Lag-Llama的零样本预测能力,并将其性能与特定数据模型(如TFT和DeepAR)进行比较。

Lag-Llama的实现是建立在GluonTS之上的,所以我们还需要安装这个库。实验使用了澳大利亚电力需求数据集,该数据集包含五个单变量时间序列,以半小时的频率跟踪能源需求。

这里有个说明:Lag-Llama目前的实现是初期阶段。并且存还在积极开发中,后面可能还会有很大的调整,因为目前还没加入微调的功能。

1、环境设置

代码语言:javascript

 !git clone https://github.com/time-series-foundation-models/lag-llama/ 
 cd lag-llama 
 pip install -r requirements.txt --quiet

然后需要我们从HuggingFace下载模型的权重。

代码语言:javascript

 !huggingface-cli download time-series-foundation-models/Lag-Llama lag-llama.ckpt --local-dir /content/lag-llama

2、加载数据集

代码语言:javascript

 import pandas as pd 
 import matplotlib.pyplot as plt 
 import matplotlib.dates as mdates 
 import torch
 
 from itertools import islice
 
 from gluonts.evaluation import make_evaluation_predictions, Evaluator 
 from gluonts.dataset.repository.datasets import get_dataset 
 from lag_llama.gluon.estimator import LagLlamaEstimator

可以直接从GluonTS加载数据集。

代码语言:javascript

 dataset = get_dataset("australian_electricity_demand") 
 backtest_dataset = dataset.test prediction_length = dataset.metadata.prediction_length 
 context_length = 3 * prediction_length

3、使用Lag-Llama预测

简单地初始化模型并使用LagLlamaEstimator对象。

代码语言:javascript

 ckpt = torch.load("lag-llama.ckpt", map_location=torch.device('cuda:0')) 
 estimator_args = ckpt["hyper_parameters"]["model_kwargs"] 
 estimator = LagLlamaEstimator( ckpt_path="lag-llama.ckpt", 
   prediction_length=prediction_length, 
   context_length=context_length, 
   input_size=estimator_args["input_size"], 
   n_layer=estimator_args["n_layer"], 
   n_embd_per_head=estimator_args["n_embd_per_head"], 
   n_head=estimator_args["n_head"], 
   scaling=estimator_args["scaling"], 
   time_feat=estimator_args["time_feat"]) 
 
 lightning_module = estimator.create_lightning_module() 
 transformation = estimator.create_transformation() 
 predictor = estimator.create_predictor(transformation, lightning_module)

使用make_evaluation_predictions函数生成零样本的预测。

代码语言:javascript

 forecast_it, ts_it = make_evaluation_predictions(
   dataset=backtest_dataset, 
   predictor=predictor)

这个函数返回生成器。我们需要把它们转换成列表。

代码语言:javascript

 forecasts = list(forecast_it) 
 tss = list(ts_it)

4、评估

GluonTS可以使用Evaluator对象方便地计算不同的性能指标。

代码语言:javascript

 evaluator = Evaluator() 
 
 agg_metrics, ts_metrics = evaluator(iter(tss), iter(forecasts))

RMSE为481.57。

我们还可以随意地将预测可视化。

代码语言:javascript

 plt.figure(figsize=(20, 15)) 
 date_formater = mdates.DateFormatter('%b, %d') 
 plt.rcParams.update({'font.size': 15}) 
 
 for idx, (forecast, ts) in islice(enumerate(zip(forecasts, tss)), 4): 
   ax = plt.subplot(2, 2, idx+1) 
   plt.plot(ts[-4 * dataset.metadata.prediction_length:].to_timestamp(), label="target") 
   forecast.plot( color='g')
 
   plt.xticks(rotation=60) 
   ax.xaxis.set_major_formatter(date_formater) 
   ax.set_title(forecast.item_id) 
 
 plt.gcf().tight_layout() 
 plt.legend() 
 plt.show()

上图可以看到模型对数据做出了合理的预测,尽管它在第四个序列(图的右下角)上确实存在问题。

另外由于 Lag-Llama实现了概率预测,可以得到预测的不确定性区间。

5、与TFT和DeepAR相比

我们在数据集上训练TFT和DeepAR模型,看看它们是否能表现得更好。

为了节省时间,我们将训练设置为5个epoch。

代码语言:javascript

 from gluonts.torch import TemporalFusionTransformerEstimator, DeepAREstimator 
 
 tft_estimator = TemporalFusionTransformerEstimator(
   prediction_length=prediction_length, 
   context_length=context_length, 
   freq="30min", 
   trainer_kwargs={"max_epochs": 5}) 
 
 deepar_estimator = DeepAREstimator(
   prediction_length=prediction_length, 
   context_length=context_length, 
   freq="30min", 
   trainer_kwargs={"max_epochs": 5})

训练过程。

代码语言:javascript

 tft_predictor = tft_estimator.train(dataset.train) 
 deepar_predictor = deepar_estimator.train(dataset.train)

训练完成后,生成预测并计算RMSE。

代码语言:javascript

 tft_forecast_it, tft_ts_it = make_evaluation_predictions(
   dataset=backtest_dataset, 
   predictor=tft_predictor) 
 
 deepar_forecast_it, deepar_ts_it = make_evaluation_predictions(
   dataset=backtest_dataset, 
   predictor=deepar_predictor) 
 
 tft_forecasts = list(tft_forecast_it) 
 tft_tss = list(tft_ts_it) 
 
 deepar_forecasts = list(deepar_forecast_it) 
 deepar_tss = list(deepar_ts_it) 
 
 # Get evaluation metrics
 tft_agg_metrics, tft_ts_metrics = evaluator(iter(tft_tss), iter(tft_forecasts)) 
 deepar_agg_metrics, deepar_ts_metrics = evaluator(iter(deepar_tss), iter(deepar_forecasts))

下表突出显示了性能最好的模型。

可以看到只训练了5个epoch这两个模型都取得了比Lag-Llama更好的结果,TFT是目前表现最好的模型,DeepAR的表现也优于laglama。

虽然laglllama的表现似乎不尽如人意,但该模型没有经过微调(零样本学习本身就比较困难些)。

总结

在尝试了TimeGPT和Lag-Llama之后,Lag-Llama算是构建开源预测模型的第一步,但与TimeGPT相比,它在功能方面存在不足。TimeGPT可以处理多变量时间序列、不规则时间戳,并实现共形预测,与使用laglama等固定分布相比,这是一种更稳健的量化不确定性的方式。

laglllama是一个开源的基础模型,只用于单变量概率预测,性能表现也比较有限。相信在不久的将来会看到更多的开源预测模型出现,他们的表现可能会得到改善,这代表了该领域的一个重大转变。

如何系统的去学习大模型LLM ?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

事实上,抢你饭碗的不是AI,而是会利用AI的人。

科大讯飞、阿里、华为等巨头公司发布AI产品后,很多中小企业也陆续进场!超高年薪,挖掘AI大模型人才! 如今大厂老板们,也更倾向于会AI的人,普通程序员,还有应对的机会吗?

与其焦虑……

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高。

针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, ?有需要的小伙伴,可以 扫描下方二维码领取?↓↓↓

?CSDN大礼包?:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)?

一、LLM大模型经典书籍

AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源。

二、640套LLM大模型报告合集

这套包含640份报告的合集,涵盖了大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(几乎涵盖所有行业)

三、LLM大模型系列视频教程

四、LLM大模型开源教程(LLaLA/Meta/chatglm/chatgpt)

LLM大模型学习路线 ↓

阶段1:AI大模型时代的基础理解

目标:了解AI大模型的基本概念、发展历程和核心原理。

内容:

L1.1 人工智能简述与大模型起源 L1.2 大模型与通用人工智能 L1.3 GPT模型的发展历程 L1.4 模型工程 L1.4.1 知识大模型 L1.4.2 生产大模型 L1.4.3 模型工程方法论 L1.4.4 模型工程实践 L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

目标:掌握AI大模型API的使用和开发,以及相关的编程技能。

内容:

L2.1 API接口 L2.1.1 OpenAI API接口 L2.1.2 Python接口接入 L2.1.3 BOT工具类框架 L2.1.4 代码示例 L2.2 Prompt框架 L2.3 流水线工程 L2.4 总结与展望

阶段3:AI大模型应用架构实践

目标:深入理解AI大模型的应用架构,并能够进行私有化部署。

内容:

L3.1 Agent模型框架 L3.2 MetaGPT L3.3 ChatGLM L3.4 LLAMA L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。

内容:

L4.1 模型私有化部署概述 L4.2 模型私有化部署的关键技术 L4.3 模型私有化部署的实施步骤 L4.4 模型私有化部署的应用场景

这份 LLM大模型资料 包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, ?有需要的小伙伴,可以 扫描下方二维码领取?↓↓↓

?CSDN大礼包?:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)?

总结

### 文章内容总结
本文介绍了Lag-Llama,这是一种专门用于单变量时间序列预测的开源大模型。Lag-Llama基于Transformer的纯解码器架构,灵感来自大型语言模型LLaMA,其关键在于不依赖于频率的通用时间序列数据处理策略。文章详细阐述了Lag-Llama的架构、数据处理方式、训练过程以及其在实际应用中的性能和表现。
#### Lag-Llama的主要特点:
1. **不依赖于频率的通用时间序列标记策略**:Lag-Llama使用一组指定的滞后特征来构建时间序列数据特征,使其能够很好地泛化到不同频率的时间序列数据。
2. **基于Transformer的纯解码器架构**:Lag-Llama利用Transformer结构来解析输入token,并生成带有置信区间的未来预测,支持自回归的预测生成。
3. **广泛的训练数据**:Lag-Llama在多个领域的27个时间序列数据集上进行了训练,具有较强的泛化能力。
#### Lag-Llama的应用展示:
- 利用Lag-Llama进行时间序列零样本预测,并将其性能与TFT和DeepAR模型进行比较。
- 测试代码基于JavaScript和GluonTS库,展示了Lag-Llama在澳大利亚电力需求数据集上的实际应用。
- 虽然Lag-Llama在初始测试中表现未优于TFT和DeepAR(仅训练5个epoch),但这归因于其零样本学习和未经微调的特点。
#### 总结与展望:
- Lag-Llama作为第一个开源的时间序列预测大模型,尽管在功能上尚有待完善,但其出现为时间序列预测领域带来了新的思路。
- 随着技术的发展和更多开源模型的涌现,未来时间序列预测的基础模型将进一步成熟和优化。
#### 学习LLM大模型的建议:
文章还提供了学习LLM(大型语言模型)大模型的建议和资源链接,包括经典书籍、行业报告、视频教程、学习路线和开源教程等,旨在帮助有兴趣的读者系统性地学习和掌握LLM技术。

更新时间 2024-09-23