论文解读:Informer-AAAI2021年最佳论文

论文背景

应用背景

训练的是历史数据,但预测的是未来的数据,但是历史数据和未来数据的分布不一定是一样的,所以时间序列应用于股票预测往往不太稳定

动作预测:

基于之前的视频中每一帧动作,预测下一帧这个人要做什么动作;

流量预测:

网上购物:基于之前的流量预测出之后购买的流量应该有多少,好进行适当的补货

论文背景研究问题

拿过去20天的数据训练

1.短序列预测,则为预测未来2-3天的天气,这个比较好做;

3.精准长序列预测,则为预测10多天的天气,这个比较难做;甚至有可能拿过去半年的数据来预测未来半年的数据

解释为什么长序列预测难

传统时间序列经典算法

Prophet:非常实用的工具包,适合预测趋势,但不算精准

Arima:老牌算法了,短序列预测还算精准,但是趋势预测不准

但是一旦涉及到长序列,他俩可能就都不行了

Informer中将主要致力于长序列问题的解决,而且还可以多标签输出(即天气预测,不仅预测天气,还可以预测湿度,降雨量等)

传统办法LSTM的问题

预测是串行的,必须x_{1}预测完才到x_{2}

而且反向传播也得逐个逐个传,对模型训练更难了

在长序列预测中,如果序列越长,那速度肯定越慢,效果也越差(现存问题,即要解决的问题)

informer算法的核心思想

Transformer架构的优势与问题

1.万能模型,直接套用,代码实现简单,现成例子一大片

2.并行的,比LSTM快,全局信息丰富,注意力机制效果好

3.长序列中attention需要每一个点跟其他点计算(如果序列太长,效率很低),计算效率跟序列长度呈n^{2}的关系

4.Decoder输出挺墨迹的,要基于上一个预测结果来推断当前的预测结果;所以informer对encoder也进行了一些调整,对48天的数据同时输出(而不是预测了第一天之后,再根据预测第一天的结果推测第二天)。

要解决的三大问题,即论文的三大核心模块

Attention计算

左下角的图的值是Q与K内积的值,越往0代表关系越不大(Q与K接近垂直),越往1代表关系越大(Q与K将近同一条线上)

在长序列中,每一个位置的attention都很重要吗

对于每一个Q来说,只有一小部分的K是其它有较强关系

长序列中要不要进行采样呢?

群众里有坏人(有偷懒不干活的Q)

出于计算效率的考虑,那我们只需要关心有得分值大的那一小部分那些。

如何定义每一个Q是不是偷懒的

偷懒的Q感觉就像是均匀分布,没啥特点,你有我有全都有

Active的Q明显在某些位置比较活跃,权重差异较大

对于每一个Q,计算其与均匀分布的差异,差异越大则表示其越活越

论文给出的公式,没看懂┭┮﹏┭┮:

ProbAttention计算方法

挑出重要的Q

输入序列长度为96,现在要选出来的是一些重要的Q,正常情况需每一个Q跟全部(96)个K计算

这里为了节省计算量,重要的Q不用非得计算那么多,跟部分K计算的结果也可以当作其分布;即重要的Q跟一部分K做计算后应该也要能看出来它是重要的,而不需要跟全部的K去做计算

所以在K中进行采样,随机选25个K,于是让Q跟25个K作计算。

例如源码输出结果:32, 8, 96, 25表示:32个batch,8头,96个Q分别跟25个K计算的内积。

现在每一个Q有25个得分(分别跟25个K计算后得到的),该例中L_{k}=25

论文中做法比较绝,为了进一步加速,直接选最大值与均匀分布算差异

之后按差异进行排序,在96个Q中,选出来差异前(即差异最大)的25个Q(根据序列长度来定的一个参数值)

如何更新不重要的Q

在算内积时,Q*K内积为:32, 8, 25, 96,就是只选了25个Q,但K还是96个(并不是只用随机选择的25个)

那么其它位置的Q该咋办呢?它没有参与计算其attention目前

出于节省计算量,直接用V(96个,表示每一个位置的特征)的均值来替代

也就是选出来的25个Q会更新,其他剩余的都是均值向量

Self-attention Distilling计算方法

传统transformer就是多次重复的self-attention堆叠。

这里与传统transformer不同,做完一次attention之后还要继续堆叠,只不过会96的输入序列(指96个Q、K、V)先通过1D的maxpool操作来进行下采样,下次attention的输入序列就为48了。此时Q和K的采样由于序列长度变小,也会随之变小,例如由25->20,为了去掉比较"懒"的Q。

