注意力机制和自注意力机制

news2024/12/23 5:17:19

有很多自己的理解,仅供参考

Attention注意力机制

对于一张图片,我们第一眼看上去,眼睛会首先注意到一些重点的区域,因为这些区域可能包含更多或更重要的信息,这就是注意力机制,我们会把我们的焦点聚焦在比较重要的事物上。大数据中对于重要的数据,我们要使用;对于不重要的数据,我们不太想使用,但是,对于一个模型而言(CNN、LSTM),很难决定什么重要,什么不重要。由此,注意力机制诞生了。

注意力机制是一个很宽泛的概念,可以极端地理解为QKV(三个向量分别称为Query、Key、Value)相乘就是注意力。通过一个查询变量 Q,去找到 V 里面比较重要的东西。假设 K==V,然后 QK 相乘求相似度A,然后 AV 相乘得到注意力值Z,这个 Z 就是 V 的另外一种形式的表示。Q 可以是任何一个东西,V 也是任何一个东西, 但K往往是等同于 V 的(同源),当然K和V不同源不相等也可以。

Attention没有规定 QKV 怎么来,只规定 QKV 怎么做,即上述描述的操作。
在这里插入图片描述


具体计算过程

至于Attention机制的具体计算过程,对目前大多数方法进行抽象的话,可以归纳为两个过程:第一个过程是根据Query和Key计算权重系数第二个过程根据权重系数对Value进行加权求和。而第一个过程又可以细分为两个阶段:第一个阶段根据Query和Key计算两者的相似性或者相关性;第二个阶段对第一阶段的原始分值进行归一化处理;这样,可以将Attention的计算过程抽象为如图展示的三个阶段。
在这里插入图片描述

Q, K = k 1 , k 2 , ⋯   , k n K=k_1, k_2, \cdots, k_n K=k1,k2,,kn ,然后我们一般使用点乘(求内积)的方法计算Q 和 K 里的每一个事物的相似度,就拿到了 Q 和 k 1 k_1 k1的相似值 s 1 s_1 s1,Q 和 k 2 k_2 k2的相似值 s 2 s_2 s2,Q 和 k n k_n kn的相似值 s n s_n sn,接着做一层 s o f t m a x ( s 1 , s 2 , ⋯   , s n ) softmax(s_1,s_2,\cdots,s_n) softmax(s1,s2,,sn)得到概率 ( a 1 , a 2 , ⋯   , a n ) (a_1,a_2,\cdots,a_n) (a1,a2,,an),进而就可以找出哪个对Q 而言更重要了;最后进行一个汇总,当使用 Q 查询结束了后,Q 已经失去了它的使用价值,我们最终是要拿到这张图片(以图片举的例子),原图 V = ( v 1 , v 2 , ⋯   , v n ) V=(v_1,v_2,\cdots,v_n) V=(v1,v2,,vn),现在这张图片变为了 V ′ = ( a 1 ∗ v 1 + a 2 ∗ v 2 + ⋯ + a n ∗ v 1 ) V'=(a_1*v_1+a_2*v_2+\cdots+a_n*v_1) V=(a1v1+a2v2++anv1),得到了一个新的 V’,这个新的 V’ 就多了哪些更重要、哪些不重要的信息在里面(对Q来说),然后用 V’ 代替 V它。

一般在Transformer中 K=V,当然也可以不相等,但是 K 和 V 之间一定具有某种联系,这样的 QK 点乘才能指导 V 哪些重要,哪些不重要。


Attention不依赖于RNN

前面已经说了Attention是一个很宽泛宏大的概念,所以显然Attention机制本身并不依赖于RNN(循环神经网络)。它是一种独立于具体模型结构的机制,可以与多种模型结构结合使用。

在自然语言处理任务中,Attention机制最初是与RNN结合使用的。具体来说,常见的组合是将Attention机制应用于RNN编码器-解码器模型,如机器翻译任务中的序列到序列模型。在这种情况下,RNN编码器用于将输入序列编码为固定长度的上下文向量,然后解码器使用Attention机制来动态地关注编码器输出的不同部分。

