当前位置:   article > 正文

【时间序列预测+大语言模型】TIME-LLM: TIME SERIES FORECASTING BY REPROGRAMMING LARGE LANGUAGE MODELS

time-llm: time series forecasting by reprogramming large language models

在这里插入图片描述
发表于ICLR 2024

Motivation

Motivation of background

目前的时序预测模型针对不同任务和应用,往往具有特定的设计,没有一个统一框架
“While achieving good performance on narrow tasks, these models lack versatility and generalizability to diverse time series data.”

预训练基础模型在自然语言处理和计算机视觉领域中已经有了很大的进展,然而由于时序数据的稀疏性,限制了他们在这个领域的发展。

最近大语言模型在复杂的token序列上展现出了鲁棒性模型识别和因果推理能力,为统一时序预测框架提供了新的视角。

为什么要利用LLM来做预测?

  1. Generalizability:LLM已经展现出了强大的few-shot/zero-shot的迁移学习能力,这说明他具有跨领域泛化预测的潜力,并且对于每一个任务来说无需从头开始再训练(retraining from scratch)。

  2. Data efficiency:通过利用预训练得到的知识,LLM能够在少量样本上进行任务。这对于历史数据有限的情况下十分有利。

  3. Reasoning:LLM的推理能力能够给出更精确的预测,然而现有的non-LLM方法大多是统计类型的,没有先天的推理能力。

  4. Multimodal knowledge:LLM能够接受多种模态的输入,例如视觉、语音和文字等。利用LLM我们可以融合多种模态知识来进行协同预测(synergistic forecasting)。

  5. Easy optimization:LLM只要在大规模数据集上进行训练后,再应用于预测任务就无需从头开始学习了。

Motivation of solution

将大语言模型用在时序数据上仍然有一定的挑战:如何有效对齐时序数据和自然语言的模态,以利用这些功能。

  1. LLM的token是离散的,而时间序列本质上是连续的;

  2. 解释时间序列模式的知识和推理能力并不自然存在于LLM的预训练中。

Contributions

  1. 引入了一种新颖的概念,即在不改变预先训练的主干模型的情况下,对大语言模型进行重新编程以进行时间序列预测。 在此过程中,我们表明预测可以被视为另一种“语言”任务,可以由现成的LLM有效解决。

  2. 提出Time-LLM框架,包含重编程时间序列为文字原型表征,与用陈述prompt(例如领域专家知识和任务指引)来增强输入的上下文信息。他们的方法指向在语言和时序上都表现出色的多模态基础模型。

  3. TIME-LLM在主流预测任务中始终超过最先进的性能,特别是在少样本和零样本场景中。 此外,在保持出色的模型重编程效率的同时实现了这种卓越的性能。 因此,我们的研究是释放LLM在时间序列和其他序列数据方面尚未开发潜力的十分有意义的一步。

Solution

他们提出了Time-LLM,其核心思想是:将时间序列重新编码(reprogramming)成文本原型的表征(text prototypes representation),让其适合语言模型。
“The core idea is to reprogram the input time series into text prototype representations that are more naturally suited to language models’ capabilities.”

为了增强LLM的推理能力,他们提出“Prompt-as-Prefix (PaP)”(提示作为前缀),用来丰富输入的上下文信息,以及指导重编码后输入patches的转换。经过LLM转换后的时间序列最终被映射到预测结果中。

Formulation

给定一个历史观测序列 X ∈ R N × T X\in \mathbb{R}^{N\times T} XRN×T,它是由N个一维变量和T步时间步长组成的。他们的目标是重编程LLM的 f ( ⋅ ) f(\cdot) f(),使其理解输入的时间序列以及做出正确的未来H个时间步的预测 Y ^ ∈ R N × H \hat Y\in \mathbb{R}^{N\times H} Y^RN×H。优化目标即是MSE: 1 H ∑ h = 1 H ∥ Y ^ h − Y h ∥ F 2 \frac{1}{H}\sum_{h=1}^H\| \hat Y_h-Y_h\|_F^2 H1h=1HY^hYhF2

他们的方法主要包含三大组件:

  1. Input transformation:多变量(multivariate)时间序列被分为N个单变量(univariate)时间序列 X ( i ) ∈ R 1 × T X^{(i)}\in \mathbb{R}^{1\times T} X(i)R1×T,在后续步骤中是独立处理的。每一个序列都将被重编程,其步骤包括normalization->patching->embedding,这样就将原始模态(source modality)与目标模态(target modality)对齐了。

  2. Pre-trained and frozen LLM:通过结合重编程patch提示LLM来生成特征输出。

  3. Output projection:映射最终预测结果 Y ^ ( i ) ∈ R 1 × H \hat Y^{(i)}\in \mathbb{R}^1\times H Y^(i)R1×H

