相对位置编码(Relative Positional Encoding)

相对位置编码(Relative Positional Encoding)

相对位置编码主要是为了在自注意力机制中引入相对位置的信息,而不是绝对位置。这种方法在处理长序列和序列中元素的相对关系时表现得更好。

原理

在相对位置编码中,注意力权重不仅依赖于内容向量(Query和Key),还依赖于元素之间的相对位置。相对位置编码可以通过计算一个位置相关的偏置矩阵,在注意力计算中作为额外的加权因子,而不需要与输入序列相加。

假设有一个输入序列 X = [ x 1 , x 2 , . . . , x n ] X = [x_1, x_2, ..., x_n] X=[x1,x2,...,xn],其中 n n n 是序列的长度。

公式

传统的自注意力机制公式为:
Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dk QKT)V

在相对位置编码中,公式会变为:
a i j = ( Q i W Q ) ⋅ ( K j W K ) T + r i j d k a_{ij} = \frac{(Q_i W^Q) \cdot (K_j W^K)^T + r_{ij}}{\sqrt{d_k}} aij=dk (QiWQ)(KjWK)T+rij
其中, r i j r_{ij} rij 是一个表示位置关系的偏置项。

举例

假设有一个简单的输入序列 X = [ x 1 , x 2 , x 3 ] X = [x_1, x_2, x_3] X=[x1,x2,x3],每个元素的维度是 d k = 2 d_k = 2 dk=2,总共有 3 个元素。我们使用相对位置编码来处理这个序列。

1. 初始化 Query 和 Key

假设 Query 和 Key 矩阵如下:
Q = [ 1 0 0 1 1 1 ] , K = [ 0 1 1 0 1 1 ] Q = \begin{bmatrix} 1 & 0 \\ 0 & 1 \\ 1 & 1 \end{bmatrix}, \quad K = \begin{bmatrix} 0 & 1 \\ 1 & 0 \\ 1 & 1 \end{bmatrix} Q= 101011 ,K= 011101

2. 计算相对位置编码矩阵

假设我们定义一个简单的相对位置编码矩阵 R R R,其元素 r i j r_{ij} rij 表示位置 i i i 和位置 j j j 之间的相对位置信息:
R = [ 0 1 2 − 1 0 1 − 2 − 1 0 ] R = \begin{bmatrix} 0 & 1 & 2 \\ -1 & 0 & 1 \\ -2 & -1 & 0 \end{bmatrix} R= 012101210

3. 计算注意力得分

对于每个元素 i , j i, j i,j,计算注意力得分 a i j a_{ij} aij
a i j = ( Q i ⋅ K j T ) + r i j d k a_{ij} = \frac{(Q_i \cdot K_j^T) + r_{ij}}{\sqrt{d_k}} aij=dk (QiKjT)+rij

例如,计算 a 11 a_{11} a11 a 12 a_{12} a12,和 a 13 a_{13} a13
a 11 = ( 1 ⋅ 0 + 0 ⋅ 1 ) + 0 2 = 0 2 = 0 a_{11} = \frac{(1 \cdot 0 + 0 \cdot 1) + 0}{\sqrt{2}} = \frac{0}{\sqrt{2}} = 0 a11=2 (10+01)+0=2 0=0
a 12 = ( 1 ⋅ 1 + 0 ⋅ 0 ) + 1 2 = 1 + 1 2 = 2 2 = 2 a_{12} = \frac{(1 \cdot 1 + 0 \cdot 0) + 1}{\sqrt{2}} = \frac{1 + 1}{\sqrt{2}} = \frac{2}{\sqrt{2}} = \sqrt{2} a12=2 (11+00)+1=2 1+1=2 2=2
a 13 = ( 1 ⋅ 1 + 0 ⋅ 1 ) + 2 2 = 1 + 2 2 = 3 2 = 3 2 2 a_{13} = \frac{(1 \cdot 1 + 0 \cdot 1) + 2}{\sqrt{2}} = \frac{1 + 2}{\sqrt{2}} = \frac{3}{\sqrt{2}} = \frac{3\sqrt{2}}{2} a13=2 (11+01)+2=2 1+2=2 3=232

对所有 i , j i, j i,j 计算类似的得分矩阵 A A A

A = [ 0 2 3 2 2 1 2 1 2 3 2 2 2 3 2 0 ] A = \begin{bmatrix} 0 & \sqrt{2} & \frac{3\sqrt{2}}{2} \\ \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} & \frac{3}{\sqrt{2}} \\ \frac{2}{\sqrt{2}} & \frac{3}{\sqrt{2}} & 0 \end{bmatrix} A= 02 12 22 2 12 3232 2 30

4. 计算注意力权重

使用 softmax 函数将得分矩阵 A A A 转换为权重矩阵:
Attention i j = e a i j ∑ k e a i k \text{Attention}_{ij} = \frac{e^{a_{ij}}}{\sum_{k} e^{a_{ik}}} Attentionij=keaikeaij

