【深度学习中的注意力机制1】11种主流注意力机制112个创新研究paper+代码——缩放点积注意力(Scaled Dot-Product Attention)

【深度学习中的注意力机制1】11种主流注意力机制112个创新研究paper+代码——缩放点积注意力(Scaled Dot-Product Attention)

【深度学习中的注意力机制1】11种主流注意力机制112个创新研究paper+代码——缩放点积注意力(Scaled Dot-Product Attention)


文章目录

  • 【深度学习中的注意力机制1】11种主流注意力机制112个创新研究paper+代码——缩放点积注意力(Scaled Dot-Product Attention)
  • 前言
  • 1. 起源与提出
  • 2. 原理
  • 3. 发展
  • 4. 代码实现
  • 5. 总结


欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!
祝所有的硕博生都能遇到好的导师!好的审稿人!好的同门!顺利毕业!

大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文:
可访问艾思科蓝官网,浏览即将召开的学术会议列表。会议入口:https://ais.cn/u/mmmiUz

前言

“缩放点积注意力”(Scaled Dot-Product Attention)是深度学习中注意力机制的重要组成部分。该机制最初由Vaswani et al.在2017年提出的Transformer模型中引入,并在自然语言处理(NLP)和计算机视觉等领域取得了巨大成功。

1. 起源与提出

注意力机制最早应用于机器翻译和序列生成任务中,旨在通过关注输入序列中最相关的部分来生成输出序列。而“缩放点积注意力”是Transformer模型中提出的一种高效的注意力机制,用来替代传统的RNN或LSTM在处理序列任务时的长依赖性问题。

缩放点积注意力的核心是计算输入序列之间的相似度,并将相似度作为权重来生成加权的输出序列。这种方法大大提升了模型并行计算的效率,并且适用于处理大规模数据。

2. 原理

缩放点积注意力的核心计算如下:

  • 给定三个输入:Query(Q)、Key(K)和Value(V),我们计算Query和Key的点积,以衡量每个Query与Key之间的相似性。
  • 将点积的结果除以一个缩放因子(通常是 d k \sqrt{d_k} dk ,其中 d k d_k dk是Key的维度),以避免点积值过大导致梯度消失问题。
  • 然后对这些相似性分数通过softmax进行归一化,得到注意力权重。
  • 最后,使用这些权重对Value进行加权求和,生成最终的输出。

数学公式如下:

在这里插入图片描述

  • 这里的Q,K,V分别代表查询、键和值向量矩阵。
  • d k \sqrt{d_k} dk 是缩放因子,目的是防止点积结果过大。

3. 发展

缩放点积注意力的提出,使得Transformer模型摆脱了对RNN和LSTM等循环神经网络的依赖,不仅提高了模型的并行能力,还显著提升了处理长距离依赖的能力。在Transformer的基础上,缩放点积注意力被广泛应用于语言模型(如BERT、GPT系列)、图像处理(如ViT)、以及多模态任务中。

此外,缩放点积注意力的思想还被发展出多头注意力机制(Multi-Head Attention),通过多个不同的注意力头来增强模型的表达能力和信息捕捉能力

4. 代码实现

下面是缩放点积注意力的Python实现,基于PyTorch框架:

import torch
import torch.nn as nn
import torch.nn.functional as Fclass ScaledDotProductAttention(nn.Module):def __init__(self):super(ScaledDotProductAttention, self).__init__()def forward(self, Q, K, V, mask=None):# 计算Q和K的点积, 得到注意力分数scores = torch.matmul(Q, K.transpose(-2, -1)) / torch.sqrt(torch.tensor(K.size(-1), dtype=torch.float32))# 如果有mask,设置为非常小的负数来忽略该位置if mask is not None:scores = scores.masked_fill(mask == 0, -1e9)# 对分数进行softmax归一化,得到注意力权重attention_weights = F.softmax(scores, dim=-1)# 使用注意力权重对V进行加权求和output = torch.matmul(attention_weights, V)return output, attention_weights# 示例输入
batch_size = 2
seq_len = 5
d_k = 4# 随机初始化Query、Key、Value
Q = torch.rand(batch_size, seq_len, d_k)
K = torch.rand(batch_size, seq_len, d_k)
V = torch.rand(batch_size, seq_len, d_k)# 实例化缩放点积注意力
attention = ScaledDotProductAttention()
output, attention_weights = attention(Q, K, V)print("输出:", output)
print("注意力权重:", attention_weights)

