Transformer的组件更新——GLU、RoPE和RMSNorm

Wings Lv3

面对序列问题,在越过了架构之争(状态架构和并行架构)后,首先来看主流常用的并行架构,也就是以Attention为主的架构。基于这个架构,模型能够很容易扩大参数规模(scalable),只需要简单地堆叠,就能够让模型挖掘序列之间更复杂的关系。

所以,基于该架构的发展驱动就是,如何更高效地进行计算。这个高效计算可以分多个层次:

  1. 顶层:基于并行的思路,优化序列并行计算,提供一个更好的计算方式。例如,位置信息利用,长程关系利用等。
  2. 中层:Attention计算不够高效,随着序列的增长,传统的Attention计算和内存消耗会随着序列增长而平方增长,需要提高计算效率。
  3. 底层:硬件需要更好地支持相关Attention的计算,包括各种Attention的变种计算,需要提供更好的硬件支持。

当前主要瞄准的是顶层和中层的改良。对这些改良做一个快速的介绍,尝试理解这些改良对比原始的Attention is all you need是更好的。

其实对于顶层和中层的改良,还可以从数据和计算成本的视角来理解:如果计算成本高,虽然可能在较短的序列中捕捉更复杂的关系,但也就意味着看到的数据少;而如果计算成本低,则可以在单位时间内看到更多更长的数据。但至于如何平衡里面的关系,则具有领域性,经验性。

所以现在所理解到的改良,有一些可能是在相同的长度下,计算复杂提取局部信息所带来的提升;也有减少复杂度,靠数据长度来捕获信息从而提升,两条路都有一定的道理。

接下来就针对现代的Attention模型的一些改进如GLU、RoPE和RMSNorm,快速看一下这些改进的思路是什么。

1 GLU(Gated Linear Units)

传统的Attention的FFN本质上是一个非线性变换,即

其中就是一个非线性函数,一般为ReLU函数。而论文[1,2,3]提出一个新的框架,首先还是保持一个基本的非线性变换框架:

但在这个基础上,加入门控网络(感觉有点类似Dropout)有:

对比公式(2),多了一个门控变量来对非线性变换做一个权值上的控制。首先,这就多了一些参数,能够拟合更多的非线性可能性。其次在这里采用,对于每一个维度上的控制更加精细。换句话说,如果之前是通过共享权重来统一控制向量不同维度的变换,在这里则有能够根据输入有更加精细地控制维度信息,从而使得该模块能够捕捉更复杂的关系。

SiLU(SwiGLU)和GELU

接下来,激活函数也有改变,传统的激活函数是ReLU激活函数为:

而现代的激活函数希望能够更好地利用0附近的数值,这是因为,传统的ReLU激活函数在负数方面的梯度为0,从而导致激活函数更新不够高效,所以就有这么两个激活函数:

其中就是sigmoid函数,是标准正态分布的累计分布函数。这两个激活函数都能够看到,首先前面有一个,这确保了在负数的时候也有数值能够进行优化,从而提高优化的效率。

2 RoPE(Rotary Position Embedding)

除此之外,传统的Attention采用的是绝对位置编码,在一开始的序列的嵌入向量输入的时候就增加了位置信息,但这种位置信息从深度学习神经网络的视角来看可能在后续的传播之中会逐渐衰减。

所以论文[6]提出一种嵌入在Attention计算里面的编码,从计算过程来看,就相当于在两个向量之间还存在一个距离的衰减,换句话说,在计算QK的相似度的时候,除了考虑两个词向量之间的相似度之外,还要考虑两个词之间的位置衰减。其核心思路是,每一个Attention输入的内容都应该考虑其向量和位置信息,并且在计算以后也仍然保持这样的信息。

这样就把两个向量之间的位置距离给编码进去了,一般情况下,越大则这两个向量的内积会受到一个更大的衰减。而满足这个性质的位置编码采用了旋转位置编码,即将向量的每两个看做一组,类似二维平面一遍,不同分组有不同的角度,通过该角度就知道向量之间的距离有不同,简单地形式有:

这个式子就表示单元圆上两个角度的变化(事实上也可以不是单位圆)。而这里的。如果将复平面看做一般的二维实平面,也就是不要虚数的单位而保留旋转的性质就有:

这个也满足解析几何中一个二维向量变化的性质,在这里不再展开其矩阵性质,且矩阵转置就是矩阵的逆,所以相对性很容易出来。

但是在这里,个人认为该方法更精确地应该叫做“分组旋转”,是因为它将一个向量的元素两两分组,每一个分组上能够有一个相对性。事实上,如果将向量本身就看做是一个维空间,其旋转的方向将会非常复杂,所以这里只是一个简化版本。不过这个方法目前也是主流的方法,因为它对序列的外推性有比较好的扩展,在实验中也能够直观感受得到。

3 RMSNorm

而对于正则化的一个主流改进RMSNorm[5],实际上其改进并不是让模型能够在已有的长度上有更好的表现,甚至在论文中也明确讲了,最终收敛和原始的结构是差不多的,但是它的好处是,整体的计算成本下降了。所以我们可以换句话说,在更少的计算下达到了之前一样的效果,这就意味着,我们可以扩展我们的数据,使其在一样的计算成本下看到更多的数据,从而让模型更接近数据本身。

原本的形式是层归一化(Layer Normalization, LN),需要在数据上进行均值和方差上的调整,这是因为数据在往下传递的时候会发生偏移,导致数值不稳定。而在这里,我们之考虑方差上的调整即有:

其中是可学习变量。这个好处就是,不需要额外信息而是完全自身的一个标准差的计算即可完成这样的归一化,这大大降低了计算消耗,所以在经过相同的数据的时候,所使用的时间更短,也就意味着一样的时间接受的数据越多,所以在最终的表现(同样时间,同样算力下)会更好。

参考文献

[1] Dauphin Y N, Fan A, Auli M, et al. Language modeling with gated convolutional networks[C]//International conference on machine learning. PMLR, 2017: 933-941.

[2] Ramachandran P, Zoph B, Le Q V. Searching for activation functions[J]. arXiv preprint arXiv:1710.05941, 2017.

[3] Shazeer N. Glu variants improve transformer[J]. arXiv preprint arXiv:2002.05202, 2020.

[4] Hendrycks D, Gimpel K. Gaussian error linear units (gelus)[J]. arXiv preprint arXiv:1606.08415, 2016.

[5] Zhang B, Sennrich R. Root mean square layer normalization[J]. Advances in neural information processing systems, 2019, 32.

[6] Su J, Ahmed M, Lu Y, et al. Roformer: Enhanced transformer with rotary position embedding[J]. Neurocomputing, 2024, 568: 127063.

  • 标题: Transformer的组件更新——GLU、RoPE和RMSNorm
  • 作者: Wings
  • 创建于 : 2026-05-22 10:00:00
  • 更新于 : 2026-05-22 15:55:18
  • 链接: https://www.wingslab.top/深度学习/Transformer的组件更新——GLU、RoPE和RMSNorm/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。