编码器的稀疏注意力块(ProbSparse Self-Attention Block)详细解释
1. 概述
稀疏注意力块是Informer模型的核心组件之一,旨在高效处理长时间序列数据。它通过稀疏自注意力机制(ProbSparse Self-Attention)显著降低计算复杂度,同时保持较高的性能。
2. 主要组件
稀疏注意力块由以下几个主要部分组成:
- 多头稀疏注意力(Multi-head ProbSparse Attention)
- Add, LayerNorm, Dropout
- 位置前馈网络(Position-wise Feed-Forward Network, FFN)
- GELU 激活函数
- 重复机制
3. 多头稀疏注意力(Multi-head ProbSparse Attention)
-
作用:稀疏注意力机制通过挑选重要的注意力头来减少计算量。
-
具体步骤:
- 线性变换:输入特征通过线性变换生成查询(Query)、键(Key)、和值(Value)矩阵。
- 计算注意力分数:通过点积计算查询和键的相似度,并通过Softmax归一化得到注意力权重。
- 选择重要的头:通过概率稀疏性方法,仅计算和保留重要的注意力头。
- 加权求和:用注意力权重加权和值(Value),得到注意力输出。
- 多头注意力:将多个注意力头的输出拼接在一起,并通过线性变换。
-
计算复杂度:相比传统自注意力的 O ( N 2 ) O(N^2) O(N2) 复杂度,稀疏注意力机制通过选择重要注意力头将其降低到 O ( N log N ) O(N \log N) O(NlogN),其中 N N N 是序列长度。
4. Add, LayerNorm, Dropout
- Add:将注意力输出与输入特征相加,形成残差连接(Residual Connection),有助于防止梯度消失和过拟合。
- LayerNorm:进行层归一化,标准化每个输入样本,改善训练稳定性和收敛速度。
- Dropout:随机丢弃一些神经元,防止过拟合,丢弃率为0.1。
5. 位置前馈网络(Position-wise Feed-Forward Network, FFN)
-
结构:
- 线性变换:输入经过线性变换,维度从 d model d_{\text{model}} dmodel 转换到 d inner d_{\text{inner}} dinner,即 2048 2048 2048。
- GELU 激活函数:应用GELU(Gaussian Error Linear Unit)激活函数,引入非线性。
- 线性变换:再通过线性变换将维度从 d inner d_{\text{inner}} dinner 转换回 d model d_{\text{model}} dmodel,即 512 512 512。
-
Add, LayerNorm, Dropout:再一次应用残差连接、层归一化和丢弃操作,进一步增强模型的训练和泛化能力。
6. 重复机制
整个稀疏注意力块重复4次,每次重复都进一步提炼和强化输入特征的表示能力。
具体实例
假设我们有一个时间序列数据,经过前面的Conv1d和嵌入层处理后,得到一个长度为10的序列,每个时间点的特征维度为512。
示例步骤
-
多头稀疏注意力:
- 将输入特征通过线性变换生成查询、键和值矩阵(每个维度为 10 , 16 , 32 10, 16, 32 10,16,32)。
- 计算注意力分数,选择最重要的头(假设选择了8个头)。
- 将这些头的注意力输出拼接并通过线性变换得到最终的注意力输出。
-
Add, LayerNorm, Dropout:
- 将注意力输出与输入特征相加,进行层归一化和丢弃。
-
位置前馈网络:
- 通过两次线性变换和GELU激活,处理后的特征从512维度变到2048维度,再返回到512维度。
- 应用Add, LayerNorm和Dropout操作。
-
重复4次:
- 整个过程重复4次,不断精炼和强化特征表示。
小结
通过稀疏注意力块,Informer模型能够在保持高效的计算性能同时,提取并强化时间序列中的重要模式和依赖关系。这种设计使其特别适合处理长时间序列数据。
标签:编码器,线性变换,Self,Attention,稀疏,Add,维度,512,注意力 From: https://blog.csdn.net/m0_51200050/article/details/139794531