代码逐句解释

import torch 和 import torch.nn as nn:

  • 导入PyTorch库,用于张量操作和神经网络构建。

class ScaledDotProductAttention(nn.Module):

  • 定义一个缩放点积注意力的类,继承自torch.nn.Module

def forward(self, Q, K, V, mask=None):

  • 定义前向传播函数,接收Query、Key、Value和可选的mask作为输入。

scores = torch.matmul(Q, K.transpose(-2, -1)) / torch.sqrt(torch.tensor(K.size(-1), dtype=torch.float32)):

  • 首先,计算Query和Key的点积。
  • 然后将点积结果除以 d k \sqrt{d_k} dk ,这里K.size(-1)表示Key的维度。

if mask is not None: scores = scores.masked_fill(mask == 0, -1e9):

  • 如果提供了mask,将需要屏蔽的部分的注意力分数设置为非常小的值(-1e9),确保这些位置的权重接近于0。

attention_weights = F.softmax(scores, dim=-1):

  • 对注意力分数进行softmax归一化,生成权重,使得所有权重的和为1。

output = torch.matmul(attention_weights, V):

使用归一化的注意力权重对Value矩阵进行加权求和,生成最终的输出。
return output, attention_weights:

  • 返回最终的加权输出和注意力权重,供后续使用或分析。

初始化与使用部分:

  • Q, K, V 是随机生成的输入张量,模拟实际的Query、Key和Value矩阵。
  • 通过调用attention(Q, K, V)来计算最终的输出和注意力权重。

5. 总结

“缩放点积注意力”极大提高了Transformer模型的性能,使其在许多任务上取得了突破性成果。这个机制本质上是一种加权求和操作,通过Query和Key的相似性确定每个Value的重要性。其背后的原理虽然简单,但其高效性和扩展性使得它在多个领域得到了广泛应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/452478.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5G NR:UE初始接入信令流程浅介

UE初始接入信令流程 流程说明 用户设备(UE)向gNB-DU发送RRCSetupRequest消息。gNB-DU 包含 RRC 消息,如果 UE 被接纳,则在 INITIAL UL RRC MESSAGE TRANSFER 消息中包括为 UE 分配的低层配置,并将其传输到 gNB-CU。IN…

小白投资理财 - 解读资产指标

小白投资理财 - 解读资产指标 资产指标详情总资产(Total Assets)净资产(Net Assets)资产负债率(Debt to Asset Ratio)固定资产周转率(Fixed Asset Turnover Ratio)总资产周转率&…

软件开发的项目管理的风险有哪些?

软件开发项目管理中可能面临的风险: 序号风险类型描述1需求不明确项目需求没有被清晰定义或频繁变更,导致开发方向不明确或需要重做工作。2技术风险采用的技术可能存在缺陷或不兼容,或者团队缺乏必要的技术技能。3资源不足项目可能因为人力…

大数据存储计算平台EasyMR:大数据集群动态扩缩容,快速提升集群服务能力

在当今的数据驱动时代,组织面临着数据量的爆炸性增长。为了有效管理和存储这些数据,许多组织依赖于 Hadoop 这样的分布式存储系统。Hadoop 集群通过在多个节点上存储数据的冗余副本,提供了高可靠性和可扩展性。然而,随着数据量的不…

深⼊理解指针(2)

