Informer_生成式

摘要:

长序列时间序列的预测

Informer_深度学习_02优点:

  • Informer_python_03自关注机制,在时间复杂度和内存使用方面达到Informer_生成式_04,在序列依赖对齐方面性能较好。
  • 自注意蒸馏通过将级联层输入减半来突出主导注意力,并有效地处理极长的输入序列。
  • 以一次向前操作的方式预测长序列时间序列,提高了长序列预测的推理速度。

1.简介:

Informer_深度学习_05求解Informer_生成式_06缺点:

  • 自注意力的二次计算。标准的点积Informer_生成式_07操作,会导致每一层的时间复杂度和内存使用都达到Informer_时间序列_08的级别,其中Informer_python_09是输入序列的长度。
  • 长输入的堆叠层的内存瓶颈。Informer_python_10编码器/解码器层的堆叠使得总内存使用量为Informer_生成式_11,这限制了模型在接收长序列输入时的可扩展性。
  • 预测长期产出的速度下降。原始Informer_python_12的动态解码使得逐步推理与基于Informer_时间序列_13的模型一样慢,每个步骤都必须等待前一个步骤完成才能进行。

本文主要内容:

  • 提出了Informer_生成式来成功地增强Informer_生成式_15问题的预测能力,这验证了类似Informer_python_12模型的潜在价值,以捕捉长序列时间序列输出和输入之间的单个长期依赖关系。
  • 提出了Informer_深度学习_17自注意机制来有效地取代规范的自注意机制,实现了Informer_生成式_04的时间复杂度和Informer_生成式_04的内存使用。
  • 提出了自注意力蒸馏操作特权支配Informer_时间序列_20堆叠层的注意力分数,并大幅降低总空间复杂度为Informer_生成式_21
  • 提出生成式解码器Informer_生成式_22,只需要向前一步就可以获得长序列输出,同时避免累积错误传播

Informer_时间复杂度_23

Informer_生成式_24模型的整体图。左边的部分是Informer_时间序列_25,它接收大量的长序列输入(绿色系列)。我们已经用提出的Informer_深度学习_26自注意取代了规范的自注意。蓝色梯形是提取支配性注意的自注意蒸馏操作,急剧减小网络规模。层堆叠副本提高了鲁棒性。对于右侧部分,解码器接收长序列输入,将目标元素填充为零,测量特征图的加权注意力组成,并以生成式的方式立即预测输出元素(橙色系列)。

2.预备

定义:在具有固定大小窗口的滚动预测设置下,在Informer_python_27时刻的输入为Informer_python_28,输出为Informer_时间序列_29

编码器-解码器架构Informer_时间序列_30被设计用于将输入表示 Informer_生成式_31 “编码”为隐藏状态表示 Informer_深度学习_32,并从 Informer_时间复杂度_33 中“解码”出输出表示 Informer_深度学习_34。推理过程涉及一个名为“动态解码”Informer_python_35的逐步过程,其中解码器根据前一个状态 Informer_python_36和第 Informer_python_37 步的其他必要输出,计算新的隐藏状态 Informer_时间复杂度_38,然后预测第 Informer_python_39 个序列 Informer_时间复杂度_40

在这个架构中,编码器负责处理输入数据(例如,一个句子、一段文本、一个图像等),并将其转换为一个或多个隐藏状态向量。这些隐藏状态向量捕获了输入数据的重要信息,这些信息随后被解码器用来生成输出序列。

解码器则负责利用这些隐藏状态向量来生成输出数据。在生成输出时,解码器通常会采用一种序列到序列Informer_python_41的方法,即一个步骤接着一个步骤地生成输出序列。在每个步骤中,解码器都会考虑前一个步骤的输出和隐藏状态,来预测下一个输出。

Informer_时间序列_42


Informer的输入表示,包括标量投影,本地时间戳和全局时间戳嵌入三个部分.jpg

假设我们有Informer_python_27个序列输入Informer_生成式_31Informer_时间复杂度_45种类型的全局时间戳,输入表示后的特征维度为Informer_时间序列_46。我们首先通过使用固定位置嵌入来保持低阶上下文,即Informer_python_47,
Informer_时间序列_48,,其中Informer_时间复杂度_49.。每个全局时间戳由一个可学习的戳嵌入Informer_时间序列_50使用,词汇表大小有限(最多Informer_python_51个,即以分钟为最细粒度)。也就是说,自注意力的相似度计算可以访问全局上下文,并且在长输入上的计算开销是可以承受的。为了对齐维度,我们使用一维卷积滤波器(核宽度=Informer_时间序列_52,步长=Informer_深度学习_53)将标量上下文Informer_时间序列_54投影Informer_时间序列_46-维向量Informer_深度学习_56。因此,我们有了如下的f反馈向量:Informer_时间复杂度_57,其中Informer_生成式_58,并且Informer_时间复杂度_59是一个用于平衡标量投影与局部/全局嵌入之间的幅度的因子。如果序列输入已经被标准化了,我们推荐Informer_python_60。这里的PE代表位置嵌入Informer_时间复杂度_61,用于捕捉序列中每个位置的信息;而Informer_生成式_62是学习的时间戳嵌入 ,Informer_时间复杂度_59是一个超参数,用于平衡不同的嵌入或投影对最终输入向量的贡献。

