查询 (query, Q) 可以表现当前任务(例如,“接在 too 之后的词是什么?”)。在本例中,通过将单词 “too” 的嵌入通报到权重矩阵 W Q W_Q WQ 中,从维度 d e d_e de 变换为维度 d k d_k dk,得到了查询。
键向量 (key, K) 是句子中每个单词的表现,可以将其视为每个单词可以资助完成的猜测任务的贡献。它们与查询的产生方式类似,通过将每个嵌入通报到权重矩阵 W K W_K WK 中,将每个向量的维度从 d e d_e de 变换为 d k d_k dk,键和查询的长度雷同。
在注意力头中,利用每对向量 ( Q K Q_K QK) 之间的点积将每个键与查询举行比较(这就是键和查询必须具有雷同的长度的原因)。键/查询对的点积结果数值越高,键与查询的相干度就越强,因此允许它对注意力头的输出做出更大的贡献。得到的向量乘以 d k d_k dk,以保持向量和的方差稳固(大约等于 1),并应用 softmax 函数确保贡献总和为 1,这便是注意力权重向量。
值向量 (value, V) 也是句子中单词的表现,可以将其视为每个单词的未加权贡献。通过将每个嵌入通报到权重矩阵 W V W_V WV 中,将每个向量的维度从 d e d_e de 变换为 d v d_v dv,得到值向量。需要注意的是,值向量不一定与键和查询具有雷同的长度(但通常为简单起见,利用雷同长度)。
值向量乘以注意力权重,得到给定 Q Q Q、 K K K 和 V V V 的注意力:
A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attention(Q,K,V)=softmax(\frac {QK^T} {\sqrt {d_k}})V Attention(Q,K,V)=softmax(dk QKT)V
为了从注意力头得到终极输出向量,将注意力举行求和,得到长度为 d v d_v dv 的向量。这个上下文向量捕捉了句子中的单词对于猜测接在 too 之后的词的任务的共同意见。
3.2 多头注意力
在 Keras 中,可以构建 MultiHeadAttention 层,该层将多个注意力头的输出连接起来构成多头注意力 (Multihead Attention),允许每个头学习差异的注意力机制,以便整个层可以学习更复杂的关系。
连接后的输出通过终极的权重矩阵 W O W_O WO 举行投影,将向量投影到期望的输出维度上。在本节下,输出维度与查询的输入维度雷同 ( d e d_e de),以便可以将层按序次堆叠在一起。下图表现了 MultiHeadAttention 层输出的构建方式。