文章目录

  • 多头注意力

多头注意力

给定一个Query(查询)和一系列的Key-Value对一起映射出一个输出。包括下面三个关键性步骤:

  • 将Query与Key进行相似性度量
  • 将求得的相似性度量进行缩放标准化
  • 将权重与value进行加权

在实践中,当给定相同的查询、键和值的集合时, 我们希望模型可以基于相同的注意力机制学习到不同的行为, 然后将不同的行为作为知识组合起来, 捕获序列内各种范围的依赖关系 (例如,短距离依赖和长距离依赖关系)。 因此,允许注意力机制组合使用查询、键和值的不同 子空间表示(representation subspaces)可能是有益的。

为此,与其只使用单独一个注意力汇聚, 我们可以用独立学习得到的h组不同的线性投影(linear projections)来变换查询、键和值。 然后,这h组变换后的查询、键和值将并行地送到注意力汇聚中。 最后,将这h个注意力汇聚的输出拼接在一起, 并且通过另一个可以学习的线性投影进行变换, 以产生最终输出。 这种设计被称为多头注意力(multihead attention)。对于h个注意力汇聚输出,每一个注意力汇聚都被称作为一个头(head)。下图展示了使用全连接层来实现可学习的线性变换的多头注意力。


上图为多头注意力:多个头连接然后线性变换

多头注意力机制则是单头注意力机制的进化版,把每次attention运算分组(头)进行,能够从多个维度提炼特征信息。具体原理可以参看相关的科普文章,下面是Pytorch实现。

import torch.nn as nn
class MHSA(nn.Module):def __init__(self, num_heads, dim):super().__init__()# Q, K, V 转换矩阵,这里假设输入和输出的特征维度相同self.q = nn.Linear(dim, dim)self.k = nn.Linear(dim, dim)self.v = nn.Linear(dim, dim)self.num_heads = num_headsdef forward(self, x):B, N, C = x.shape# 生成转换矩阵并分多头q = self.q(x).reshape(B, N, self.num_heads, -1).permute(0, 2, 1, 3)k = self.k(x).reshape(B, N, self.num_heads, -1).permute(0, 2, 1, 3)v = self.k(x).reshape(B, N, self.num_heads, -1).permute(0, 2, 1, 3)# 点积得到attention scoreattn = q @ k.transpose(2, 3) * (x.shape[-1] ** -0.5)attn = attn.softmax(dim=-1)# 乘上attention score并输出v = (attn @ v).permute(0, 2, 1, 3).reshape(B, N, C)return v

注意力机制-多头注意力相关推荐

  1. 注意力机制 - 多头注意力

    多头注意力 在实践中,当给定相同的查询.键和值的集合时,我们希望模型可以基于相应的注意力机制学习到不同的行为,然后将不同的行为作为知识组合起来,捕获序列内各种范围的依赖关系(例如,段距离依赖和长距离依 ...

  2. 自注意力机制与注意力机制

    基本内容理解的话推荐看一下这篇博客Transformer:注意力机制(attention)和自注意力机制(self-attention)的学习总结,这个博主讲的很细致,比较容易理解. 这里借用一下上述 ...

  3. 空间注意力机制sam_Attention注意力机制介绍

    什么是Attention机制 Attention机制通俗的讲就是把注意力集中放在重要的点上,而忽略其他不重要的因素.其中重要程度的判断取决于应用场景,拿个现实生活中的例子,比如1000个人眼中有100 ...

  4. 注意力机制 - Bahdanau注意力

    文章目录 Bahdanau注意力 1 - 模型 2 - 定义注意力解码器 3 - 训练 4 - 小结 Bahdanau注意力 我们在 9.7节中探讨了机器翻译问题:通过设计⼀个基于两个循环神经⽹络的编 ...

  5. 什么是注意力机制?注意力机制的实现步骤

    我们观察事物时,之所以能够快速判断一种事物(当然允许判断是错误的),是因为我们大脑能够很快把注意力放在事物最具有辨识度的部分从而作出判断,而并非是从头到尾的观察一遍事物后,才能有判断结果,正是基于这样 ...

  6. 注意力机制之注意力分数

    目录 注意力分数 扩展到高维 加性注意力 scaled 点积注意力 总结 代码 注意力分数 注意力分数和注意力权重的区别: 扩展到高维 这里,q的数量和key-value对的数量可以不一致.q,k,v ...

  7. transformer学习之多头注意力机制

    文章目录 题目 注意力机制 多头注意力机制 为什么要使用多头注意力机制 代码实现 题目 transformer学习之多头注意力机制 注意力机制 详细了解 ➡️ 注意力机制 之前我们也学习过了Seq2S ...

  8. 注意力机制(四):多头注意力

    专栏:神经网络复现目录 注意力机制 注意力机制(Attention Mechanism)是一种人工智能技术,它可以让神经网络在处理序列数据时,专注于关键信息的部分,同时忽略不重要的部分.在自然语言处理 ...

  9. Pytorch:Transformer(Encoder编码器-Decoder解码器、多头注意力机制、多头自注意力机制、掩码张量、前馈全连接层、规范化层、子层连接结构、pyitcast) part1

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) Encoder编码器-Decoder解码器框架 + Atten ...

最新文章

  1. windows ssh secure shell设置初始窗口大小
  2. 从字符串中删除所有出现的char
  3. python面试总结
  4. C#实现乞丐版IOC容器
  5. Flume:使用Apache Flume收集客户产品搜索点击数据
  6. 信息论 哈夫曼编码 与 菲诺编码的实现(对一幅BMP格式的灰度图像(个人 证件照片)进行二元霍夫曼编码和译码。并进行编码效率的计算,对一幅BMP格式的灰度图像进行二 元Fano编码、译码 )
  7. 哈尔滨理工C语言程序设计精髓_计算机科学与信息工程学院C语言程序设计竞赛圆满完成!...
  8. LAMP源码安装原理
  9. python 对象_python中对象可不可以
  10. 如何干掉msedge 浏览器首页360流氓导航页
  11. 怀化市哪里有学计算机的,怀化汽修学校推荐-哪里好,计算机职业学校
  12. C# Activator的用法
  13. 在用友U8V13.0erp软件供应链管理的存货核算模块中正常单据记账后,查看存货核算的收发存汇总表时,发现存货有数量但没有结存金额,应如何调整?
  14. Python中使用print函数的三种输出方式
  15. 搜索下载免费操作系统(转)
  16. 不同几种剔除(Culling)在渲染流程中的使用总结
  17. winpe装双系统linux_LINUX下安装WINDOWS双系统
  18. sendgrid html text,使用SendGrid发送电子邮件
  19. 300张现场照片,揭秘移动云大会!
  20. 2020年全省彩礼排名_2020国人彩礼地图:哪个省的彩礼最贵?

热门文章

  1. 中国魔芋胶行业研究与投资前景预测报告(2022版)
  2. ACM比赛一些需要注意的极端情况
  3. 数据库查询的降序排列
  4. 域控可以改计算机用户名,如何修改ActiveDirectory域控制器计算机名称
  5. C#体贴之处点滴 - extention method, lambda expression, anonymous method
  6. 1.3 欠/过拟合,局部加权回归(Loess/LWR)及Python实现(基于随机梯度下降)
  7. mysql的pv跟pc_PC板PV板PVC板PPV板区别与用途
  8. 存储服务器在监控中的作用,监控项目中存储服务器IPSAN云存储方案的优劣势对比...
  9. 计算机开机按f1,开机要按F1怎么解决?电脑开机不按F1进去系统的方法
  10. Linux中的UID与GID