Transformer时间序列预测

news2025/7/23 23:53:15

介绍:

提示:Transformer-decoder

  • 总体介绍
    本文将介绍一个 Transformer-decoder 架构,用于预测Woodsense提供的湿度时间序列数据集。该项目是先前项目的后续项目,该项目涉及在同一数据集上训练一个简单的 LSTM。人们认为 LSTM 在长序列上存在“短期记忆”问题。因此,该项目将使用一个 Transformer,它在同一数据集上优于之前的 LSTM 实现。
    在这里插入图片描述

LSTM 按顺序处理标记,如上所示。该体系结构维护一个隐藏状态,该状态随每个新输入令牌更新,代表它所看到的整个序列。理论上,非常重要的信息可以在无限长的序列上传播。然而,在实践中,情况并非如此。由于梯度消失问题,LSTM 最终会忘记较早的标记。

相比之下,变形金刚保留与所有先前时间戳的直接连接,允许信息在更长的序列上传播。然而,这带来了新的挑战:模型将直接连接到爆炸式增长的输入量。为了从不重要的事物中过滤出重要的事物,变形金刚使用一种称为 自注意力的算法。


自注意力:

提示:这里可以添加要学的内容

在心理学中,注意力是将注意力集中在一种刺激上而排除其他刺激。同样,注意力机制旨在仅关注与完成给定任务相关的任意长序列中最重要的子集。¹

具体来说,模型必须决定先前标记中的哪些细节与编码当前标记相关。self-attention 块根据所有其他先前输入对每个新输入输入进行编码,根据与当前标记相关性的计算来确定焦点。下面提供了简要概述。

1.创建查询、键和值向量:
每个令牌生成关联的查询、键和值。将当前令牌的查询与所有其他令牌的键进行比较,以确定它们与当前令牌的相关性。值向量是给定标记的真实表示,用于创建新编码。在训练过程中,模型逐渐学习这三个权重矩阵,每个 token 乘以生成其对应的 key、query 和 value。
2.计算自注意力分数:
自注意力分数是当前标记与之前在序列中看到的任何其他标记之间的相关性的度量。它是通过计算当前标记的查询向量与被评分标记的键向量之间的点积来计算的。高分表示高相关性,而低分则相反。然后将分数通过 softmax 函数传递,这样它们都是正的并加到 1。在这一步中,自注意力分数可以看作是给予序列中标记的总关注度的百分比,在编码当前令牌。
3.相应地对当前标记进行编码:
在上一步中具有高 softmax 值的词应该对当前标记的编码贡献更大,而得分低的词应该贡献很小。为此,每个值向量都乘以它的 softmax 分数。这会保持原始值不变,但会根据其对当前标记的相对重要性来缩放整个向量。最后,将所有缩放后的值相加以生成当前标记的编码。
在这里插入图片描述由于这三个步骤由矩阵运算组成,因此可以优化如下:
在这里插入图片描述


位置编码:

提示:位置编码

还有第二个挑战需要解决。时间序列不是按顺序处理的;因此,Transformer 本身不会学习时间依赖性。为了解决这个问题,必须将每个标记的位置信息添加到输入中。这样做时,self-attention 块将具有给定时间戳与当前时间戳之间相对距离的上下文,作为 self-attention 相关性的重要指标。

对于这个项目,位置编码实现如下:时间戳表示为三个元素——小时、日期和月份。为了真实地表示每种数据类型,每个元素都被分解为正弦和余弦分量。这样,十二月和一月在空间上很接近,就像月份在时间上很接近一样。同样的概念也适用于小时和天,因此所有元素都循环表示。
在这里插入图片描述


实现转换器解码器:

提示:这里统计学习计划的总量

在 vanilla transformer 中,解码器由以下三个块组成:首先是一个 masked self-attention 块,然后是一个编码器-解码器块,最后是一个前馈块。本文的实现灵感来自GPT2 的decoder-only Transformer 实现,如下图所示。这些修改后的解码器块中的三个相互堆叠,将来自前一个块的编码作为输入传递到后续块。

