Attention

注意力机制通过关联这些序列的不同位置(token)来表示输入序列。 计算和实现注意力的方法有很多种:

  1. Self-attention:所有查询、键和值都来自同一个输入
  2. Cross-attention: q代表当前序列,k,v是同一个输入,对应的encoder最后一层的输出结果,对decoder端的每一层来说,k和 v 保持不变。
  3. Full Attention: self-attention的简单实现。
  4. Sparse Attention: self-attetion 的时间复杂度为 O(n^2 ),当将 LLM 扩展到很长的上下文时,计算量爆炸。 Sparse Attention 是一种近似计算,极大地增强了 GPT like LLM 在合理时间内处理更多数量 token 的能力。
  5. Flash Attention: 不同于稀疏注意力,Flash Attention只是分块计算,而不是近似计算,Flash Attention与原生注意力的结果是完全等价的。更多介绍 https://zhuanlan.zhihu.com/p/639228219

Encoding Positions

不同于RNN、CNN等模型,对于Transformer模型来说,位置编码是必不可少的,因为纯粹的Attention模块是无法捕捉输入顺序的,即无法区分不同位置的Token。为此大体有两个选择:

1、想办法将位置信息融入到输入中,这构成了绝对位置编码的一般做法;

2、微调 Attention 结构,使得它有能力分辨不同位置的 token,这构成了相对位置编码的一般做法(Alibi,RoPE)。

更多介绍 https://zhuanlan.zhihu.com/p/639228219

Activation Functions

激活函数在神经网络的曲线拟合能力中起着至关重要的作用。 LLM 中使用的现代激活函数与早期的压缩函数不同,对于 LLM 的成功至关重要。

  1. Sigmoid(logistic回归使用的激活函数)
  2. ReLU(Rectified linear unit):ReLU(x) = max(0, x)
  3. GeLU (Gaussian Error Linear Unit ): 使用最广泛的激活函数
  4. GLU variants (Gated Linear Unit): 是一个神经网络层,输入的线性变换和 sigmoid 变换 (σ) 线性投影的逐元素乘积 (⊗):GLU(x, W, V, b, c) = (xW + b) ⊗ σ(xV + c)
  5. ReGLU(x, W, V, b, c) = max(0, xW + b)⊗
  6. GEGLU(x, W, V, b, c) = GELU(xW + b) ⊗ (xV + c)