解决问题
用LLM来解决时序预测问题,并且能够将时序数据映射(reprogramming)为NLP token,并且保持backbone的大模型是不变的。解决了时序序列数据用于大模型训练数据稀疏性的问题。
方法
Input Embedding
输入: X N ∗ T X^{N*T} XN∗T,首先对 X i X_i Xi进行均方差归一化,再对 X i X_i Xi进行类似卷积操作的分块,每个分块长度为 L p L_p Lp, 滑动步长为 s s s,那么分块后新的序列长度为
再将 X p ∈ P ∗ L p X_{p}\in{P*L_p} Xp∈P∗Lp通过线性映射层映射为 X p ∈ P ∗ d m X_{p}\in{P*d_m} Xp∈P∗dm(相当于将每个段时序信息的数据映射为一个embeding,来描述该时段的信息)。
Patch Reprogramming
将时序数据进行数据对齐,为nlp能理解的信息
文中学习一个 E ′ ∈ V ′ ∗ D E'\in{V'*D} E′∈V′∗D, 其中 V ′ V' V′远小于原词典大小,这样可以提升效果。 E ′ E' E′在模型中进行学习,学习词典与path的相关性信息。
再将 E ′ E' E′作为attention中的V和K,path embedding作为attention中的Q,这样就可以得到path与每个nlp token之间的相关性。
Prompt-as-Prefix.
同时在序列特征前面构造一些提示词信息,来帮助学习。
在打包和前馈时,prompt and patch嵌入 O i O_i Oi, 通过如图2所示的冻结LLM,我们丢弃前置Prompt-as-Prefix部分并获得输出表示。在此之后,将它们展平并线性投影,以得出最终预测 Y i Y_i Yi. (丢弃指得是只用他们来计算attention吗,最终输出的embedding表示丢弃掉?)
整体结构
其中LLM是冻结的
实验
在few-shot(减少训练集数量)和zero-shot(训练集和测试集不同)都进行了评估,都获得了很好的效果
Reprogramming Interpretation
可以看出,在经过充分的学习之后,不同的patch有不同的语意含义,需要不同的原型来表示。
可以借鉴的点
- 对序列特征进行滑动窗口的划分,每段有不同的含义,生成对应的embedding
- 通过学习与nlp词典的相关性来减少词表大小,加速训练