Transformer模型-Multi-Head Attention多头注意力的简明介绍

今天介绍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

  • 51
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ankie(资深技术项目经理)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值