重复堆叠多次就是Informer的Encoder架构了。

做完maxpool操作又会把比较懒、不去起作用的Q过滤掉。

Encoder改进后的效果

一方面就是速度快效率高了,论文中计算复杂度由L^{2}->L*log_{2}^{L}

下采样之后,特征更明显,且跟之前的特征的分布基本一致

关于Decoder的设计

传统Decoder输出

先输出第一个,在基于第一个输出第二个,以此类推

Start标志位

要让Decoder输出预测结果,你得先告诉它从哪开始输出。

先给一个引导,比如要输出20-30号的预测结果,Decoder中需先给出前面一个已知的序列结果,例如10-20号的标签值(下图X_{0}是待预测结果,X_{token}是已知结果)。

从源码角度来看

源码中decoder输入长度为72,其中前48是真实值,后24是预测值

第一步还是做自身的ProbAttention

注意这回需要加上mask,mask的意思就是前面的不能看到后面的(不能透题)

自身计算完self-attention,再算与encoder的cross-attention即可

mask值举例

这里mask=1是我要的,mask=0是我要剔除的。

预测天气5应该只能用到1-4天的信息,而不能利用后面6-7天的信息

预测天气6应该只能用到1-5天的信息,而不能利用后面7-8天的信息

预测天气7应该可以用到前面1-6天的信息

位置编码信息

位置信息变得更加丰富了

不仅有绝对位置编码Local Time Stamp

还包括了跟时间相关的各种编码Global Time Stamp

Encoder与Decoder都加入了这些位置编码

节假日有可能对一些时间序列预测有关,比如说车流量,某旅游地的流量,明显会在节假日有所提高,当然,节假日对天气的预测似乎没什么关系,这里的位置编码更多的知识一种思路,希望我们读者在自己的任务中引入一些跟时间密切相关的编码。

整体网络架构

主要改进就是编码和解码器的优化,速度更快,解决长序列问题

需要注意的是:最终通过Outputs来同时预测几天的结果,而不是像传统算法那样预测一天后再预测下一天。

参考资料

论文下载

https://arxiv.org/abs/2012.07436

📎Informer Beyond Efficient Transformer for Long Sequence.pdf

代码地址

GitHub - zhouhaoyi/Informer2020: The GitHub repository for the paper "Informer" accepted by AAAI 2021.

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

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

相关文章

Ubuntu 常用命令之 echo 命令用法介绍

📑Linux/Ubuntu 常用命令归类整理 echo 是一个在 Ubuntu 系统下常用的命令,主要用于在终端输出字符串或者变量。 echo 的基本语法 echo [option] [string]echo 命令的参数包括 -n:不输出结尾的换行符。-e:启用反斜杠转义字符。…

超级逼真人脸生成,Stable Diffusion的3个关键技巧

大家好,你是否曾想过,为什么别人可以使用AI图像生成技术生成如此逼真的人脸,而自己的尝试却充满了错误和瑕疵,让人一眼看出是假的。尝试过调整提示和设置,但似乎仍无法与他人的质量相匹配。 本文将带大家了解使用Stab…

LeetCode-17 电话号码的字母组合

LeetCode-17 电话号码的字母组合 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入:d…

硬件产品经理:硬件产品敏捷开发

目录 简介 敏捷 CSDN学院 作者简介 简介 之所以敏捷产品开发流程会越来越普遍。 主要得益于这个方法可以让企业使用更少的资源去开发出令客户满意的新产品。 敏捷开发强调的最重要的一点就是“快”。 也就是要求通过快速迭代来获取频繁的客户反馈。 这就特别适合应对市…

Python教你如何让代码摆脱死循环的困扰!

更多资料获取 📚 个人网站:ipengtao.com 在编写Python代码时,无限循环是一个常见的问题,可能导致程序陷入死循环,使得代码无法正常执行。这篇博客将介绍一些方法,帮助大家防止和处理无限循环,确…

ansible变量的使用

本章主要介绍playbook中的变量 自定义变量使用变量文件字典变量列表变量facts变量内置变量变量的过滤器 为了能够写出更实用的playbook,需要在playbook中使用变量。下面来讲解playbook 中常见的变量。本章实验都在/home/lduan/demo2下操作,先把 demo2目…

百度网盘资源下载慢解决方法

1、使用百度网盘客户端,设置使用空闲带宽下载 亲测,可以一定程度上解决下载慢的问题,但是对于有些文件下载还是很慢就不清楚为什么了。 2、使用IDM进行下载 (1)、第一步下载和安装IDM 搜索后,普通下载后安…

