算法手撕面经系列(1)--手撕多头注意力机制

news/2024/9/18 20:47:28/ 标签: 算法, python, 深度学习

多头注意力机制

 一个简单的多头注意力模块可以分解为以下几个步骤:

  1. 先不分多头,对输入张量分别做变换,得到 Q , K , V Q,K,V Q,K,V
  2. 对得到的 Q , K , V Q,K,V Q,K,V按头的个数进行split;
  3. Q , K Q,K Q,K计算向量点积
  4. 考虑是否要添因果mask
  5. 利softmax计算注意力得分矩阵atten
  6. 对注意力得分矩阵施加Dropout
  7. 将atten矩阵和 V V V矩阵相乘
  8. 再过一道最终的输出变换

代码

 给出一个 d k = d v = d m o d e l d_k=d_v=d_{model} dk=dv=dmodel的多头注意力实现如下:

python">
class MHA(nn.Module):def __init__(self,C_in,dmodel,num_head=8,p_drop=0.2):super(MHA, self).__init__()self.QW=nn.Linear(C_in,dmodel)self.KW=nn.Linear(C_in,dmodel)self.VW=nn.Linear(C_in,dmodel)self.dp=nn.Dropout(p_drop)self.W_concat=nn.Linear(dmodel,dmodel)self.n_head=num_headself.p_drop=p_dropself.depth=dmodel//num_headdef forward(self,X,casual=True):B,L,C=X.shapeQ=self.QW(X)K=self.KW(X)V=self.VW(X)Q=Q.reshape((B,L,self.n_head,-1)).permute(0,2,1,3)K=K.reshape((B,L,self.n_head,-1)).permute(0,2,1,3)V=V.reshape((B,L,self.n_head,-1)).permute(0,2,1,3)atten=Q.matmul(K.transpose(2,3))if casual:mask=torch.triu(torch.ones(L,L))atten=torch.where(mask==1,atten,torch.ones_like(atten)*(-2**32+1))atten=torch.softmax(atten,dim=-1)atten=self.dp(atten)out=torch.matmul(atten,V)/self.depth**(1/2)out=out.permute(0,2,1,3).reshape(B,L,-1)out=self.W_concat(out)return outif __name__=="__main__":input=torch.rand(10,5,3)model=MHA(3,64,4)res=model(input)

http://www.ppmy.cn/news/1525278.html

相关文章

mac 电脑 git credential osxkeychain问题之二

git credential osxkeychain问题,无法拉取最新代码,failed to get:-128 此处应输入电脑登录密码 1.问题描述 不知道是系统还是brew进行了更新,启动项目后 git pull 无法拉取最新代码,git项目git pull 操作时突然提示:…

【uni-app】命令行创建 uni-app 项目

命令行创建 uni-app 项目 优势 通过命令行创建 uni-app 项目,不必依赖 HBuilderX,TypeScript 类型支持友好。 命令行创建 uni-app 项目: vue3 ts 版 👉国内 gitee 下载github 下载 # 通过 git 从 gitee 克隆下载 git clone…

使用 PyCharm 新建 Python 项目详解

使用 PyCharm 新建 Python 项目详解 文章目录 使用 PyCharm 新建 Python 项目详解一 新建 Python 项目二 配置环境1 项目存放目录2 Python Interpreter 选择3 创建隔离环境4 选择你的 Python 版本5 选择 Conda executable 三 New Window 打开项目四 目录结构五 程序编写运行六 …

基于单片机的水产养殖饲料自动投喂系统

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图系统框架图设计获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机…

Qt, 堆栈窗体, 布局管理, 控件插入, 子布局插入

StackDlg(QWidget *parent 0); ~StackDlg(); private: } ; QListWidget *list; QStackedWidget *stack; Qlabel *labell; QLabel *label2; Qlabel *label3; 在文件开始部分添加以下头文件&#xff1a; #include <QListWidget> #include <QStackedWidget>…

C# WinForm 中 DataGridView 实现单元格cell 能进编辑状态但是不能修改单元格的效果

在Windows Forms&#xff08;WinForms&#xff09;开发中&#xff0c;DataGridView 控件是一个功能强大的组件&#xff0c; 用于显示和管理表格数据。无论是展示大量数据&#xff0c;还是实现交互式的数据操作&#xff0c; DataGridView 都能提供多样的功能支持&#xff0c;比如…

弘扬中华优秀传统文化

中华优秀传统文化是中华民族的宝贵财富。在新时代&#xff0c;弘扬中华优秀传统文化具有重要意义。本文将探讨如何传承和弘扬中华优秀传统文化。 一、中华优秀传统文化的内涵 传统美德&#xff1a;仁、义、礼、智、信等传统美德是中华民族的精神支柱。 文学艺术&#xff1a;诗…

苹果CMS影视程序被举报侵权?有效解决方案指南

