Transformer核心—自注意力机制

Transformer基础—自注意力机制

当我们处理文本、语音这类序列数据时,总会遇到一个老问题:模型到底该怎么理解“前后文”呢?
RNN 和 LSTM 曾经是热门的答案,它们沿着时间顺序一点点地读数据,但读得太慢,还容易忘记前面的信息。后来 CNN 被搬了进来,靠卷积核抓住局部模式,可要想看远处的信息,就得堆一大堆层,效率也不高。
于是研究者开始换个思路:如果模型能直接跳过中间环节,把注意力放到序列中真正相关的位置,不是更聪明吗? 这就是注意力机制的出发点。而当这种机制被应用到同一个序列内部时,就诞生了今天大名鼎鼎的——自注意力机制(Self-Attention)

一、基本概念

什么是自注意力机制?

自注意力机制就是找到序列当前词与序列所有词之间的关系,也就是说我们的模型要知道这个词“是谁”、“在哪”。

当我们说“模型要知道这个词是谁、在哪、该关注谁”时,其实就需要一种可计算的方式来衡量词和词之间的关系。

这时候就引出了自注意力的三大主角:Q(查询向量:Query)、K(键向量:Key)、V(值向量:Value)

我们知道:在传统的 RNN 模型里,每个词都会被转化成一个 词向量(Embedding),这个向量基本上就代表了“这个词是谁”。RNN 会把这些向量按照顺序依次读入,再结合隐状态去理解上下文。
但在自注意力机制中,研究者觉得:光有一个词向量还不够。如果我们想让模型判断“这个词应该关注谁”,就得从不同角度去看待它。

于是,同一个词的词向量会被投影成三份不同的表示:

  • Q(Query):我去发起“提问”,看看我应该关心哪些词;
  • K(Key):我拿出自己的“身份标签”,告诉别人“我是什么”;
  • V(Value):我还准备了一份“内容”,如果有人关注我,就把这份内容贡献出来。

这样一来,词嵌入不再只是一个“静态身份”,而是被拆解成查询、标识和内容三种角色,从而让模型能够灵活地建立联系。

我们能够理解为:我们将一个词最开始的一个词向量进行了三次线性变换(也就是乘上三个不同的矩阵),得到的结果就是Q、K、V,他们都是这个这个词得词向量。

虽然一个词从最开始的一个词向量变为了三个词向量,但是这三个词向量仅仅只是表示这一个词,没有和上下文建立联系,那么我们是如何实现上下文联系的呢?

二、实现过程

1.计算注意力得分

我们将序列当前词的Q向量与序列任何一个词的K向量做点积,得到的这个值能够作为当前词与另外一个词的相似度判断依据,值越大,说明这两个词越相似,但是数值可能会过大,所以需要引入一个缩放因子限制数值大小,使得梯度能够稳定更新。因此就有了注意力得分矩阵公式:
Attention(Q,K)=QKTdk \text{Attention}(Q, K) = \frac{QK^T}{\sqrt{d_k}} Attention(Q,K)=dkQKT
这个矩阵的形状为n×nn\times nn×n,其中n表示的是序列的长度,矩阵中的元素(i,j)(i,j)(i,j)表示序列第iii个元素与第jjj个元素的注意力得分,也就是它们的相似度。

图示:

在这里插入图片描述
得到QKV向量
在这里插入图片描述
计算第一个词和序列中所有词的每个注意力得分α1,i=q1⋅kidk\alpha_{1,i} = \frac{q^1 \cdot k^i}{\sqrt{d_k}}α1,i=dkq1ki

2.归一化

