transformer中对于QKV的个人理解

目录

1、向量点乘

2、相似度计算举例

3、QKV分析

4、整体流程

(1) 首先从词向量到Q、K、V

(2) 计算Q*(K的转置),并归一化之后进行softmax

(3) 使用刚得到的权重矩阵,与V相乘,计算加权求和。

5、多头注意力


上面这个transformer中的注意力公式,相信大家不会陌生。公式并不复杂,但是why? 为什么是这个公式,为什么大家都说QKV代表Query(查询)、Key(键)和Value(值)?

之前了解transformer的时候,对于QKV的设定感到很奇怪,后来慢慢接受了这个设定,今天记录一下自己的理解。

1、向量点乘

首先从向量点乘说起,是用于计算两个向量的相似度。

图中可以看到如果两个向量的方向相同或相近,它们的点乘结果会很,表示这两个向量相似度。相反,如果向量方向相反,点乘结果会很小或为负值

向量x和向量y点乘表示向量x在向量y上的投影再乘以向量y。反应两个向量的相似度。

假设矩阵X由n个行向量组成,每个行向量xi代表一个词的词向量,整个矩阵由这些词向量组成。简而言之,矩阵X是一个词向量矩阵,每个元素都是一个词的向量表示。

具体来说,矩阵X是一个n×n的方形矩阵,其中包含n个行向量(n个词的向量)

当矩阵X与它的转置XT进行乘法运算时,得到的是目标矩阵XXT。这个目标矩阵的每一个元素是通过矩阵X中的行向量与列向量的点乘得到的。如下图所示

例如,目标矩阵XXT中的第一行第一列元素X0​⋅X0​,实际上是向量𝑋X0​与自身做点乘,这表示的是向量𝑋X0​与自身的相似度,也就是它自身的模的平方。

同样地,第一行第二列元素X0​⋅X1​表示的是向量X0​与向量X1​之间的相似度,即它们之间的点乘结果。

这个过程可以推广到矩阵X的所有行和列,从而得到整个XXT矩阵,其中每个元素都表示了对应向量之间的相似度

2、相似度计算举例

下面以词向量矩阵为例,这个矩阵中,每行为一个词的词向量。矩阵与自身的转置相乘,生成了目标矩阵,目标矩阵其实就是一个词的词向量与各个词的词向量的相似度。

最终的矩阵数值代表了词向量之间的相似度。
我们为什么要求相似度,是为了合理分配权重。这个时候可以加上softmax

对上述得到的相似度矩阵应用Softmax函数,进行归一化处理。Softmax函数将每个元素转换成一个概率分布,使得每个元素的值都在0到1之间,并且所有元素的和为1。
这样,每个词向量与其他所有词向量的相似度都被转换成了一个概率权重

接下来,将这个权重矩阵与原始的词向量矩阵 X 相乘。这个过程可以看作是每个词向量根据其权重与其他所有词向量进行加权求和。

权重矩阵中某一行分别与词向量的一列相乘,词向量矩阵的一列其实代表着不同词的某一维度。经过这样一个矩阵相乘,相当于一个加权求和的过程,得到结果词向量是经过加权求和之后的新表示。
这个新词向量综合了输入词向量矩阵中所有词的信息,权重由它们之间的相似度决定。

3、QKV分析

注意力Attention机制的最核心的公式为:

很相似。

QKV的由来可以用图片演示为:

这些乘法操作是线性变换,它们将输入矩阵 X 映射到不同的表示空间,为注意力机制的计算提供基础。

注意力机制不直接使用原始的输入矩阵 X,而是使用经过这三个权重矩阵变换后的Q、K、V。因为使用三个可训练的参数矩阵,可增强模型的拟合能力

在上面这张论文中关于注意力的原图中,包含了我们之前所解释的过程,可以看到输入的是QKV,也就是真正输入到注意力的是这三个矩阵。流程解释如下:

Mask是机器翻译等自然语言处理任务中经常使用的方法。在机器翻译等NLP场景中,每个样本句子的长短不同,对于句子结束之后的位置,无需参与相似度的计算(比如后面补充的数据都为0),否则影响Softmax的计算结果。

4、整体流程

利用流程图重新整理一下整体的流程。

(1) 首先从词向量到Q、K、V

(2) 计算Q*(K的转置),并归一化之后进行softmax

(3) 使用刚得到的权重矩阵,与V相乘,计算加权求和。

5、多头注意力

为了增强拟合性能,Transformer对Attention继续扩展,提出了多头注意力(Multiple Head Attention)。如下图

其实就是重复之前的步骤,如下图

