此博客为Datawhale 组队学习打卡笔记


注意力机制的类型

Soft Attention vs. Hard Attention

  • Soft Attention:为输入序列的所有位置都计算一个注意力权重,这些权重是 0 到 1 之间的浮点数(经 Softmax 归一化),然后进行加权求和。这种方式的优点是模型是端到端可微的,可以使用标准的梯度下降法进行训练。其缺点是在处理非常长的序列时,计算开销会很大。
  • Hard Attention:在每一步只选择一个最相关的输入位置。可以看作是一种“非 0 即 1”的注意力分配,即选中的位置权重为 1,其他所有位置的权重均为 0。好处是计算量大大减少。但选择过程是离散的、不可微的,因此无法使用常规的反向传播算法进行训练,通常需要借助强化学习等更复杂的技巧。

Global Attention vs. Local Attention

  • Global Attention (全局注意力):其思想与 Soft Attention 基本一致,即在计算注意力时,会考虑编码器的所有隐藏状态。
  • Local Attention (局部注意力):在每个解码时间步,只关注输入序列的一个局部窗口。

Transformer 整体结构

编码器(Encoder)

解码器(Decoder)

位置前馈网络 (FFN)

残差连接与层归一化 (Add & Norm)

位置编码

  • 自注意力机制的主要缺陷在于其 位置无关性。
  • Transformer 在将词嵌入向量输入模型之前,为它们加入了一个 位置编码 (Positional Encoding) 向量。其工作方式非常直接
    i n p u t embedding = t o k e n embedding + p o s i t i o n a l encoding input_\text{embedding} = token_\text{embedding} + positional_\text{encoding} inputembedding=tokenembedding+positionalencoding这是一种 绝对位置编码,即每个位置(如第 0、1、2 个位置)都有一个固定的编码向量

在实践中,主要有两种实现方式:

可学习的位置编码 (Learned Positional Encoding)

  • 在 Encoder-only 模型(如 BERT)中常见;
  • 其实现非常简单:创建一个 nn.Embedding 层,大小为 [max_sequence_length, hidden_size]。max_sequence_length 是模型能处理的最大序列长度,这是一个重要的超参数(在很多模型配置文件中被称为 max_position_embeddings)。在训练时,模型会像学习词嵌入一样,自动学习出每个位置(0, 1, 2, …)最合适的向量表示。

基于三角函数的固定编码 (Sinusoidal Positional Encoding)

  • 这是原版 Transformer 论文中使用的方法,它不需要学习。
  • 使用不同频率的正弦和余弦函数来为每个位置生成一个独特的、固定的编码向量:

P E ( pos , 2 i ) = sin ⁡ ( pos 10000 2 i d embedding ) P E ( pos , 2 i + 1 ) = cos ⁡ ( pos 10000 2 i d embedding ) PE_{(\text{pos}, 2i)} = \sin\left(\frac{\text{pos}}{10000^{\frac{2i}{d_{\text{embedding}}}}}\right) \\ PE_{(\text{pos}, 2i+1)} = \cos\left(\frac{\text{pos}}{10000^{\frac{2i}{d_{\text{embedding}}}}}\right) PE(pos,2i)=sin(10000dembedding2ipos)PE(pos,2i+1)=cos(10000dembedding2ipos)

  • 由于每个位置 p o s pos pos 和每个维度 i i i 的组合都是独一无二的,所以这种方法能为序列中的每个位置生成一个完全独特的编码向量。这种方法的优势是不同位置的编码向量之间存在固定的线性关系,这可能有助于模型推断出词元间的相对位置。其主要优点是不需要训练,并且理论上可以外推到比训练时遇到的更长的序列。

绝对 vs. 相对位置编码

  • 上述两种方法都属于绝对位置编码,因为它们为每个绝对位置(第 1 个、第 10 个等)分配一个特定的编码。
  • 然而,这种方式在处理超长文本时可能存在泛化性问题。
  • 因此,许多现代的大语言模型(如 Transformer-XL, Llama)转而采用相对位置编码。
  • 这种方法不再关注词元的绝对位置,而是直接在注意力计算中建模词元之间的相对距离(例如,“当前词”与“前 2 个词”之间的关系),这被证明在处理长序列时更有效、更灵活。

注意力掩码

  • 因果掩码
  • 填充掩码

解码器推理与 KV 缓存

参考

[1] https://datawhalechina.github.io/base-llm

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