Attention是一种自注意力机制,它可以根据输入序列中的每个元素(如单词或字节)的相关性,动态地分配不同的权重,从而捕捉序列中的依赖关系和语义信息¹²。
Attention中的query, key和value是三种不同的向量,它们分别有以下作用¹²³:
- Query:查询向量,表示要关注或检索的目标,如翻译任务中的目标语言单词。
- Key:键向量,表示要与查询向量进行匹配或比较的源,如翻译任务中的源语言单词。
- Value:值向量,表示要根据查询向量和键向量的匹配程度来加权求和的信息,如翻译任务中的源语言单词的嵌入向量。
Attention的计算过程如下¹²:
- 首先,将输入序列(如单词或字节)的嵌入向量(embeddings)分别映射为查询向量(query)、键向量(key)和值向量(value),这三种向量的维度相同,记为d_k。
- 然后,对每个位置i,计算查询向量i和所有键向量j的点积或其他相似度度量,得到一个注意力分数(attention score)s_ij,表示位置i对位置j的注意力权重。
- 接着,对每个位置i,对所有注意力分数s_ij进行归一化处理,如通过softmax函数得到一个注意力权重(attention weight)a_ij,表示位置i对位置j的注意力程度。
- 最后,对每个位置i,用所有注意力权重a_ij来加权求和对应的值向量j,得到一个输出向量o_i,表示位置i关注的信息。
注意,源语言的嵌入向量和源语言单词的区别是:
- 源语言单词是指翻译任务中的输入语言的单词,如英语到中文翻译中的英语单词。
- 源语言的嵌入向量是指将源语言单词通过一个嵌入层(embedding layer)转换为一个固定维度的实数向量,用于表示源语言单词的语义和特征,如英语到中文翻译中的英语单词的嵌入向量。
嵌入向量是一种常用的将离散的符号(如单词或字节)转换为连续的数值的方法,可以方便地进行神经网络的计算和学习。嵌入层通常是一个可训练的参数矩阵,可以根据任务的目标进行优化。