RoPE / RoFormer: Enhanced Transformer with Rotary Position Embedding
本文是论文 RoFormer: Enhanced Transformer with Rotary Position Embedding 的阅读笔记和个人理解.
Recommended
与往常不同, 在本文开头先给出推荐.
首先苏神博客看RoPE整个系列的文章(RoPE的论文就是出自这些博客的集成):
- 让研究人员绞尽脑汁的Transformer位置编码 - 科学空间|Scientific Spaces.
- Transformer升级之路:2、博采众长的旋转式位置编码 - 科学空间|Scientific Spaces.
- 标签 rope 下的文章 - 科学空间|Scientific Spaces.
本文中穿插的内容也有少量由苏神博客中延伸.
如果想看比较简单一点的, 强烈推荐直接看抱抱脸推出的Blog设计位置编码, 从一个比较简单易懂的角度解释了RoPE的由来.
代码方面, 也推荐看看LLaMA对RoPE的实现:
如果希望看形象一点的, 有图描述的, 推荐看:
本文是对RoPE论文的记录.
Background and Related Work
位置编码的主要作用是为了保证同样的Token输入到模型中是可以区分的, 从而可以编码它们的位置关系. 一个显然的例子, “我吃饭”和”饭吃我”明显因主宾语的位置不同而具有不同的含义.
熟悉的Position Embedding的本小节可以跳过.
Preliminary
对于长度为
当Transformer中的Self - Attention在忽略位置信息的情况下, 其Attention Score的计算方式如下:
其中
接着计算Scaled Dot-Product Attention:
Absolute Position Embedding
最经典的
而在Transformer的原论文中, 作者通过正余弦函数来生成
当然, 在BERT, ViT等论文中也有直接使用Learnable的绝对位置编码, 直接将绝对位置设定为一个可学习的参数让网络自己学.
Relative Position Embedding
由于绝对位置编码不能编码两个Token之间的相对位置关系, 一些工作中也通过相对位置的建模, 将相对位置信息作为位置编码:
其中,
一些工作(TransformerXL / XLNet)直接沿用这个形式将它们按项拆分:
进一步的, 由于投影矩阵
这玩意看起来太麻烦了, 我们要的其实不就是一项位置信息和一项内容信息吗? 于是一些工作(T5)直接将位置信息和内容信息解耦, 直接将相对位置变为一个Learnable bias term
用两个Projection进一步分别编码
也有一些工作(DeBERTa)基于绝对位置的形式, 认为简单的将绝对位置
RoPE
用下图可以概括RoPE的核心思想:

为什么要叫Rotary Position Embedding呢? 正如它的名字一样, 它是通过旋转来区分不同位置的. 上图举了一个
但RoPE是以表征相对位置闻名的, 因为它可以借助一些巧妙的性质, 使得计算Self-Attention的内积时能将相对位置信息注入到其中. 下面就来看看RoPE是怎么做到这一点的.
Formulation
结合前面的分析可知, 想要融入Token之间的相对位置关系, 只需要将
所以目标就是找到满足
Rotary Position Embedding
Derivation of RoPE under 2D
在本节中先讨论简单的二维情况.
SDPA(Scaled Dot-Product Attention)是两向量的内积.
如果实数运算规则不好找到函数
例如, 对于任意两个实数向量
当我们将
实部
好, 有了上面的性质, 下面开始今天的正题. 先往上小节说的Formulation上靠拢呗.
如果想要表征绝对位置信息, 需要使得
利用实数内积与复数内积的关联, 我们假设有利用复数运算的函数
同时, 这种编码方式还应该保证在初始状态下不编码位置信息:
首先, 用复数的指数形式(都学过极坐标系中表示复数吧), 将
其中,
不难发现, 代入到
此时, 它在初始条件(看成是不表征位置信息)的情况下, 应满足:
其中,
接着将相同的位置
此时, 幅值
它显然不依赖位置信息, 即满足
那么角度
当位置相同时, 不应该编码任何位置信息. 令
上式中右侧的常数项与绝对位置
其中
通过对幅值
通常
方便起见, 直接设定
所以, 我们在二维情况下, 最后找到的函数
其中
进一步写出二维情况下
它就是
General form
更为普遍的, 将上节得到的二维情况扩展到任意偶数维度
非常自然的思路就是将
其中,
这篇文章提供了一个非常有意思的角度, 不同角速度的维度就像时针分针秒针一样, 通过不同的快慢角速度来组合表征一个位置信息.
将RoPE直接作用于Self-Attention, 可得:
其中,
RoPE相较于之前位置编码的最大不同, 在于它是乘性的, 而不是加性的, 因此它在编码的相对位置信息可以天然的融入到Self-Attention的内积中.
Properties of RoPE
RoPE有一些优良的性质.
首先, RoPE具有长程衰减, 和最早版本的Transformer一样, RoPE设定
其次, RoPE在Linear Attention当中可以使得Self-Attention被更一般的形式重写.
例如, 常规的SDPA可以写成:
Self-Attention中采用的是
Linear Attention的复杂度是比SDPA更低的线性复杂度, 形式如下:
其中
由于RoPE的存在, 可以使得Hidden State的范数不变, 因此可以将RoPE直接乘, 从而无缝集成到Linear Attention中, 从而不增加Linear Attention的复杂度:
Theoretical Explanation
Computational efficient realization of rotary matrix multiplication
由于
其中
Long-term decay of RoPE
在RoPE的作用下, 将向量
其中
令
因此有:
即当相对位置

