首页
/ Informer2020模型架构深度解析:基于概率稀疏自注意力的时间序列预测

Informer2020模型架构深度解析:基于概率稀疏自注意力的时间序列预测

2025-07-07 07:26:51作者:仰钰奇

模型概述

Informer2020是一个针对长序列时间序列预测(LSTF)问题设计的深度学习模型,其核心创新点在于提出了ProbSparse自注意力机制,有效解决了传统Transformer模型在处理长序列时面临的计算复杂度高和内存占用大的问题。该模型在多个时间序列预测任务中表现出色,特别是在电力负荷预测、气象预测等领域。

核心组件解析

1. 数据嵌入层(DataEmbedding)

数据嵌入层负责将原始输入数据转换为模型可处理的向量表示,主要包含以下功能:

  • 处理时间序列的数值特征
  • 融入时间戳信息(如小时、日、月等周期性特征)
  • 支持固定位置编码和可学习位置编码两种方式
self.enc_embedding = DataEmbedding(enc_in, d_model, embed, freq, dropout)
self.dec_embedding = DataEmbedding(dec_in, d_model, embed, freq, dropout)

2. 注意力机制

Informer提供了两种注意力机制选择:

  • ProbAttention(概率稀疏注意力):模型的核心创新,通过采样策略减少注意力计算量
  • FullAttention(完整注意力):传统的Transformer注意力机制
Attn = ProbAttention if attn=='prob' else FullAttention

3. 编码器结构

编码器采用多层堆叠结构,每层包含:

  • 注意力层(ProbSparse或FullAttention)
  • 前馈神经网络
  • 蒸馏机制(减少序列长度)
  • 层归一化
self.encoder = Encoder(
    [
        EncoderLayer(
            AttentionLayer(Attn(...), 
            d_model,
            d_ff,
            dropout=dropout,
            activation=activation
        ) for l in range(e_layers)
    ],
    [...],
    norm_layer=torch.nn.LayerNorm(d_model)
)

4. 解码器结构

解码器同样采用多层结构,但包含两种注意力:

  • 自注意力层(带掩码)
  • 编码器-解码器注意力层
  • 前馈神经网络
self.decoder = Decoder(
    [
        DecoderLayer(
            AttentionLayer(Attn(...)),  # 自注意力
            AttentionLayer(FullAttention(...)),  # 编码器-解码器注意力
            d_model,
            d_ff,
            dropout=dropout,
            activation=activation,
        )
        for l in range(d_layers)
    ],
    norm_layer=torch.nn.LayerNorm(d_model)
)

5. 输出投影层

将解码器输出的高维向量映射到预测目标的维度:

self.projection = nn.Linear(d_model, c_out, bias=True)

Informer与InformerStack的区别

InformerStack是Informer的变体,主要区别在于编码器部分采用了堆叠结构:

  1. 多尺度编码器堆叠:不同层数的编码器处理不同长度的输入序列
  2. 渐进式蒸馏:通过ConvLayer逐步减少序列长度
  3. 灵活配置:可以自定义每层编码器的深度
encoders = [
    Encoder([...]) for el in e_layers]
self.encoder = EncoderStack(encoders, inp_lens)

前向传播流程

  1. 编码器部分:

    • 输入数据嵌入
    • 通过多层编码器处理
    • 返回编码结果和注意力权重(可选)
  2. 解码器部分:

    • 目标序列嵌入
    • 结合编码器输出进行解码
    • 通过投影层输出预测结果
def forward(...):
    enc_out = self.enc_embedding(x_enc, x_mark_enc)
    enc_out, attns = self.encoder(enc_out, ...)
    
    dec_out = self.dec_embedding(x_dec, x_mark_dec)
    dec_out = self.decoder(dec_out, enc_out, ...)
    dec_out = self.projection(dec_out)
    
    return dec_out[:,-self.pred_len:,:]  # 返回预测部分

关键参数说明

  • enc_in/dec_in: 编码器/解码器输入维度
  • c_out: 输出维度
  • seq_len: 输入序列长度
  • label_len: 解码器输入中已知序列长度
  • out_len: 预测序列长度
  • factor: ProbSparse注意力因子
  • d_model: 模型维度
  • n_heads: 注意力头数
  • e_layers/d_layers: 编码器/解码器层数
  • attn: 注意力类型('prob'或'full')

模型特点与优势

  1. 高效的长序列处理能力:ProbSparse注意力将复杂度从O(L²)降低到O(L log L)
  2. 蒸馏机制:通过卷积操作逐步减少序列长度,保留重要信息
  3. 多尺度特征提取:InformerStack版本支持不同层次的序列处理
  4. 灵活的时间特征嵌入:支持多种频率的时间编码

适用场景

Informer2020特别适合以下场景:

  • 需要长期预测的时间序列问题(如电力负荷预测)
  • 高频率长序列数据(如传感器数据)
  • 多变量时间序列预测
  • 资源受限环境下的长序列处理

通过这种创新的架构设计,Informer2020在保持预测精度的同时,显著提升了长序列处理的效率,为时间序列预测领域提供了新的解决方案。