Transformer基础

General Structure:

  • 词向量编码+位置编码 -> 6 * Encoder -> 6 * Decoder -> 下游输出

Encoder:

输入部分:

  • 词嵌入input embedding:将词映射到高维向量表示
  • 位置编码positional encoding:加性位置编码+三角函数:
    • 偶数位置用sin,奇数位置用cos
    • 为什么引入位置编码:
      • Transformer的并行化处理导致单词的上下文顺序信息不明显(可以任意调换位置)
      • 解决RNN类网络的连乘效应:远距离梯度消失,近距离梯度主导
  • Embedding + 位置编码作为Transformer的输入
  • 绝对位置信息中包含了相对位置信息,pos+k位置的位置信息可以由pos位置和k位置的位置信息的线性组合形式表示(三角函数性质)

注意力机制:

  • 基本架构:
  • Q,K,V的获取方式:
    • 用原先的Embedding+位置编码的词向量,分别乘以Wq,Wk,Wv。(W矩阵是学习目标,经过随机初始化再迭代更新)
  • 除以dk的原因:QK相乘的值很大,经过softmax在反向传播中的梯度很小,会引起梯度消失的情况。dk是矩阵维度
  • 多头注意力:多个注意力头就会有多个QKV矩阵,串联后通过线性映射到最终输出的维度上。

残差:

  • 在LayerNorm层进行残差对位相加:
  • 残差为什么有效:F(X)是残差项,X是原项。X与经过两层权重计算的F(X)进行对位相加。目的是为了保证梯度不会消失(为0),即使残差项接近0,原项为1也可以保证整体不为0
  • 加入残差项可以使得网络层数足够大时,也能保证梯度不消失。

BatchNorm和LayerNorm:

  • BatchNorm针对的是在Batch中的每个样本在同一维度上进行处理/缩放
    • 优点:解决内部的协变量偏移;缓解梯度饱和,加快收敛(被证伪)
    • 缺点:batchsize较小时,质量很差;当输入句子长度参差不齐时,很难实现理想的Normalization
  • LayerNorm针对的是同一个样本中所有维度进行处理/缩放

Decoder:

Masked多头注意力:

  • 为什么要masked(对当前和之后的单词做mask):保证当前预测时,后面的输入单词不会影响预测结果。(确保了位置 i 的预测仅依赖于小于 i 的位置处的已知输出;)

多头注意力交互层:

  • encoder提供K和V矩阵,decoder提供Q矩阵。encoder输出的K和V会与每个decoder中的交互层结合。

Linear层:

  • 将由解码器堆栈产生的向量投影到一个更大的向量中,称为对数向量。这个向量对应着模型的输出词汇表;向量中的每个值,对应着词汇表中每个单词的得分;

Softmax层:

  • 这些分数转换为概率(所有正数,都加起来为1.0)。选择具有最高概率的单元,并且将与其相关联的单词作为该时间步的输出。

不同注意力机制:

点积注意力(Dot-Product Attention):

  • 在点积注意力中,首先通过计算查询向量(query)和键向量(key)之间的点积来衡量它们之间的相似度。
  • 然后将这个相似度值进行softmax归一化,得到每个键的权重。
  • 最后将这些权重与相应的值向量(value)相乘并求和,得到最终的输出。
  • 这种方法的计算效率高,但在高维空间中可能存在梯度爆炸或梯度消失的问题。

加性注意力(Additive Attention):

  • 加性注意力通过将查询向量和键向量映射到一个新的空间中,然后计算它们之间的加性关系来衡量相似度。
  • 这个加性关系通常通过神经网络中的全连接层来实现。
  • 相比于点积注意力,加性注意力的计算复杂度稍高,但更灵活,可以处理一些点积注意力难以解决的问题。

缩放点积注意力(Scaled Dot-Product Attention)(Transformer中所使用):

  • 缩放点积注意力是点积注意力的一种改进版本,旨在解决梯度问题。
  • 在计算相似度时,将点积结果除以一个缩放因子,通常是查询向量的维度的平方根。
  • 这个缩放因子可以确保在高维空间中,点积结果的数量级不会过大或过小,从而减轻梯度问题的影响。

一些图片来源:https://www.bilibili.com/video/BV1Di4y1c7Zm/