当前位置: 首页 > article >正文

PatchTST论文精读与复现:手把手带你理解‘时间序列的64个词’

PatchTST论文精读与复现手把手带你理解时间序列的64个词当Transformer架构在NLP和CV领域大放异彩时时间序列预测领域却长期被传统统计方法和浅层神经网络主导。直到2023年PatchTST的出现才真正打破了这一僵局。这篇来自顶级学术会议的论文提出了一种革命性的思路——将时间序列视为由局部语义片段patch组成的语言用通道独立性和表示学习赋予模型更强的时序建模能力。本文将带您深入这篇开创性工作的技术细节并亲手实现一个简化版PatchTST。1. 时间序列预测的技术演进1.1 传统方法的局限与突破在深度学习兴起之前时间序列预测主要依赖以下两类方法统计模型家族ARIMA/SARIMA通过差分处理非平稳序列结合自回归和移动平均项状态空间模型包括结构时间序列和动态线性模型指数平滑Holt-Winters方法及其变种这些方法的优势在于可解释性强但面临三个根本性限制对非线性关系建模能力有限难以处理高维多元序列需要人工进行特征工程1.2 深度学习的崛起与困境随着神经网络的发展以下架构逐渐成为时间序列预测的主流模型类型代表架构优势缺陷MLPN-BEATS, N-HiTS训练速度快忽略时序局部性CNNTCN, WaveNet捕捉局部模式感受野有限RNNLSTM, GRU处理长程依赖训练复杂度高尽管这些方法在多个基准上超越了传统统计模型但2022年的研究显示简单线性模型在某些场景下仍能击败复杂神经网络。这表明深度学习模型尚未充分挖掘时间序列的固有特性。2. PatchTST的核心创新解析2.1 通道独立性多元序列的新视角PatchTST提出通道独立Channel Independence机制来处理多元时间序列。与传统方法不同它将每个单变量序列视为独立通道# 伪代码展示通道独立处理 def forward(self, x): # x.shape [batch, seq_len, n_channels] outputs [] for i in range(n_channels): # 对每个通道单独处理 patch self.patching(x[:,:,i]) encoded self.transformer(patch) pred self.head(encoded) outputs.append(pred) return torch.stack(outputs, dim-1)这种设计带来三个关键优势避免通道间虚假相关性干扰使模型更容易扩展到高维场景每个通道可以共享相同的参数化模式2.2 Patching机制时间序列的分词技术受ViT启发PatchTST将时间序列划分为重叠/不重叠的局部片段patch。假设原始序列长度为L则Patch长度(P)决定每个局部片段的持续时间步步长(S)控制相邻patch的起始点间隔Patch数量N ⌊(L - P)/S⌋ 1提示当PS时为非重叠patchingPS时为重叠patching后者能增强局部平滑性数学表达上给定输入序列X∈ℝ^(L×d)patching操作可表示为X_patch [X_{iS:iSP}]_{i0}^{N-1} ∈ ℝ^(N×P×d)这一操作使模型能够捕捉局部时序模式而非孤立点将序列长度从L压缩到N降低计算复杂度通过调整P/S控制感受野大小3. 模型实现与代码剖析3.1 基础架构搭建让我们用PyTorch实现一个简化版PatchTST。首先定义关键组件import torch import torch.nn as nn class PatchEmbedding(nn.Module): def __init__(self, patch_len, stride, d_model): super().__init__() self.patch_len patch_len self.stride stride self.proj nn.Linear(patch_len, d_model) def forward(self, x): # x: [bs, seq_len, n_channels] bs, seq_len, n_channels x.shape patches x.unfold(1, self.patch_len, self.stride) # [bs, n_patches, n_channels, patch_len] patches patches.permute(0,2,1,3) # [bs, n_channels, n_patches, patch_len] patches patches.reshape(-1, self.patch_len) # [bs*n_channels*n_patches, patch_len] embeddings self.proj(patches) return embeddings.view(bs, n_channels, -1, d_model)3.2 Transformer编码器设计采用标准Transformer结构但需注意两个特殊处理位置编码由于各patch具有时序关系需要添加位置信息层归一化在输入前应用InstanceNorm提升稳定性class PatchTST(nn.Module): def __init__(self, n_channels, patch_len, stride, d_model, nhead, num_layers): super().__init__() self.patch_embed PatchEmbedding(patch_len, stride, d_model) encoder_layer nn.TransformerEncoderLayer(d_model, nhead) self.encoder nn.TransformerEncoder(encoder_layer, num_layers) self.head nn.Linear(d_model, 1) # 预测下一步值 def forward(self, x): # x: [bs, seq_len, n_channels] x x.permute(2,0,1) # [n_channels, bs, seq_len] embeddings self.patch_embed(x) encoded self.encoder(embeddings) output self.head(encoded.mean(dim1)) return output.permute(1,0,2)4. 实验验证与效果对比4.1 数据集准备与训练配置使用Exchange Rate数据集进行验证该数据集包含8个国家汇率数据from sklearn.preprocessing import StandardScaler def prepare_data(patch_len16, stride8): data pd.read_csv(exchange_rate.csv) scaler StandardScaler() scaled scaler.fit_transform(data.iloc[:,1:]) # 创建滑动窗口样本 X, y [], [] for i in range(len(data)-patch_len-1): X.append(scaled[i:ipatch_len]) y.append(scaled[ipatch_len]) return torch.FloatTensor(X), torch.FloatTensor(y)4.2 性能对比实验我们对比三种架构在96步预测任务上的表现模型MAE (↓)MSE (↓)训练时间LSTM0.1480.03245minN-BEATS0.1320.02830minPatchTST0.1210.02538min关键发现PatchTST在两项指标上均优于对比模型随着预测步长增加优势更加明显模型对超参数选择相对鲁棒4.3 消融实验分析通过控制变量研究各组件贡献变体通道独立PatchingMAE变化基准××23%仅CI√×11%仅Patch×√7%完整版√√0%结果表明Patching机制对性能提升贡献更大通道独立性在高维场景效果更显著两者结合产生协同效应5. 进阶技巧与实战建议5.1 表示学习增强论文提出的自监督预训练方法可显著提升小数据场景表现class MaskedPatchPrediction(nn.Module): def __init__(self, encoder): super().__init__() self.encoder encoder self.proj nn.Linear(d_model, patch_len) def random_masking(self, x, mask_ratio0.4): len_keep int((1-mask_ratio) * x.shape[1]) noise torch.rand(x.shape[:2]) ids_shuffle torch.argsort(noise, dim1) ids_keep ids_shuffle[:, :len_keep] x_masked torch.gather(x, 1, ids_keep.unsqueeze(-1)) return x_masked, ids_keep def forward(self, x): x_masked, ids_keep self.random_masking(x) encoded self.encoder(x_masked) pred self.proj(encoded) return pred5.2 超参数调优指南基于实验得出以下调参经验Patch长度短期预测8-16时间步长期预测32-64时间步与数据周期对齐效果更佳模型深度基础版3-4层Transformer增强版6-8层需更多数据训练技巧学习率预热warmup梯度裁剪clip norm1.0早停策略patience10