在这里插入图片描述
转换器的输入是一个给定的时间序列(单变量或多变量),如下面的绿色所示。然后目标是向右移动一次的序列,如下面的蓝色所示。也就是说,对于每个新输入,模型都会为下一个时间戳输出一个新的预测。
在这里插入图片描述
为了在长度为 5 的序列上表示这一点,对于第一个输入 x1,模型将输出其对即将到来的标记的预测:x2’。接下来,它被赋予真实的 x1 和 x2,并预测 x3’,等等。在每个新步骤中,它都会接收序列中所有先前的真实输入,以预测下一步。因此,模型的输出向量将是预测的标记 x2’、x3’、x4’、x5’、x6’。然后将其与真实值 x2、x3、x4、x5、x6 进行比较以训练模型,其中每个输出标记对损失的贡献相同。
在这里插入图片描述

蒙面自我注意

要实现上面演示的模型,必须使用掩码来确保模型在每个步骤中只能访问序列中先出现的标记。具体来说,在应用 softmax 函数之前,当前正在关注的标记之后的所有标记都被屏蔽,以防止模型通过前瞻性作弊。当应用 soft-max 时,这些未来值的重要性将变为 0%,从而防止任何信息渗漏。

在这里插入图片描述
最后要注意的是,为简单起见,以上描述已经指出了计算中的顺序步骤。实际上,这些计算是在矩阵计算中同时进行的。

预定取样
在每个新步骤中为模型提供真实值而不是最后一个预测输出的概念称为教师强制。就像学生准备考试而老师在他身后看着一样,模型学习得很快,因为它的错误会立即得到纠正。换句话说,在得到纠正之前,它永远不会“偏离轨道太远”。²

teacher forcing 的缺点是,在每次新的预测中,模型可能会犯一些小错误,但无论如何它都会在下一步中获得真实值,这意味着这些错误永远不会对损失产生重大影响。该模型只需要学习如何提前预测一个时间步长。

然而,在推理过程中,模型现在必须预测更长的序列,不能再依赖频繁的修正。在每一步中,最后的预测被附加为下一步的新输入。因此,在推理过程中,训练期间并不严重的小错误很快就会在更长的序列中被放大。³在前面的类比中,这可以比作学生去参加考试,从来没有在没有老师帮助的情况下参加模拟考试他。

中的一个基本问题教师强迫出现:训练成为与推理截然不同的任务。为了弥合训练和推理之间的差距,模型需要慢慢学习纠正错误。因此,在训练和推理之间转换模型的任务就变成了逐渐为模型提供更多的预测输出,而不是真实值。

在早期阶段过快地进行推理——从模型的预测输出中抽样太多——会导致随机标记,因为模型还没有机会训练,从而导致收敛缓慢。另一方面,在最后几个时期没有足够快地进行推理——采样太少——将使训练和推理之间的差距太大,这意味着在训练期间表现良好的模型在推理期间的性能会急剧下降。

为了温和地弥合这一差距,使用了一种采样方法,其灵感来自 Bengio 的“使用递归神经网络进行序列预测的预定采样”。采样率随着时间的推移而演变,从最初选择真实值的高概率开始,就像在经典的教师强制中一样,然后逐渐收敛到纯粹从模型输出中采样,以模拟推理任务。论文中提出了不同的时间表,其中为该项目选择了逆 sigmoid 衰减。在这些最后的时期中,当模型连续采样其自身的许多预测值时,模型理想地学会了防止其小错误累积,因为它现在受到的惩罚要高得多。
在这里插入图片描述

常数 k 用于微调反 S 型衰减图中的衰减率。
将此技术应用于模型会在 500 次训练中的第 310 次训练期间产生如下所示的结果。蓝点显示真实输入。红点表示选择作为下一步输入的值——无论是真实输入还是上一步的预测。绿点是模型的预测,仅将之前的红点作为输入。在第 310 轮,模型仅从真实输入中采样其值的 20%,其他 80% 是其自身建立的预测,如上面的逆 sigmoid 衰减图所示。可以看出,每次采样器再次选择真实输入时,模型都会“修正”。

例如,在时间戳 20 处,模型明显偏离轨道并预测湿度为 65%。采样器选择了真实的输出作为下一个输入,模型成功地在随后的时间戳 21 中几乎完美地自我校正。
在这里插入图片描述

