从Transformer中的位置编码到RoPE,CoPE
| 2024-10-24
0  |  阅读时长 0 分钟

1. 从Twitter上的一场口水战说起

介绍一下口水战的双方选手:
  • Elon Musk:这个不用多说
  • Yann LeCun:FaceBook(Meta)首席AI科学家,CNN之父,把CNN和反向传播结合用于手写数字识别就是他的工作
下面就是一些双方论战的截图(幽默向):
notion image
notion image
notion image
 
在互相拆台之余,LeCun在宣传自家最新论文时不忘手动@一下马斯克,意味深长地嘱咐道:”马斯克,我们这项研究用来改善你家的 Grok 也没问题“。骂战归骂战,CoPE这篇文章还是很值得研究的,是最近的一段时间少有的在大语言模型理论上有突破的一篇文章。
notion image

2. Why position encoding in Transformer

如今的大模型已经显示出了强大的威力,Transformer架构功不可没,先回顾一下其中核心的注意力机制:
notion image
可以把Transformer表达成如下算子的形式:
也就是注意力算子A和前馈神经网络F,对于F,它是位置无关的。那么,我们应该在A也就是attention上做文章,让其带上位置编码信息。一种简单的想法就是在其输入上加上位置的embedding。

✨self attention

这里就以单头的self attention为例:
notion image
  • Q(query):模型从token中提取出的,对token的理解信息。用于主动与其它token计算相似程度
a1计算出的Q与其它位置的token的K的转置相乘得到
  • K(key):模型从token中提取出的,与其它token的关系信息,被用于与其它token计算相似程度
  • V(value):表示当前token的重要程度
 
这么说可能有点抽象,再以各种购物网站的商品推荐为例解释一下QKV,以键盘为query,推荐系统根据存储的商品关键词Key,计算出两者的相似度,再乘以各种打法机制,这里只以一个评价数为value,可以得到一个总分的排序,得分越高,排序越靠前。
notion image
一段简单的代码:

✨Transformer中的相对位置编码

从以上的自注意力计算过程可以看出,虽然采用并行计算的方式比传统的RNN快了不少,但仅使用x或者q,k(来自于x),计算注意力的权重时,并未包含编码的位置信息。
因为每个token都要与其它的token进行计算,所以输出的每个b的值都是包含了全局的信息的,但这里的全局信息指的是全局的内容信息,并不包含位置信息。
以”狗咬人“与”人咬狗“两句话为例,”狗“在第一个和第三个位置的输出一样,假设后续的网络是将经过注意力的两句话简单加和,得到的两句话的输出是一样的,显然是不符合要求的。
也就是说,词与词之间不存在顺序关系(打乱一句话,这句话里的每个词的词向量依然不会变),即无位置关系(既然没有,我就加一个,通过位置编码的形式加)。

3. Bert,GPT中的位置编码

notion image
在Transformer的原始论文attention is all you need中,提出了两种位置编码的方式,第一种就是直接初始化一个可学习的位置编码矩阵加在输入上。
这样做的好处是极其简单,但缺点在于对于超过序列最大长度的位置外推困难,因为这种方式可能会响应超过序列最大长度的一些embedding,对于我们来说,是一个间隔了,但对于它来说还是一个没有学习到的东西,那么这个时候的外推就是失败的。

4. Sinusoidal位置编码

notion image
这是Transformer原始论文提出的第二种位置编码的方式,但原文并没有对其做过多解释,现在也有很多其它人对其做了一些理解。
这是一种自定义的位置编码,可以表达成一个二维函数f(position, dimension)
这个函数有两个要求:
  • 随着position,dimmension的增长应该是有界的
  • 足够的区分度,对每个position,对应的向量应该是不同的
