transformer位置
时间: 2025-01-03 09:28:56 浏览: 7
### Transformer 架构中的位置编码
#### 绝对位置编码
在Transformer架构中,为了使模型能够理解序列数据中各个token之间的顺序关系,引入了位置编码机制。由于自注意力机制本身不具备捕捉序列顺序的能力,因此需要额外加入位置信息来弥补这一缺陷[^3]。
对于绝对位置编码而言,在原始的Transformer论文里采用了一种基于正弦和余弦函数的方法构建固定的相对位置表示。具体来说,该方法利用不同频率的周期信号组合而成的位置向量赋予每个词其所在的位置特征:
```python
import math
import torch
def get_position_angle_vec(position, dim):
return [position / np.power(10000, 2 * (hid_j // 2) / dim) for hid_j in range(dim)]
def generate_absolute_pos_encoding(max_seq_length, d_model):
positional_encoding = np.array([
get_position_angle_vec(pos, d_model) for pos in range(max_seq_length)
])
# Apply sine to even indices and cosine to odd indices of the position encoding vector.
positional_encoding[:, 0::2] = np.sin(positional_encoding[:, 0::2]) # dimension 2i
positional_encoding[:, 1::2] = np.cos(positional_encoding[:, 1::2]) # dimension 2i+1
pe_tensor = torch.FloatTensor([positional_encoding])
return pe_tensor
```
这种设计使得即使当句子长度超出训练期间遇到的最大长度时,仍能合理地推测未知位置上的编码值[^1]。
#### 相对位置编码及其优势
不同于上述静态分配方式,相对位置编码则关注于两个单词之间距离而非确切坐标。这种方式允许模型更好地处理变长输入并具备更强泛化能力——即所谓的“外推性”。例如DeBERTa提出的解耦注意机制就采用了动态计算查询键间相对位移来进行增强;RoFormer进一步改进提出了旋转式位置嵌入方案,这些都属于相对位置编码范畴内的重要进展[^2]。
综上所述,无论是哪种形式的位置编码都是为了让神经网络学会识别文本内在结构规律而精心设计的关键组件之一。
阅读全文