3.方法论

高效自我注意机制

自注意力机制接收一个元组输入Informer_生成式_64,并通过缩放点积运算Informer_深度学习_65进行运算,表示为Informer_时间复杂度_66,其中 Informer_python_67 是输入维度。为了进一步讨论自注意力机制,令 Informer_python_68, Informer_时间序列_69, Informer_时间复杂度_70 分别表示 Informer_时间复杂度_71, Informer_生成式_72, Informer_时间复杂度_73 中的第 Informer_生成式_74 行。根据 Informer_python_75 的公式,第 Informer_生成式_74 个查询的注意力被定义为概率形式的核平滑器Informer_时间复杂度_77: 则:
Informer_深度学习_78
其中, Informer_时间序列_79Informer_生成式_80 是一个核函数。这里我们使用不对称的指数核函数 Informer_python_81。自注意力机制通过计算概率$ (p(k_j|q_i)) $来结合值并获取输出。这需要二次时间复杂度的点积计算和 Informer_时间序列_82 的内存使用,这是提高预测能力的主要缺点。

从方程Informer_时间序列_83中,第 Informer_python_84个查询对所有键的注意力被定义为一个概率Informer_深度学习_85,而输出是其与值Informer_时间序列_86的组合。主要的点积对会鼓励对应的查询注意力概率分布远离均匀分布。如果Informer_深度学习_85接近均匀分布Informer_深度学习_88,那么自注意力就变成了值 Informer_时间复杂度_89的简单和,并且对输入是冗余的。自然地,分布 Informer_python_90Informer_python_91之间的“相似性”可以用来区分“重要”的查询。我们通过Informer_python_92散度(Informer_生成式_93散度)来测量“相似性”,Informer_生成式_93散度定义为:
Informer_时间序列_95
我们定义第 Informer_python_84 个查询的稀疏度测量为:
Informer_深度学习_97

第一项是所有键上 Informer_时间序列_98Informer_生成式_99,第二项是这些键的算术平均值。如果第Informer_python_84个查询获得了较大的 Informer_深度学习_101值,那么它的注意力概率Informer_python_90 就更加“多样化”,并且有很大可能性包含长尾自注意力分布中头部字段的主要点积对。这里,“多样化”意味着注意力不仅仅集中在少数几个键上,而是相对均匀地分布在多个键上。同时,由于Informer_深度学习_101 值较大,该查询的注意力分布更有可能包含那些具有较大点积值的键-查询对,这些对在长尾分布中占据主导地位。

基于所提出的度量标准,我们通过允许每个键仅关注于占主导地位的查询u,从而实现了Informer_深度学习_26自注意力机制。
Informer_时间复杂度_105
其中,Informer_python_106是一个与Informer_python_91 相同大小的稀疏矩阵,它仅包含根据稀疏性度量Informer_时间序列_108 选择的前Informer_python_109 个查询。通过一个常数采样因子 Informer_时间复杂度_110 来控制,我们设定Informer_python_111,这使得 Informer_深度学习_26 自注意力机制在每次查询-键查找时只需要计算 Informer_生成式_113 个点积,并且层的内存使用保持在 Informer_深度学习_114

简单来说,Informer_深度学习_26 自注意力机制通过稀疏化手段,仅对稀疏矩阵Informer_生成式_116中的前 Informer_python_109个查询(根据某种稀疏性度量)进行计算,从而降低了计算复杂度和内存使用。这里的Informer_python_109 是基于查询数量Informer_python_119的对数和一个常数采样因子 Informer_时间复杂度_110 来确定的。

然而,为了计算度量 Informer_深度学习_101而遍历所有查询需要计算每对点积,即时间复杂度为平方级别的Informer_时间序列_82,并且Informer_python_123操作存在潜在的数值稳定性问题。鉴于这一点,我们提出了一个查询稀疏性度量的近似方法。

引理一:对于每个查询 Informer_时间序列_124 和键集中的 Informer_python_125 在集合 Informer_生成式_72 中,我们有边界 Informer_生成式_127 。当 Informer_python_128

根据引理一,我们提出了最大均值测量为:
Informer_深度学习_129
命题一:假设 Informer_深度学习_130,我们让 Informer_python_131 表示集合 Informer_生成式_132,那么对于 Informer_生成式_133,存在 Informer_python_134 使得:在区间 Informer_时间复杂度_135 内,如果 Informer_时间序列_136 并且 Informer_深度学习_137,那么 Informer_时间序列_138