没有阈值的预定采样器
我们看到模型在序列的开头表现不佳。这是直观的,考虑到模型是在对特定序列知之甚少的情况下进行预测的。事实证明,使用在序列早期启动的预定采样器进行训练会混淆模型,因为在没有足够的输入来理解数据模式的情况下,它会因预测不佳而受到惩罚。为了纠正这个问题,在计划的采样器上设置了一个阈值,确保在计划的采样器以正常速率启动之前,前 24 个时间戳只使用真实值,代表一整天的数据,如逆 sigmoid 所示图,与时代相关。
在这里插入图片描述

带阈值的预定采样器。前 24 个时间戳仅来自真实输入,与预定采样器设置的概率无关。
结果
如下所示,该模型成功地对 50 个时间戳的预测窗口进行了合理的预测。
在这里插入图片描述

在这里插入图片描述

使用经过 500 轮训练的模型预测预测窗口为 50 的未见序列

使用经过 500 轮训练的模型预测预测窗口为 50 的未见序列
在它确实随着时间的推移偏离轨道的情况下,它会产生令人信服的预测,显示对数据的更深入理解。

使用经过 500 轮训练的模型预测预测窗口为 50 的未见序列
在这里插入图片描述

使用经过 500 轮训练的模型预测预测窗口为 50 的未见序列
在这里插入图片描述
代码:https 😕/github.com/nklingen/Transformer-Time-Series-Forecasting
参考:https://medium.com/mlearning-ai/transformer-implementation-for-time-series-forecasting-a9db2db5c820

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/35469.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里P8总结的Nacos入门笔记,从安装到进阶小白也能轻松学会

前言 都说程序员工资高、待遇好, 2022 金九银十到了,你的小目标是 30K、40K,还是 16薪的 20K?作为一名 Java 开发工程师,当能力可以满足公司业务需求时,拿到超预期的 Offer 并不算难。然而,提升…

GPC规范-SCP02

SPC02 流程 SPC02 指令 命令: 响应: 举例回复: 密钥分散数据: 0000FFFFFFFFFFFFFFFF Key Info: 20 02(scp02) Card挑战数: 001AC6619BE83082 Card加密值: 7…

leetcode刷题(133)——剑指 Offer 07. 重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 示例 1: Input: preorder [3,9,20,15,7], inorder [9,3,15,20,7] Output: [3,9,20,null,null,15,7]示例 2: Input: preord…

(十一)笔记.net学习表达式目录树Expression

(十一)笔记.net学习表达式目录树Expression1.什么是表达式目录树(1)Func和表达式的不同(2)表达式树拆解(3)自己拼装表达式目录2.动态拼装表达式目录和扩展应用3.解析表达式目录&…

阿里云服务器采用AMD CPU处理器ECS实例规格详解

阿里云服务器有AMD CPU处理器,阿里云服务器ECS通用型g7a、计算型c7a和内存型r7a采用2.55 GHz主频的AMD EPYCTM MILAN处理器,单核睿频最高3.5 GHz;通用型g6a、计算型c6a和内存型r6a采用2.6 GHz主频的AMD EPYCTM ROME处理器,睿频3.3…

MySQL读取的记录和我想象的不一致——事物隔离级别和MVCC