然而,Attention机制不仅限于与RNN结合使用。它可以与其他类型的模型结构一起使用,例如卷积神经网络(CNN)和自注意力机制(如Transformer模型)。在Transformer模型中,Attention机制被广泛应用,并且成为其核心组件之一,用于实现序列中不同位置之间的自注意力计算。

因此,尽管Attention机制最初与RNN结合使用,但它并不是RNN的特定部分,而是一种通用的机制,可以与各种模型结构结合使用,以提高模型在序列处理任务中的性能和效果。


Self-Attention自注意力机制

和Attention类似,他们都是一种注意力机制。不同的是Attention是source对target,输入的source和输出的target内容不同。例如英译中,输入英文,输出中文。而Self-Attention是source对source,是source内部元素之间或者target内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的注意力机制。

简单说,Self-Attention不仅固定了QKV的操作(Attention机制),还规定了QKV同源(Q≈K≈V来源于同一个输入X),也就是通过X找到X里面的关键点,QKV通过X与三个参数(矩阵) W Q , W K , W V W^Q,W^K,W^V WQ,WK,WV相乘得到。注意力机制包括自注意力机制和其他种类的注意力机制,比如交叉注意力机制。


具体计算操作和Attention一样

  1. 将输入单词X转化成嵌入向量(embedding) a a a

  2. 根据嵌入向量 a a a得到q,k,v三个向量; q i = W q a i q^i=W^qa^i qi=Wqai k i = W k a i k^i=W^ka^i ki=Wkai v i = W v a i v^i=W^va^i vi=Wvai
    QKV的获取

  3. 为每个向量计算一个score, a i j a_{ij} aij=score = q i ∗ k j q^i*k^j qikj;若需要计算 a 1 a^{1} a1(embedding后的向量)和 a 1 , a 2 , a 3 , ⋯   , a n a^{1},a^{2},a^{3},\cdots,a^{n} a1,a2,a3,,an之间的关系(或关联),则需要用 q 1 q^{1} q1 k 1 , k 2 , k 3 , ⋯   , k n k^{1},k^{2},k^{3},\cdots,k^{n} k1,k2,k3,,kn进行匹配计算

  4. 为了梯度的稳定,Transformer使用了score归一化,即除以 d k \sqrt{dk} dk ,原因是防止q和k的点乘结果较大

  5. 对score施以softmax激活函数

  6. softmax点乘Value值v,得到加权的每个输入向量的评分v

  7. 相加之后得到最终的输出结果z= ∑ v
    在这里插入图片描述

与RNN和LSTM的区别

RNN无法解决长序列依赖问题,LSTM无法做并行计算,而self-attention很好的解决了这两个问题。

  1. 长距离依赖建模:Self-Attention可以对序列中的任意两个位置进行直接的关联和交互,因此能够更好地建模长距离依赖。
  2. 并行计算:在序列中的每个时间步,Self-attention可以同时计算所有位置的注意力权重,从而并行处理整个序列。相比之下,LSTM是逐个时间步进行计算,需要依赖前一时间步的隐藏状态,限制了并行性。
  3. 句法特征和语义特征:Self-Attention得到的新的词向量具有句法特征和语义特征(表征更完善)。

简单了解:

句法特征:句法特征关注的是语言中单词之间的结构和关系。它们描述了句子中的语法规则、词性、句法依存关系等。句法特征可以帮助我们理解句子的结构和语法规则,例如主谓宾结构、修饰关系等。

语义特征:语义特征则关注的是句子和单词的语义含义。它们描述了单词之间的关联和句子的意义。语义特征帮助我们理解句子的意思、推断隐含信息和进行语义推理。

理论上Self-Attention (Transformer 50个左右的单词效果最好)解决了RNN模型的长序列依赖问题,但是由于文本长度增加时,训练时间也将会呈指数增长,因此在处理长文本任务时可能不一定比LSTM(200个左右的单词效果最好)等传统的RNN模型的效果好。LSTM通过这些门控机制,避免了传统RNN中梯度消失和梯度爆炸的问题,在一些情况下仍然是一种有效的模型选择,研究者也提出了一些结合LSTM和Self-attention的模型,以发挥它们各自的优势。




参考:

ChatGPT

