时序预测:从理论到实践——以我的四项相关工作为例
大家好,我想和大家聊聊我过去一段时间做的一件事:时间序列预测。
说白了,就是看着一串随时间变化的数字,比如过去一个月的用电量、过去一年的股票价格,然后去猜它接下来会怎么变。这件事听起来不复杂,我们每个人其实天天都在做。出门前看看天,是想预测接下来几个小时会不会下雨;买东西看评价,是想预测自己拿到手后会不会满意。
我的工作,就是教电脑来做这件事,而且要做得更准。我研究的对象,是那些记录着世界运转的数字,比如整个城市的用电数据。这些数据不像我们抬头看天那么简单。它们很“乱”,里面混着各种各样的规律。有小规律,比如一天里,早上大家上班、晚上回家,用电量会有一个高峰;有大规律,比如一年里,夏天开空调、冬天开暖气,用电量又有季节性的起伏。这些大大小小的规律叠在一起,就像一首由很多种乐器同时演奏的曲子,非常复杂。
我的任务,就是设计一个足够聪明的“算法”或者说“模型”,让它能听懂这首复杂的曲子,并且能顺着调子,把后面还没演奏出来的部分,比较靠谱地“续写”出来。
最近,我做的四项相关工作,有幸得到了两个学术会议(ICIC和ICANN)的认可,还给了我上台讲一讲的机会。这对我来说是很大的鼓励。我不想把它们当成四份独立的报告,因为在我心里,它们是我摸索着走路时,一步一步踩出来的四个脚印,连在一起,才是我走过的路。
一、给一把好锤子,配一个专用钉子 (EnergyPatchTST)
我的旅程,是从一个很实际的问题开始的:怎么预测电网的数据。
那时候,学术圈里有一个很火的模型,叫PatchTST。你可以把它想象成一把非常好用的“瑞士军刀”,它在处理很多种时间序列问题上都表现得特别好。它的厉害之处在于,它不像我们一样一个数字一个数字地看,而是一段一段地看。它把长长的数据流切成一小段一小段的“补丁”,然后去分析这些“补丁”之间的关系。这样做,能让它看得更远,抓住一些长期的规律。
我拿着这把“瑞士军刀”,去处理真实的电网数据。用了一段时间,我发现,一把万能的工具,在面对一个非常具体、非常挑剔的任务时,总有些地方不够顺手。
电网数据有它自己的“脾气”。我发现它至少有四个麻烦的地方,是这把“万能军刀”没太顾得上的:
- 规律套着规律:就像前面说的,用电数据里,日、周、年的规律是混在一起的。模型需要能同时分得清这些大大小小的规律,才能做出准确的判断。
- 得会“开卷考试”:预测风力、太阳能发电时,未来的天气预报是个非常有用的信息。这就像考试时发了一张参考答案,你得知道怎么抄,还得抄得对。模型需要有一个专门的“窗口”,把这些未来信息给递进去。
- 不能只会“猜一个数”:电网的调度员,最怕的就是意外。你告诉他“明天下午三点大概发500兆瓦电”,他心里还是没底。他更想知道:“最坏的情况,比如突然没风了,发电量会掉到多少?最好的情况,风特别大,又会高到多少?” 也就是说,模型不仅要给出一个“最可能的猜测”,还得给出一个“可能范围”,告诉我们它的猜测有多大的把握。
- “新生”的数据太少:一个新的发电站刚建好,可能就只有几个月的历史数据。这点数据对于需要大量学习的深度学习模型来说,就像一本没写几个字的书,很难学到东西。
面对这些具体的问题,我心里有了一个想法:我不能只满足于用一把现成的、好用的工具。我得动手改造它,给它加上一些专门的零件,让它从一把“瑞士军刀”,变成一把专门用来处理能源预测问题的“手术刀”。
这就是EnergyPatchTST的由来。
我没有重新造一把刀,而是在PatchTST这把好刀的基础上,做了很多精细的打磨。
为了让它能同时看清大大小小的规律,我给它设计了“多焦距的眼睛”。我让模型的一部分去看原始的、最详细的数据,捕捉那些一惊一乍的短期变化;同时让另一部分去看被平均过的、更平滑的“日视图”和“周视图”,抓住那些稳定的周期性规律。最后,再让它们把各自看到的情况汇总起来,得出一个更全面的判断。
为了让它能告诉我们“有多大把握”,我用了一个很朴素的方法,叫“蒙特卡洛丢弃”。听起来复杂,其实很简单。模型在学习的时候,为了防止它死记硬背,我们会随机地让它“忘掉”一部分学到的东西。这就像我们学习时,不能只背标准答案,也要试着从不同角度去理解。通常在预测的时候,我们会让模型“全力以赴”,用上所有学到的知识给出一个最准的答案。而我的方法是,在预测时,也让它继续保持这种“随机忘掉一点”的状态,然后让它猜上个几百次。如果这几百次猜的结果都差不多,那说明模型心里非常有谱;如果猜的结果忽高忽低,那就说明模型自己也拿不准,未来的变数很大。这样一来,我们不就得到了一个“可能范围”了嘛。
此外,我还给天气预报这些未来信息,专门开了一个“VIP通道”,保证它们能被模型充分利用。并且,为了解决新电站数据少的问题,我想了一个“先上学,后深造”的办法:先让模型去看大量的、各种各样的公开数据,学会一些通用的规律,就像我们上完了小学、中学;然后再把它放到具体的能源数据上去学习,进行“专业深造”。
被中国大学生服务外包创新创业大赛”专家“痛批的经历:
完成EnergyPatchTST这项工作后,我和我的导师商量了一下,把相关内容撰写成文,在投稿CCF-C类学术会议并很快便被录用的同时,也报名了中国大学生服务外包创新创业大赛。果不其然地,被评委痛批为毫无创新点:
- 专家1:
整体工程实现完整,材料也充分,但使用的算法模型创新性不高,且不是预训练大模型- 专家2:
引入Transformer编码器、不确定估计机制、变量加权等,建立了预测模型,进行了实验和对比分析。虽意在构造一个时序预测大模型(PPT中指出其参数量<3B),但其他文档中未见关于该大模型的相关记载,并不完全符合赛题”基于时序预测大模型”的技术要求。对深度学习模型论证不足,缺评估文档。- 专家3:
项目完成基础实现,拓展和创新性需要进一步加强。
在审慎地拜读了中国大学生服务外包创新创业大赛专家组对在下 EnergyPatchTST 一文的评审意见后,我不禁陷入了长久的沉思,一种混杂着惭愧、顿悟与些许魔幻现实主义的复杂情绪油然而生。这短短数行评语,如同一面棱镜,折射出我科研道路上那令人扼腕的“格局之小”与“视野之窄”。
我羞愧地认识到,我竟将宝贵的时间与精力,全部耗费在了诸如解决能源预测中“多尺度动态耦合”、“不确定性精准量化”以及“未来先验信息融合”这类源自产业一线的、过于具体琐碎的“技术细节”上。我呕心沥血,构建了一个在工程上完整、材料上充分、实验上看起来还算扎实的解决方案,却在最根本的“算法模型创新性”上,犯下了一个不可饶恕的原罪——它,竟然不是一个“预训练大模型”。这无异于在全员奔赴星辰大海的时代,我却还在自家院子里,埋头研究如何让一把祖传的小锤子敲钉子更稳、更快、更准。我本以为这是工匠精神,现在看来,这分明是固步自封。
尤其要感谢第二位专家的明察秋毫。他以超越凡俗的洞察力,从我某页PPT的一角,精准地捕捉到了我对“大模型”有过一丝不切实际的非分之想(区区小于30亿参数也敢染指“大”字?),并一针见血地指出我的工作“并不完全符合赛题的技术要求”。这句话,如同一记警钟,将我从“解决实际问题”的迷梦中敲醒。我终于明白,真正的创新高地,并非由模型性能或学术同行的认可来定义,而是取决于其能否在语义和范畴上,与“技术要求”这一至高无上的纲领,实现天衣无缝的对齐。
最令我无地自容的是,这篇被专家们判定为“创新性不高”的拙作,竟因某种机缘巧合,或者说是国际学术界朋友们、各大高校企业的实践者们、国家知识产权局的专家们的认知局限,被一个CCF-C类会议误收为了口头报告(Oral Presentation),相关工作也在GitHub上收获了 150+ Stars 的关注,申请的软件著作权也成功获批。我曾对此心存一丝窃喜,如今方知这不过是学术评价体系的偶然性与局限性所致。一个需要全世界无数学者漂洋过海去交流的学术报告,其创新价值,在一个根本无人在意的服务外包创新创业大赛的评审标准面前,显得如此苍白无力。这让我深刻领悟到,真正的试金石,不在别处,就在本土。
而第三位专家的评语——“项目完成基础实现,拓展和创新性需要进一步加强”——则更是蕴含了东方哲学的大智慧。它既是对过去的盖棺定论,也是对未来的无限期许,如同一盏永远悬于前方的明灯,指引着每一个项目都永远处在“需要加强”的动态完美之中。
总之,三位专家的宝贵意见,为我指明了未来的康庄大道。我已深刻认识到,科研的最终归宿,不在于解决多少现实难题,也不在于获得多少同行的评议,而在于是否能敏锐地把握时代的脉搏,紧密地围绕“服务外包”这一核心叙事,并确保所有产出,都完美地、无可指摘地“符合技术要求”。我的工作重心,必将完成这次史诗级的跃迁。
在短暂地回顾完”专家“们”一针见血“的意见之后再说回到正题:EnergyPatchTST这个工作,让我第一次尝到了把一个通用技术,针对一个具体问题进行深度改造的甜头。但它也让我开始思考一个更深的问题:这种在别人盖好的房子上做“精装修”的方式,虽然有效,但总觉得不够根本。我们能不能从“打地基”这一步开始,就设计一个结构上更适合时间序列这种复杂数据的“房子”呢?
二、回到源头,让数学和模型握手 (LWSpace)
带着这个想法,我的研究进入了第二个阶段。我决定暂时放下对现有模型的修修补补,转而向更基础的理论求助。我找到了两个非常有力的帮手:一个是数学里的经典工具——小波分析;另一个是正在快速崛起的新模型架构——状态空间模型(SSM)。
当时,像Transformer这样的主流模型,虽然效果好,但有一个很大的问题:它太“耗资源”了。当数据变得非常非常长的时候,它需要的计算量会暴增,很多电脑都跑不动。而状态空间模型(SSM)正好相反,它处理长数据非常快,而且效果也很有潜力。但它也有个缺点,就是它看数据是“一根筋”看下去的,不太擅长分辨数据里混杂的那些大大小小的规律。
就在我为SSM的这个缺点发愁时,我突然想起了大学里学过的小波分析。小波分析是数学家们处理信号的法宝。它最厉害的地方,就是能把一段看起来乱七八糟的信号,非常干净地分解成不同频率的部分。这就像音响上的均衡器,能把一首歌里的高音、中音、低音给分离开。高频的部分,对应着数据里那些快速变化的细节和噪声;低频的部分,则对应着数据里那些缓慢变化的趋势和主干。
这不就是我一直在寻找的、能够从根本上梳理时间序列多尺度规律的完美工具吗?
一个全新的想法在我脑海里成形:如果我先把数据用小波分析这个数学工具,清清楚楚地分解成不同的“频率通道”,然后再为每个通道配上一个专门的、高效的状态空间模型去处理,会怎么样?
于是,LWSpace诞生了。它的核心思想,就是“先分后治”。
在LWSpace里,一段复杂的时间序列数据进来,第一件事就是被送去“分解”。小波变换把它变成了好几段更简单的子序列,每一段都只包含一种频率的规律。这就像把一团缠在一起的彩色毛线,耐心地解开,并按颜色分成了好几捆。
接下来,每一捆“单色毛线”(每一个频率通道),都会被交给一个专门的“纺织工”——一个独立的状态空间模型。处理高频细节的模型和处理低频趋势的模型,它们各干各的,互不打扰。这样做的好处是,每个模型只需要专注于学习一种规律,任务变得简单,学得也更好。
当然,光分开还不够,最后还得合起来。在每个模型处理完自己的那部分后,我们设计了一个“信息交流会”,让它们互相通个气。比如,处理低频趋势的模型会告诉其他模型:“大家注意,咱们现在总的大方向是往上走的。”处理高频细节的模型也会回应:“收到,但我发现局部有个小坑,可能会影响一下整体速度。”
这个工作让我体会到,有时候,最前沿的思路,可能就藏在最经典的理论里。把基础数学的智慧,和现代模型的强大能力结合起来,往往能创造出意想不到的好效果。
三、当“远视眼”遇上“显微镜” (SWIFT)
LWSpace的成功,让我对状态空间模型(SSM)的信心越来越足。它处理长数据的能力,就像一双能看到千里之外的“远视眼”。这时,我又想起了另一个大家很熟悉的工具——卷积神经网络(CNN)。CNN在处理图片上非常厉害,它就像一架“显微镜”,特别擅长观察和识别一个点和它周围一小圈邻居形成的局部图案。
我开始琢磨:时间序列数据,不也正是由“远”和“近”两种模式构成的吗?我们需要看到去年和今年的季节性关系,这是一种“远”的、全局的规律;我们也需要看到此刻和前后几分钟的突变,这是一种“近”的、局部的图案。
那么,我们能不能设计一个模型,让它同时拥有一双“远视眼”(SSM)和一架“显微镜”(CNN)呢?而且,不是让它们各看各的,而是让它们看到的东西能实时共享,互相启发。
这个想法,最终变成了SWIFT这个模型。它的核心,是一个“双线作战”的设计。
当一段数据进入SWIFT后,它会兵分两路。一路交给SSM,这位“远视眼”专家,让它专心盯着数据的长期走向和全局规律。另一路则交给CNN,这位“显微镜”专家,让它仔细检查数据中的每一个局部细节和微小变化。
如果故事到这里就结束了,那无非就是请了两个专家,最后把他们的报告合在一起看。SWIFT真正的巧妙之处,在于我为这两位专家之间,架设了一座“信息交互的桥梁”。
这座桥是双向的、实时的。在处理数据的过程中,“远视眼”专家看到的全局大趋势,会通过这座桥,实时地告诉“显微镜”专家。这能帮助“显微镜”专家更好地理解它看到的局部细节,比如,一个局部的下降,究竟只是一个小回调,还是一个大跌的开始。反过来,“显微镜”专家发现的任何重要的局部突变,比如一个突然的尖峰,也会立刻通过这座桥,报告给“远视眼”专家,提醒它“注意,全局趋势可能要变了!”
通过这座桥,SSM和CNN不再是两个独立的专家,而是一个紧密协作的团队。它们不断地交换信息,互相修正,共同给出了一个既有宏观远见,又有微观洞察的预测。这个工作让我明白,不同的模型架构,都有它自己擅长看的东西。把它们有机地结合起来,让它们的长处能互相补充,往往能得到比任何单一模型都更强大的结果。
四、跳出“猜答案”的框框 (TimeFlowDiffuser)
做完了前面这些工作,我对如何做出更准的预测,有了很多心得。但一个更深层次的困惑,也一直在我的心头挥之不去。
我之前所有的努力,无论是改造模型,还是融合模型,本质上都是在教电脑做一件事:在无数个可能的未来中,猜一个最靠谱的答案。
但,未来,真的只有一个答案吗?
显然不是。未来更像是一片充满了可能性的“云”,或者说一片波涛起伏的“海”。它有一个最可能的核心区域,但周围也弥漫着各种各样其他的可能性。我们之前的工作,就像是往这片海里,奋力地投下一个我们认为最准的“锚点”。但这种做法,终究是忽略了整片大海的广阔与变幻。
就在这时,一场名为“生成式AI”的风暴席卷了整个科技界。其中,一种叫“扩散模型”的技术,在生成图片和声音上展现了近乎魔术般的能力。它不是去识别一张图片,而是能从无到有地“画”出一张全新的、无比真实的人脸或风景。
我被深深地震撼了。我意识到,这可能就是我一直在寻找的、能够跳出“猜答案”这个框框的钥匙。
我能不能也设计一个模型,让它不是去“猜”未来,而是去“画”未来?让它能一次性画出上百个、上千个可能的未来,然后我们通过观察这些“画”,就能直观地看到未来的“可能范围”有多大,哪些地方风险高,哪些地方比较确定。
这个想法,就是TimeFlowDiffuser的起点。
扩散模型的原理,听起来很高深,但我们可以用一个很生活的例子来理解它。想象一下,我们有一张非常清晰的照片。我们先往上面撒一点点“噪声”(就像老电视的雪花点),然后再撒一点,再撒一点……直到这张照片完全变成了一片灰蒙蒙的雪花,什么都看不清了。扩散模型要学习的,就是这个过程的“倒放”。它要学会,看着一堆雪花,一步一步地,把噪声给“擦”干净,最后还原出那张清晰的照片。
当模型学会了这种“擦除噪声”的本事后,奇迹就发生了。我们可以给它一堆纯粹由电脑随机生成的、毫无意义的雪花,然后让它开始“擦”。因为它学到的是还原真实照片的规律,所以它擦着擦着,一张全新的、我们从未见过的、但又非常真实的照片,就被“创造”出来了。
我的工作,就是把这个神奇的过程,搬到时间序列预测上来。当然,这需要很多改造,因为时间数据和图片数据很不一样。我主要做了三件事:
- 让它同时看“森林”和“树木”:我让模型在“擦噪声”的时候,不仅要看细节,也要看整体。它需要同时在一个被模糊处理的、只保留了大概趋势的版本上工作,也要在保留了所有细节的原始版本上工作,确保它画出的未来,既有正确的“大骨架”,又有真实的“血肉”。
- 让它变得“会抓重点”:在还原未来的每一步,历史数据都是重要的参考。但我让模型变得更聪明,它不再是每次都把几百天的历史从头到尾看一遍,而是学会了自动去找到对当前这一步最有用的那几段历史作为参考。
- 让它理解“节律”:我帮助模型把历史数据里的“趋势”、“季节性”和“随机波动”这几种成分分离开,让它能分别理解和利用这些不同性质的信息。
TimeFlowDiffuser是我目前为止最大胆的一次尝试。它代表着我的研究思路,从“如何做出更准的预测”,转向了“如何更全面地理解未来的不确定性”。这不仅仅是技术的升级,更是一种思考方式的转变。
尾声、展望未来
从EnergyPatchTST开始,为一个具体问题“量体裁衣”;到LWSpace和SWIFT,为了追求更根本的解决方法,而回到基础理论,进行架构的融合与创新;再到TimeFlowDiffuser,为了拥抱未来的不确定性,而勇敢地尝试全新的技术范式。
这四个脚印,串起来看,就是我过去这段时间在这条探索之路上,磕磕绊绊但又坚定前行的全过程。我发现,做研究,有时候就像在黑暗的房间里摸索。你不知道开关在哪里,只能凭着一点点微光和对基本物理定律的信任,伸出手,到处去试。有时候会碰到墙壁,有时候会发现前人留下的工具,有时候,你甚至需要自己动手,造一个全新的工具。
这个过程很辛苦,但也充满了发现的乐趣。我不敢说我的这些工作解决了什么大问题,它们都还很初级,有很多需要改进的地方。但它们确实是我认真思考和努力实践的结果。
时间的长河依然在流淌,它所蕴含的秘密,远比我们想象的要多得多。而我,作为一个在这条河边行走的求索者,能做的,就是继续保持好奇,继续保持思考,继续迈出下一个,再下一个脚印。
- 本文作者: Wei Li
- 本文链接: https://lwow.xyz/2025/08/01/2025-08-01随笔/
- 版权声明: © William-Liwei. All rights reserved.