定义多组可训练的参数矩阵,生成多组Q、K、V。
比如我们定义8组参数,同样的输入X,最终会得到8个不同的输出,从Z0-Z7。

在输出到下一层前,需要将8个输出拼接到一起,乘以矩阵WO, 将维度降低回我们想要的维度

输入的X是2行4列,QKV是2行3列,经过QKT得到2行2列,再乘以V得到2行3列的Z,8个Z拼接成2行24列的矩阵,通过乘以一个24行4列的矩阵WO可以变回X的2行4列,之后继续输入到下一层

 当前为后续层时,即不是第一层的编码器,输入数据不再是原始文本,而是上一层编码器的输出。这意味着每一层都会接收前一层的输出作为自己的输入。 

6、个人理解(如有不对,还请指正)

其实大家常说的Q 是Query,K 是Key,V 是Value,并非一定就是以我们主观上理解的逻辑。更多的是为transformer的有效性找到合理的解释,我个人理解为transformer的设计是empirical,那些解释是由果推因。

多头注意力机制为模型提供了一种并行处理信息的能力,允许它同时在多个表示子空间中捕捉数据的特征。这种设计不仅拓宽了模型的感知范围,而且使其能够在不同的潜在特征空间中探索更为丰富的信息维度。
这些特征空间中蕴含的信息,可能超出了人类直观理解的范畴,但正是这些难以捉摸的特征,为模型提供了更深层次的数据理解能力,从而在各种任务中展现出卓越的性能。

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

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

相关文章

记一次postgresql拼接函数string_agg() 和row_number() 使用

PG两个函数使用需求和简单介绍 需求背景介绍第一个需求背景是这样的需求升级一下接下来讲讲STRING_AGG()基本语法排序 然后我们再说说ROW_NUMBER()基本语法使用 row_number() over (partition by) 进行分组统计使用 row_num限定每组数量 需求背景介绍 第一个需求背景是这样的 …

【MATLAB源码-第222期】基于matlab的改进蚁群算法三维栅格地图路径规划,加入精英蚁群策略。包括起点终点,障碍物,着火点,楼梯。