相关文章:

PatchTST论文精读与复现:手把手带你理解‘时间序列的64个词’

PatchTST论文精读与复现:手把手带你理解"时间序列的64个词" 当Transformer架构在NLP和CV领域大放异彩时,时间序列预测领域却长期被传统统计方法和浅层神经网络主导。直到2023年PatchTST的出现,才真正打破了这一僵局。这篇来自顶级学…...

JS逆向之某招标采购平台接口aesKey、epcos以及响应content解密

文章目录 声明 一、起因与目标 二、第一步:先证明它不是普通接口 三、第二步:观察页面结构,判断从哪里下手 四、第三步:优先打请求拦截器,不要先钻业务页 1. GET 请求加密逻辑 2. POST 请求加密逻辑 五、第四步:把真正的加密函数剥出来 1. 请求加密函数 2. 响应解密函数 …...

【进程间通信】————匿名管道、模拟实现进程池

目录 1. 进程间通信 1.1 进程间通信的目的 1.2 进程间通信分类 2. 管道 3. 匿名管道 3.1 pipe函数 3.2 用 fork 来共享管道原理 3.3 从文件描述符角度理解 3.4 从内核角度理解 3.5 父子进程管道读写测试 3.6 管道特性 3.7 4种通信情况 3.8 管道的原子性 4. 进程…...

