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的变体,主要区别在于编码器部分采用了堆叠结构:
- 多尺度编码器堆叠:不同层数的编码器处理不同长度的输入序列
- 渐进式蒸馏:通过ConvLayer逐步减少序列长度
- 灵活配置:可以自定义每层编码器的深度
encoders = [
Encoder([...]) for el in e_layers]
self.encoder = EncoderStack(encoders, inp_lens)
前向传播流程
-
编码器部分:
- 输入数据嵌入
- 通过多层编码器处理
- 返回编码结果和注意力权重(可选)
-
解码器部分:
- 目标序列嵌入
- 结合编码器输出进行解码
- 通过投影层输出预测结果
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')
模型特点与优势
- 高效的长序列处理能力:ProbSparse注意力将复杂度从O(L²)降低到O(L log L)
- 蒸馏机制:通过卷积操作逐步减少序列长度,保留重要信息
- 多尺度特征提取:InformerStack版本支持不同层次的序列处理
- 灵活的时间特征嵌入:支持多种频率的时间编码
适用场景
Informer2020特别适合以下场景:
- 需要长期预测的时间序列问题(如电力负荷预测)
- 高频率长序列数据(如传感器数据)
- 多变量时间序列预测
- 资源受限环境下的长序列处理
通过这种创新的架构设计,Informer2020在保持预测精度的同时,显著提升了长序列处理的效率,为时间序列预测领域提供了新的解决方案。