时间序列预测入门到实战九· 卷积视角从 TCN 到 TimesNet本文是「码海寻道」《时间序列预测入门到实战》系列的第 9 篇。上一篇 RNN 靠记忆处理序列但它得一步步顺序算慢、难并行。这一篇我们换个视角——用卷积啃时序。从经典的TCN一维因果卷积一路讲到 2023 年很有代表性的TimesNet把一维序列折叠成二维。同一个卷积武器两种截然不同的用法。一、TCN卷积也能处理序列还更快CNN 不是图像的专利。把二维卷积压成一维让卷积核沿时间轴滑动就能扫序列了。TCN时序卷积网络在此基础上加了两个关键设计。因果卷积绝不偷看未来普通卷积会同时看左右两边但预测时未来是不可知的。因果卷积只让卷积核看当前及过去padding 只加在左侧算完裁掉右边多出的部分。这从结构上杜绝了第 1 篇反复强调的数据泄露。膨胀卷积用空洞看得更远要抓长期依赖感受野就得大。一层层堆普通卷积太慢。膨胀卷积dilated convolution给卷积核带上空洞——隔几个点取一个让膨胀系数按1, 2, 4, 8…指数增长。这样几层就能覆盖成百上千步的历史感受野指数级膨胀。指数级到底多快普通卷积每加一层感受野只多几步要看 512 步得堆几百层。膨胀卷积把每层的步长翻倍第 1 层看 1、2 步第 2 层跨 2 步、第 3 层跨 4 步……覆盖范围是1248…的等比累加每加一层就翻一倍。所以2⁹512——堆 9 层就能回看 500 多步历史而计算量只线性增加。用空洞换深度这是 TCN 又快又能看得远的秘诀。importtorch.nnasnn,torch.nn.functionalasFclassChomp(nn.Module):# 裁掉右侧多余 padding保证因果def__init__(self,s):super().__init__();self.ssdefforward(self,x):returnx[:,:,:-self.s].contiguous()classTCNBlock(nn.Module):def__init__(self,cin,cout,k,dilation):super().__init__()pad(k-1)*dilation self.netnn.Sequential(nn.Conv1d(cin,cout,k,paddingpad,dilationdilation),Chomp(pad),nn.ReLU(),nn.Dropout(0.1))self.downnn.Conv1d(cin,cout,1)ifcin!coutelseNonedefforward(self,x):resxifself.downisNoneelseself.down(x)returnF.relu(self.net(x)res)# 残差连接堆深也稳TCN vs RNNTCN 能并行整条序列一次卷完不用等上一步感受野可控梯度更稳。很多任务上它又快又好是个被低估的强基线。二、TimesNet把一维折叠成二维TCN 还是在一维上做文章。TimesNet2023提出了一个很妙的洞见时序的复杂变化本质来自多重周期——日内有规律、跨日有规律。既然如此为什么不把这两种规律摆到二维平面上分别处理它的核心三步FFT 找主周期对序列做快速傅里叶变换挑出能量最强的几个周期比如 24、168按周期折叠成 2D把一维序列按周期长度 reshape 成矩阵——每一列是一个周期内的位置每一行是第几个周期。于是周期内变化成了矩阵的一个方向周期间变化成了另一个方向2D 卷积一起抓用二维卷积核Inception 结构同时捕捉这两个方向的模式再还原回一维。多个周期分别处理后加权融合。为什么折叠这一下如此关键想象一条按小时排的油温序列周期是 24。把它按 24 一段段码成一张表每行是一天每列是一天里的第几个小时。神奇的事发生了——“昨天 14 点和今天 14 点”在一维里隔着 24 个点很遥远折成 2D 后却上下紧挨在同一列。于是普通的 2D 卷积核本就擅长看上下左右邻居一扫就同时抓到了两种规律横向看到一天内的走势周期内纵向看到同一时刻的日复一日变化周期间。TimesNet 只是把 CNN 在图像上的看家本领借这一折叠搬到了时序上。# 概念骨架找周期 → 折成 2D → 2D 卷积 → 融合deffind_periods(x,k3):# x: (batch, length, channels)amptorch.fft.rfft(x,dim1).abs().mean(0).mean(-1)amp[0]0# 屏蔽直流分量整体均值topamp.topk(k).indices# 取能量最强的 k 个频率return[x.shape[1]//int(i)foriintop]# 频率 → 周期长度# 对每个 periodreshape 成 (batch, n_periods, period, C) 的 2D 图# → 2D Inception 卷积 → reshape 回 1D → 按 FFT 幅值加权求和一个漂亮的副产品TimesNet 是通用骨架同一套结构能做预测、分类、异常检测、缺失填补不只是预测。三、两种卷积怎么选TCNTimesNet视角1D沿时间滑动2D按周期折叠抓什么长期依赖大感受野多重周期的周期内/周期间模式成本轻、快重FFT 2D 卷积 多周期定位强基线SOTA 级但计算密集参考量级TimesNet 在多个公开 benchmark含 ETT 系列上表现亮眼是一段时间的 SOTA。但它计算不轻而且——先剧透一个反转下一批模型里会有个简单到离谱的线性模型DLinear在长序列预测上把一众复杂模型包括这类打得很难看。所以别急着膜拜复杂度TCN 这种简单高效的基线永远值得先试。小结TCN用因果卷积不偷看未来膨胀卷积空洞扩大感受野处理序列可并行、比 RNN 快、是强基线TimesNet的洞见是多重周期用 FFT 找周期把 1D 序列折叠成 2D用二维卷积同时抓周期内和周期间的变化还是通用骨架选择上先上 TCN 这种轻量基线复杂如 TimesNet 虽强但重未必总是最优。卷积和循环都讲过了接下来登场的是这几年最耀眼的主角——注意力机制与 Transformer。它凭什么横扫 NLP搬到时序上又会水土不服在哪下一篇揭晓。思考题TimesNet 靠 FFT 找周期来折叠。如果一个序列几乎没有明显周期比如纯随机游走这个折叠成 2D的思路还成立吗会退化成什么卷积流派讲完了。下一篇迎来重头戏 Transformer看注意力机制如何重塑时序预测。