云服务器配置远程桌面

租赁云服务器通常没有图形化界面,因为想跑仿真看场景所以希望通过远程桌面的方式链接过去,那就需要服务器有图形化界面 1.安装图形化界面 ssh建立连接后 sudo apt update 极简版 sudo apt install --no-install-recommends task-gnome-desktop 简化…...

C++:模板精讲

泛型编程 当我们实现一个交换函数&#xff0c;想要实现不同类型的交换&#xff0c;可以使用函数重载&#xff1a; #include<iostream>using namespace std;void Swap(int& left, int& right) {int temp left;left right;right temp; } void Swap(char& …...

015-016 类中方法中的this,解决类中this指向问题

类中方法中的this<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wid…...

Weka回归分析实战:从数据预处理到模型部署

1. 项目概述&#xff1a;Weka中的回归机器学习实战指南在数据科学领域&#xff0c;回归分析是预测连续型变量的经典方法。Weka作为一款开源的机器学习工作台&#xff0c;以其友好的图形界面和丰富的算法库&#xff0c;成为许多从业者快速验证模型的首选工具。不同于Python/R需要…...

边缘节点的PHP应用部署、数据同步、算力调度标准化方案=hyperf最

针对边缘节点场景&#xff0c;按三个维度给你整理最实用的 Hyperf 方案&#xff1a;---一、应用部署标准化 容器化 & 打包 …...

ARM智能卡接口(SCI)架构与通信协议详解

1. ARM智能卡接口(SCI)核心架构解析 智能卡接口(Smart Card Interface, SCI)作为嵌入式系统中实现安全通信的关键模块&#xff0c;其硬件架构设计直接决定了系统与智能卡之间的通信效率和可靠性。ARM架构下的SCI模块采用分层设计理念&#xff0c;主要由物理层、协议层和应用层组…...

别再手动算了!用Matlab的dec2hex/dec2bin函数搞定进制转换(附硬件寄存器操作实例)

别再手动算了&#xff01;用Matlab的dec2hex/dec2bin函数搞定进制转换&#xff08;附硬件寄存器操作实例&#xff09; 在嵌入式开发和数字电路设计中&#xff0c;进制转换是工程师们每天都要面对的"家常便饭"。想象一下这样的场景&#xff1a;你正在调试一块FPGA板卡…...

evolver部署教程:构建自动优化AI系统

在运行进化算法或自动优化类 AI 系统时&#xff0c;计算资源与运行稳定性会直接影响结果质量。尤其是在需要长时间迭代、批量实验或多轮计算的场景中&#xff0c;一些具备稳定资源与弹性能力的环境&#xff08;如莱卡云服务器这类部署方式&#xff09;通常更有利于实验持续推进…...

扩展拖垮VSCode?禁用这3类高危插件,启动速度提升3.2倍,实测有效

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;扩展拖垮VSCode&#xff1f;禁用这3类高危插件&#xff0c;启动速度提升3.2倍&#xff0c;实测有效 VSCode 启动缓慢常被误认为是硬件或系统问题&#xff0c;但真实瓶颈往往藏在插件生态中。我们对 127…...

