当前位置: 首页 > news >正文

Attention详解(自用)

encoder-decoder

在这里插入图片描述
分心模型:没有引入注意力的模型在输入句子比较短的时候问题不大,但是如果输入句子比较长,此时所有语义完全通过一个中间语义向量来表示,单词自身的信息已经消失,可想而知会丢失很多细节信息,这也是为何要引入注意力模型的重要原因。

attention中encoder-decoder特点

Encoder将输入编码成一个向量的序列,而在解码的时候,每一步都会选择性的从向量序列中挑选一个子集进行输出预测,这样,在产生每一个输出的时候,都能找到当前输入对应的应该重点关注的序列信息,也就是说,每一个输出单词在计算的时候,参考的语义编码向量c都是不一样的,所以说它们的注意力焦点是不一样
在这里插入图片描述
在这里插入图片描述

预测结果中的每个词汇的时候,每个语义向量c中的元素具有不同的权重

attention 优点

  • Attention大大提高了机器翻译的表现
    Decoder在每一步都更加关注源语言的不同部分
  • Attention 解决了bottleneck problem
    Decoder 可以直接关注到源语言的每个词,而不需要用一个向量来表示源句子
  • Attention 可以缓解梯度消失问题
    类似skip-connection
  • Attention 增加了可解释性
    可以直观的看出来decoder在每一步更关注源语言的哪些部分

-只能在Decoder阶段实现并行运算,Encoder部分依旧采用的是RNN,LSTM这些按照顺序编码的模型,Encoder部分还是无法实现并行运算

Q K V 介绍

在注意力机制中,Q(Query)、K(Key)和V(Value)是三个重要的输入向量,它们在计算注意力权重时起到不同的作用。

  1. Query(Q):Query是用来表示当前位置或当前时间步的输入信息,它用来计算注意力权重,决定模型在当前位置需要关注的信息。Query向量通常是通过对当前位置的输入进行线性变换得到的。

  2. Key(K):Key用来表示其他位置或其他时间步的输入信息,它用来计算当前位置与其他位置之间的关联程度。Key向量通常也是通过对其他位置的输入进行线性变换得到的。

  3. Value(V):Value用来表示其他位置或其他时间步的输入信息的实际值,它在计算注意力权重后被加权求和,得到最终的加权表示。Value向量通常也是通过对其他位置的输入进行线性变换得到的。

在计算注意力权重时,Query向量与Key向量之间的相似度决定了当前位置与其他位置之间的关联程度。相似度可以通过点积、缩放点积、加性等方式计算得到。然后通过对相似度进行归一化,得到注意力权重。最后,将注意力权重与对应位置的Value向量相乘并求和,得到当前位置的加权表示。

Q、K、V的引入使得注意力机制能够根据不同位置之间的关联程度,选择性地关注与当前任务相关的信息,提高模型的性能和泛化能力。

在这里插入图片描述

Q K V计算

在这里插入图片描述
注意力机制说白了就是要通过训练得到一个加权,自注意力机制就是要通过权重矩阵来自发地找到词与词之间的关系

因此肯定需要给每个input定义tensor,然后通过tensor间的乘法来得到input之间的关系

那这么说是不是给每个input定义1个tensor就够了呢?不够啊!如果每个input只有一个相应的q,那么q1和q2之间做乘法求取了a1和a2的关系之后,这个结果怎么存放怎么使用呢?而且a1和a2之间的关系是对偶的吗?如果a1找a2和a2找a1有区别怎么办?只定义一个这模型是不是有点太简单了

在这里插入图片描述
定义这3个tensor,一方面是为了学习输入之间的关系、找到和记录谁和谁的关系权重,一方面也是在合理的结构下引入了可学习的参数,使得网络具有更强的学习能力

在这里插入图片描述
在这里插入图片描述
将Source中的构成元素想象成是由一系列的<Key,Value>数据对构成,此时给定Target中的某个元素Query,通过计算Query和各个Key的相似性或者相关性,得到每个Key对应Value的权重系数,然后对Value进行加权求和,即得到了最终的Attention数值
本质上Attention机制是对Source中元素的Value值进行加权求和,而Query和Key用来计算对应Value的权重系数

计算过程

第一个过程是根据Query和Key计算权重系数
第二个过程根据权重系数对Value进行加权求和

而第一个过程又可以细分为两个阶段:
第一个阶段根据Query和Key计算两者的相似性或者相关性
第二个阶段对第一阶段的原始分值进行归一化处理

这样,可以将Attention的计算过程抽象为如图10展示的三个阶段:

在这里插入图片描述

第一阶段