https://www.cnblogs.com/nickchen121/p/15105048.html

https://zhuanlan.zhihu.com/p/265108616

https://zhuanlan.zhihu.com/p/619154409

https://zhuanlan.zhihu.com/p/631398525

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

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

相关文章

cadence中如何在更新原理图封装

cadence中如何在更新原理图封装 一、更改原理图封装 当原理图画好后,如果我们发现某个封装错了,需要改动,需要找到你最初画Library中器件封装文件打开,进行修改,修改好后保存。 二、更新封装 保存好后,…

性能测试:方法、工具与最佳实践

目录 前言 1. 为什么进行性能测试? 2. 性能测试方法 3. 性能测试工具 Apache JMeter: LoadRunner: Gatling: Apache ab (Apache Benchmark): Locust: Tsung: BlazeMeter: K6: Neoload: WebLOAD: 4. 最佳实践 设定明确的性能测试目标: 模…

visual studio 2022 IDE对C++代码反汇编

敲一段代码&#xff0c;在windows电脑儿上&#xff0c;忽然想用visual studio瞧瞧这段代码的汇编长什么样&#xff0c;怎么做呢&#xff1f; 代码有了 #include <stdio.h> void sort(int*,int);int main(){int array[] { 977,1,32,3,99,8,7,5,23,6 };int length int(…

Python 学习笔记之 networkx 使用

介绍 networkx networkx 支持创建简单无向图、有向图和多重图&#xff1b;内置许多标准的图论算法&#xff0c;节点可为任意数据&#xff1b;支持任意的边值维度&#xff0c;功能丰富&#xff0c;简单易用 networkx 中的 Graph Graph 的定义 Graph 是用点和线来刻画离散事物…

react Hooks(useRef、useMemo、useCallback)实现原理

Fiber 上篇文章fiber简单理解记录了react fiber架构&#xff0c;Hooks是基于fiber链表来实现的。阅读以下内容时建议先了解react fiber。 jsx -> render function -> vdom -> fiber树 -> dom vdom 转 fiber 的过程称为 recocile。diff算法就是在recocile这个过程…

国内外聊天AI大比拼,你知道几个?一键了解最火聊天AI应用!

国内类ChatGPT的AI工具一网打尽 2022年&#xff0c;是一个不平凡的一年。ChatGPT迅速崭露头角&#xff0c;成为备受瞩目的热门话题。特别是在OpenAI发布了基于GPT-3.5模型的ChatGPT版本后&#xff0c;这一产品因其卓越的对话能力和广泛的应用潜力&#xff0c;很快引起了大众的…

GoWeb开发框架gin-基础路由使用

文章目录 1.安装并写一个demo2.配置GoLang热加载脚手架3.配合net/http使用完整示例4.返回值4.1String返回值4.2Json返回值4.3struct结构体返回值4.4jsonp返回值4.5XML返回值 5.接收前端传过来的参数5.1get请求传值5.2form表单传值5.3接收结构体5.4路由地址传参 6.完整代码 1.安…

nodejs+vue+微信小程序+python+PHP基于spark的酒店管理系统-计算机毕业设计推荐

通过管理系统进行全面的线上管理。管理者可以通过基于spark的酒店管理系统&#xff0c;全面掌握酒店客房的各项状态&#xff0c;会员通过系统查询酒店客房信息&#xff0c;在线预定。 酒店作为旅游过程必须的设施&#xff0c;也逐渐需需要进行信息化管理&#xff0c;把酒店类型…

python 爬虫 m3u8 视频文件 加密解密 整合mp4

文章目录 一、完整代码二、视频分析1. 认识m3u8文件2. 获取密钥&#xff0c;构建解密器3. 下载ts文件4. 合并ts文件为mp4 三、总结 一、完整代码 完整代码如下&#xff1a; import requests import re import os from tqdm import tqdm from Crypto.Cipher import AES# 创建临…

油田中控室与32台碳储罐之间数据无线传输

二氧化碳强化石油开采技术&#xff0c;须先深入了解石油储层的地质特征和二氧化碳的作用机制。现场有8辆二氧化碳罐装车&#xff0c;每辆罐车上有4台液态二氧化碳储罐&#xff0c;每台罐的尾部都装有一台西门子S7-200 smart PLC。在注入二氧化碳的过程中&#xff0c;中控室S7-1…

