今天想聊聊这周一篇关于使用语言模型进行时间序列预测的工作,这个工作的主要亮点有四个:
首先提出的Chronos框架将时间序列通过缩放和量化转换为token序列,从而可以直接使用语言模型架构(如T5, GPT-2等)来建模时间序列,不需要对模型架构做任何修改。这种将回归问题转化为分类问题的思路在之前的工作中很少见。
其次作者使用了一个大规模的异构时间序列数据集进行预训练。除了公开数据集还引入了数据增强技术TSMix和基于高斯过程的合成数据生成方法KernelSynth。提高了模型的泛化能力。
第三是在42个数据集上进行了全面的实验评估。结果表明Chronos模型在零样本预测(zero-shot forecasting)上表现优异,甚至可以与针对特定数据集训练的深度学习模型相媲美。这说明语言模型可以从多个领域的时间序列中学习到通用表示,进而应用于新的预测任务。
最后一点是尽管Chronos模型采用了最简单的均值缩放和等距量化方案,但实验证明这种简约的设计已经足以取得不错的效果,而且有利于模型的可扩展性。同时文中也指出了目前方法的局限性如预测范围受限等。
接下来让我们详细讨论一下Chronos框架中的时间序列标记化(tokenization)过程,它有两个步骤:缩放(scaling)和量化(quantization)。缩放的目的是将不同尺度的时间序列映射到一个合适的范围,以便于后续的量化操作。文中采用了最简单的均值缩放(mean scaling),具体做法是用每个值除以整个序列绝对值的平均值。量化是将连续的实数值映射到离散的token ID,相当于把实数轴划分成若干个区间(bin)。文中使用了均匀量化(uniform quantization),即在某个区间内等距划分。
我会举个具体的例子来帮助理解。
假设我们有一个长度为6的时间序列: [2.1, -3.0, 0.8, 1.5, -0.2, 1.8],首先进行缩放,
均值是1.57 = (|2.1| + |-3.0| + |0.8| + |1.5| + |-0.2| + |1.8|) / 6 = 1.57
缩放后的序列是[1.34, -1.91, 0.51, 0.96, -0.13, 1.15] = [2.1/1.57, -3.0/1.57, 0.8/1.57, 1.5/1.57, -0.2/1.57, 1.8/1.57]
然后进行量化
假设我们将[-2, 2]区间划分为4个bin,分别对应数字1到4。
对于 1.34,它落在区间 [1, 2),因此映射到 4。
对于 -1.91,它落在区间 [-2, -1),因此映射到 1。
对于 0.51,它落在区间 [0, 1),因此映射到 3。
对于 0.96,它也落在区间 [0, 1),因此同样映射到 3。
对于 -0.13,它落在区间 [-1, 0),因此映射到 2。
对于 1.15,它落在区间 [1, 2),因此映射到 4。
原始序列: [1.34, -1.91, 0.51, 0.96, -0.13, 1.15]
量化结果: [4, 1, 3, 3, 2, 4]
最后我们在序列末尾添加一个特殊的EOS token表示序列的结束:
[2.1, -3.0, 0.8, 1.5, -0.2, 1.8] -> [4, 1, 3, 3, 2, 4, EOS]
这样原始的连续时间序列就转换为一个离散的token序列,可以直接输入到语言模型中进行训练。反之语言模型的输出(一个关于token ID的概率分布)也可以通过反量化函数d(x)映射回实数值域,得到最终的预测结果。
这种巧妙的时间序列标记化机制使得Chronos可以将传统的回归问题转化为分类问题,并利用现有的语言模型架构来建模时间序列。尽管这个idea看似简单,但在以往的研究中并不多见。Chronos的成功证明了sometimes less is more,简约而不失优雅的设计反而能带来出色的效果。
接着我们来详细讨论一下Chronos中的预训练数据集构建和数据增强技术。首先是异构时间序列数据集:为了训练一个通用的时间序列预测模型需要涵盖不同领域、不同特征的时间序列数据。文中收集了大量公开数据集,包括M3、M4、UCI等,覆盖了金融、交通、气象、销售等多个领域。这些数据集的采样频率、序列长度、数值范围都有所不同,构成了一个异构的时间序列语料库。然而现有的公开数据集在数量和质量上仍然有限。为了进一步扩充语料库,增强模型的泛化能力,文中还引入了两种数据增强技术:TSMix和KernelSynth。
TSMix是一种时间序列混合(time series mixing)的数据增强方法。其基本思想是从不同的时间序列中随机采样若干段,然后将它们按照一定的比例混合在一起生成一条新的时间序列。这个过程可以形式化地表示为:
其中x1到xk是从原始数据集中采样的k条时间序列片段,λ1到λk是对应的混合系数,满足非负性和归一化条件(相加等于1)。通过调节k和λ可以生成多样性和复杂性不同的时间序列。
KernelSynth利用高斯过程(Gaussian Process)来生成合成时间序列。高斯过程可以看作是一个随机函数,它的任意有限维度的边缘分布都服从多元高斯分布。高斯过程由均值函数m(t)和协方差函数k(t,t’)完全确定。协方差函数也称为核函数(kernel function)。常见的核函数包括RBF核、周期核、Matérn核等,它们可以刻画时间序列的不同特征如趋势、周期、平稳性等。
KernelSynth的做法是随机组合多个核函数,然后从相应的高斯过程中采样,得到一条合成的时间序列。例如我们可以将RBF核(捕捉局部相关性)、周期核(捕捉周期性)、线性核(捕捉趋势)组合在一起,这样构造出的高斯过程可以生成具有趋势、周期、局部相关等复杂模式的时间序列。通过随机采样核函数的参数(如RBF核的长度尺度、周期核的频率)可以得到多样化的合成数据。
TSMix和KernelSynth生成的时间序列虽然是人工合成的,但能够模拟真实世界中的各种时间序列模式。将它们加入到预训练语料库中可以提高模型的泛化能力和鲁棒性。这种数据驱动(data-driven)的方法与以往基于先验知识(如趋势、季节性)生成合成数据的做法形成了互补。
通过海量异构数据的预训练,基于T5家族的Chronos模型(参数规模从20M到710M)得以学习到一个general purpose的时间序列表示,进而在包含42个数据集的全面基准下游的预测任务上取得了优异的zero-shot表现。这启示我们当手头的任务数据有限时,利用大规模无标注数据进行自监督预训练(self-supervised pre-training)是一种行之有效的范式。通过自回归采样模型,Chronos在推理期间能够生成预测分布,提供概率预测而非单一点预测。Chronos作为一个固定词汇表上的语言模型,可以无缝集成未来的LLMs进展。
由于时间原因,现在已过凌晨一点,再聊聊这个工作下一步可以搞的几个点,匆匆忙忙结束这次的论文分享:
- 改进tokenization过程,可以研究不同类型的缩放和量化技术,以更精确地表示时间序列数据,并提高模型的预测准确性。
- 模型架构创新,虽然使用现有的transformer架构取得了成功,但研究特定于时间序列的模型架构可能进一步提升性能,或者可使用mamba等架构。
- 多变量时间序列预测,扩展Chronos以处理多变量时间序列预测问题,这在实际应用中非常重要,也是后期能不能用在各种预测上的一个重要的评判标准。
- 减少对计算资源的需求,优化模型以减少其对计算资源的依赖,使其更适合于资源受限的环境。
- 可解释性的提升,改进模型的可解释性,帮助用户理解模型的预测、决策过程,这对于实际应用尤为重要。
- 测试和优化Chronos在更多领域的应用,如金融(股票量化交易)、气候科学等,以确保其实用性和有效性。
- 最后可以改进模型以提高其在长期预测任务上的性能,这是时间序列预测中的一个常见挑战。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。