当前位置:   article > 正文

AAAI最佳论文Informer 解读_informer csdn

informer csdn

之前在网上搜索了很多informer的解读文章,但大部分看到的都是文章翻译甚至机翻,看完之后依然对算法原理一头雾水。

Github论文源码
自己看过代码之后想要写一篇详细一点的解读,码在这里也方便自己以后回来翻看。
另外感谢@Error_hxy大佬的帮助!

由于Informer主要是在Transformer上的改进,这里不再赘述Transformer的细节,可以参见另外的博文:
深入理解Transformer及其源码解读
最火的几个全网络预训练模型梳理整合(从ELMO到BERT到XLNET)

1 简介

那么Informer是做什么的呢?
主要针对长序列预测(Long Sequence Time-series Forecasting, LSTF)

目前Transformre具有较强的捕获长距离依赖的能力,但传统的Transformer依然存在以下不足,因此Informer做出了一些改进。

在这里插入图片描述

上面的三个改进猛地一看可能让人摸不着头脑
没关系
我们接着往下看

1.1 Informer的整体架构

Informer结构图

下面我们对Informer的结构图进行一下简单的解释。

  1. 红色圈:用 ProbSparse Self-attention 代替了 self-attention ,采用一种新的attention机制减少了计算量
  2. 蓝色圈:Self-attention Distilling,减少维度和网络参数量
  3. 黄色圈:Layer stacking replicas 提高了鲁棒性
  4. 绿色圈:Decoder 获得长序列输入,目标部分用0进行padding
  5. 紫色圈:Generative style预测目标部分,一步生成预测,而不是动态解码

如果看到这里还不太知道Informer是在干啥,那么我们从预处理开始一点一点看起。

2 预处理 Preliminary 与样本生成

模型的输入和输出
上面的 X t , Y t X^t,Y^t Xt,Yt就是模型的输入和输出。
我们以代码中给出的某一个数据为例:

数据介绍:ETDataset(Electricity Transformer Dataset)电力变压器的负荷、油温数据。
ETDataset (github)
(小时维度的数据) 数据规格:17420 * 7
Batch_size:32

下面这张图是ETDataset的一个示例
这里并不是小时维度,而是15min的时间序列数据
变压器数据

那么输入模型的样本大概长什么样子?

2.1 Encoder输入

X e n c : 32 × 96 × 7 X_{enc}:32\times96\times7 Xenc:32×96×7
这里的32是批次大小,一个批次有32个样本,一个样本代表96个时间点的数据,如上图
date=2016-07-01 00:00 是一个时间点0的数据
date=2016-07-01 01:00 是时间点1的数据。

那么批次中的样本1:时间点0到时间点95的96个维度为7的数据
批次中的样本2:时间点1到时间点96的96个维度为7的数据
批次中的样本3:时间点2到时间点97的96个维度为7的数据
……
直到取够32个样本,形成一个批次内的所有样本。

X m a r k : 32 × 96 × 4 X_{mark}:32\times96\times4 Xmark:32×96×4
这里的4代表时间戳,例如我们用小时维度的数据,那么4分别代表
年、月、日、小时,
第一个时间点对应的时间戳就是[2016, 07, 01, 00],
第二个时间点对应的时间戳就是[2016, 07, 01, 01]
与上面的 X e n c X_{enc} Xenc对应得到所有的样本对应的时间戳。

2.2 Decoder输入

X e n c : 32 × 72 × 7 X_{enc}:32\times72\times7 Xenc:32×72×7
X m a r k : 32 × 72 × 4 X_{mark}:32\times72\times4 Xmark:32×72×4

decoder的输入与encoder唯一不同的就是,每个样本对应时间序列的时间点数量并不是96,而是72。具体在进行截取样本时,从encoder输入的后半段开始取。

即:
encoder的第一个样本:时间点0到时间点95的96条维度为7的数据

那与之对应decoder的:时间点47到时间点95的48条维度为7的数据 + 时间点 95到时间点119的24个时间点的7维数据。

则最终48+24是72维度的数据。画成图大概这个亚子:
encoder和decoder的样本形状
上面是encoder的输入
下面是decoder的输入
均只画出时间点数量的那个维度

3 Embedding

输入:
x_enc/y_dec
:32 * 96/72 * 7
x_mark /y_mark:
32 * 96/72 *4

输出:
32 * 96/72 * 512

embedding的目的: 嵌入投影,在这里相当于将维度为7的一个时间点的数据投影成维度为512的数据。
整体公式:
在这里插入图片描述
等号右边显然可以分成三个部分:

1.输入:对应公式中的 α u i t \alpha u_i^t αuit
在这里插入图片描述

具体操作为通过conv1D(width=3,stride=1) 映射为D维度(512)
(conv1D是一维卷积)

2.Position Stamp: 对应公式中的 P E ( L x × ( t − 1 ) + i ) PE_{(L_x\times(t-1)+i)} PE(Lx×(t1)+i)
与Transformer的postition embedding 一模一样
在这里插入图片描述
3.Global Time Stamp:对应公式中的 SE
在这里插入图片描述
具体操作为全连接层。

长序列预测问题中,需要获取全局信息,比如分层次的时间戳(week, month year),不可知的时间戳(holidays, events).
这里最细的粒度可以自行选择。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/86332
推荐阅读
相关标签