【深度学习】注意力机制

https://blog.csdn.net/weixin_43334693/article/details/130189238
https://blog.csdn.net/weixin_47936614/article/details/130466448
https://blog.csdn.net/qq_51320133/article/details/138305880

注意力机制:在处理信息的时候,会将注意力放在需要关注的信息上,对于其他无关的外部信息进行过滤,这种处理方式被称为注意力机制。

注意力机制可以使模型在处理序列数据时更加准确和有效。在传统的神经网络中,每个神经元的输出只依赖于前一层的所有神经元的输出,而在注意力机制中,每个神经元的输出不仅仅取决于前一层的所有神经元的输出,还可以根据输入数据的不同部分进行加权,即对不同部分赋予不同的权重。这样可以使模型更加关注输入序列中的关键信息,从而提高模型的精度和效率。

注意力机制原理

1.计算注意力权重:注意力机制的第一步是计算每个输入位置的注意力权重。这个权重可以根据输入数据的不同部分进行加权,即对不同部分赋予不同的权重。权重的计算通常是基于输入数据和模型参数的函数,可以使用不同的方式进行计算,比如点积注意力、加性注意力、自注意力等。

2.加权求和输入表示:计算出注意力权重之后,下一步就是将每个输入位置的表示和对应的注意力权重相乘,并对所有加权结果进行求和。这样可以得到一个加权的输入表示,它可以更好地反映输入数据中重要的部分。

3.计算输出:注意力机制的最后一步是根据加权的输入表示和其他模型参数计算输出结果。这个输出结果可以作为下一层的输入,也可以作为最终的输出。

需要注意的是,注意力机制并不是一种特定的神经网络结构,而是一种通用的机制,可以应用于不同的神经网络结构中。比如,可以在卷积神经网络中使用注意力机制来关注输入图像中的重要区域,也可以在循环神经网络中使用注意力机制来关注输入序列中的重要部分。

查询(Query): 指的是查询的范围,自主提示,即主观意识的特征向量
键(Key): 指的是被比对的项,非自主提示,即物体的突出特征信息向量
值(Value) : 则是代表物体本身的特征向量,通常和Key成对出现
注意力机制是通过Query与Key的注意力汇聚(给定一个 Query,计算Query与 Key的相关性,然后根据Query与Key的相关性去找到最合适的 Value)实现对Value的注意力权重分配,生成最终的输出结果。

注意力机制计算过程:

阶段1、根据Query和Key计算两者之间的相关性或相似性(常见方法点积、余弦相似度,MLP网络),得到注意力得分

在这里插入图片描述

阶段2、对注意力得分进行缩放scale(除以维度的根号),再softmax函数,一方面可以进行归一化,将原始计算分值整理成所有元素权重之和为1的概率分布;另一方面也可以通过softmax的内在机制更加突出重要元素的权重。一般采用如下公式计算
在这里插入图片描述
阶段3、根据权重系数对Value值进行加权求和,得到Attention Value(此时的V是具有一些注意力信息的,更重要的信息更关注,不重要的信息被忽视了)
在这里插入图片描述
在这里插入图片描述

自注意力机制

神经网络接收的输入是很多大小不一的向量,并且不同向量向量之间有一定的关系,但是实际训练的时候无法充分发挥这些输入之间的关系而导致模型训练结果效果极差。比如机器翻译(序列到序列的问题,机器自己决定多少个标签),词性标注(Pos tagging一个向量对应一个标签),语义分析(多个向量对应一个标签)等文字处理问题。

自注意力机制实际上是想让机器注意到整个输入中不同部分之间的相关性

自注意力机制是注意力机制的变体,其减少了对外部信息的依赖,更擅长捕捉数据或特征的内部相关性。自注意力机制的关键点在于,Q、K、V是同一个东西,或者三者来源于同一个X,三者同源。通过X找到X里面的关键点,从而更关注X的关键信息,忽略X的不重要信息。不是输入语句和输出语句之间的注意力机制,而是输入语句内部元素之间或者输出语句内部元素之间发生的注意力机制。

自注意力机制原理
1、得到Q,K,V的值
对于每一个向量x,分别乘上三个系数 Wq,Wk,Wv,得到的Q,K和V分别表示query,key和value (这三个W就是我们需要学习的参数)
在这里插入图片描述

2、计算注意力权重
利用得到的Q和K计算每两个输入向量之间的相关性,一般采用点积计算

3、Scale+Softmax
将刚得到的相似度除以 d k \sqrt{d~k~} d k  (dk 表示键向量的维度),再进行Softmax。经过Softmax的归一化后,每个值是一个大于0且小于1的权重系数,且总和为1,这个结果可以被理解成一个权重矩阵。

4、使用刚得到的权重矩阵,与V相乘,计算加权求和。
在这里插入图片描述