对于SinCos位置编码(我习惯这么叫),它利用如下公式产生PE:
notion image
对于图中红色的列(偶数列),它采用sin计算,对于图中绿色的列,它用cos计算,这样就可以使得每行的向量完全不同,这样便满足了带来绝对位置信息的要求。
又因为三角函数有如下公式:
可以把某个pos分解开来,以pos=5分解为pos’=1,k=4为例,将原始的PE公式可以变换为:
notion image
即图中蓝色小点的值=绿色小点的值交叉相乘的形式,这样便为每个pos的pe值带来了与其它pos的pe值的线性关系,即带来了相对位置关系的可能。当然,这里只是一些简单的推导,更详细的推导可以参考https://kexue.fm/archives/8231
以及https://kexue.fm/archives/8130这两篇文章。这两篇文章指出了此种位置编码其实是一种”想要成为相对位置编码的绝对位置编码“,是有一些瑕疵的,现在也很少直接使用这种形式的位置编码的工作,原因不详。

5. 旋转位置编码RoPE

✨前置:线性代数知识补充

关于行向量和矩阵

notion image

关于旋转矩阵

notion image

在高维空间中旋转

notion image
notion image
大的具有一些良好的性质,可以将其拆成在不同的子空间上进行不同的旋转。

✨RoPE的Motivation

notion image

二维空间的一个解

notion image
在得到QK矩阵,也就是投影之后做,可以得到一个包含i-j信息的解

推广到高维空间

notion image
notion image

✨整体视角

notion image

区分度

这种方式不会产生周期重复
notion image

可能的另外一个优势

  • 在多个block前向传递的过程中,position的位置信息不会丢失
    • 每个block都会先做QKV的投影,然后QK投影之后会做位置旋转变换
相对于原来的加性绝对位置编码来说,在前向传递的过程中,位置信息可能会慢慢丢失

✨回看Sin绝对位置编码

notion image
notion image

✨RoPE代码实现

在代码实现中,避开了旋转矩阵相乘
notion image
notion image
代码实现如下:
带RoPE的self-attention代码实现:

✨RoPE总结

notion image

6. CoPE

✨Motivation

notion image
若采用相对位置编码方式(这里举的例子是一种更简单的相对位置编码,当然RoPE之类的相对位置编码),对于当前词元的位置往前数,这个Attension Score的值是在逐步递减的,
 
notion image

✨Method

notion image

✨PreComputing & implementation

notion image

✨Experiments

notion image
notion image

✨Conclusion

notion image
 
 

参考

解密旋转位置编码:数学基础、代码实现与绝对编码一体化探索_哔哩哔哩_bilibili
在这个视频中,我们深入探讨了旋转位置编码的原理和应用. 视频从实数域上的矩阵旋转变化开始,逐步引导大家了解如何通过这一数学原理进行推导,进而揭示了旋转位置编码背后的数学和逻辑结构。最重要的是,视频不仅停留在理论分析层面,还提供了完整的代码实现。整个视频旨在为大家提供一个从理论到实践的全面视角,通过这个视频,希望大家能够不仅理解旋转位置编码的原理,更能掌握如何在实际问题中应用这一技术.附上博客的地址, 视频播放量 17030、弹幕量 12、点赞数 1140、投硬币枚数 529、收藏人数 2227、转发人数 193, 视频作者 连博AI说, 作者简介 北京大学数院计算数学博士,前百度凤巢主任架构师,相关视频:Attention、Transformer公式推导和矩阵变化,14 Transformer之位置编码Positional Encoding (为什么 Self-Attention 需要位置编码),54、Probabilistic Diffusion Model概率扩散模型理论与完整PyTorch代码详细解读,博采众长式的旋转位置编码,【研1基本功 (真的很简单)Decoder Encoder】手写Decoder Layer 准备召唤Transformer,为什么Transformer会好于ResNet,从Lipschitz常量讲起【深度学习中的数学ep10】,从编解码和词嵌入开始,一步一步理解Transformer,注意力机制(Attention)的本质是卷积神经网络(CNN),【研1基本功 (真的很简单)注意力机制】手写多头注意力机制,【研1基本功 (真的很简单)Encoder Embedding】手写编码模块、构建Encoder Layer,通俗易懂-大模型的关键技术之一:旋转位置编码rope (2)
解密旋转位置编码:数学基础、代码实现与绝对编码一体化探索_哔哩哔哩_bilibili
 
Loading...
目录