当理解自注意力机制时,可以想象一个句子级别的文本输入作为示例。假设我们有以下句子:“The cat is eating fish”。现在我们将这个句子转换成词嵌入向量序列:
(给定有值的只是示例,方便理解,以下都是这样)
其中:
- 表示“The” 对应词向量为[2.1,1.5,0.7]
- 表示“cat” 对应词向量为[-0.3,0.9,1.6]
- 表示“is” 对应词向量为[1.8,0.4,-1.1]
- 表示“eating” 对应词向量为[0.5,-0.2,1.3]
- 表示“fish”对应词向量为[-0.6,0.8,0.2]
- 每个都是一个词嵌入向量。
接下来,我们将使用自注意力机制来为每个词生成上下文表示。首先,我们需要计算每个词的查询向量(Query)、键向量(Key)和数值向量(Value)。
对于每个:
然后,我们计算注意力分数(Attention Scores),这个分数表示第i个词向量和其他词向量间的相关性的分数:
求解示例如下,比如求"The"的注意力分数
同样的方式计算其他词的Q,K,V,
接着计算注意力分数(Attention Scores)
利用这些注意力权重来对数值向量(v_j)进行加权求和,从而得到输出表示:
这样,我们就可以通过自注意力机制动态地为每个词生成其上下文表示,使得模型能够更好地理解整个句子的语义结构。这种方法允许模型同时关注句子中不同位置的词,并根据它们之间的关系来计算每个词的表示,从而更好地捕捉句子的语义信息。
这里就是把"The"的原始词向量[2.1,1.5,0.7],通过自注意力机制结合其他词向量和QKV转换成结合了上下文信息的向量表示[-0.5228,1.5181]
最后附图: