自注意力机制

自注意力是Transformer的核心创新,它允许序列中的每个位置与所有其他位置建立直接联系,捕捉任意距离的依赖关系。

共 3 篇文章·阅读时间:约40分钟

01注意力机制概述

注意力机制模拟人类视觉注意力,让模型能够动态关注输入中最相关的部分。

注意力机制的起源

注意力机制最早在2014年用于图像描述生成和机器翻译(Bahdanau等人), 解决了Seq2Seq模型的"信息瓶颈"问题。

传统Seq2Seq的问题

编码器必须将整个源序列的信息压缩到一个固定长度的向量中, 导致长序列信息丢失。注意力机制允许解码器在生成每个词时, 直接关注源序列的相关部分。

自注意力的定义

自注意力(Self-Attention)也称为内部注意力(Intra-Attention), 是同一序列不同位置之间的注意力机制。

自注意力的核心思想

对于序列中的每个位置,计算它与序列中所有位置的相似度, 然后根据相似度对所有位置的信息进行加权求和,得到该位置的输出表示。

02Query-Key-Value

Query-Key-Value是注意力计算的核心抽象,将输入分离为查询、键和值三个向量。

QKV原理

对于每个输入token,我们生成三个向量:Query(查询)、Key(键)和Value(值)。

三个向量的含义

  • Query(查询):当前位置想要查找的信息
  • Key(键):每个位置的"索引",用于匹配Query
  • Value(值):每个位置的实际信息,用于加权求和

计算方式

输入嵌入 X 通过三个线性变换得到:

Q = XWQ, K = XWK, V = XWV

注意力计算公式

Scaled Dot-Product Attention是Transformer使用的注意力机制:

公式

Attention(Q, K, V) = softmax(QKT / √dk)V

计算步骤

  1. QKT:计算Query和Key的点积,得到注意力分数
  2. 除以 √dk:缩放,防止梯度消失/爆炸
  3. softmax:归一化,得到注意力权重
  4. 乘以V:加权求和,得到输出

为什么用点积?

  • 计算效率高,可以利用矩阵乘法高度并行
  • 点积值越大,相似度越高,符合直觉
  • 深度学习中经过验证的有效机制

03缩放因子

缩放因子 √dk 是Transformer稳定训练的关键因素之一。

点积过大的问题

当维度 dk 较大时,点积的值会变得很大, 导致softmax函数进入饱和区域。

问题分析

假设Q和K的各个分量是均值为0、方差为1的独立随机变量:

那么 QKT 的每个元素的均值为0,方差为 dk

当 dk 很大时,方差很大,点积的值会很大

softmax的饱和问题

当输入值很大时,softmax的梯度趋近于0,导致训练困难。 例如 softmax([10, 5, 2]) ≈ [0.99, 0.01, 0],梯度几乎为0。

缩放解决方案

除以 √dk 可以将点积的方差缩放到1,避免softmax饱和。

缩放因子的作用

  • 使softmax的输入方差稳定在1左右
  • 保证梯度在训练初期不会消失
  • 使得注意力权重分布更加平滑

为什么是 √dk

如果 Q 和 K 的分量是独立的随机变量,方差为1, 那么 QKT 的方差是 dk, 标准差是 √dk。 除以 √dk 后,方差变为1。

其他注意力变体

  • Additive Attention:使用前馈网络计算注意力,非点积
  • Location-based Attention:只基于位置,不使用QK
  • Multiplicative Attention:一般的缩放点积注意力
----