json.loads和eval 速度对比

json.loads和eval 速度对比 代码1结果图代码2参考地址 代码1 import json import time import pandas as pddata_sets pd.read_pickle("val_token_id.pandas_pickle") data_sets[str(i) for i in data_sets] starttime.time() [json.loads(i) for i in data_sets] …

企业使用APP自动化测试工具的重要因素

随着移动应用市场的蓬勃发展&#xff0c;企业对高质量、高效率的软件交付提出了更高的要求。在这个背景下&#xff0c;APP自动化测试工具成为了企业不可或缺的一部分。以下是企业采用APP自动化测试工具的关键因素&#xff1a; 1. 快速且可重复的测试执行 自动化测试工具能够快速…

好看的早上问候语早安图片,今天最新唯美温馨祝福语

1、天气冷了&#xff0c;情谊不凉&#xff0c;树叶黄了&#xff0c;思念不忘&#xff0c;问候像一杯热茶&#xff0c;让人暖心&#xff01;祝愿我们与健康平安同行&#xff01;朋友们&#xff0c;大家早上好&#xff01; 2、多一个人牵挂是一种幸福&#xff1b;多一个人相知是一…

【分治】循环赛日程表Python实现

文章目录 [toc]问题描述分治算法示例Python实现 无运动员数量约束循环赛日程表算法示例Python实现 问题描述 设有 n 2 k n 2^{k} n2k个运动员要进行网球循环赛&#xff0c;设计一个满足以下要求的比赛日程表 每个选手必须与其他 n − 1 n - 1 n−1个选手各赛一次每个选手一天…

vue elementui点击按钮新增输入框(点多少次就新增多少个输入框,无限新增)

效果如图&#xff1a; 核心代码&#xff1a; <div v-for"(item,index) in arrayData" :key"item.id">//上面这个是关键代码&#xff0c;所有思路靠这个打通<el-inputtype"input" //除了输入框&#xff0c;还有textarea等placeholder&…

编程实战:自己编写HTTP服务器(系列5:执行后台命令)

系列入口&#xff1a;编程实战&#xff1a;自己编写HTTP服务器&#xff08;系列1&#xff1a;概述和应答&#xff09;-CSDN博客 本文介绍执行后台命令的shell.asp的实现。 目录 一、概述 二、主体代码 三、详解 3.1 参数 一、概述 这个功能就相当于一个终端&#xff0c;不…

商城免费搭建之java商城 java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c 鸿鹄云商

鸿鹄云商 SAAS云产品概述 【SAAS云平台】打造全行业全渠道全场景的SaaS产品&#xff0c;为店铺经营场景提供一体化解决方案&#xff1b;门店经营区域化、网店经营一体化&#xff0c;本地化、全方位、一站式服务&#xff0c;为多门店提供统一运营解决方案&#xff1b;提供丰富多…

MySQL:从MySQL看主从架构高可用性实现

目录 1 主备延迟 1.1 主备延迟 1.2 主备延迟的来源 1.2.1 主备机性能有差距 1.2.2 备库压力大 1.2.3 大事务 1.3 主备延迟的排查思路 3&#xff09;查看MySQL状态 2 主备切换策略 2.1 可靠性优先策略 2.2 可用性优先策略 2.3 常见切换技术 从进入互联网时代开始&a…

Linux之进程(三)(环境变量)

目录 一、基本概念 二、环境变量 1、PATH 2、HOME 3、SHELL 三、环境变量参数 四、argc和argv 一、基本概念 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。如&#xff1a;临时文件夹位置和系统文件夹位置等。环境变量通常…

【软考】信息系统项目管理师论文方向猜想

报喜不报忧&#xff0c;每天都在为鸡零狗碎推诿扯皮&#xff0c;属实是有辱师门。 通过软考&#xff0c;目前算是真正有意义的事情。 虽然都说高项的论文是个玄学&#xff0c;但是道听途说了一些通关感想还是蛮有启发的。 文件要求 参考了一份广西省高级工程师评审的文件&am…