Experiments and Evaluations
详细的实验参数设置和模型参数设置请参考原论文.
Machine Translation
作者将RoFormer与Vallina Transformer在WMT 2014 English-German(450w平行语料)上对比:

RoFormer略高于Vallina Transformer.
Pre-training Language Modeling
接着, 在BookCorpus和Wikipedia这两个常用的语料上做预训练, 与BERT做对比, 结果如下:

RoFormer明显的比BERT要收敛更快一些, 而且从曲线上来看它的训练看起来更加稳定.
Fine-tuning on GLUE tasks
在GLUE上做Finetune, 继续与BERT对比:

RoFormer在MRPC, STS-B, QQP上有显著优势, 它们都是偏语义类的任务, 在SST-2和QNLI, MNLI中表现弱于BERT.
Performer with RoPE
上文中提到了RoPE在Linear Attention中的优势, 因此测试与使用Linear Attention的Performer做个结合:

RoPE能够在维持原复杂度不变的条件下加速收敛.
Evaluation on Chinese Data
除了在英文数据上进行评估, 还要在中文数据上进行评估.
在本实验中, 作者将自己提出的WoBERT的绝对位置编码替换为RoPE:

并在34G的语料上进行不同参数的多阶段训练, 以适应不同的输入长度:

随着序列长度的增加, RoFormer总是能取得更好的性能, 说明RoFormer在长度外推设置下表现较好.
在CAIL2019-SCM(一个语义相似任务)上来测试RoFormer的长文本能力, 表现如下:

- 当RoFormer输入长为512时, 能够略优于BERT和WoBERT.
- 当RoFormer的最大输入长度扩展到1024的时候, 显著优于BERT和WoBERT.
此外, 还能观察到在中文场景下, 词建模的WoBERT要优于字建模的BERT. 我以前也有类似的观点, 更大的优势是词建模如果用到生成类任务中能带来更快的推理速度.
Summary
与其说RoPE简洁旦优雅, 不如说RoPE简洁甚至优雅. RoPE用绝对位置编码实现了相对位置编码, 并且能够丝滑无缝的融入到Self-Attention当中.
由于我硕士期间是做信息抽取的, 所以我印象中RoPE最早在信息抽取里面运用的非常广泛, 其中可能原因有两个:
- 其一是因为相对位置对信息抽取的Span抽取影响比较大, 因为每个Span的都是通过起止边界位置确定的, 在Universal Information发展后期, 基本都是要带上RoPE.
- 另外可能是因为信息抽取抽取Span的大多都是通过一个乘积计算得到得分, 与内积形式一致, 这与RoPE给Self-Attention设计的形式恰恰好是一致的, 所以RoPE表现好也不奇怪.
RoPE早期在其他领域似乎没有得到特别多的关注. 但是随着PaLM, LLaMA等LLM采用了RoPE, RoPE便渐渐的在LLM里面成为一项标准的配置, 所以RoPE甚至也被人誉为LLM时代的ResNet.
在更长的上下文场景下, RoPE的续作是ReRoPE, 超过了NTK-RoPE, 感兴趣的可以继续深入.
虽然论文本身不是苏神自己写的, 但最后在文末也不得不感叹, 苏神真强啊.