绝对位置编码

一. 回顾transformer

1.Encoder

transformer中Encoder的过程可以解释为:低阶语义向量转换为高阶语义向量

  ->  

2.Attention

Attention:把输入的向量分别乘一个可训练的矩阵并作相似度计算



3.Layer Norm

举个例子解释Layer Norm比Batch Norm好的原因: 假如一句话的Embeeding如下

-> X =

在NLP中不同batch中pad的数量是不一样的,如果沿着行做归一化没意义,应该对这一个batch中每一个token做归一化

4.参数量

一般的模型增加复杂度的方式:

a.增加深度,增加宽度

b.增加embedding的维度

c.增加词典的大小

transformer中参数分布: 这里假设Multi Head:12 Wq, Wk, Wv维度为64, embedding维度为768, 词典大小为E

12个头: 768x64x3x12

concat+线性变换(tanh(c, Key)·(w1)w1): 768x768

FeedForward(2层MLP,先升维再降维,一般是4倍): 2x768x768x4

Word Embedding: Ex768

 二. 位置编码

1.直接加入位置编码

 之前,直接加入位置的embedding

 (可以学习的embedding)

2.自定义绝对位置编码

二位函数 f(position, dimension)

要求:

函数f随着position,dimension增长应该是有界的,足够的区分度,对每个position对应的行向量应该是不同的

 偶数位

 奇数位

3.旋转位置编码

 (m是位置)

例子(假设Query中第m个,Key中第n个,embedding后是2维):

a.Attention计算:

b.Query偏移计算:

二维向量使用复数表示:

当使用复数表示二维向量,这里引入欧拉公式,即

推导出,

化简一下

再写成向量形式()

转换成矩阵相乘() ()

c.Key偏移计算:

和Query一样的

() ()

d.偏移后的Query和Key计算:

 :() ()  (记得转置~)

整理一下)()

e.理解

把上面的式子换一个形式 :

这里可以看出来所谓相似度就是有角度差 ,角度差越大相似度越小

 base=10000, d=维度, i=位置ids

三. 问题

1.为什么旋转位置编码在投影之后做不在投影之前做

这里想到矩阵运算

假设在投影之前做

=?  无法矩阵合并

2.chatglm不同的点

chatglm中,初始化的是一半正一半负数,而不是公式中严格按照相邻两两组合旋转

原因:神经元是无序的(神经网络中没有顺序,乘前面的W矩阵),

### 绝对位置编码的概念 绝对位置编码是一种用于表示序列中每个标记在其上下文中相对顺序的技术。在大型语言模型(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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值