自注意力机制问题:
1、自注意力机制的原理是筛选重要信息,过滤不重要信息。这就导致自注意力机制无法完全利用图像本身具有的尺度,平移不变性,以及图像的特征局部性。这就导致自注意力机制只有在大数据的基础上才能有效地建立准确的全局关系
2、自注意力机制虽然考虑了所有的输入向量,但没有考虑到向量的位置信息。在实际的文字处理问题中,可能在不同位置词语具有不同的性质(可通过位置编码解决:对每一个输入向量加上一个位置向量e,位置向量的生成方式有多种,通过e来表示位置信息带入self-attention层进行计算)

多头注意力机制:Multi-Head Self-Attention

多头注意力机制在自注意力的基础上,通过增加多个注意力头来并行地对输入信息进行不同维度的注意力分配,从而捕获更丰富的特征和上下文信息。

第1步:定义多组W,生成多组Q、K、V
在这里插入图片描述
线性变换:首先,对输入序列中的每个位置的向量分别进行三次线性变换(即加权和偏置),生成查询矩阵Q, 键矩阵K, 和值矩阵V。在多头注意力中,这一步骤实际上会进行h次(其中h为头数),每个头拥有独立的权重矩阵,从而将输入向量分割到h个不同的子空间。

第2步:
并行注意力计算:对每个子空间,应用自注意力机制计算注意力权重,并据此加权求和值矩阵V,得到每个头的输出。公式上表现为:
在这里插入图片描述

第3步:
合并与最终变换:将所有头的输出拼接起来,再经过一个最终的线性变换和层归一化,得到多头注意力的输出。这一步骤整合了不同子空间学到的信息,增强模型的表达能力。

import torch
from torch.nn import Module, Linear, Dropout, LayerNormclass MultiHeadAttention(Module):def __init__(self, d_model, num_heads, dropout=0.1):super(MultiHeadAttention, self).__init__()assert d_model % num_heads == 0, "d_model must be divisible by num_heads"self.d_head = d_model // num_headsself.num_heads = num_headsself.linear_q = Linear(d_model, d_model)self.linear_k = Linear(d_model, d_model)self.linear_v = Linear(d_model, d_model)self.linear_out = Linear(d_model, d_model)self.dropout = Dropout(dropout)self.layer_norm = LayerNorm(d_model)def forward(self, q, k, v, mask=None):batch_size = q.size(0)# 线性变换q = self.linear_q(q).view(batch_size, -1, self.num_heads, self.d_head)k = self.linear_k(k).view(batch_size, -1, self.num_heads, self.d_head)v = self.linear_v(v).view(batch_size, -1, self.num_heads, self.d_head)# 转置以便于计算注意力q, k, v = q.transpose(1, 2), k.transpose(1, 2), v.transpose(1, 2)# 计算注意力权重scores = torch.matmul(q, k.transpose(-2, -1)) / math.sqrt(self.d_head)if mask is not None:scores = scores.masked_fill(mask == 0, -1e9)attn_weights = torch.softmax(scores, dim=-1)attn_weights = self.dropout(attn_weights)# 加权求和得到输出outputs = torch.matmul(attn_weights, v)# 转换回原始形状并进行最终线性变换outputs = outputs.transpose(1, 2).contiguous().view(batch_size, -1, self.d_model)outputs = self.linear_out(outputs)outputs = self.layer_norm(outputs + q)return outputs

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

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

相关文章

gitee项目上不同的项目分别使用不用的用户上传

最近使用根据需要,希望不同的项目使用不同的用户上传,让不同的仓库展示不同的用户名!!! 第一步查看全局的用户信息: # 查看目前全局git配置信息 git config -l #会输出全局的git配置信息 第二步进入到要设…

大科技公司大量裁员背后的真相

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

冒泡排序、选择排序、菱形

冒泡排序、选择排序、菱形 文章目录 一、冒泡排序二、选择排序三、菱形 一、冒泡排序 思路: 外层(第一层)循环控制循环次数,和业务无关 内层(第二层)循环用于比较相邻的2个值的大小,根据小到大…

B站、小红书“崩”了!阿里云紧急回应

7月2日,“B站崩了”“小红书崩了”冲上微博热搜!据悉,“崩了”的原因是阿里云上海服务出现异常。 B站App无法使用浏览历史关注等内容,消息界面、更新界面、客服界面均不可用,用户也无法评论和发弹幕,视频评…

鸿蒙开发设备管理:【@ohos.multimodalInput.touchEvent (触摸输入事件)】

触摸输入事件 设备上报的触屏事件。 说明: 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import {Action,ToolType,SourceType,Touch,TouchEvent} from ohos.multimodalInput.touchEvent;…

2024年江西省研究生数学建模竞赛A题交通信号灯管理论文和代码分析

