【理论】大模型位置编码

对于transformer模型,位置编码是必不可少的。因为attention模块是无法捕捉输入顺序的,无法区分不同位置的token。

位置编码分为绝对位置编码和相对位置编码。

最直接的方式是训练式位置编码**,将位置编码当作可训练参数,训练一个位置编码向量矩阵**。GPT3就采用了这种方式。训练式位置编码的缺点是没有外推性,即若训练时最大序列长度为2048,在推断时最多只能处理长度为2048的序列,超过这个长度就无法处理了。

位置编码有:

  • 绝对位置编码(sinusoidal)
  • 旋转位置编码(RoPE)
  • 相对位置编码(ALiBi)

sinusoidal 绝对位置编码

绝对位置编码是直接将序列中每个位置的信息编码进模型的,从而使模型能够了解每个元素在序列中的具体位置。

原始Transformer提出时采用了sinusoidal位置编码,通过正弦和余弦的函数结构使得模型捕获位置之间的复杂关系,且这些编码与序列中每个位置的绝对值有关。

其中,pos表示位置,dmodel代表embedding的维度,2i , 2i+1代表的是embedding不同位置的索引。

原始 Transformer 的位置编码虽然是基于绝对位置的,但其数学结构使其能够捕获一些相对位置信息。使用正弦和余弦函数的组合为每个位置创建编码,波长呈几何级数排列,意味着每个位置的编码都是独特的。然而,正弦和余弦函数的周期性特性确保了不同位置之间的编码关系是连续且平滑的。

RoPE 旋转位置编码

Rotary Position Embedding

总的来说就是在Q,K处注入位置信息。

旋转位置编码(Rotary Position Embedding,RoPE)是一种用绝对位置编码来表征相对位置编码的方法,并被用在了很多大语言模型的设计中。

旋转位置编码RoPE训练式的位置编码作用在token embedding上,而旋转位置编码RoPE作用在每个transformer层的self-attention块,在计算完Q/K之后,旋转位置编码作用在Q/K上,再计算attention score。

旋转位置编码通过绝对编码的方式实现了相对位置编码,有良好的外推性。值得一提的是,RoPE不包含可训练参数。LLaMA、GLM-130B、PaLM等大语言模型就采用了旋转位置编码RoPE。

Jianlin Su提出旋转位置编码,这个做法被OPT,LLaMA等所采用,主要的做法就是:在每一层的self-attention计算中,我们对query和key做sinusoidal乘法。

不需要学习llama的embedding,好处:不需要在训练中去学习embedding,即可以节省内存消耗,又可以在推理时cover token长度远远长于训练时token的情况,效果也比较好。

ALiBi 相对位置编码

ALiBi(Attention with Linear Biases)也是作用在每个transformer层的self-attention块,如下图所示,在计算完attention score后,直接为attention score矩阵加上一个预设好的偏置矩阵。

这里的偏置矩阵是预设好的,固定的,不可训练。这个偏置根据q和k的相对距离来惩罚attention score,相对距离越大,惩罚项越大相当于两个token的距离越远,相互贡献就越小

ALiBi位置编码有良好的外推性。BLOOM就采用了这种位置编码。

本文的做法是不添加position embedding,然后添加一个静态的不学习的bias,如下图:


怎么理解呢,就是在query和key做矩阵点乘的基础上,加上一个常数负值,比如距离当前位置前1位为-1, 前两位为-2,这些常数要乘上 权重 m

————————————————
原文链接:https://blog.csdn.net/qq_40910191/article/details/134070085

版权声明:
作者:Zhang, Hongxing
链接:http://zhx.info/archives/376
来源:张鸿兴的学习历程
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录