Transformer 是一种基于自注意力(Self-Attention)机制的深度学习模型,最早由 Vaswani 等人在 2017 年的论文《Attention Is All You Need》中提出。
与传统的循环神经网络(RNN)和长短期记忆网络(LSTM)不同,Transformer 丢弃了递归计算结构,而是通过自注意力机制并行处理输入序列,从而大大提高了计算效率。
Transformer 广泛用于自然语言处理(NLP)和计算机视觉(CV)领域,如机器翻译、文本生成、文本分类、目标检测等。
图片
模型架构
Transformer 由两个主要部分组成:编码器(Encoder)和解码器(Decoder)。
编码器负责对输入序列进行编码,生成一个上下文相关的表示。解码器根据编码器生成的表示和解码器的历史输出,逐步生成目标序列。
图片
编码器(Encoder)
编码器由多个相同的层堆叠而成。每一层包含两个主要部分:
- 多头自注意力机制(Multi-Head Self-Attention)
自注意力允许模型为序列中的每个词分配不同的权重,并根据上下文信息调整这些权重。 - 前馈神经网络(FFN)
每个自注意力机制之后都有一个前馈神经网络(通常是两个全连接层和一个ReLu激活函数)。
前馈神经网络的主要作用之一是为每个位置的表示引入非线性变换,从而增加模型的表达能力。
每个子层后都采用了残差连接和层归一化,以稳定训练和加速收敛。
解码器(Decoder)
解码器的结构与编码器类似,由多个相同的层堆叠而成。每一层包含三个主要部分:
- 掩蔽多头自注意力机制(Masked Multi-Head Self-Attention)
屏蔽未来的信息,确保模型在生成时不会看到未来的 Token。 - 编码器-解码器注意力机制
与编码器的多头自注意力机制类似,但这里会关注来自编码器的输出。 - 前馈神经网络(FFN)
与编码器类似,每个子层后也采用了残差连接和层归一化。
对 Transformer 不熟悉的同学,可以参考下面这篇文章。
Transformer 的三大优化技术
在 Transformer 算法的基础上,研究人员提出了多种优化技术,以提升其性能和训练效果。
以下是三种重要的优化技术:Pre-Norm、RoPE 和 MoE
一、Pre-Norm
Pre-Norm 是对传统 Transformer 中层归一化应用顺序的优化。
在传统的 Transformer 中,LayerNorm 主要用于残差连接后,如下所示:
其中:
- X 是输入向量
- 可以是 Self-Attention 或 FFN (前馈网络)
- 是归一化后的输出
这种 Post-Norm 结构虽然有效,但在训练深层模型时,梯度可能会出现消失或爆炸,导致训练不稳定。
Pre-Norm 结构将 LayerNorm 放置在子层(Self-Attention 或 FFN)之前:
这带来的主要好处是
- 更稳定的梯度传播:梯度的方差在深度传播过程中更容易保持稳定,有助于训练超深的 Transformer 模型。
- 更快的收敛:由于梯度稳定,优化器可以更快地找到较优解。
二、 RoPE
在原始 Transformer 中,位置编码采用固定的正弦、余弦函数
这种方法有两个主要问题
- 缺乏旋转不变性:不能直接推广到长文本。
- 固定编码:不能动态调整。
RoPE(旋转位置编码)是一种改进的位置编码方法,用于增强 Transformer 模型处理长序列时的能力。RoPE 通过旋转矩阵引入位置相关性,使得注意力计算具备相对位置信息。
RoPE 的基本思想是通过对输入的查询(Q)和键(K)向量进行旋转操作,来引入位置信息。
具体来说,对于 d 维的特征表示,将其前 d/2 维和后 d/2 维分别组成复数表示,并施加一个位置相关的旋转变换。
- 配对维度
对于每个 token 的查询或键向量,假设其维度为 d,将其拆分为 对。
这些对由索引 i 标识,其中 i 的范围从 1 到 。 - 旋转每对
给定向量 x(假设维度为 2D),RoPE 采用二维旋转矩阵:
对向量进行旋转。
假设对于每一对 ,则经过 RoPE 变换后:
其中角度 是根据对的索引 i 和标记位置 p 来选择的。 - 计算注意力
一旦所有的查询或键向量的每一对都完成旋转,这些对会重新组合成一个维度为 d 的向量。
接着,使用标准的点积注意力机制来计算查询与键之间的关系。
图片
优势
- 传统的绝对位置编码通过在词嵌入上加上一个固定的正弦和余弦函数生成的编码来表示位置,但这种方法并不适合长序列的学习。
- RoPE 引入了旋转操作来表示不同词之间的相对位置,这对于处理长序列尤其有用。
- RoPE 不依赖于固定的编码,能够自适应地学习位置关系,改进了长序列建模的能力。
三、MoE
MoE(专家混合模型)通过使用多个“专家”子网络替代了 Transformer 中的标准前馈子层。每个专家通常是一个前馈网络,其结构与原始的 FFN 相同。门控机制决定每个 token 将被路由到哪个专家。
工作原理
- Token 级路由:对于每个 token,计算其与每个专家“质心”向量之间的点积,以生成亲和力分数。
- Top-K选择:根据亲和力得分选择前K个专家(通常K=1或2)。
- 专家处理:每个选定的专家都是一个独立的 FFN,负责对 token 进行单独转换。
- 组合输出:如果 K>1,则通过加权总和的方式(通常根据门控分数)组合各个专家的输出。
通过将每个 token 路由到少数几个专家,MoE 能够显著增加模型的整体参数量(即容量),同时不会显著增加每个 token 的计算成本。
此外,MoE 还允许模型学习更为专业化的子网络,这些子网络可以专注于某些 token 模式或特定的语言现象。
DeepSeekMoE(2024)的进展
在 DeepSeekMoE 中,每个 MoE 层的专家数量有所增加,同时每个专家的规模得以缩小。该方法的关键创新包括:
- 细粒度专家细分:相比较少的几个大专家,采用更多较小的专家。
- 更高的K值:可以同时选择更多的专家,从而实现更专业的转换。
- 共享专家隔离:一组共享专家服务于所有标记,负责处理广泛有用的知识,而其余专家则专注于某些特定语言或领域的模式。
这种细粒度与共享结合的方法能够保持恒定的总计算量,同时提升模型的专业化能力。每个token从更广泛的专家池中选择,而共享专家则在整体架构中捕获通用特征。
优势
- 在大规模的 Transformer 模型中,参数量非常庞大,而计算成本也随之增加。MoE 通过引入“专家”模型,只激活其中一部分专家来计算,从而降低计算复杂度。
- 每次计算时,模型会选择少数几个专家参与计算,这样可以大幅减少计算量,同时保持模型的表达能力。
- MoE 可以让模型通过引入更多的专家来扩展其容量,从而在处理复杂任务时提升性能。