在第一个阶段,可以引入不同的函数和计算机制,根据Query和某个Key_i,计算两者的相似性或者相关性,
最常见的方法包括:求两者的向量点积、求两者的向量Cosine相似性或者通过再引入额外的神经网络来求值,即如下方式:
在这里插入图片描述
在这里插入图片描述
矩阵 是一个方阵,我们以行向量的角度理解,里面保存了每个向量与自己和其他向量进行内积运算的结果

向量的内积表征两个向量的夹角,表征一个向量在另一个向量上的投影

第二阶段

第二阶段引入类似SoftMax的计算方式对第一阶段的得分进行数值转换,
一方面可以进行归一化,将原始计算分值整理成所有元素权重之和为1的概率分布
另一方面也可以通过SoftMax的内在机制更加突出重要元素的权重
在这里插入图片描述

在这里插入图片描述

第三阶段

a_i即为value_i对应的权重系数,然后进行加权求和即可得到Attention数值

每一个维度的数值都是由三个词向量在这一维度的数值加权求和得来的
在这里插入图片描述

在这里插入图片描述

为什么attention可以产生聚焦的功能

Attention机制可以产生聚焦的功能,主要有以下几个原因:

  1. 选择性加权:Attention机制通过对输入序列中的不同位置进行加权,可以选择性地关注与当前任务相关的信息,而忽略与任务无关的信息。这样可以提高模型对于重要信息的关注程度,从而实现聚焦的效果。

  2. 上下文关联:Attention机制可以根据上下文关联性动态地调整加权,使得模型能够更好地理解输入序列中不同位置之间的关系。通过上下文关联,模型可以更准确地聚焦于与当前任务相关的信息,提升模型的性能。

  3. 多头注意力:在一些复杂的任务中,单一的注意力机制可能无法满足需求。多头注意力机制可以同时关注输入序列中的不同部分,从而实现多个聚焦点的功能。通过多头注意力,模型可以同时关注多个相关的信息,提高模型的表达能力和泛化能力。

总的来说,Attention机制通过选择性加权和上下文关联的方式,可以使模型更好地聚焦于与当前任务相关的信息,提高模型的性能和泛化能力。

怎么样选择性加权

选择性加权是通过计算注意力权重来实现的。常见的计算注意力权重的方法有以下几种:

  1. 点积注意力(Dot Product Attention):将查询向量与键向量进行点积操作,然后经过softmax函数得到注意力权重。这种方法适用于序列长度相对较短的情况,计算效率高。

  2. 缩放点积注意力(Scaled Dot Product Attention):在点积注意力的基础上,通过除以一个缩放因子,可以控制注意力权重的分布范围,提高模型的稳定性和泛化能力。

  3. 加性注意力(Additive Attention):将查询向量和键向量通过全连接层映射到一个共同的特征空间,然后计算特征之间的相似度,再经过softmax函数得到注意力权重。这种方法可以处理更复杂的注意力权重计算,但计算复杂度较高。

  4. 多头注意力(Multi-head Attention):将输入序列通过多个不同的查询、键和值映射矩阵进行线性变换,然后分别计算多个注意力权重。最后将多个注意力权重进行拼接或加权求和,得到最终的加权表示。多头注意力可以同时关注多个相关的信息,提高模型的表达能力。

在选择性加权时,可以根据具体任务和数据的特点选择合适的注意力计算方法。不同的注意力计算方法可能适用于不同的场景,需要根据具体情况进行选择和调整。

self attention

在一般任务的Encoder-Decoder框架中,输入Source和输出Target内容是不一样的,比如对于英-中机器翻译来说,Source是英文句子,Target是对应的翻译出的中文句子,Attention机制发生在Target的元素Query和Source中的所有元素之间

本质上是目标语单词和源语单词之间的一种单词对齐机制

而Self-Attention顾名思义,指的不是Target和Source之间的Attention机制,而是Source内部元素之间或者Target内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的注意力计算机制

self-attention优点

  • 引入Self-Attention后会更容易捕获句子中长距离的相互依赖的特征
    因为如果是RNN或者LSTM,需要依次序序列计算,对于远距离的相互依赖的特征,要经过若干时间步步骤的信息累积才能将两者联系起来,而距离越远,有效捕获的可能性越小

  • Self-Attention在计算过程中会直接将句子中任意两个单词的联系通过一个计算步骤直接联系起来,所以远距离依赖特征之间的距离被极大缩短,有利于有效地利用这些特征。

  • 除此外,Self-Attention对于增加计算的并行性也有直接帮助作用

https://mp.weixin.qq.com/s/RFLPII-1gQAa8hjuULyEjw

非常好的解释