BWS2000倾角传感器c++测试代码【1】

使用瑞芬的倾角传感器配置的时候,数据手册一下就配置好了,但是BWS2000倾角传感器总是出错,这里进行一下记录出现的问题与解决方式。 1.初步测试 在配置BWS2000倾角传感器读取帧数据的时候,总是出现一个问题,就是进行…

Qt/QML编程学习之心得:在QML工程中添加库(十四)

实现库并且使用库,类似于vc中的静态库library、动态库dll、COM组件等方法一样,在Qt中也经常会使用库,或者将部分功能打包成库。 右击Qt项目,点击add library... 在linux中将.a文件导入,工程会自动在.pro温江中增加相应…

关于频谱仪是如何来实现辐射功率测量

1.1 内部基本原理框架 首先是接收到外部信号输入,然后经过可变衰减器衰减,接着进行变频,接着经过带宽带通滤波器进行滤波,滤波后的信号送入检波器进行信号检测,再经对数放大器放大后,送入低通滤波器进行视频…

Java文件流大家族(通俗易懂,学习推荐版,很详细)——操作文件本身和文件中的数据

1.File(操作文件本身) 1.定义 目录 2.常用方法 3.路径引用符 可以用/或者\\分隔路径 还可以用File.separator分隔路径,会根据不同系统使用啥分隔符。 4.绝对路径、相对路径及桌面路径表示 桌面路径为: 我电脑的用户名为X 5.示例…

解决找不到vcruntime140.dll无法继续执行的多种方法分享

最近,我在使用电脑时遇到了一个问题,即“由于找不到vcruntime140.dll无法继续执行”。vcruntime140.dll是Visual C Redistributable Packages中的一个组件,它是Visual Studio 2015中运行C程序所必需的。如果找不到vcruntime140.dll文件&#…

C++实现增序含头结点的单链例题:现已知单链表L中结点是按整数值递增排列,试写一算法将值为X的结点插入到表L中,使得L任然递增有序

因为比较简单直接给代码&#xff1a; <1>.c文件 #include"Module.h" int main() {int m 0;int flag 0,elect0;printf("*-----------------------------------------------------------------------------------------*\n");struct STU* List Cr…

Python接口自动化测试实战(视频教程+源码)

接口自动化测试是指通过编写程序来模拟用户的行为&#xff0c;对接口进行自动化测试。Python是一种流行的编程语言&#xff0c;它在接口自动化测试中得到了广泛应用。下面详细介绍Python接口自动化测试实战。 1、接口自动化测试框架 在Python接口自动化测试中&#xff0c;我们…

论文阅读——llava

Visual Instruction Tuning LLaVA 指令智能体分为两类&#xff1a;端到端的&#xff0c;通过LangChain[1]/LLM[35]协调各种模型的系统。 数据集生成用GPT辅助生成的&#xff0c;具体不写了。 模型结构&#xff1a; input image Xv LLM&#xff1a;Vicuna visual encoder&a…

MySQL的hash索引

MySQL有BTree 索引及Hash索引等索引类型&#xff0c;BTree索引类型是MySQL采用最多的索引类型。Hash索引使用场景比较有限&#xff0c;文章将从Hash索引的底层结构出发&#xff0c;来分析Hash索引的利与弊。 1 hash数据结构 hash数据结构由键、哈希函数及哈希表组成。 键&am…

Redis BitMap(位图)

这里是小咸鱼的技术窝&#xff08;CSDN板块&#xff09;&#xff0c;我又开卷了 之前经手的项目运行了10多年&#xff0c;基于重构&#xff0c;里面有要实现一些诸如签到的需求&#xff0c;以及日历图的展示&#xff0c;可以用将签到信息存到传统的关系型数据库&#xff08;MyS…

如何无损放大图片?教你三种方法轻松提高画质

如何无损放大图片&#xff1f;如果你在网上找到的素材图片分辨率低且模糊不清&#xff0c;又找不到原图的出处&#xff0c;那么如何无损放大图片呢&#xff1f;以下三个技巧可以帮你解决这个问题。 技巧一&#xff1a;使用专业的图像处理工具 水印云一款专业的图像处理工具可以…

Flutter本地化(国际化)之App名称

文章目录 Android国际化IOS国际化 Flutter开发的App&#xff0c;如果名称想要跟随着系统的语言自动改变&#xff0c;则必须同时配置Android和IOS原生。 Android国际化 打开android\app\src\main\res\values 创建strings.xml 在values上右键&#xff0c;选择New>Values Res…