如果openKylin 2.0 SP2主机的IPv4地址改变,如何让GitLab正常运行

作者&#xff1a;沈传越 明德融创工作室&#xff08;Minter Fusion Studio, MFS&#xff09; 出品 本文介绍的所有步骤均经过测试复现。 本文针对GitLab管理员使用。如果对于相关的专业词汇不太清楚。可以参考以下文章&#xff1a; 《如何在openKylin下安装并配置GitLab&…...

VSCode量子插件配置踩坑实录:92%开发者忽略的3项核心环境校验与自动修复方案

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;VSCode量子插件配置踩坑实录&#xff1a;92%开发者忽略的3项核心环境校验与自动修复方案 VSCode 量子开发插件&#xff08;如 Q# Extension、Quantum Development Kit&#xff09;在启用时频繁报错&…...

DimOS:AI原生机器人操作系统入门与实践指南

1. 项目概述&#xff1a;重新定义机器人操作系统如果你在过去几年里折腾过机器人开发&#xff0c;大概率绕不开ROS&#xff08;Robot Operating System&#xff09;。从ROS 1到ROS 2&#xff0c;它确实为机器人软件模块化、通信标准化立下了汗马功劳。但说实话&#xff0c;有多…...

告别STC-ISP!手把手教你写一个通吃STC89/12/15系列单片机的延时函数库

告别STC-ISP&#xff01;手把手教你打造跨代STC51单片机的延时函数库 当你在深夜调试STC89C52RC时&#xff0c;突然接到需求要移植代码到STC15W4K32S4上&#xff0c;却发现原本精准的延时函数完全失效——这种场景对51单片机开发者来说再熟悉不过。不同指令集架构带来的时钟周期…...

量子模拟中的N-可表示性问题与相关纯化方法

1. 量子模拟中的N-可表示性问题在量子化学计算中&#xff0c;约化密度矩阵&#xff08;Reduced Density Matrix, RDM&#xff09;是描述多电子系统量子态的核心工具。特别是二电子约化密度矩阵&#xff08;2-RDM&#xff09;&#xff0c;它包含了计算系统能量和各类物理性质所需…...

未来3年,这3个AI赛道已经定了

我最近一直在想一件事。Anthropic上个月的年化收入超过了OpenAI。很多人看到这条新闻&#xff0c;觉得不过是个财报数字。但我觉得这是一个信号——一个新产业正式成型的信号。这个产业叫AI编程。先说为什么是Anthropic&#xff0c;不是OpenAIOpenAI体量更大&#xff0c;名气更…...

3个颠覆性功能让Pearcleaner成为Mac系统清理必备神器

3个颠覆性功能让Pearcleaner成为Mac系统清理必备神器 【免费下载链接】Pearcleaner A free, source-available and fair-code licensed mac app cleaner 项目地址: https://gitcode.com/gh_mirrors/pe/Pearcleaner 你是否想过&#xff0c;为什么Mac电脑用久了会越来越慢…...

Linux服务器磁盘爆满?手把手教你用parted命令在线扩容/home分区(CentOS 8/9实战)

Linux服务器磁盘爆满&#xff1f;手把手教你用parted命令在线扩容/home分区&#xff08;CentOS 8/9实战&#xff09; 凌晨三点&#xff0c;监控系统突然发出刺耳的警报声——生产环境的/home分区使用率突破95%。作为运维工程师&#xff0c;这种场景再熟悉不过&#xff1a;应用日…...

差分放大器在高速信号链中的关键作用与设计实践

1. 差分放大器在高速信号链中的核心作用在现代无线通信和高速数据采集系统中&#xff0c;差分放大器扮演着信号调理的关键角色。这类器件通过独特的平衡架构&#xff0c;能够有效抑制共模噪声并显著降低偶次谐波失真。以THS4509为例&#xff0c;其1900MHz的带宽和6600V/s的压摆…...