Attention 和 self-attention 的区别是什么

  • 在神经网络中,通常来说你会有输入层(input),应用激活函数后的输出层(output),在RNN当中你会有状态(state)。如果attention (AT) 被应用在某一层的话,它更多的是被应用在输出或者是状态层上,而当我们使用self-attention(SA),这种注意力的机制更多的实在关注input上。
  • Attention (AT) 经常被应用在从编码器(encoder)转换到解码器(decoder)。比如说,解码器的神经元会接受一些AT从编码层生成的输入信息。在这种情况下,AT连接的是两个不同的组件(component),编码器和解码器。但是如果我们用SA,它就不是关注的两个组件,它只是在关注你应用的那一个组件。那这里他就不会去关注解码器了,就比如说在Bert中,使用的情况,我们就没有解码器。
  • SA可以在一个模型当中被多次的、独立的使用(比如说在Transformer中,使用了18次;在Bert当中使用12次)。但是,AT在一个模型当中经常只是被使用一次,并且起到连接两个组件的作用。
  • SA比较擅长在一个序列当中,寻找不同部分之间的关系。比如说,在词法分析的过程中,能够帮助去理解不同词之间的关系。AT却更擅长寻找两个序列之间的关系,比如说在翻译任务当中,原始的文本和翻译后的文本。这里也要注意,在翻译任务重,SA也很擅长,比如说Transformer。
  • **AT可以连接两种不同的模态,**比如说图片和文字。**SA更多的是被应用在同一种模态上,**但是如果一定要使用SA来做的话,也可以将不同的模态组合成一个序列,再使用SA。

相关文章:

Attention详解(自用)

encoder-decoder 分心模型&#xff1a;没有引入注意力的模型在输入句子比较短的时候问题不大&#xff0c;但是如果输入句子比较长&#xff0c;此时所有语义完全通过一个中间语义向量来表示&#xff0c;单词自身的信息已经消失&#xff0c;可想而知会丢失很多细节信息&#xff0…...

pptx转pdf工具类

引入依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.0.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxm…...

2023华为OD统一考试(B卷)题库清单(持续收录中)以及考点说明

目录 专栏导读2023 B卷 “新加题”&#xff08;100分值&#xff09;2023Q2 100分2023Q2 200分2023Q1 100分2023Q1 200分2022Q4 100分2022Q4 200分牛客练习题 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》。 刷的越多&…...

论文笔记--Won’t Get Fooled Again: Answering Questions with False Premises

论文笔记--Won’t Get Fooled Again: Answering Questions with False Premises 1. 文章简介2. 文章概括3 文章重点技术3.1 大模型面对FPQs的表现3.2 False QAs数据集3.3 训练和评估 4. 文章亮点5. 原文传送门 1. 文章简介 标题&#xff1a;Won’t Get Fooled Again: Answerin…...

【Django】include app_name和namespace的区别

app_name 区分不同app的url的name&#xff0c;防止不同app之间&#xff0c;url_name的重名&#xff0c;引用时加入app_name:name namespace 区分不同路由 include同一个view module的情况&#xff0c; 让不同路由进入同一个view中&#xff0c;进行reverse时&#xff0c;根据对…...

(黑客)自学笔记

特别声明&#xff1a; 此教程为纯技术分享&#xff01;本教程的目的决不是为那些怀有不良动机的人提供及技术支持&#xff01;也不承担因为技术被滥用所产生的连带责任&#xff01;本教程的目的在于最大限度地唤醒大家对网络安全的重视&#xff0c;并采取相应的安全措施&#x…...

【期末课程设计】学生成绩管理系统

因其独特&#xff0c;因其始终如一 文章目录 一、学生成绩管理系统介绍 二、学生成绩管理系统设计思路 三、源代码 1. test.c 2. Student Management System.c 3.Stu_System.c 4.Teacher.c 5.Student Management System.h 前言&#xff1a; 学生成绩管理系统含教师…...

【论文笔记】KDD2019 | KGAT: Knowledge Graph Attention Network for Recommendation

Abstract 为了更好的推荐&#xff0c;不仅要对user-item交互进行建模&#xff0c;还要将关系信息考虑进来 传统方法因子分解机将每个交互都当作一个独立的实例&#xff0c;但是忽略了item之间的关系&#xff08;eg&#xff1a;一部电影的导演也是另一部电影的演员&#xff09…...

ES6:基础使用,积累

一、理解ES6 ES6是ECMAScript 6.0的简称&#xff0c;也被称为ES2015。它是ECMAScript的第六个版本&#xff0c;是JavaScript标准的下一个重大更新。ES6于2015年6月发布&#xff0c;新增了许多新的语言特性和API&#xff0c;包括箭头函数、let和const关键字、模板字符串、解构赋…...

