自注意力机制的计算过程
自注意力机制的计算过程
自注意力机制(Self-Attention Mechanism)是Transformer模型的核心组件之一,广泛应用于自然语言处理领域。其计算过程主要包括三个步骤:生成查询(Query)、键(Key)和值(Value)向量,计算注意力得分,以及根据注意力得分生成加权输出。
一、生成查询、键和值向量
假设有一句话,包含n个单词。通过词嵌入技术将每个单词转换为大小为512的向量,形成输入序列 X = [a1, a2, ..., an],其中 ai 表示序列中的第 i 个元素。
定义三个权重矩阵:Wq(查询矩阵)、Wk(键矩阵)和 Wv(值矩阵)。这些矩阵的维度通常与输入元素的嵌入维度相匹配,并在模型训练过程中学习得到。
对于序列中的每个元素 ai,通过以下公式计算其查询向量 qi、键向量 ki 和值向量 vi:
- qi = xi * Wq(查询向量)
- ki = xi * Wk(键向量)
- vi = xi * Wv(值向量)
二、计算注意力得分
对于序列中的每个元素 ai,计算其与序列中所有元素 aj(包括自身)的查询向量 qi 和键向量 kj 的点积:
score(ai, aj) = qi * kj^T(T 表示转置)
为了防止点积结果过大导致softmax函数梯度消失,通常会引入一个缩放因子(scale),通常为键向量维度的平方根的倒数:
scaled_score(ai, aj) = score(ai, aj) / √dk,其中 dk 是键向量的维度。
接着对缩放后的得分进行softmax归一化,得到注意力权重:
attention_weights(ai, aj) = softmax(scaled_score(ai, aj))
三、生成加权输出
根据注意力权重和值向量,计算每个元素 ai 的加权输出:
output(ai) = Σj(attention_weights(ai, aj) * vj)
最后将序列中所有元素的加权输出汇总,得到最终的输出序列。
注:文中图片截取自李宏毅transformer教学视频。