当前位置:   article > 正文

Transformer模型-Multi-Head Attention多头注意力的简明介绍_transformer多头注意力参数计算

transformer多头注意力参数计算

今天介绍transformer模型的Multi-Head Attention多头注意力。

原论文计算scaled dot-product attention和multi-head attention

实际整合到一起的流程为:

通过之前文章,假定我们已经理解了attention;今天我们按顺序来梳理一下整合之后的顺序。重新梳理Attention Is All You Need(Transformer模型): Attention=距离,权重,概率;Multi-Head attention-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/ank1983/article/details/136998593

当使用多头注意力时,通常d_key = d_value = (d_model / n_heads),其中n_heads是头的数量。研究人员表示,模型之所以能够“关注不同位置的不同表示子空间中的信息”,所以经常使用并行注意力层而不是全维度层。只有一个头时,平均化会阻止这种情况。

第一步:通过线性层W*传递输入Q、K和V

计算注意力的第一步是获取Q、K和V张量;它们分别是查询、键和值张量。它们是通过获取位置编码的嵌入(记作X)并同时将张量传递通过三个线性层(分别记作Wq、Wk和Wv)来计算的。这可以在上面的详细图像中看到。

  • Q = XWq
  • K = XWk
  • V = XWv
  • has a size of (batch_size, seq_length, d_model). An example would be a batch of 32 sequences of length 10 with an embedding of 512, which would have a shape of (32, 10, 512).
  • WqWk, and Wv have a size of (d_model, d_model). Following the example above, they would have a shape of (512, 512).

The linear layers for WqWk, and Wv can be created using nn.Linear(d_model, d_model)

**关于W*和线性层,可参考文章:

学习transformer模型-线性层(Linear Layer),全连接层(Fully Connected Layer)或密集层(Dense Layer)的简明介绍-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/ank1983/article/details/137212380学习transformer模型-权重矩阵Wq,Wk,Wv的简明介绍-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/ank1983/article/details/137160105

第二步:将Q、K和V分割为各自的头

创建了Q、K和V张量后,现在可以通过将d_model的视图更改为(n_heads, d_key)来将它们分割为各自的头。n_heads可以是一个任意数,但在处理较大的嵌入时,通常会选择8、10或12。请注意,d_key = (d_model / n_heads)。

  • Q has a shape of (batch_size, n_heads, Q_length, d_key)
  • K has a shape of (batch_size, n_heads, K_length, d_key)
  • V has a shape of (batch_size, n_heads, V_length, d_key)

第三步:对每个头计算attention

关于点积和矩阵乘法,请参看:

学习transformer模型-点积dot product,计算attention-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/ank1983/article/details/137093906学习transformer模型-矩阵乘法;与点积dot product的关系;计算attention-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/ank1983/article/details/137090019

第四步:把所有头的attention结果拼接到一起(concat)。

把所有头的attention结果拼接到一起(concat)。

拼接操作会逆转最初进行的分割。第一步是转置n_heads和Q_length。第二步是将n_heads和d_key重新拼接在一起以得到d_model。

完成这些步骤后,A将具有(batch_size,Q_length,d_model)的形状。

第五步,也是最后一步:通过线性层Wo输出。

是将A通过Wo传递,其形状为(d_model,d_model)。再次,权重张量在每个批次中的每个序列上广播。最终的输出保持了其形状:

(batch_size,Q_length,d_model)

请注意,这个输出可以与原始输入X进行加权和,从而得到自注意力机制的输出。

用jupyter计算attention(没有multi-head)。可以参看以下文章,

学习transformer模型-用jupyter演示逐步计算attention-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/ank1983/article/details/137151606

原文链接:

https://medium.com/@hunter-j-phillips/multi-head-attention-7924371d477a

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/817466
推荐阅读
相关标签
  

闽ICP备14008679号