LLM - 理解 旋转位置编码(RoPE) 与 绝对相对位置编码 之间的差异

欢迎关注我的CSDN:https://spike.blog.csdn.net/
本文地址:https://spike.blog.csdn.net/article/details/140281680

免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。


RoPE

设计位置编码的 4 个要素:

  1. Be reflective of their distances from one another in the sequence. 表示序列中不同 Token 的距离,使用距离度量比较向量的大小,构建的向量空间中,位置近的向量产生较小的距离,位置远的向量产生较大的距离。
  2. Have values bounded between 0 and 1. 将值限制在 0~1 之间,用作神经网络的输入。
  3. Be invariant to sequence length. 不依赖于文本的长短,固定位置的值是相同的
### 绝对位置编码的概念 绝对位置编码是一种用于表示序列中每个标记在其上下文中相对顺序的技术。在大型语言模型(LLM)中,这种技术对于捕获输入数据中的时间依赖性和结构至关重要[^1]。由于神经网络本身无法天然理解序列的位置信息,因此引入了位置编码来增强模型的学习能力。 #### 实现细节 在实际应用中,绝对位置编码可以通过多种方式实现。一种常见的方式是通过正弦和余弦函数生成固定的位置向量: ```python import torch import math def absolute_position_encoding(seq_len, d_model): pe = torch.zeros(seq_len, d_model) position = torch.arange(0, seq_len).unsqueeze(1) div_term = torch.exp(torch.arange(0, d_model, 2) * -(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) seq_length = 512 embedding_dim = 768 position_encodings = absolute_position_encoding(seq_length, embedding_dim) print(f"Position Encoding Shape: {position_encodings.shape}") ``` 上述代码片段展示了如何基于正弦和余弦波形创建绝对位置编码矩阵。这种方法最初由 Vaswani 等人在 Transformer 模型中提出,并广泛应用于各种 LLM 的实现中。 #### 编码的作用 绝对位置编码的主要作用在于帮助模型区分不同位置上的相同单词或标记的意义差异。例如,在句子 “她喜欢苹果” 和 “苹果喜欢她” 中,“苹果”的含义因位置而异。通过加入位置编码,模型可以更好地学习到这些细微差别并提高预测准确性。 #### 替代方法 尽管绝对位置编码非常有效,但它也有一些局限性,比如难以处理超出训练期间最大长度的新序列。为此,研究人员提出了其他变体,如可学习的位置嵌入或者相对位置编码等方案作为补充或替代选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ManonLegrand

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值