自注意力机制将一个词与句子中的所有词联系起来,以便更好地理解这个词。为了计算自注意力值,我们使用了3个矩阵,即查询矩阵、键矩阵和值矩阵。
自注意力机制(Self-Attention Mechanism)是 Transformer 架构中的核心组件,它允许模型为输入序列中的每个元素分配不同的权重,从而捕获序列内的长距离依赖关系。
1. 计算查询(Query)、键(Key)和值(Value)
对于给定的输入 X,我们使用三个不同的权重矩阵
来计算查询、键和值。这些权重矩阵在训练过程中是可学习的参数。
2. 计算注意力分数
对于输入序列中的每个词,使用其查询与所有键计算一个点积来得到注意力分数。
3. 缩放注意力分数
为了稳定训练和提高泛化能力,将注意力分数除以键向量维度的平方根。假设键的维度为
,则缩放因子为
。
4. 应用 Softmax 函数
对缩放后的注意力分数应用 Softmax 函数,得到注意力权重。
5. 计算加权的值
使用上一步得到的注意力权重对值进行加权求和。
现在,将结果与值矩阵V相乘,得到最终的注意力矩阵Z。注意力矩阵Z 就是值向量与分数加权之后求和所得到的结果。
6. 多头自注意力
在 Transformer 架构中,通常使用多头自注意力,意味着上述过程会并行地在多个不同的投影空间(权重矩阵集)中进行。最后,所有头的输出会被拼接在一起并通过一个线性变换。
为了确保结果准确,我们不能依赖单一的注意力矩阵,而应该计算多个注意力矩阵,并将其结果串联起来。使用多头注意力的逻辑是这样的:使用多个注意力矩阵,而非单一的注意力矩阵,可以提高注意力矩阵的准确性。
可以直接将所有的注意力头(注意力矩阵)串联起来,并将结果乘以一个新的权重矩阵W0,从而得出最终的注意力矩阵:
自注意力机制的计算步骤如图所示:
这个机制使模型能够根据其内部计算的权重捕获输入序列中不同位置之间的关系,从而在许多任务中都取得了出色的表现。
联系客服