边界放宽下的前 Informer_python_109 个的顺序在命题Informer_深度学习_53(请参阅附录Informer_深度学习_141中的证明)中得以保持。在长尾分布下,我们仅需要随机抽取 Informer_时间复杂度_142个点积对来计算Informer_深度学习_143,即将其余的点积对填充为零。我们从中选择稀疏的前Informer_python_109个作为Informer_生成式_116。在Informer_深度学习_101 中的最大值操作对零值不太敏感,并且数值上是稳定的。在实践中,查询和键的输入长度通常是相等的,即 Informer_时间序列_147,这样Informer_深度学习_26自注意力的总时间复杂度和空间复杂度都是 Informer_时间复杂度_149

Informer_python_150允许在内存使用限制下处理更长的顺序输入

Informer_生成式_151


Informer编码器的架构。 (1)每个水平堆叠代表图2中的编码器副本中的一个独立副本; (2)上面的堆叠是主要堆叠,它接收整个输入序列,而第二个堆叠则接收输入的一半切片; (3)红色层是自注意力机制的点积矩阵,通过在每一层应用自注意力蒸馏技术,这些矩阵的数量逐渐减少; (4)将两个堆叠的特征图合并作为编码器的输出。

该编码器被设计用于提取长序列输入中的稳健长程依赖关系。在输入表示之后,第Informer_python_27个序列输入Informer_生成式_31被重塑为一个大小为Informer_时间复杂度_154的矩阵Informer_深度学习_155

自注意力蒸馏Informer_深度学习_156作为Informer_深度学习_26自注意力机制的自然结果,编码器的特征图包含了冗余的值Informer_时间复杂度_73组合。我们利用蒸馏操作来突出具有主导特征的优势组合,并在下一层生成一个集中的自注意力特征图。这极大地缩减了输入的时间维度,如图中注意力模块的Informer_深度学习_159个头权重矩阵(重叠的红色方块)所示。受到空洞卷积Informer_时间复杂度_160的启发,我们的“蒸馏”过程从第Informer_python_161层向前传递到第Informer_深度学习_162层,作为
Informer_时间序列_163

其中,该表达式Informer_时间复杂度_164包含多头ProbSparse自注意力机制以及注意力块中的关键操作,其中Informer_python_165在时间维度上执行一维卷积滤波器Informer_python_166核宽度Informer_时间复杂度_167,并使用Informer_时间序列_168作为激活函数Informer_时间序列_169。我们在堆叠一层后添加一个步长为Informer_生成式_170的最大池化层,将Informer_生成式_31下采样到其一半的切片,这样可以将整个内存使用量减少到Informer_生成式_172,其中Informer_时间序列_173是一个很小的数。为了增强蒸馏操作的鲁棒性,我们构建了主堆栈的减半副本,并通过每次丢弃一层来逐渐减少自注意力蒸馏层的数量,形成一个如图所示的金字塔结构,从而使其输出维度对齐。因此,我们将所有堆栈的输出连接起来,得到编码器的最终隐藏表示。

Informer_深度学习_174通过一个前向过程生成长序列输出

我们使用的标准解码器结构Informer_深度学习_175,它由两层相同的多头注意力层堆叠而成。然而,为了缓解长预测中速度下降的问题,我们采用了生成式推理。我们将以下向量作为输入提供给解码器:
Informer_生成式_176
其中,Informer_生成式_177作为起始令牌。Informer_时间复杂度_178是一个占位符,用于目标序列(将其标量值设为Informer_深度学习_179)。在Informer_深度学习_26自注意力计算中,应用了掩码多头注意力Informer_时间序列_181,通过将掩码的点积设置为Informer_时间序列_182来阻止每个位置关注到后续位置,从而避免了自回归Informer_时间序列_183性质。一个全连接层获取最终输出,其输出大小 Informer_时间序列_184 取决于我们是否执行单变量预测或多变量预测。

生成式推断中的起始令牌是自然语言处理中“动态解码”的一种高效技术,我们将其扩展为生成式的方式。我们并没有选择特定的标志作为令牌,而是在输入序列中采样一个长度为Informer_深度学习_185的序列,该序列是输出序列之前的一个较早片段。以预测Informer_深度学习_186个点为例(即Informer_生成式_187天的温度预测),我们将目标序列之前的已知Informer_时间复杂度_188天作为“起始令牌”,并将这些信息与生成式推断解码器一起输入,表示为Informer_时间序列_189。其中,Informer_python_190包含目标序列的时间戳,即目标周的背景信息。值得注意的是,我们提出的解码器通过一次前向过程即可预测所有输出,避免了传统编码器-解码器架构中耗时的“动态解码”过程。在计算效率部分,我们给出了详细的性能比较。

我们选择均方误差Informer_时间序列_191作为预测值与目标序列之间的损失函数,并将损失从解码器的输出反向传播至整个模型。

4.实验