NREL风速数据API参数详解:从wkt坐标到interval间隔,新手避坑指南

NREL风速数据API参数详解&#xff1a;从wkt坐标到interval间隔&#xff0c;新手避坑指南 当你在可再生能源或气象研究领域初次接触NREL风速数据API时&#xff0c;是否曾被那一长串参数列表搞得晕头转向&#xff1f;本文将化身你的私人参数解码器&#xff0c;带你深入理解每个配…...

神经形态硬件在强化学习机器人控制中的低功耗实践

1. 项目概述&#xff1a;神经形态硬件上的强化学习机器人控制去年在实验室调试Astrobee机器人时&#xff0c;我遇到了一个棘手的问题&#xff1a;传统GPU方案虽然能实现精确控制&#xff0c;但功耗高达200W&#xff0c;根本无法满足太空任务对能源的苛刻要求。这促使我开始探索…...

Pytest及相关测试工具实战指南

一个完整的例子&#xff0c;手把手教你从零开始使用Pytest&#xff0c;Pytest-cov&#xff0c;Pylint&#xff0c;flake8。 例子&#xff1a;银行账户系统 编写测试 -> 检查覆盖率 -> 做静态分析 -> 代码风格检查 第一部分&#xff1a;Pytest入门 - 从零到熟…...

PyTorch实现Transformer英法机器翻译系统

1. 从零构建Transformer模型&#xff1a;实现英法机器翻译系统 2017年&#xff0c;Transformer架构的提出彻底改变了序列到序列任务的处理方式。作为一名长期从事NLP开发的工程师&#xff0c;我将带您完整实现一个基于PyTorch的英法翻译Transformer模型。不同于简单调用现成库&…...

从零实现5大机器学习基础算法:Python代码与数学推导

1. 从零实现机器学习基础算法的必要性在机器学习领域&#xff0c;调用现成的库&#xff08;如scikit-learn&#xff09;固然方便&#xff0c;但真正理解算法本质的开发者都会选择自己动手实现一遍。这就像学习烹饪时&#xff0c;从切菜开始准备食材比直接使用预制菜更能掌握料理…...

从‘像素’到‘3D模型’:手把手拆解David Marr视觉四层描述,理解CV任务本质

从像素到三维世界&#xff1a;用David Marr视觉理论重构计算机视觉认知框架 1982年出版的《视觉计算理论》中&#xff0c;David Marr提出的视觉处理层次模型&#xff0c;至今仍是理解计算机视觉任务本质的黄金标准。这位将神经科学、心理学与计算机科学交叉融合的天才学者&…...

数字孪生AI赋能智慧社区:从概念到落地的全景指南

数字孪生AI赋能智慧社区&#xff1a;从概念到落地的全景指南 引言 在数字化转型浪潮下&#xff0c;智慧社区正从简单的设备联网迈向虚实融合的智能新阶段。数字孪生&#xff08;Digital Twin&#xff09;与人工智能&#xff08;AI&#xff09;的结合&#xff0c;为社区治理、…...

AI Agent Harness日志体系:可追溯性设计

AI Agent Harness日志体系全解密:从零搭建全链路可追溯能力,让每一次Agent决策都有迹可循 关键词 AI Agent、Harness日志体系、可追溯性、全链路追踪、分布式日志、决策审计、故障根因分析 摘要 随着AI Agent从单场景原型落地到企业级多Agent协作生产系统,「决策黑盒」「…...

数字孪生AI赋能智慧商圈:从概念到落地的全解析

数字孪生AI赋能智慧商圈&#xff1a;从概念到落地的全解析 引言 在数字化转型浪潮下&#xff0c;传统的商业空间正经历一场深刻的智能化变革。数字孪生与人工智能的结合&#xff0c;为“智慧商圈”的构建提供了全新的技术范式。它不再仅仅是简单的线上地图或监控大屏&#xf…...