操作环境: MATLAB 2022a 1、算法描述 蚁群算法(Ant Colony Optimization,ACO)是一种通过模拟蚂蚁觅食行为的启发式优化算法。它由意大利学者Marco Dorigo在20世纪90年代初提出,最初用于解决旅行商问题(T…

从《千脑智能》看大模型

千脑智能与大模型 千脑智能介绍 世界模型千脑智能理论——对大脑的全新理解旧大脑:演化的历史烙印新大脑:智慧的创新引擎新旧大脑的互动与争斗启示与借鉴 大脑对信息的处理和建模六根六尘六识 新脑:智能的创新中枢旧脑:生存的本能…

Spring的Controller是单例还是多例,如何保证线程安全的。

目录 验证是否单例(默认单例) 多例测试 单例对象成员变量测试 多例对象成员变量测试 解决方案 结论: 补充说明 答案:controller默认是单例的,不要使用非静态的成员变量,否则会发生数据逻辑混乱。 正…

求宇文玥在水下的浮力和赵丽颖捞他的时间

关注微信公众号 数据分析螺丝钉 免费领取价值万元的python/java/商业分析/数据结构与算法学习资料 2024年汉东省在达康书记的带领下率先实现高考试点改革。为让更多的考生能提升对他们的理解和记忆,把电视剧的场景融入考试题目中。确保学生看一遍就懂,想…

STM32 proteus + STM32Cubemx仿真教程(第一课LED教程)

文章目录 前言一、STM32点亮LED灯的原理1.1GPIO是什么1.2点亮LED灯的原理 二、STM32Cubemx创建工程三、proteus仿真电路图四、程序代码编写1.LED灯操作函数介绍HAL_GPIO_WritePin函数原型参数说明示例代码 HAL_GPIO_TogglePin函数原型参数说明示例代码 2.代码编写3.烧写程序 总…

(三)React事件

1. React基础事件绑定 语法&#xff1a; on 事件名称 { 事件处理程序 }&#xff0c;整体上遵循驼峰命名法 App.js //项目根组件 //App -> index.js -> public/index.html(root)function App() {const handleClick () > {console.log(button被点击了)}return (<…

k8s学习--kubernetes服务自动伸缩之水平收缩(pod副本收缩)VPA详细解释与安装

文章目录 前言VPA简介简单理解详细解释VPA的优缺点优点1.自动化资源管理2.资源优化3.性能和稳定性提升5.成本节约6.集成性和灵活性 缺点1.Pod 重启影响可用性2.与 HPA 冲突3.资源监控和推荐滞后&#xff1a;4.实现复杂度&#xff1a; 核心概念Resource Requests 和 Limits自动调…

AI大模型学习(非常详细)零基础入门到精通,收藏这一篇就够了

前言 随着人工智能技术的快速发展&#xff0c;AI大模型学习正成为一项备受关注的研究领域。为了提高模型的准确性和效率&#xff0c;研究者们需要具备深厚的数学基础和编程能力&#xff0c;并对特定领域的业务场景有深入的了解。通过不断优化模型结构和算法&#xff0c;AI大模…

python如何输入回车

Python默认遇到回车的时候&#xff0c;输入结束。所以我们需要更改这个提示符&#xff0c;在遇到空行的时候&#xff0c;输入才结束。 raw_input就是从标注输入读取输入&#xff0c;输入的是什么就是什么。 文档解释&#xff1a; The function then reads a line from input,…

UFS协议入门-分层结构

写在前面:本文参考UFS jedec3.1,本文思维导图如下 1. 分层概述 UFS协议分为3层,从上至下分别是:应用层(UAP),传输层(UTP),互联层(UIC),具体结构如下图所示。 2.1 应用层 在应用层(UAP)中,包括:UFS指令集(UCS),设备管理器(Device Manager),任务管理器(Task Manager…

基于FPGA的图像一维FFT变换IFFT逆变换verilog实现,包含tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 fpga仿真结果 matlab调用FPGA的仿真结果进行图像显示 2.算法运行软件版本 vivado2019.2 matlab2022a 3.部分核心程序 ......................…

Knife4j 生成 API 文档

文章目录 Knife4j 简介使用步骤Knife4j 常用注解的列表案例可能遇到报错 Knife4j 简介 Knife4j 是一个增强的 Swagger 文档生成工具&#xff0c;提供了更加友好的界面和更多功能&#xff0c;使得 API 文档更加美观且易于使用。它是基于 Spring Boot 和 Swagger 进行封装的&…

Xcode 安装17.5 simulator 总是失败

升级到xcode15.4后需要安装ios17.5模拟器 但是在下载过程中会遇到报错 : The network connection is lost 解决方案&#xff1a; 先将模拟器下载到本地 Xcode 安装17.5 simulator 下载地址&#xff1a; Sign In - Applhttps://developer.apple.com/download/all/?qXcode 下…

C# WPF入门学习主线篇(十五)—— DockPanel布局容器

C# WPF入门学习主线篇&#xff08;十五&#xff09;—— DockPanel布局容器 欢迎来到C# WPF入门学习系列的第十五篇。在前几篇文章中&#xff0c;我们探讨了 Canvas、StackPanel 和 WrapPanel 布局容器及其使用方法。本篇博客将介绍另一种强大且常用的布局容器——DockPanel。…

【计算机网络】P3 计算机网络协议、接口、服务的概念、区别以及计算机网络提供的三种服务方式

目录 协议什么是协议协议是水平存活的协议的组成 接口服务服务是什么服务原语 协议与服务的区别计算机网络提供的服务的三种方式面向连接服务与无连接服务可靠服务与不可靠服务有应答服务与无应答服务 协议 什么是协议 协议&#xff0c;就是规则的集合。 在计算机网络中&…

# 梯影传媒T6投影仪刷机方法及一些刷机工具链接

梯影传媒T6投影仪刷机方法及一些刷机工具链接 文章目录 梯影传媒T6投影仪刷机方法及一些刷机工具链接1、安装驱动程序2、备份设备rom【boot、system】3、还原我要刷进设备的rom【system】4、打开开发者模式以便于安装apk5、root设备6、更多好链接&#xff1a; 梯影传媒T6使用的…

Redis系列-4 Redis集群介绍

Redis集群 Redis提供了持久化能力&#xff0c;保证了重启不会丢失数据&#xff1b;但Redis重启至完全恢复期间&#xff0c;缓存不可用。另外&#xff0c;对于高并发场景下&#xff0c;单点Redis服务器的性能不能满足吞吐量要求&#xff0c;需要进行横向扩展。此时&#xff0c;…

软件设计,建模及需求分析

文章目录 设计原则建模及需求分析UML画图工具原型图画图工具 重构 设计原则 SOLID原则 单一职责 开闭 &#xff08;扩展开放&#xff0c;修改关闭&#xff09; 里氏替换 &#xff08;父类出现地方都可以用子类替换&#xff09; 接口隔离 依赖倒置&#xff08;高层模块不依…