Position Embedding 有哪些方式?
1. 什么是Position Embedding?
Position Embedding(位置编码)是用于为序列数据(如文本、时间序列)中的元素添加位置信息的机制。由于Transformer等模型本身不具备处理序列顺序的能力,需要通过显式的位置编码来引入顺序信息。
关键结论:没有位置编码的Transformer模型会将"猫追狗"和"狗追猫"视为完全相同的输入序列。
2. 主要Position Embedding方式
2.1 绝对位置编码 (Absolute Position Embedding)
2.1.1 可学习的位置编码
- 随机初始化一个位置矩阵,随模型训练更新
- 常用于原始Transformer和BERT
import torch
import torch.nn as nnclass LearnablePositionEmbedding(nn.Module):def __init__(self, max_len, d_model):super().__init__()self.pe = nn.Parameter(torch.randn(max_len, d_model)) # 可学习参数def forward(self, x):# x: [batch_size, seq_len, d_model]return x + self.pe[:x.size(1), :] # 添加前seq_len个位置编码
2.1.2 正弦位置编码 (Sinusoidal)
- Transformer论文提出的确定性函数
- 不同频率的正弦/余弦函数组合 </