论文笔记:A Time Series is Worth 64 Words: Long-term Forecasting with Transformers

ICLR 2023

比较简单,就不分intro、model这些了

1 核心思想1:patching

  • 给定每个时间段的长度、划分的stride,将时间序列分成若干个时间段
    • 时间段之间可以有重叠,也可以没有
    • 每一个时间段视为一个token

1.1 使用patching的好处

  • 降低复杂度
    • Attention 的复杂度是和 token 数量成二次方关系。
    • 如果每一个 patch 代表一个 token,而不是每一个时间点代表一个 token,这显然降低了 token 的数量
  • 保持时间序列的局部性
    • 时间序列具有很强的局部性,相邻的时刻值很接近,以一个 patch 为 Attention 计算的最小单位显然更合理
  • 方便之后的自监督表示学习
    • 即 Mask 随机 patch 后重建
  • 减少预测头的参数量
    • L是输入序列长度,M 是序列个数, T是预测序列长度,D是维度,N是patch数量
    • 论文中的说法是,不分patch的话,Linear Head的大小是LD×MT
      • 这里我觉得有点问题,不分patch的话,输入M*L,经过position embedding+project之后是M*LD,经过Transformer Encoder之后是M*LD,输出是M*T,那么Linear Head的大小应该是LD × T
    • 分patch的话LinearHead的大小是ND × T
      • 但不管我理解的对于否,分patch的话Linear Head的大小肯定是小

2 核心思想2:channel-independence

 

  • 很多基于Transformer的模型采用了 channel-mixing 的方式
    • 指的是,对于多元时间序列,直接将时间序列的所有维度形成的向量投影到嵌入空间以混合多个通道的信息。
  • Channel-independence 意味着每个输入 token 只包含来自单个通道的信息。
    • 这篇采用了的是Channel-independence 
      • 将多元时间序列(维度为 M)中每一维单独进行处理
        • 即将每一维分别输入到 Transformer Backbone 中
      • 将所得预测结果再沿维度方向拼接起来。
      • 这相当于将不同维度视为独立的,但 embedding 和 Transformer 的权重在各个维度是共享的。

3 自监督表示学习

  • 论文说明了分 patch 对 mask 重建来进行自监督学习的好处:mask 一个时间点的话,直接根据相邻点插值就可以重建,这就完全没必要学习了,而 mask 一个 patch 来重建的话则更有意义更有难度。

 4 实验

 

### 基于Patch的MLP在长时间序列预测中的实现与技术 长时间序列预测是一个复杂的问题,通常涉及处理高维数据并捕捉时间依赖关系。基于 Patch 的多层感知机 (MLP) 方法通过将输入序列分割成多个子区域(即 patches),从而能够更高效地提取局部特征并减少计算负担。 #### 数据预处理 为了适应基于 Patch 的方法,在进行长时间序列预测之前,需对原始时间序列数据进行分块操作。这可以通过滑动窗口机制完成,其中每个窗口对应一个 patch[^1]。例如: ```python import numpy as np def create_patches(data, window_size): """ 将一维时间序列切分为固定大小的patches。 参数: data: 输入的时间序列数组 window_size: 每个patch的长度 返回: patches: 切分后的二维矩阵,形状为(n_samples, window_size) """ n_patches = len(data) - window_size + 1 patches = np.zeros((n_patches, window_size)) for i in range(n_patches): patches[i] = data[i:i+window_size] return patches ``` 此函数可以用于生成适合后续模型训练的数据集结构。 #### 模型架构设计 对于基于 Patch 的 MLP 架构而言,其核心在于如何有效地利用这些 patches 来构建网络层次。一种常见的方式是先定义一个多层全连接神经网络来分别学习各个 patch 上的空间特性;之后再引入额外的全局聚合层以综合所有局部信息形成最终表示形式。 以下是简化版 PyTorch 实现的一个例子: ```python import torch.nn as nn class PatchBasedMLP(nn.Module): def __init__(self, input_dim, hidden_dims, output_dim): super(PatchBasedMLP, self).__init__() layers = [] prev_dim = input_dim # 定义隐藏层 for dim in hidden_dims: layers.append(nn.Linear(prev_dim, dim)) layers.append(nn.ReLU()) prev_dim = dim # 输出层 layers.append(nn.Linear(prev_dim, output_dim)) self.network = nn.Sequential(*layers) def forward(self, x): return self.network(x) ``` 在此基础上还可以加入注意力机制或者残差连接进一步提升性能表现。 #### 训练策略和技术细节 当涉及到长期未来值估计任务时,除了标准回归损失外还可能考虑其他辅助目标比如正则化项等帮助稳定优化过程以及防止过拟合现象发生。另外值得注意的是由于此类问题往往存在较强的自相关性因此合理设置批量大小(batch size),学习率调整计划等因素也至关重要。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UQI-LIUWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值