10 May

Transformer升级之路:4、二维位置的旋转式位置编码

在之前的文章《Transformer升级之路:2、博采众长的旋转式位置编码》中我们提出了旋转式位置编码RoPE以及对应的Transformer模型RoFormer。由于笔者主要研究的领域还是NLP,所以本来这个事情对于笔者来说已经完了。但是最近一段时间,Transformer模型在视觉领域也大火,各种Vision Transformer(ViT)层出不穷,于是就有了问题:二维情形的RoPE应该是怎样的呢?

咋看上去,这个似乎应该只是一维情形的简单推广,但其中涉及到的推导和理解却远比我们想象中复杂,本文就对此做一个分析,从而深化我们对RoPE的理解。

二维RoPE

什么是二维位置?对应的二维RoPE又是怎样的?它的难度在哪里?在这一节中,我们先简单介绍二维位置,然后直接给出二维RoPE的结果和推导思路,在随后的几节中,我们再详细给出推导过程。

点击阅读全文...

23 Mar

Transformer升级之路:2、博采众长的旋转式位置编码

上一篇文章中,我们对原始的Sinusoidal位置编码做了较为详细的推导和理解,总的感觉是Sinusoidal位置编码是一种“想要成为相对位置编码的绝对位置编码”。一般来说,绝对位置编码具有实现简单、计算速度快等优点,而相对位置编码则直接地体现了相对位置信号,跟我们的直观理解吻合,实际性能往往也更好。由此可见,如果可以通过绝对位置编码的方式实现相对位置编码,那么就是“集各家之所长”、“鱼与熊掌兼得”了。Sinusoidal位置编码隐约做到了这一点,但并不够好。

本文将会介绍我们自研的Rotary Transformer(RoFormer)模型,它的主要改动是应用了笔者构思的“旋转式位置编码(Rotary Position Embedding,RoPE)”,这是一种配合Attention机制能达到“绝对位置编码的方式实现相对位置编码”的设计。而也正因为这种设计,它还是目前唯一一种可用于线性Attention的相对位置编码。

点击阅读全文...

8 Mar

Transformer升级之路:1、Sinusoidal位置编码追根溯源

最近笔者做了一些理解和改进Transformer的尝试,得到了一些似乎还有价值的经验和结论,遂开一个专题总结一下,命名为“Transformer升级之路”,既代表理解上的深入,也代表结果上的改进。