目录 1. 数组名的理解 2. 使⽤指针访问数组 3. ⼀维数组传参的本质 4. ⼆级指针 5. 指针数组 6. 指针数组模拟⼆维数组 1. 数组名的理解 我们在使⽤指针访问数组的内容时,有这样的代码: int arr[10] {1,2,3,4,5,6,7,8,9,10}; int *p &arr[…

Java项目-基于Springboot的福聚苑社区团购系统项目(源码+说明).zip

作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…

字节 HLLM 论文阅读

github连接:https://github.com/bytedance/HLLM 探讨问题: 推荐LLM的三个关键问题: LLM预训练权重通常被认为是对世界知识的概括,其对于推荐系统的价值?对推荐任务进行微调的必要性?LLM是否可以在推荐系统…

cefsharp79.1.360(Chromium 79.0.3945.130)支持H264视频播放-PDF预览 老版本回顾系列体验

一、关于此版本 版本:Cef 79.1.36/CefSharp 79.1.360/Chromium 79.0.3945.130/支持H264/支持PDF预览 支持PDF预览和H264推荐版本 63/79/84/88/100/111/125 运行环境需要 visual c++ 2015不支持xp/vista/2003/2008默认不支持h264(版权问题)支持打印预览 print preview已知问题…

C++中的vector介绍(常用函数)

目录 vector的介绍及使用1.vector的介绍2.vector的使用2.1vector的定义2.2 vector iterator 的使用2.3vector 空间增长问题2.4 vector 增删查改2.5 vector 迭代器失效问题。(重点) 3.动态二维数组理解4.模拟实现reserve vector的介绍及使用 1.vector的介…

UG NX12.0建模入门笔记:1.2 鼠标的基本操作

文章目录 前言:鼠标的操作1.鼠标左键:单击—>单选;长按并滑动—>框选。2.鼠标右键:在不同的地方单击弹出不同的菜单。3.鼠标中键:滚动中键—>放大缩小【镜头拉近拉远】。4.鼠标中键:摁住鼠标中键&…

Linux:进程状态

目录 1. 进程状态 1.1 并行和并发 1.2 时间片 1.3 运行状态 1.4 阻塞(等待)状态 1.5 挂起状态 2. Linux的进程状态 2.1 运行状态 2.2 sleep状态 2.3 Stop状态 2.4 X和Z状态 2.5 孤儿进程 1. 进程状态 如果你看任何一本关于操作系统的教材&am…

Oracle或者PL/SQL导入pde文件

目录 pde文件使用pl/sql developer的 tools-> import tables-> pl/sql developer来导入;

Ubuntu20.04下安装多CUDA版本,以及后续切换卸载

本方案的前提是假设机子上已经有一个版本的cuda,现在需要支持新的torch2.1.2和torchvision0.16.2,于是来安装新的cuda 一、选择版本 如果我想安装支持torch2.1.2的cuda版本,到官网(https://pytorch.org/get-started/previous-ve…

scrapy案例——豆瓣电影Top250的爬取

项目:豆瓣电影Top250的爬取 案例需求: 1.使用scrapy爬虫技术爬取豆瓣电影Top250的电影数据(包括排名、电影名称、导演、演员、url、评分) 2.实现分页爬取,共十页 3.将爬取下来的数据保存在数据库中 案例分析&…

利用由 Search AI 提供支持的自动导入功能加速 Elastic Observability 中的日志分析

作者:来自 Elastic Bahubali Shetti 通过自动化自定义数据集成,以创纪录的速度将日志迁移到 AI 驱动的日志分析。 Elastic 正在通过自动提取自定义日志来加速采用 AI 驱动的日志分析(AI-driven log analytics),随着基…

Java程序设计:spring boot(2)

目录 1 Spring MVC 零配置创建与部署 1.1 创建Spring MVC Web⼯程 1.2 pom.xml 添加坐标相关配置 1.3 添加源代码 1.4 添加视图 1.5 SpringMVC 配置类添加 1.6 入口文件代码添加 1.7 部署与测试 2 Spring Boot 概念&特点 2.1 框架概念 2.2 框架特点 2.3 Spring…

作业2-线性回归的Matlab代码实现

一、前言 相关配置:Matlab 2020a(版本的影响应该不大,.m代码基本都能运行,个人感觉就是Simulink对版本的要求高一些) 二、任务描述 基于近两节课的理论推导,用代码实现线性回归,并对预测结果进…

【vue】vue-router_ vue3路由管理器

代码获取 vue-router_ vue3路由管理器 ⼀、基本介绍 1. 单⻚应⽤程序介绍 1.1 概念 单⻚应⽤程序:SPA(Single Page Application)是指所有的功能都在⼀个HTML⻚⾯上实现 1.2 具体⽰例 单⻚应⽤⽹站: ⽹易云⾳乐 https://music.163.com/ 多⻚应⽤⽹…

linux环境下C程序的编译过程以及makefile的简单使用

在windows下,很多用来进行编程软件对于写好的文件,点击编译即可生成想要文件。如.exe可执行文件,.hex文件或者.bin文件等等。软件为我们省略了很多事。但是对于linux初学者来说,初次接触linux系统,面对命令行黑框框有点…

git-合并连续两次提交(一个功能,备注相同)

前言: 场景是这样,由于我是实现一个功能,先进行了一次commit,然后我发现写的有些小问题,优化了一下功能并且把代码优化了一次,于是又提交了一次。两次的提交都是以相同的备注(当然这个无所谓)&a…