经过不懈的努力,2024年江西省研究生数学建模竞赛A题论文和代码已完成,代码为A题全部问题的代码,论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解(问题1模型的建立和求解、问题2模型的建立和求解、问题3模…

养猫家庭如何正确除猫毛?希喂、范罗士、米家浮毛空气净化器分享

作为一名6年资深铲屎官,我发现养猫已经成为年轻人的潮流,很多铲屎官跟风养了猫咪。但是她们并不知道撸猫虽然很快乐,但是猫咪的体味和猫浮毛也会让人很头疼。特别是宠物排泄物的气味,经常搞卫生很多人接受不了。这样导致很多人养一…

贪心算法算法,完全零基础小白教程,不是计算机的都能学会!超详解

目录 一、基本概念 二、举几个例子,便于理解 1、找零问题 2、最小路径和 3、背包问题 1)只考虑体积的贪心策略: 2) 只考虑价值的贪心策略: 三、贪心策略的特点 四、贪心策略证明 四、如何学习贪心 五、例题…

助力构建新型电力系统自主可控实时底座

近日,2024亚洲新型电力系统及储能展览会&亚洲新型电力及储能论坛会在广州广交会展馆圆满落下帷幕!科东软件携多款电力产品亮相展会,并在2024亚洲新型电力及储能论坛发表《“鸿道Intewell操作系统助力构建新型电力系统自主可控实时底座”》的主…

ArcTs布局入门03——层叠布局(Stack)

如果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧! 扫描下面的二维码关注公众号。 1、概述 叠布局(StackLayout)用于在屏幕上预留一块区域来显示组件中的元素,提供元素可以重叠的布局。层叠布局通过Stack容器组件实…

终身免费的Navicat数据库,不需要破解,官方支持

终身免费的Navicat数据库,不需要破解,官方支持 卸载了Navicat,很不爽上干货,Navicat免费版下载地址 卸载了Navicat,很不爽 公司不让用那些破解的数据库软件,之前一直使用Navicat。换了几款其他的数据库试了…

代码随想录-Day45

198. 打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个…

20240702在飞凌OK3588-C开发板上通过HDMI OUT输出USB3.0接口的热像仪的预览图像

20240702在飞凌OK3588-C开发板上通过HDMI OUT输出USB3.0接口的热像仪的预览图像 2024/7/2 18:19 rootok3588:/# rootok3588:/# rootok3588:/# lsusb Bus 005 Device 001: ID 1d6b:0002 Bus 003 Device 001: ID 1d6b:0001 Bus 001 Device 001: ID 1d6b:0002 Bus 006 Device 00…

将excel表格转换为element table(上)

最近有个功能需要将excel展示到html 界面里面,看是简单的一个需求也是需要费尽心思才完得成 原始数据 想要把excel 读取出来,于是使用xlsl的插件 npm i xlsx通过插件可以获取到已经分析好的数据 然后使用sheet_to_html将数据转换为html 再使用v-htm…

Xorbits inference操作实战

1.操作环境 序号软件版本备注1Windows1.版本:Windows 10 专业版2.版本号:21H23.操作系统内部版本:19044.18892Docker Desktop4.24.2 (124339)3WSLUbuntu 22.04 LTS4Python3.105CUDA12.16Dify0.6.6 Xorbits inference 是一个强大且通用的分布…

day09了 加油

浅拷贝 指向同一个地址空间 右边不可取地址 左边一定是到了具体的位置 右值引用std&#xff1a;&#xff1a; move 相信大家默认构造函数都没有问题&#xff0c;所以就不贴例子了 浅拷贝构造函数 只负责复制地址&#xff0c;而不是真的把完整的内存给它 #include <iostre…

shell 脚本编程

简介&#xff1a;用户通过shell向计算机发送指令的&#xff0c;计算机通过shell给用户返回指令的执行结果 通过shell编程可以达到的效果&#xff1a;提高工作效率、可以实现自动化 需要学习的内容&#xff1a;Linux 、 shell的语法规范 编写shell的流程&#xff1a; 第一步…

数据库系统体系结构-DBMS的三级模式结构、DBMS的工作方式、模式定义语言、二级映射

一、体系结构的概念 1、大多数DBMS遵循三级模式结构 &#xff08;1&#xff09;外模式 &#xff08;2&#xff09;概念模式 &#xff08;3&#xff09;内模式 2、DBMS的体系结构描述的应该是系统的组成结构及其联系以及系统结构的设计和变化的原则等 3、1978年美国国家标…

Java学习 (七) 面向对象--多态、object类

一、多态性 多态在java中的体现是 父类的引用指向子类的对象 格式&#xff1a; 父类类型 变量名 子类对象 1、代码案例 vi Person.java public class Person {public String name;public int age;//新增方法public void eat(){System.out.println("人吃饭");}…

github仓库的基本使用-创建、上传文件、删除

1.第一步 先点击左侧菜单栏的远程仓库 2.点击NEW 3.创建仓库 然后点击右下角的 CREATE 4.点击code 点击SSH,然后我出现了You don’t have any public SSH keys in your GitHub account. You can add a new public key, or try cloning this repository via HTTPS. 1&#xff…