Transformer位置表示(Position Encoding)

本文探讨了在深度学习模型中,特别是在CNN、RNN和Self-Attention中,位置表示的重要性。绝对位置表示如BERT的使用存在局限性,而相对位置编码(RoPE)如进制编码提供了更好的扩展性和表示能力。文中还介绍了如何通过线性内插和NTK-aware方法来增强位置表示的灵活性和性能.

为什么需要位置表示

对比CNN、RNN和Self-Attention:

CNN处理相邻窗口的内容;RNN天然是序列操作,考虑了位置先后关系;Self-Attention的计算时是无序的,所以需要位置表示来知道Token之间的位置信息。

绝对位置表示

典型如:Bert/Roberta/GPT2的位置表示,将位置如 0~512 像词一样做embedding,需要训练position向量矩阵

不同模型训练出来的位置表示之间的相似性,对角线是1

优势:简单

劣势:无法处理超出长度的句子,必须截断

相对位置表示

位置n的旋转位置编码(RoPE),本质上就是数字n的β进制编码!- 苏剑林

为什么需要进制编码?我们先看进制编码的格式:

Transformer模型中,位置编码(Positional Encoding)是用于引入序列中词的位置信息的一种机制。由于Transformer采用的是并行计算方式,不像RNN那样自然保留顺序信息,因此需要通过位置编码显式地将位置信息注入输入中[^3]。 ### Positional Encoding的公式 Transformer论文《Attention Is All You Need》中提出了一种基于正弦和余弦函数的**Sinusoidal Positional Encoding**方法,其核心思想是使用不同频率的正弦和余弦函数来表示不同的位置。具体公式如下: 对于位置 $ \text{pos} $ 和维度 $ i $,定义为: $$ PE_{(pos, 2i)} = \sin\left(\frac{\text{pos}}{10000^{2i/d_{\text{model}}}}\right) $$ $$ PE_{(pos, 2i+1)} = \cos\left(\frac{\text{pos}}{10000^{2i/d_{\text{model}}}}\right) $$ 其中: - $ \text{pos} $ 是词在序列中的位置; - $ i $ 是向量的维度索引(从0到 $ d_{\text{model}} - 1 $); - $ d_{\text{model}} $ 是词嵌入向量的维度; - 偶数维度使用正弦函数,奇数维度使用余弦函数。 这种设计使得每个位置对应一个唯一的波形,且具有周期性特征,可以很好地捕捉相对位置关系[^2]。 ### 公式的实现代码示例 以下是一个用PyTorch实现的Positional Encoding函数: ```python import torch import math def positional_encoding(max_len, d_model): pe = torch.zeros(max_len, d_model) position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1) div_term = torch.exp(torch.arange(0, d_model, 2).float() * (-math.log(10000.0) / d_model)) pe[:, 0::2] = torch.sin(position * div_term) pe[:, 1::2] = torch.cos(position * div_term) return pe.unsqueeze(0) # 增加batch维度 ``` 该函数生成了一个形状为 `(1, max_len, d_model)` 的位置编码矩阵,可以直接与词嵌入相加作为模型输入。 ### 为什么使用三角函数? 使用正余弦函数的原因包括: - **周期性**:可以表达词之间的相对位置关系; - **唯一性**:不同频率的组合确保了不同位置编码的唯一性; - **可扩展性**:即使在训练过程中未见过的长度也能合理外推。 ### 总结 Positional EncodingTransformer中扮演着至关重要的角色,它弥补了自注意力机制无法感知位置信息的缺陷。通过上述公式的应用,模型能够有效地区分不同位置的词,并利用它们之间的相对位置关系进行建模。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值