Android端上传文件到Spring Boot后端

准备 确定好服务器端文件保存的位置确定好请求参数名&#xff08;前后端要保持一致的喔&#xff09;如果手机是通过usb连接到电脑的&#xff0c;需要执行一下&#xff1a; adb reverse tcp:8080 tcp:8080 AndroidManifest.xml的<application/>节点中加上: android:usesC…...

使用GGML和LangChain在CPU上运行量化的llama2

Meta AI 在本周二发布了最新一代开源大模型 Llama 2。对比于今年 2 月发布的 Llama 1&#xff0c;训练所用的 token 翻了一倍&#xff0c;已经达到了 2 万亿&#xff0c;对于使用大模型最重要的上下文长度限制&#xff0c;Llama 2 也翻了一倍。 在本文&#xff0c;我们将紧跟趋…...

微服务基础理论

微服务简介 微服务Microservices之父&#xff0c;马丁.福勒&#xff0c;对微服务大概的概述如下&#xff1a; 就目前而言&#xff0c;对于微服务业界并没有一个统一的、标准的定义&#xff08;While there is no precise definition of this architectural style ) 。但通在其…...

《向量数据库指南》:向量数据库Pinecone管理数据教程

目录 连接到索引 指定索引端点 调用whoami以检索您的项目名称。 描述索引统计信息 获取向量 更新向量 完整更新 ℹ️注意 部分更新 ⚠️注意 ℹ️注意 删除向量...

以深度为基础的Scikit-learn: 高级特性与最佳实践

Scikit-learn是一个广受欢迎的Python库&#xff0c;它用于解决许多机器学习的问题。在本篇文章中&#xff0c;我们将进一步探索Scikit-learn的高级特性和最佳实践。 一、管道机制 Scikit-learn的Pipeline类是一种方便的工具&#xff0c;它允许你将多个步骤&#xff08;如数据…...

Autosar MCAL-S32K324Dio配置-基于EB

文章目录 DioPost Build Variant UsedConfig VariantDioConfigDioPortDioChannelDioChannelGroupDioConfigDio Development Error DetectSIUL2 IP Dio Development Error DetectDio Version Info ApiDio Reverse Port BitsDio Flip Channel ApiDio Rea...

【Spring Boot】单元测试

单元测试 单元测试在日常项目开发中必不可少&#xff0c;Spring Boot提供了完善的单元测试框架和工具用于测试开发的应用。接下来介绍Spring Boot为单元测试提供了哪些支持&#xff0c;以及如何在Spring Boot项目中进行单元测试。 1.Spring Boot集成单元测试 单元测试主要用…...

Flink CEP (一)原理及概念

目录 1.Flink CEP 原理 2.Flink API开发 2.1 模式 pattern 2.2 模式 pattern属性 2.3 模式间的关系 1.Flink CEP 原理 Flink CEP内部是用NFA&#xff08;非确定有限自动机&#xff09;来实现的&#xff0c;由点和边组成的一个状态图&#xff0c;以一个初始状态作为起点&am…...

vue3+taro+Nutui 开发小程序(二)

上一篇我们初始化了小程序项目&#xff0c;这一篇我们来整理一下框架 首先可以看到我的项目整理框架是这样的&#xff1a; components:这里存放封装的组件 custom-tab-bar:这里存放自己封装的自定义tabbar interface&#xff1a;这里放置了Ts的一些基本泛型&#xff0c;不用…...

Transformer 模型实用介绍:BERT

动动发财的小手&#xff0c;点个赞吧&#xff01; 在 NLP 中&#xff0c;Transformer 模型架构是一场革命&#xff0c;极大地增强了理解和生成文本信息的能力。 在本教程[1]中&#xff0c;我们将深入研究 BERT&#xff08;一种著名的基于 Transformer 的模型&#xff09;&#…...

Spring详解(学习总结)

目录 一、Spring概述 &#xff08;一&#xff09;、Spring是什么&#xff1f; &#xff08;二&#xff09;、Spring框架发展历程 &#xff08;三&#xff09;、Spring框架的优势 &#xff08;四&#xff09;、Spring的体系结构 二、程序耦合与解耦合 &#xff08;一&…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋&#xff0c;无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话&#xff0c;配置.bahs_profile后也能解决上下翻页这些&#xff0c;但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...

JS红宝书笔记 - 3.3 变量

要定义变量&#xff0c;可以使用var操作符&#xff0c;后跟变量名 ES实现变量初始化&#xff0c;因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符&#xff0c;可以创建一个全局变量 如果需要定义…...