在当今数字时代&#xff0c;影视版权问题成为了许多网站面临的主要挑战。如果你使用苹果CMS进行影视内容管理&#xff0c;可能会遇到版权举报的问题。幸运的是&#xff0c;有一种有效的解决方案可以帮助你应对这些挑战——苹果CMS插件&#xff0c;它能够屏蔽原视频内容&#xf…

namp拓展功能——nse脚本

前言: 最近在写一个需求&#xff0c;需要使用 nmap 获取指纹信息的同时&#xff0c;获取 http 信息的响应体&#xff08;如果是 http 协议的情况下&#xff09; 并行并非不可&#xff0c;但是nmap本身就有对http协议的探测 nmap的nse脚本 nmap 在 -sV 的命令下&#xff0c;本…

第二章算法设计题

1设线性表存放在向量A[arrsize]的前elenum个分量中&#xff0c;且递增有序。试写一算法&#xff0c;将x插入到线性表的适当位置上&#xff0c;以保持线性表的有序性&#xff0c;并且分析算法的时间复杂度。 【提示】直接用题目中所给定的数据结构&#xff08;顺序存储的思想是…

说说相机标定?

相机标定 什么是相机标定基本原理标定方法标定流程 相机标定是计算机视觉和图像处理中的一个重要过程&#xff0c;它主要用于确定相机的内部参数和外部参数&#xff0c;以便在后续的图像处理和计算机视觉应用中能够更准确地进行图像重建、三维重建、目标跟踪等操作。 什么是相机…

【DataSophon】Yarn配置历史服务器JobHistory和Spark集成historyServer

目录 一、概述 1.1历史服务器JobHistory 1.2 Spark历史服务器HistoryServer 二、集成配置 一、概述 1.1历史服务器JobHistory 为了查看程序的历史运行情况&#xff0c;需要配置一下历史服务器。方便在xxxx:8088查看历史任务运行日志信息。 1.2 Spark历史服务器HistoryServ…

llvm后端之函数栈帧

llvm后端之函数栈帧 引言1 目标扩展实现1.1 emitPrologue和emitEpilogue1.2 storeRegToStackSlot和loadRegFromStackSlot 2 寄存器存栈与恢复 引言 llvm后端在物理寄存器分配后、指令发射前会调用PEI这个pass来生成函数栈帧的创建与销毁。 1 目标扩展实现 在target下&#x…

大舍传媒-日本媒体发稿推荐今日东京tokyotoday

大舍传媒-日本媒体发稿推荐今日东京tokyotoday 在当今这个信息爆炸的时代&#xff0c;新闻传播的速度与广度已经成为衡量其影响力的重要指标。对于希望在国际舞台上发声的企业、组织乃至个人来说&#xff0c;掌握在海外媒体平台上发布新闻内容的技巧显得尤为重要。大舍传媒&am…

第五章,java超市会员管理系统(后端)

高级编程 第五章,java超市会员管理系统(后端) 一,项目概述 本项目旨在开发一个超市会员管理系统,帮助超市管理会员信息、积分、优惠活动等。系统将提供用户友好的界面,方便超市员工进行日常操作。 二,功能需求 积分积累积分兑换查询剩余积分开卡(送100积分)退出系…

java重点学习-线程的并发安全(2)

九 线程的并发安全 9.7 ReentrantLock的实现原理 ReentrantLock表示支持重新进入的锁&#xff0c;调用lock方法获取了锁之后&#xff0c;再次调用 lock&#xff0c;是不会再阻塞ReentrantLock主要利用CASAQS队列来实现支持公平锁和非公平锁&#xff0c;在提供的构造器的中无参…

[LitCTF 2024]SAS - Serializing Authentication

题目提示反序列化 源码 <?phpclass User {public $username;public $password;function __construct($username, $password) {$this->username $username;$this->password $password;}function isValid() { return $this->username admin && $this-&g…

Python数据处理利器,pivot与melt让表格变得灵活

大家好&#xff0c;在数据分析和处理过程中&#xff0c;数据的重塑是一个非常常见且重要的操作。数据重塑能够从不同的角度观察数据&#xff0c;以更符合分析需求的方式来呈现数据。在Python的Pandas库中&#xff0c;pivot和melt是两种强大的数据重塑工具&#xff0c;能够轻松地…

软件测试学习笔记丨Postman实战练习

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/32096#h-22 二、实战练习 2.1 宠物商店接口文档分析 接口文档&#xff1a;http://petstore.swagger.io &#xff0c;这是宠物商店接口的 swagger 文档。 2.1.1 什么是 swagger Swagger 是…

数学基础 -- 线性代数之奇异值

奇异值与其应用 1. 奇异值定义 对于任意的矩阵 A A A&#xff08;可以是方阵或非方阵&#xff09;&#xff0c;存在三个矩阵 U U U、 Σ \Sigma Σ 和 V V V&#xff0c;使得&#xff1a; A U Σ V T A U \Sigma V^T AUΣVT 其中&#xff1a; U U U 是一个 m m m \ti…