在这里插入图片描述

Input Embedding

首先,每个 X ( i ) X^{(i)} X(i)首先通过可逆实例归一化(Reversible Instance Normalization, RevIN)变为零均值和单位标准差的分布,用来减少时间序列分布的漂移(distribution shift)。

然后,再将 X ( i ) X^{(i)} X(i)分成几个连续重叠或者不重叠的长度为 L p L_p Lp的patch。这样,输入patch的总数就变成: P = ⌊ ( T − L p ) S ⌋ + 2 P=\lfloor\frac{(T-L_p)}{S}\rfloor+2 P=S(TLp)+2,其中S表示横向滑动的步数。

Q1. 什么是patch?这里的patch总数是怎么算的?

这么做的motivation在于:

  1. 通过聚合局部信息到每一个patch,更好的保留局部语义信息;

  2. 每个patch作为tokenization行成一个输入token的紧凑序列,减少了计算负担。

通过这些patch X P ( i ) ∈ R P × L p X_P^{(i)}\in \mathbb{R}^{P\times L_p} XP(i)RP×Lp,我们利用一个线性层将他们的维度变为 d m d_m dm,也就是 X ^ P ( i ) ∈ R P × d m \hat X_P^{(i)}\in \mathbb{R}^{P\times d_m} X^P(i)RP×dm

Patch Reprogramming

要把时间序列模态对齐到自然语言模态,核心思想是:学习一种形式的“噪声”,当它应用在输入目标样本上时,预训练的源模型可以产生需要的目标输出,而不用更新参数。
“A common practice is learning a form of “noise” that, when applied to target input samples, allows the pre-trained source model to produce the desired target outputs without requiring parameter updates.”

Q2. “噪声”具体指什么?

但是,时间序列既不能直接编辑,也不能用自然语言无损的描述,这对于将LLM不大量调整参数直接运用在时间序列上是一个挑战。
“However, time series can neither be directly edited nor described losslessly in natural language, posing significant challenges to directly bootstrap the LLM for understanding time series without resource-intensive fine-tuning.”

为了解决上述问题,他们提出在backbone中用预训练的word embedding E ∈ R V × D E\in \mathbb{R}^{V\times D} ERV×D来reprogramming X ^ P ( i ) \hat X_P^{(i)} X^P(i),其中V是词的数量。但是直接只用E会导致reprogramming空间过于大且密集,因为它没有关于哪些token是直接相关的知识。一个简单的方法就是通过线性探测(linearly probing)E来保留text prototype的一个小子集,也就是 E ′ ∈ R V ’ × D ,   V ′ ≤ V E'\in \mathbb{R}^{V’\times D},\,V'\leq V ERV×D,VV

Q3. 什么是text prototype?看图好像是prototype是vocab的映射结果?

text prototype学习单词的组合,例如”short up”、”steady down”,然后将其结合来表示local patch。

Q4. linearly probing具体是怎么做的?
在这里插入图片描述
在这里插入图片描述

为了实现上述内容,他们使用了多头跨注意力层(multi-head cross-attention layer)。对于每个head k = 1 , ⋯   , K k={1, \cdots, K} k=1,,K ,定义query矩阵 Q k ( i ) = X ^ P ( i ) W k Q Q_k^{(i)}=\hat X_P^{(i)}W_k^Q Qk(i)=X^P(i)WkQ ,key矩阵 K k ( i ) = E ′ W k K K_k^{(i)}=E'W_k^K Kk(i)=EWkK ,以及value矩阵 V k ( i ) = E ′ W k V V_k^{(i)}=E'W_k^V Vk(i)=EWkV ,其中 W k Q ∈ R d m × d ,   W k K , W k V ∈ R D × d W_k^Q\in \mathbb{R}^{d_m\times d},\,W_k^K,W_k^V\in\mathbb{R}^{D\times d} WkQRdm×d,WkK,WkVRD×d。D是backbone的隐含层维度, d = ⌊ d m K ⌋ d=\lfloor \frac{d_m}{K}\rfloor d=Kdm 。这样我们就能在每个注意力head中对时间序列reprogramming:

Z k ( i ) = A T T E N T I O N ( Q k ( i ) , K k ( i ) , V k ( i ) = S O F T M A X ( Q k ( i ) K k ( i ) T d k ) V k ( i ) Z_k^{(i)}=ATTENTION(Q_k^{(i)},K_k^{(i)},V_k^{(i)}=SOFTMAX(\frac{Q_k^{(i)}K_k^{(i)T}}{\sqrt{d_k}})V_k^{(i)} Zk(i)=ATTENTION(Qk(i),Kk(i),Vk(i)=SOFTMAX(dk Qk(i)Kk(i)T)Vk(i)

通过聚合每个头的 Z k ( i ) ∈ R P × d Z_k^{(i)}\in\mathbb{R}^{P\times d} Zk(i)RP×d,我们可以得到 Z ( i ) ∈ R P × d m Z^{(i)}\in \mathbb{R}^{P\times d_m} Z(i)RP×dm 。它将会被线性映射以对齐backbone的隐含维度,也就是 O ( i ) ∈ R P × D O^{(i)}\in \mathbb{R}^{P\times D} O(i)RP×D

Prompt-as-Prefix

Can prompts act as prefixes to enrich the input context and guide the transformation of reprogrammed time series patch?
在这里插入图片描述

左边是patch-as-prefix的方法,有两个限制:

  • 在不借助外部工具的情况下,语言模型在处理高精度数字时通常表现出较低的灵敏度,导致他们在解决长时间预测任务上具有一定的挑战性。

  • “language models typically exhibit reduced sensitivity in processing high-precision numerals without the aid of external tools, thereby presenting substantial challenges in accurately addressing practical forecasting tasks over long horizons;”

  • 不同语言模型是在不同的语料库上进行预训练的,因此需要复杂的、定制的后处理。并且他们可能采用不同的tokenization类型来生成高精度数字,这导致例如[‘0’,‘.’,‘6’,‘1’],或是[‘0‘, ‘.‘, ‘61‘]都可以用来表示0.61。

而prompt-as-prefix就很好地避开了这些限制。具体来讲,他们利用三个关键部件来构造有效的prompt:(1)dataset context;(2)task instruction;(3)input statistics。
在这里插入图片描述

Output Projection

经过上面的操作后,我们将prompt和patch embedding送入LLM中,然后丢掉前面的部分(prefix)来获得最终的特征输出。最后,利用flatten和线性变换得到预测结果 Y ^ ( i ) \hat Y^{(i)} Y^(i)

Experiments

  • Backbone: Llama-7B

  • Baselines:

    • PatchTST
    • ESTformer
    • Non-Stationary Transformer
    • FEDformer
    • Autoformer
    • Informer
    • Reformer
  • 下游任务实验:

    • Long-term Forecasting
      • 数据集:ETTh1, ETTh2, ETTm1, ETTm2, Weather, Electricity (ECL), Traffic, ILI
      • 输入时间序列长度是512,预测长度有{96, 192, 336, 720}。使用的指标是MSE和MAE。
    • Short-term Forecasting
    • Few-shot Forecasting
    • Zero-shot Forecasting

在这里插入图片描述

结合few-shot和zero-shot的结果来看,他们所提出的方法,也就是reprogramming LLM可以更好的应对数据稀缺的场景。

  • Model Analysis
    在这里插入图片描述

    • Language Model Variants:用了两个不同的backbone:Llama和GPT-2,以及他们的不同容量进行测试。

    • Cross-modality Alignment:分别去掉patch reprogramming (B.1)、prompt-as-prefix (B.2)、dataset context (C.1)、task instruction (C.2)和statistical context (C.3)进行试验。

    • Reprogramming Interpretation:他们对48个时序patch和100个text prototype进行可视化。可以发现:
      在这里插入图片描述

      • (a)->(d): 随着训练过程,reprogramming空间是从无序到有序的,逐步被优化。
      • (e):我们可以看到只有一小部分prototype参与了输入patch的reprogramming过程。
      • (f):可视化了10种学习到的text prototype,可以发现word set1和word set2确实是与时间相关的集合,并且可视化也是高度相关的。
      • 总结:text prototype能够学习整合语言线索,然后选择少数高度相关的来表示时序patch的特征信息。各个patch通常有不同的潜在语义信息,需要由不同的prototype来表示。
    • Reprogramming Efficiency在这里插入图片描述

Conclusion

TIME-LLM 通过将时间序列数据重新编程为对LLM来说更自然的文本原型,并通过 Prompt-as-Prefix 提供自然语言指导来增强推理,从而在适应冻结的大型语言模型进行时间序列预测方面表现出了希望。

评估表明,改编后的LLM可以胜过专门的专家模型,表明它们作为有效时间序列机器的潜力。 我们的结果还提供了一个新颖的见解,即时间序列预测可以被视为另一种“语言”任务,可以由现成的LLM来解决,以通过我们的时间LLM框架实现最先进的性能。

进一步的研究应该探索最佳的重编程表示,通过持续的预训练丰富LLM的明确时间序列知识,并建立跨时间序列、自然语言和其他模态联合推理的多模态模型。 此外,还应该考虑应用重编程框架来为LLM配备更广泛的时间序列分析能力或其他新能力。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/943185
推荐阅读
相关标签
  

闽ICP备14008679号