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,那些解释是由果推因。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python爬虫入门教程(二):requests库的高级用法

requests库除了基本的GET和POST请求外,requests库还提供了许多高级功能,本文将介绍其中一些常用的用法。包括: 会话保持(Session)SSL证书验证文件上传代理设置自定义HTTP适配器超时设置 请求参数 文章最开始&#x…

dockerhub不可用临时解决方案

近日,在拉取一些docker hub的镜像的时候死活拉不下来,要么超时,要么无法接站点地址,不管是docker hub,还是国内镜像站,统统都不行了。 经过各大媒体报道,以及自己的亲身验证,才知道&#xff0c…

android集成百度文心一言实现对话功能,实战项目讲解,人人都能拥有一款ai应用

大家好,今天给大家讲解下如何实现一个基于百度文心一言的app功能,app内部同时集成了讯飞的语音识别。本文适用于有android基础的小伙伴阅读,文章末尾放上本项目用到的全部实例代码,在使用前请务必看完本文章。 先来给大家看看效果…

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

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

Windows下SVN文件损坏,启动服务报错1067

之前碰到过一次,忘记最后怎么解决的了,只记得大概原理和原因,以及解决办法。 1067错误码,很多地方都会碰到,mysql也会有,看来应该是windows系统的错误码。跟具体程序无关。所以直接百度“SVN”、“1067”…

【Python报错】已解决ValueError: Expected 2D array, got 1D array instead

成功解决“ValueError: Expected 2D array, got 1D array instead”错误的全面指南 一、引言 在Python的数据分析和机器学习领域,尤其是使用NumPy、Pandas、scikit-learn等库时,经常会遇到各种类型错误。其中,“ValueError: Expected 2D arr…

AI菜鸟向前飞 — LangChain系列之十七 - 剖析AgentExecutor

AgentExecutor 顾名思义,Agent执行器,本篇先简单看看LangChain是如何实现的。 先回顾 AI菜鸟向前飞 — LangChain系列之十四 - Agent系列:从现象看机制(上篇) AI菜鸟向前飞 — LangChain系列之十五 - Agent系列&#…

大模型的发展历程

1、早期模型的探索与局限性 1.1早期模型的探索与局限性 从早期的符号逻辑到现代的深度学习 1 模型,AI 领域经历了数十年的探索和迭代,为后续突破打下了坚实基础。随着大数据的发展和 AI 计算能力的爆炸式增长,深度学习模型的崛起显得尤为突出…

有序二叉树java实现

类实现: package 树;import java.util.LinkedList; import java.util.Queue;public class BinaryTree {public TreeNode root;//插入public void insert(int value){//插入成功之后要return结束方法TreeNode node new TreeNode(value);//如果root为空的话插入if(r…

人工智能_机器学习096_PCA主成分分析降维算法_PCA降维原理_介绍和使用_模式识别_EVD特征值分解_SVD奇异值分解---人工智能工作笔记0221

首先我来看PCA降维,可以看到在图像处理中经常用到PCA,经过对数据进行降维可以去除数据噪声,发现数据中的模式,也就是 发现数据的规律. 这里的模式识别就是 机器学习中的一个分支 就是在数据中找规律的意思 我们使用代码看一下 from sklearn.docomposition import PCA from skl…

kivy 百词斩项目 报错

AttributeError: FigureCanvasKivyAgg object has no attribute resize_event AttributeError: FigureCanvasKivyAgg object has no attribute resize_event 是一种常见的Python错误,当你试图访问一个对象(在这个例子中是 FigureCanvasKivyAgg 对象&am…

六、主存储器管理,计算机操作系统教程,第四版,左万利,王英

文章目录 [toc]一、存储管理的功能1.1 存储分配1.2 存储共享1.3 存储保护1.4 存储扩充1.5 地址映射 二、内存资源管理2.1 内存分区2.1.1 静态分区与动态分区2.1.2 等长分区与异长分区 2.2 内存分配2.2.1 静态等长分区的分配2.2.2 *动态异长分区的分配 2.3 碎片与紧凑 三、界地址…

从C到C++,C++入门(2)

在C入门篇(1)中,博主为大家简单介绍了什么是C,以及C中的关键字,命名空间,输入与输出和缺省参数的相关知识。今天就让我们继续一起学习C的基础知识点吧!! 1.函数重载 1.1函数重载的概…

C# WPF入门学习主线篇(十九)—— 布局管理实战『混合布局案例』

C# WPF入门学习主线篇(十九)—— 布局管理实战『混合布局案例』 欢迎来到C# WPF入门学习系列的第十九篇。在前几篇文章中,我们详细介绍了各个布局容器的基本概念和使用方法。本篇博客将通过一个综合的实战案例,展示如何在WPF中使用…

Comfyui容器化部署与简介

目前使用 Stable Diffusion 进行创作的工具主要有两个:Stable Diffusion WebUI 和 ComfyUI。本文重点介绍ComfyUI的部署使用。 ComfyUI 可定制性很强,可以让创作者搞出各种新奇的玩意,通过工作流的方式,也可以实现更高的自动化水平…

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

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

【MySQL】(基础篇三) —— 创建数据库和表

管理数据库和表 管理数据库 创建数据库 在MySQL中,创建数据库的SQL命令相对简单,基本语法如下: CREATE DATABASE 数据库名;如果你想避免在尝试创建已经存在的数据库时出现错误,可以添加 IF NOT EXISTS 子句,这样如…

AI 边缘计算平台 - 6 TOPS 低功耗 RK3576

RK3576 是瑞芯微第二代 8nm 高性能 AIOT 平台,CPU 采用八核大小核构架(4A72 2.2GHz 4A53 1.8GHz),以及一个 M0 协处理器。其 CPU 算力高达 58K DMIPS,足以应对各种复杂计算任务。搭载 Mali-G52 MC3 GPU,14…

vscode软件上安装 Fitten Code插件及使用

一. 简介 前面几篇文章学习了 Pycharm开发工具上安装 Fitten Code插件,以及 Fitten Code插件的使用。 Fitten Code插件是是一款由非十大模型驱动的 AI 编程助手,它可以自动生成代码,提升开发效率,帮您调试 Bug,节省…

【CS.AI】GPT-4o:重新定义人工智能的新标杆

文章目录 1 序言2 GPT-4o的技术亮点3 GPT-4o与前代版本的对比3.1 热门AI模型对比表格GPT-3.5GPT-4GPT-4oBERTT5 3.2 其他 4 个人体验与感受5 结论 1 序言 嘿,大家好!今天要聊聊一个超级酷的AI新突破——GPT-4o!最近,OpenAI发布了…