分层自注意力机制 Swin Transformer
时间: 2024-12-30 20:19:16 浏览: 9
### Swin Transformer 分层自注意力机制实现原理
#### 局部窗口划分
为了克服全局自注意力机制带来的高计算复杂度问题,Swin Transformer引入了局部窗口的概念。具体来说,在特征图上定义不重叠的固定大小窗口(通常是7×7或8×8),仅在同一窗口内的token之间执行自注意力操作[^1]。
#### Shifted Window Mechanism
除了基本的窗口化处理外,还设计了一种shift window策略来增强模型的感受野并促进不同位置之间的信息交流。每隔一层transformer block会将整个feature map沿水平和垂直方向各移动一半窗口长度的位置再做一次window partitioning, 形成新的窗口布局[^3]。
#### 自注意力计算过程
对于每一个独立的小窗格内部,则按照标准多头自注意力流程来进行key,value以及query向量间的相似性匹配运算,并据此调整各个patch token的重要性权重分布情况。此过程中涉及到了相对坐标编码方案的应用以捕捉空间关系特性[^2]。
```python
import torch.nn as nn
from timm.models.layers import DropPath, trunc_normal_
class WindowAttention(nn.Module):
"""Window based multi-head self attention (W-MSA) module with relative position bias.
Args:
dim (int): Number of input channels.
num_heads (int): Number of attention heads.
qkv_bias (bool, optional): If True, add a learnable bias to query, key, value. Default: True
attn_drop (float, optional): Dropout ratio of attention weight. Default: 0.0
proj_drop (float, optional): Dropout ratio of output. Default: 0.0
"""
...
```
上述代码片段展示了`WindowAttention`类的部分定义,该组件负责完成单个窗口内部分子区域上的attention score计算任务。通过继承PyTorch内置Module基类实现了可训练参数初始化、前馈传播路径构建等功能。
阅读全文