总结

相对位置编码在注意力机制中引入了元素之间的相对位置信息,而不是依赖于绝对位置。这种方法在处理长序列和捕捉序列中的相对关系时表现得更好。通过这个例子,可以看到相对位置编码如何影响注意力得分的计算,从而在注意力机制中更好地捕捉位置关系。

涉及相对位置编码(Relative Positional Encoding)的时间序列处理相关论文主要集中在改进Transformer模型及其在自然语言处理和时间序列预测中的应用。以下是几篇有代表性的论文:

1. “Attention is All You Need”

作者: Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser, Illia Polosukhin

摘要: 这是Transformer的开创性论文,引入了自注意力机制和绝对位置编码,但后来的研究在此基础上发展了相对位置编码。

链接: Attention is All You Need

2. “Self-Attention with Relative Position Representations”

作者: Peter Shaw, Jakob Uszkoreit, Ashish Vaswani

摘要: 这篇论文提出了相对位置编码的方法,用于改进自注意力机制,增强模型对序列中元素相对位置的感知。

链接: Self-Attention with Relative Position Representations

3. “Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context”

作者: Zihang Dai, Zhilin Yang, Yiming Yang, Jaime Carbonell, Quoc V. Le, Ruslan Salakhutdinov

摘要: 这篇论文介绍了Transformer-XL模型,解决了长序列建模中的问题,并引入了相对位置编码来提高对长距离依赖的捕捉能力。

链接: Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context

4. “Relative Position Encoding for Transformers with Linear Complexity”

作者: Aakanksha Chowdhery, Imran Zubair, Ming-Wei Chang, Tfianna Pak

摘要: 这篇论文讨论了如何在保持Transformer模型线性复杂度的同时引入相对位置编码。

链接: Relative Position Encoding for Transformers with Linear Complexity

5. “Reformer: The Efficient Transformer”

作者: Nikita Kitaev, Łukasz Kaiser, Anselm Levskaya

摘要: 这篇论文介绍了Reformer模型,它使用了局部敏感哈希和可逆残差层来提高Transformer的效率,并结合相对位置编码。

链接: Reformer: The Efficient Transformer

6. “Longformer: The Long-Document Transformer”

作者: Iz Beltagy, Matthew E. Peters, Arman Cohan

摘要: Longformer是为处理长文档而设计的Transformer变体,使用相对位置编码来改进长文档处理性能。

链接: Longformer: The Long-Document Transformer

这些论文涵盖了相对位置编码在时间序列和长序列处理中的各种应用和改进方法,对于理解相对位置编码在深度学习中的重要性和具体实现具有重要参考价值。

  • 19
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 Python 代码,用于实现 Transformer 中的 Positional Encoding: ```python import torch import math class PositionalEncoding(torch.nn.Module): def __init__(self, d_model, max_seq_len=200): super().__init__() self.d_model = d_model self.max_seq_len = max_seq_len # Compute the positional encodings once in log space pe = torch.zeros(max_seq_len, d_model) position = torch.arange(0, max_seq_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) pe = pe.unsqueeze(0).transpose(0, 1) self.register_buffer('pe', pe) def forward(self, x): # Add positional encoding to all inputs x = x * math.sqrt(self.d_model) seq_len = x.size(1) if seq_len > self.max_seq_len: # Truncate long sequences x = x[:, :self.max_seq_len, :] else: # Pad short sequences padding = torch.zeros(x.size(0), self.max_seq_len - seq_len, x.size(2), device=x.device) x = torch.cat((x, padding), dim=1) x = x + self.pe[:seq_len, :] return x ``` 这个代码中的 PositionalEncoding 类使用了 PyTorch 的 nn.Module 类,所以可以很容易地在 PyTorch 模型中使用。在构造函数中,我们首先计算了一个大小为 `(max_seq_len, d_model)` 的矩阵 `pe`,其中 `max_seq_len` 是序列的最大长度,`d_model` 是嵌入向量的维度。这个矩阵是通过计算一些正弦和余弦函数得到的,公式为: $$ PE_{pos, 2i} = \sin\left(\frac{pos}{10000^{2i/d_{model}}}\right) \\ PE_{pos, 2i+1} = \cos\left(\frac{pos}{10000^{2i/d_{model}}}\right) $$ 其中 $pos$ 是位置,$i$ 是维度。这个公式可以保证对于不同的位置和维度,得到的值是不同的,从而使得模型可以学习到位置信息。 在 `forward` 方法中,我们把输入张量 `x` 和 `pe` 相加,并返回结果。在相加之前,我们还对 `x` 进行了一些处理,包括将其乘以 $\sqrt{d_{model}}$(这个处理与 Transformer 中的 Multi-Head Attention 有关),以及根据 `max_seq_len` 对序列进行截断或填充。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值