硬核技术的诞生,未必都始于什么宏大的远见,有时仅源于对数学精确性的偏执和对思考的如实记录。
如今几乎成为大模型标配的旋转位置编码(RoPE)常与长文本、外推挂钩,但在其作者苏剑林的视角里,RoPE 的诞生既没有应用上的野心,更不是为了解决两年后才火起来的长文本问题。
这篇回答还原了 RoPE 诞生:在 BERT 还是主流、预训练长度仅 512 的 2020 年,他只是想为「用绝对位置实现相对位置」寻找一个数学上的精确解。这个纯靠好奇心驱动的推到在当时甚至因为运行速度慢而被搁置。
直到 Flash Attention 出现,RoPE 阴差阳错地成了最佳搭档。这种无心插柳的祛魅过程,或许比神化天才顿悟更有意思。
RoPE 最早是为了解决
LLM 外展问题提出的么?
@苏剑林
1 月 13 日回答
呃,RoPE 的提出完全没有应用上的动机,只是因为有意思……
首先,RoPE 最先发表在 2021 年 3 月的博客 《Transformer 升级之路:2、博采众长的旋转式位置编码》 ,但实际提出时间要早至少半年以上,为啥会晚这么久才写出来,这个稍后再说。
https://kexue.fm/archives/8265
那会的背景是,Attention Is All You Need (https://arxiv.org/abs/1706.03762)的余威还在,BERT 则是主流,它们都用了绝对位置编码。然后呢,那会没有 Flash Attention,训练长度基本上都是 512,微调多数还只是 128,所以基本上没有什么长文本、外推问题,至少不会想着直接 Full Attention 去做长文本。
这么短的长度,Attention 都是直接框架手写的,基本没有什么 Cuda、Kernel 层面的东西,所以也百花齐放出了一些相对位置编码的工作。
总之,在那时的背景下,你会感觉做位置编码是一个很没有意义的工作。对了,那会做预训练的人也不多,微调是不需要改位置编码的,所以做位置编码的话,意味着要重新做预训练,费时费力,这显得做位置编码更没有前景了。
所以你说,在那时候提出的 RoPE,能有什么应用的、前瞻的动机?
当时提出 RoPE 的过程大致是这样的:
BERT 的绝对位置编码是可训练的,没有多少可解释性;
Attention Is All You Need 的 Sinusoidal 位置编码有固定公式,找了一些文章,想要理解这个设计为啥可行;
其中最深刻的,是 @纳米酱 的一篇帖子《 BERT 为何使用学习的 position embedding 而非正弦 position encoding?》
在诸多前人启发之下,我写了博客《 Transformer 升级之路:1、Sinusoidal 位置编码追根溯源 来表述我的理解》
这个理解核心是「两个绝对位置的向量内积只依赖于相对位置」,但它放在绝对位置编码中只是近似的解( @纳米酱 的二阶展开)
于是笔者想要寻找一个「精确解」,而 Scaled Dot-Product Attention 的 q、k 天然具有内积结构,自然地成为了切入点;
一番推导之下,得到了现在的 RoPE。
RoPE 提出之后,差不多也马上做了实验,当时是在免费申请的 TPU 上跑的,不知道是写得不对还是别的原因,总之当时发现比绝对位置编码慢很多,再加上当时」做位置编码没有前景「的大背景,所以就搁置了。
又过了应该有半年,笔者想起了这个事,重写了代码,然后在 GPU 跑,发现速度居然没差多少了,于是就写篇 Blog 发出去了。(这里不知道是 TPU、GPU 的差异还是别的原因,反正就是一开始慢,后来快了,没有去深究为啥……)
RoPE 提出后,其实也没什么水花,因为当时训练长度太短了,RoPE 实在没有竞争力。而且,笔者自己潜意识都觉得,这种纯数学推导出来的、没有可训练参数的设计,应该不会有什么优势,只要没有劣势已经胜利了。所以,笔者当时心心念念的,也就是 RoPE 别比 BERT 的绝对位置编码差就行了。
再后面,笔者在追一继续训练和开源了 RoFormer 系列模型,带上了 RoPE,但当时更多也是因为 RoPE 是自己提出来的,「敝帚自珍」,并且是效果确实也能接受,但相比其他位置编码其实也没表现出什么特别优势……
RoPE 流行起来,是因为随着训练长度的增加,Flash Attention 「应运而生」,而 Flash Attention 的特点是,对于大多数普通用户,没法修改 Attention 内部的计算过程,而大多数相对位置编码正是通过修改 Attention 内部计算实现的,所以都被否掉了。RoPE 是以绝对位置编码的形式注入到 q、k 中的,它独立于 Attention 之外,所以成为了当时「Flash Attention + 相对位置编码」的最佳搭档。
至于长文本、外推等等,那都是后话了……
总之,当初是出于好奇,想着找到「用绝对位置实现相对位置编码」的精确解,让 RoPE 无形之中契合了 Flash Attention,加上效果确实也还行,所以成为了那时几乎唯一可用的相对位置编码,逐渐普及起来。只能说,好奇心的驱动,遇上了幸运的眷顾,确实是很美好的事情。
对于这个局面,我深感荣幸,也深感惶恐,有些读者将 RoPE 看作是什么了不起的突破,而我知道我对 RoPE 的了解其实不见得比各位观众深刻。所以写下这篇回复,希望能让大家祛祛魅。
感恩
知友讨论
@纳米酱:
大佬,你是独立发现的,和我的知乎关系并不大,不能因为泰勒斯威夫特和泰勒展开有关键词重合,就引用,我担心会因为我个人的失败影响到你
作者:
很有关系的,通过二阶展开解释Sinusoidal位置编码的操作当时真的有如醍醐灌顶!BTW,我感觉早年你的专栏文章都给人耳目一新的感觉,我还跟你讨论过那篇GAN文本生成的。即便现在你自嘲失败,但实际上你的很多回答,也都表达了一个很独特很实际的切入点,依然有耳目一新的感觉。Anyway,致敬!
@什么事也没有哦:
文章作者自己回答阅读理解题目be like:
@风雨之路任我行:
记忆一下子涌入了我的脑海,BERT时代就如刚开始苏神所言。当时BERT+下游任务微调才是市场的主流。
@亦然:
能蹲到苏神的回答也是开心的。顺便请教下,mHC:流形约束超连接,是不是也算数学推导在工程运用领域的可行性实践?
作者
如果你说流形约束实现闭包这一点,那么算的
阅读更多
一个开发者高强度使用 AI coding,这是他大脑发生的变化🚀 AI 产品扶持计划:
知乎为AI产品提供定制宣发支持,了解/报名请戳:知乎「AI 新品非正式发布现场」扶持计划
🚀 知乎 AI 社群:
如果你是泛 AI 爱好者,对 AI 资讯感兴趣,并愿意认真测评、为开发者反馈真实意见或交流沟通。欢迎扫码加入知乎 AI 社群↓,我们将不定时送上 AI 热点问答和产品测试活动。
知乎AI交流群
让一部分开发者先走起来
🚀 知乎科技账号正式登陆 X:
👉 https://x.com/ZhihuFrontier,聚焦「技术 × 观点」的跨语境对话