本篇是《MySQL是怎样运行的》读书笔记,主要分析并发的事务在运行过程中会出现一些可能引发一致性问题的现象。 文章目录1.事务的特性简介1.1 原子性(Atomicity)1.2 隔离性(Isolation)1.3 一致性(Consistenc…

JUC基础

synchronized 复习虚假唤醒什么是虚假唤醒虚假唤醒产生的原因?解决虚假唤醒?Lock接口ReentrantLock 和 synchronized 的区别Lock 实现线程通信Lock 实现线程定制化通信集合线程安全ArrayListHashSetHashMapsynchronized 锁的范围多线程锁公平锁和非公平锁…

CameraMetadata 知识学习整理

一、涉及的相关代码路径 system/media/camera/src/camera_metadata.c // metadata的核心内容,包含metadata内存分配,扩容规则,update, find等 system/media/camera/src/camera_metadata_tag_info.c // 所有android原生tag的在内存里面sect…

22/11/24

1,单调队列; (76条消息) 单调队列专题_Dull丶的博客-CSDN博客 2,kmp算法; 先是自己和自己匹配,求出ne数组,然后和另一串匹配,进行求解; 循环里三步:while&#xff0c…

【Lilishop商城】No2-3.确定软件架构搭建二(本篇包括接口规范、日志处理)

仅涉及后端,全部目录看顶部专栏,代码、文档、接口路径在: 【Lilishop商城】记录一下B2B2C商城系统学习笔记~_清晨敲代码的博客-CSDN博客 全篇只介绍重点架构逻辑,具体编写看源代码就行,读起来也不复杂~ 谨慎&#xf…

【数据聚类】基于粒子群、遗传和差分算法实现数据聚类附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

【App自动化测试】(十)特殊控件Toast识别

目录1. toast介绍2. toast定位3. 实例演示前言: 本文为在霍格沃兹测试开发学社中学习到的一些技术写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~ 😘 1. toast介绍 Toast,简易的消息提示框。为了…

CANdelaStudio-从入门到深入目录

前文介绍诊断协议那些事儿专栏,为大家深入介绍了ISO 14229各个服务的基础知识、请求与响应的报文格式,详情可查看:诊断协议那些事儿,从本专题开始,将由浅入深的展开诊断实际开发与测试的数据库编辑,包含大量实际开发过程中的步骤、使用技巧与少量对Autosar标准的解读。希…

HTML5学习笔记(四)

CSS3 颜色样式 在CSS3中,增加了大量定义颜色方面样式的属性,主要包括以下3种。 ▶ opacity透明度 ▶ RGBA颜色 ▶ CSS3渐变 opacity透明度 opacity属性取值是一个数值,取值范围为0.0~1.0。其中0.0表示完全透明,1.0表示完全不透…

I/O模型

网络IO的本质 网络IO的本质就是socket流的读取,通常一次IO读取会涉及两个阶段与两个对象,其中两个对象为:用户进程(线程)Process(Thread)、内核对象(kernel),两个阶段为…

北方地区长乐市污水厂(150000m3d)工艺设计

目 录 1设计说明书 3 1.1概述 3 1.1.1设计题目 3 1.1.2设计任务 3 1.1.3设计阶段(设计程度) 3 1.1.4设计依据 3 1.1.5设计原始资料 3 1.1.6设计工作量 5 1.1.7设计要求 5 1.1.8 毕业设计日期 5 1.2 设计要求 6 1.2.1 设计原则 6 1.2.3 设计内容 6 1.3 水…

PLC中ST编程的比较运算

比较运算符&#xff1a; >大于、 <小于、 >大于等于、 <小于等于、等于、 <>不等于。 BOOL类型的比较是通过1&#xff08;TRUE&#xff09;和0&#xff08;FALSE&#xff09;来比较的&#xff1b; 只有xIn_1为真&#xff0c;xIn_2为假的时候&#xff0c;xRe…

《小猫猫大课堂》1——小喵是如何开启敲代码之路的?

更新不易&#xff0c;麻烦多多点赞&#xff0c;欢迎你的提问&#xff0c;感谢你的转发&#xff0c; 最后的最后&#xff0c;关注我&#xff0c;关注我&#xff0c;关注我&#xff0c;你会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真…

【Vue基础系列】vue-router 万字详解,一篇彻底搞懂

目录 一、路由的简介 二、路由基本使用 三、嵌套路由 四、路由的query参数 五、路由的params参数 六、路由的props配置 七、编程式路由导航 八、缓存路由组件 九、两个新的生命周期钩子 十、路由守卫 一、路由的简介 我们在生活中经常听到路由器&#xff0c;但关于路由…

将项目部署至云服务器的详细过程 以community项目为例

文章目录1.申请一个2核4G的云服务器&#xff0c;系统选择CentOS 7.62.使用终端连接云服务器3.使用 wget 命令下载以下安装文件4.安装jdk125.安装maven6.安装MySQL7.初始化mysql数据库8.安装Redis9.安装kafka10.安装elasticsearch及其分词工具11.安装Wkhtmltopdf12.安装tomcat13…