作为该专题的第一篇文章,笔者将会介绍自己对Google在《Attention is All You Need》中提出来的Sinusoidal位置编码
\begin{equation}\left\{\begin{aligned}&\boldsymbol{p}_{k,2i}=\sin\Big(k/10000^{2i/d}\Big)\\
&\boldsymbol{p}_{k, 2i+1}=\cos\Big(k/10000^{2i/d}\Big)
\end{aligned}\right.\label{eq:sin}\end{equation}
的新理解,其中$\boldsymbol{p}_{k,2i},\boldsymbol{p}_{k,2i+1}$分别是位置$k$的编码向量的第$2i,2i+1$个分量,$d$是向量维度。

作为位置编码的一个显式解,Google在原论文中对它的描述却寥寥无几,只是简单提及了它可以表达相对位置信息,后来知乎等平台上也出现了一些解读,它的一些特点也逐步为大家所知,但总体而言比较零散。特别是对于“它是怎么想出来的”、“非得要这个形式不可吗”等原理性问题,还没有比较好的答案。

因此,本文主要围绕这些问题展开思考,可能在思考过程中读者会有跟笔者一样的感觉,即越思考越觉得这个设计之精妙漂亮,让人叹服~

点击阅读全文...

3 Feb

让研究人员绞尽脑汁的Transformer位置编码

不同于RNN、CNN等模型,对于Transformer模型来说,位置编码的加入是必不可少的,因为纯粹的Attention模块是无法捕捉输入顺序的,即无法区分不同位置的Token。为此我们大体有两个选择:1、想办法将位置信息融入到输入中,这构成了绝对位置编码的一般做法;2、想办法微调一下Attention结构,使得它有能力分辨不同位置的Token,这构成了相对位置编码的一般做法。

虽然说起来主要就是绝对位置编码和相对位置编码两大类,但每一类其实又能衍生出各种各样的变种,为此研究人员可算是煞费苦心、绞尽脑汁了,此外还有一些不按套路出牌的位置编码。本文就让我们来欣赏一下研究人员为了更好地表达位置信息所构建出来的“八仙过海,各显神通”般的编码方案。

绝对位置编码

形式上来看,绝对位置编码是相对简单的一种方案,但即便如此,也不妨碍各路研究人员的奇思妙想,也有不少的变种。一般来说,绝对位置编码会加到输入中:在输入的第$k$个向量$\boldsymbol{x}_k$中加入位置向量$\boldsymbol{p}_k$变为$\boldsymbol{x}_k + \boldsymbol{p}_k$,其中$\boldsymbol{p}_k$只依赖于位置编号$k$。

点击阅读全文...

8 Dec

伽马函数的傅里叶变换之路

伽马函数
$$\Gamma(x)=\int_0^{+\infty}t^{x-1}e^{-t}dt$$
作为阶乘的推广,会让很多初学者感到困惑,对于笔者来说也不例外。一个最自然的问题就是:这般复杂的推广公式是如何得到的?

在cos.name的文章《神奇的伽马函数》中,有比较详细地对伽马函数的历史介绍,笔者细读之后也获益匪浅。但美中不足的是,笔者还是没能从中找到引出伽马函数的一种“自然”的办法。所谓“自然”,并不是说最简单的,而是根据一些基本的性质和定义,直接把伽马函数的表达式反解出来。它的过程和运算也许并不简单,但是思想应当是直接而简洁的。当然,我们不能苛求历史上伽马函数以这种方式诞生,但是作为事后探索是有益的,有助于我们了解伽马函数的特性。于是笔者尝试了以下途径,得到了一些结果,可是也得到了一些困惑。

点击阅读全文...

3 Dec

正弦级数和余弦级数

在数学分析的级数理论中,有一类常见的题目,其中涉及到
$$\cos\theta+\cos 2\theta+\dots+\cos n\theta\tag{1}$$

$$\sin\theta+\sin 2\theta+\dots+\sin n\theta\tag{2}$$
之类的正弦或者余弦级数的求和,主要是证明该和式有界。而为了证明这一点,通常是把和式的通项求出来。当然,该级数在物理中也有重要作用,它表示$n$个相同振子的合振幅。在我们的数学分析教材中,通常是将级数乘上一项$\sin\frac{\theta}{2}$,然后利用积化和差公式完成。诚然,如果仅限在实数范围内考虑,这有可能是唯一的推导技巧的。但是这样推导的运算过程本身不简单,而且也不利于记忆,在大二的时候我就为此感到很痛苦。前几天在看费曼的书的时候,想到了一种利用复数的推导技巧。很奇怪,这个技巧是如此简单——写出来显得这篇文章都有点水了——可是我以前居然一直没留意到!看来功力尚浅,需多多修炼呀。

点击阅读全文...

16 Aug

从费马大定理谈起(三):高斯整数

为了拓展整数的概念,我们需要了解关于环和域这两个代数结构,这些知识在网上或者相应的抽象代数教程中都会有。抽象地提出这两个代数结构,是为了一般地处理不同的数环、数域中的性质。在自然数集$\mathbb{N}$中,可以很方便定义和比较两个数字的大小,并且任意一个自然数的子集,都存在最小元素,这两点综合起来,我们就说$\mathbb{N}$是“良序”的(这也是数学归纳法的基础)。在良序的结构中,很多性质的证明变得很简单,比如算术基本定理。然而,一般的数环、数域并没有这样的“良序”,比如任意两个复数就不能比较大小。因此,一般的、不基于良序的思想就显得更为重要了。

环和域

关于环(Ring)的定义,可以参考维基百科上面的“环(代数)”条目。简单来说,环指的是这样一个集合,它的元素之间可以进行加法和乘法,并满足一些必要的性质,比如运算封闭性、加法可交换性等。而数论中大多数情况下研究的是数环,它指的是集合是数集的情况,并且通常来说,元素间的加法和乘法就是普通的数的加法和乘法。比如所有的实整数就构成一个数环$\mathbb{Z}$,这个数环是无限的;所有的偶整数也构成一个数环$2\mathbb{Z}$;对于素数$p$,在模$p$之下,数集$\{0,1,2,\dots,p-1\}$也构成了一个环,更特别的,它还是一个数域。

点击阅读全文...

1 Jul

勾股数的通解及其推广

在之前的文章《几何的数与数的几何:超复数的浅探究》中,我们谈及过四元数。四元数源于把复数的$|(a+bi)(c+di)|=|a+bi|\times|c+di|$这一独特的性质进行高维推广。为什么偏爱这一性质?读者或许已经初步知道一些用到复数的这一性质的例子,有几何方面的,也有物理方面的,这一性质为处理模长相关问题带来了美妙的方便。本文介绍它在求三元二次齐次不定方程的整数通解中的应用,这一例子同样展示了复数这一性质的神奇,让我们不得不认同当初哈密顿为了将其推广到高维而不惜耗费十年光阴的努力。

勾股数问题

读者或许已经知道,勾股数,也就是满足
$$x^2+y^2=z^2$$
的所有自然数解,由下面公式给出
$$x=a^2-b^2,\quad y=2ab,\quad z=a^2+b^2$$

点击阅读全文...