我们要将得到的注意力得分转换为概率分布,即将值得范围控制在[0,1]之间,这个想法我们可以通过softmaxsoftmaxsoftmax函数得到实现,并且它确保了每一行的权重和为1,也就是一个词对于序列所有词的注意力权重之和为1。(注意:计算注意力得分和权重的时候,包括词自己本身,也就是用某个词的Q向量去乘上自己的V向量
Attention Weight=softmax(QKTdk) \text{Attention Weight} = \text{softmax} \left( \frac{QK^T}{\sqrt{d_k}} \right) Attention Weight=softmax(dkQKT)

3.加权求和

得到了每个词对于序列的注意力权重矩阵之后,接下来就是与V矩阵进行相乘,进行加权求和,最终得到的就是带有上下文联系的词向量。
Output=Attention Weight×V=softmax(QKTdk)×V \text{Output} =\text{Attention Weight} \times V = \text{softmax} \left( \frac{QK^T}{\sqrt{d_k}} \right) \times V Output=Attention Weight×V=softmax(dkQKT)×V
计算图示意:

在这里插入图片描述
QK计算相似度后,经 softmaxsoftmaxsoftmax 得到注意力,再乘V,最后相加得到包含注意力的输出

三、多头注意力

现在我们已经知道了什么是自注意力机制,那么接下来介绍以下自注意力机制的拓展,也就是transformer所真正运用到的注意力机制——多头注意力机制

多头注意力机制顾名思义,将注意力机制中的Q、K、VQ、K、VQKV向量分成了多个“头”,也就是分成了nnn个组,每个组算出各自的注意力结果,然后将每组的输出进行拼接,最后再通过线性变换(乘上一个权重矩阵做特征融合)得到最终的输出。

【这种思路类似于CNN中的分组卷积】

比如将一个512维度的词分为2个组(也就是两个头),那么每组QKV向量的维度就应该是256维度,一共有两组QKV。

在这里插入图片描述
aia^iaiaja^jaj为两个不同的词,他们分别有两组QKV向量

多头注意力的目的

总的来说,多头注意力的目的就是为了提高模型的表达能力。我们可以用多组注意力去关注这个词的不同特征,比如一个词有32组注意力,那么一组可以是表示这个词的情感特征、一组表示这个词的词法特征、一组表示这个词的词性特征等等…

这就让我们的模型学习到了更多的上下文信息,能够在不同场景下表达合适的意思,也就是更有语境。

PyTorch封装好的多头注意力层nn.MultiheadAttention

import torch
import torch.nn as nnmultihead_atten_layer = nn.MultiheadAttention(embed_dim=512,num_heads=8,batch_first=True
)
embedding_layer = nn.Embedding(10, 512)
X = torch.randint(0, 10, (1, 10))X = embedding_layer(X)atten_out, atten_weights = multihead_atten_layer(# 内部自动用可学习的 W^Q, W^K, W^V 把 X 投影成 QKVquery=X,key=X,value=X,
)# 打印注意力得分以及权重矩阵
print(atten_out.shape, atten_weights.shape)# torch.Size([1, 10, 512]) torch.Size([1, 10, 10])

以上是博主对transformer注意力机制的一些总结笔记,若文章中出现错误请及时指正博主,感谢浏览☆噜~☆

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

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

相关文章

分片上传-

分片上传原理:客户端将选择的文件进行切分,每一个分片都单独发送请求到服务端;断点续传 & 秒传原理:客户端 发送请求询问服务端某文件的上传状态 ,服务端响应该文件已上传分片,客户端再将未上传分片上传…

零知开源——基于STM32F103RBT6的智能风扇控制系统设计与实现

✔零知IDE 是一个真正属于国人自己的开源软件平台,在开发效率上超越了Arduino平台并且更加容易上手,大大降低了开发难度。零知开源在软件方面提供了完整的学习教程和丰富示例代码,让不懂程序的工程师也能非常轻而易举的搭建电路来创作产品&am…

ReACT Agent概述

目录 1. 核心思想:解决传统方法的局限性 2. ReACT 的工作原理:一个循环过程 3. 技术实现的关键要素 4. ReACTAgent 在任务中的具体工作流程 5. 优势与重要性 6. 挑战与局限性 总结 ReACT 是一个非常重要的框架,它代表了构建能够推理&a…

必知!机器人的分类与应用:RPA、人形与工业机器人

每当提及“机器人”这三个字,许多人的第一反应或许仍是科幻电影中那种具备人类外形、可自由行走与对话的仿生装置。然而,一个值得深入探讨的科技现实是:我们对于人形机器人的迷恋,更多源自文化叙事与情感投射,而非真实…

最快的 C 语言 JSON 库 - yyjson

文章目录DOM 模式下的性能比对一、AWS EC2 (AMD EPYC 7R32, gcc 9.3)二、iPhone (Apple A14, clang 12)持续更新中 持续更新中 持续更新中一个用 ANSI C(C89) 编写的高性能 JSON 库 API.md DOM 模式下的性能比对 DOM 模式,即构建完整 JSON 内存结构后访问数据的模…

TP8 模型save更新不成功

一、User文件头部代码class User extends Model {const TITLE_NAME 用户;//名称//不能删除protected $name user_; //表名 protected $connection \app\services\database\model\DbConnModel::CONN_DB_SITE; //数据库的连接二、更新部分我要更新user_1用户表中的用户信息$se…

中囯移动电视盒子(魔百和)B860AV2.1-A2和CM311-5-zg刷机手记

文章目录B860AV2.1-A2电视盒子情况打开隐藏或屏蔽的功能进入Recovery模式打开WiFi(如果被隐藏)打开运维调试打开ADB调试安装第三方应用、设置第三方桌面等(Fiddler抓包替换官方App安装包)开启ADB和使用ADB禁止“首次启动设置”刷机…

【系统架构设计(14)】项目管理下:软件质量与配置管理:构建可靠软件的基础保障

文章目录一、核心思想二、软件质量属性:定义"好软件"的标准三、质量保证与控制:实现质量标准的方法四、CMMI模型:组织质量能力的演进路径五、软件配置管理:质量成果的保护机制六、软件工具:质量管理的技术支…

码农的“必修课”:深度解析Rust的所有权系统(与C++内存模型对比)

在软件开发的世界里,内存管理是至关重要的一个环节。它是程序运行的基础,直接关系到程序的性能、稳定性和安全性。一个糟糕的内存管理策略,可能导致内存泄漏、野指针、缓冲区溢出等一系列令人头疼的问题,甚至带来灾难性的安全漏洞…

Java全栈学习笔记30

# MySQL 卸载安装版电脑管家/360/控制面板卸载mysql服务即可删除ProgramData中的MySQL目录解压版winr 输入 services.msc 打开服务管理。查看是否存在MySQL,如果存在则删除注册表 winR regedit 打开注册表计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Servic…

Transformers 学习入门:前置知识补漏

在学习 Transformers 之前,打好神经网络和自然语言处理的基础至关重要。本文整理了需要掌握的核心前置知识,用通俗的例子帮你快速理解复杂概念,为后续学习铺平道路。​ 一、神经网络基础​ 1. 多层感知机(MLP)&#xf…

双摄工业相机的主要特点和应用场景

双摄工业相机(双目摄像头)在工业领域中的应用非常广泛,其核心优势在于通过双镜头模拟人眼立体视觉,能够获取深度信息并实现高精度三维重建。 一、双摄工业相机的核心优势 深度感知与三维重建 双目摄像头通过两个镜头从不同角度拍…

YOLOv11改进:FocalModulation替换SPPF(精度更高的空间金字塔池化)

YOLOv11:FocalModulation替换SPPF(精度更高的空间金字塔池化) 引言 在目标检测领域,YOLO系列算法以其高效性和准确性广受欢迎。作为YOLO系列的最新成员之一,YOLOv11在多个方面进行了优化和改进。其中,空间金…

LLM与数据工程的融合:衡石Data Agent的语义层与Agent框架设计

在数字经济浪潮中,企业数据智能正经历从"工具辅助"到"智能协同"的范式跃迁。传统BI系统受限于静态报表与预设指标,难以应对动态业务场景的复杂需求。衡石科技发布的HENGSHI SENSE 6.0通过"Data AI Agent"架构创新&#x…

假设一个算术表达式中包含圆括号、方括号和花括号3种类型的括号,编写一个算法来判别,表达式中的括号是否配对,以字符“\0“作为算术表达式的结束符

思想:这道题是栈的应用类型,我们可以建立一个栈来保存(,[,{,通过遍历字符串如果是三个左括号其中一个则入栈,当遇到)]}则出栈配对,如果左右匹配,则遍历下一个元素,如果不匹配直接返回,如果遍历字符串结束&a…

鸿蒙Next的UI国际化与无障碍适老化实践:构建全球包容的数字世界

科技不应让任何人掉队,鸿蒙Next正将这一理念变为现实在全球化日益深入的今天,应用的国际化与无障碍设计不再是"锦上添花",而是不可或缺的核心竞争力。华为鸿蒙Next系统从设计之初就深入考虑了这些需求,为开发者提供了完…

深度学习——迁移学习

迁移学习作为深度学习领域的一项革命性技术,正在重塑我们构建和部署AI模型的方式。本文将带您深入探索迁移学习的核心原理、详细实施步骤以及实际应用中的关键技巧,帮助您全面掌握这一强大工具。迁移学习的本质与价值迁移学习的核心思想是"站在巨人…

RAG|| LangChain || LlamaIndex || RAGflow

大模型:预训练模型 外挂知识库:知识库->向量数据库 输入-》预处理成向量 提示词-》llm归纳总结 离线:企业原文本存到向量数据库 向量: 同一个向量模型(第二代检索,推荐,个人助理,…

mcp_clickhouse代码学习

引言:当ClickHouse遇上MCP 作为一个基于Model Context Protocol(MCP)框架的ClickHouse查询服务器,mcp_clickhouse不仅在技术实现上展现了优雅的设计思路,更在架构层面提供了许多值得借鉴的解决方案。 一、项目概览:架构初探 mcp_clickhouse是一个专为ClickHouse数据库设计…

前端三件套+springboot后端连通尝试

本文承接自跨域请求问题浅解-CSDN博客 后端: //主启动类 SpringBootApplication public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}} //控制类 RestController RequestMapping(&quo…