这样图解Transformer应该没人看不懂了吧——多头注意力机制详解

news2024/9/24 19:13:44

这是关于Transformer系列文章的第三篇部分,我们将用自上而下的方式深入探讨Transformer的功能。

在前两篇文章中,我们已经了解了Transformer是什么、它的架构以及工作原理。

没看过的同学可以点击图片进行查看

Transformer图解1—基础与架构

Transformer图解2—工作原理

本文将更进一步,深入剖析Transformer的核心——多头注意力(Multi-head Attention)机制。

对自注意力、编码器-解码器注意力、注意力分数与掩码机制进行深度解析!

Transformer中注意力的应用方式

Transformer在三个地方使用了注意力机制:

编码器中的自注意力:输入序列关注自身

解码器中的自注意力:目标序列关注自身

解码器中的编码器-解码器注意力:目标序列关注输入序列

注意力输入参数——查询、键、值

注意力层接收三个参数作为输入,即查询(Query)、键(Key)和值(Value),它们结构上相似,序列中的每个单词由一个向量表示。

编码器自注意力

输入序列首先经过输入嵌入和位置编码,为每个单词生成包含意义和位置信息的编码表示。

这些表示随后作为自注意力中的查询、键和值参数,生成包含注意力分数的编码表示。

随着这些表示通过编码器堆栈中的每一层,每个自注意力模块都会将各自的注意力分数加入到每个单词的表示中。

解码器自注意力

在解码器堆栈中,目标序列经过输出嵌入和位置编码,生成包含意义和位置信息的编码表示。

这些表示同样作为自注意力中的查询、键和值参数,生成包含注意力分数的编码表示。

之后,这些表示通过层归一化,作为编码器-解码器注意力中的查询参数。

编码器-解码器注意力

同时,编码器堆栈的最终输出被传递给编码器-解码器注意力中的键和值参数。

因此,编码器-解码器注意力同时获得了目标序列(来自解码器自注意力)和输入序列(来自编码器堆栈)的表示,生成包含输入序列注意力分数影响的目标序列单词表示。

随着这些表示通过解码器堆栈中的每一层,每个自注意力和编码器-解码器注意力都会将各自的注意力分数加入到每个单词的表示中。

另外我给大家准备了一些Transformer和自然语言处理查漏补缺的资料(所有资料都已经打包好了)

多个注意力头

在Transformer中,注意力模块并行地重复其计算多次,每次称为一个注意力头。

注意力模块将其查询、键和值参数分成N份,每份独立通过一个头进行处理。

然后将所有类似的注意力计算结果组合起来,生成最终的注意力分数。

这种多头注意力机制使Transformer能够更强大地编码每个单词的多种关系和细微差别。

为了深入理解数据在Transformer内部的处理过程,我们将以一个翻译问题为例,通过训练过程中的一个样本(输入序列为英文“You are welcome”,目标序列为西班牙文“De nada”)来演示注意力模块的工作机制。

注意力超参数

确定数据维度的三个超参数包括:

  • 嵌入大小:嵌入向量的宽度(示例中为6)。此维度在整个Transformer模型中保持一致,有时也被称为“模型大小”等。

  • 查询大小(等于键和值的大小):三个线性层分别用于生成查询、键和值矩阵的权重大小(示例中为3)。

  • 注意力头数(示例中为2)。

此外,我们还有批处理大小,它代表样本数量的一个维度。

输入层

输入嵌入(Input Embedding)和位置编码(Position Encoding)层生成一个形状为(样本数,序列长度,嵌入大小)的矩阵,该矩阵被送入堆叠中的第一个编码器的查询(Query)、键(Key)和值(Value)部分。

为了简化视觉呈现,我们将在图示中省略批次维度,并专注于其余维度。

线性层

查询、键和值分别对应三个独立的线性层,每个线性层都有自己的权重。输入数据通过这些线性层以产生Q、K、V矩阵。

跨注意力头的数据分割

现在,数据被分割到多个注意力头中,以便每个头能够独立处理。

但重要的是要理解,这只是一种逻辑上的分割。查询、键和值并没有物理上被分割成每个注意力头一个单独的矩阵。

相反,它们分别使用一个数据矩阵,但矩阵中的每个注意力头都有逻辑上独立的部分。

同样,也没有为每个注意力头设置单独的线性层。所有注意力头都共享相同的线性层,但仅在其“自己的”逻辑数据部分上操作。

线性层权重按头逻辑划分

这种逻辑分割是通过将输入数据和线性层权重均匀分配到各个注意力头来实现的。

我们可以通过选择查询大小(Query Size)来实现这一点,计算公式为:

查询大小 = 嵌入大小 / 注意力头数

在我们的例子中,查询大小 = 6/2 = 3。尽管层权重(和输入数据)是一个单独的矩阵,但我们可以将其视为每个头单独的层权重“堆叠”在一起。

因此,所有头的计算都可以通过单个矩阵操作完成,而不需要N个单独的操作。

这使得计算更加高效,并且模型更简洁,因为所需的线性层更少,同时仍能实现独立注意力头的强大功能。

重塑Q、K、V矩阵

线性层输出的Q、K、V矩阵被重塑以包含显式的头维度。

现在,每个“切片”都对应于每个头的矩阵。

接下来,通过交换头和序列维度来再次重塑该矩阵,虽然批次维度没有画出,但Q的维度现在是(批次,头,序列,查询大小)。

在下图中,我们可以看到从线性层出来的Q矩阵被分割的完整过程。

最后一步仅用于可视化——尽管Q矩阵是一个单独的矩阵,但我们可以将其视为每个头一个逻辑上独立的Q矩阵。

现在我们准备计算注意力分数。

计算每个头的注意力分数

现在我们已经有了按头分割的Q、K、V三个矩阵,这些矩阵用于计算注意力分数。

我们将展示使用最后两个维度(序列和查询大小)的单个头的计算过程,并省略前两个维度(批次和头)。

基本上,我们可以想象我们正在查看的计算是针对每个头和批次中的每个样本“重复”进行的(尽管显然它们作为单个矩阵操作发生,而不是循环)。

第一步是进行Q和K之间的矩阵乘法。

然后,在结果中添加一个掩码值,在编码器自注意力中,掩码用于屏蔽填充值,使其不参与注意力分数的计算。

在解码器自注意力和解码器-编码器注意力中,将应用不同的掩码,我们将在稍后的流程中介绍。

现在,通过将结果除以查询大小的平方根进行缩放,然后对其应用Softmax函数。

最后,在Softmax的输出和V矩阵之间进行另一个矩阵乘法。

编码器自注意力中的完整注意力分数计算过程如下:

将每个头的注意力分数合并

目前,我们为每个头分别计算了注意力分数,这些分数需要被合并成一个单一的分数。这个合并操作本质上是拆分操作的逆过程。

合并操作通过重塑结果矩阵来消除头的维度,具体步骤如下:

  • 通过交换头和序列维度来重塑注意力分数矩阵。换句话说,矩阵的形状从(批次大小,头数,序列长度,查询大小)变为(批次大小,序列长度,头数,查询大小)。

  • 通过重塑为(批次大小,序列长度,头数*查询大小)来合并头维度。这实际上是将每个头的注意力分数向量连接成一个单一的合并后的注意力分数。

由于嵌入大小等于头数乘以查询大小,因此合并后的分数形状为(批次大小,序列长度,嵌入大小)。

在下图中,我们可以看到示例分数矩阵的完整合并过程。

端到端多头注意力

将上述所有步骤整合起来,就是多头注意力的端到端流程。

多头拆分捕捉更丰富的含义

嵌入向量用于捕捉单词的意义。在多头注意力机制中,如我们所见,输入(和目标)序列的嵌入向量在逻辑上被拆分到多个头上。这样做的意义何在?

这意味着嵌入的不同部分可以学习每个单词与其他单词在序列中关系时的不同意义方面。

这使得Transformer能够捕捉序列的更丰富解释。

虽然这可能不是一个现实的例子,但它有助于我们建立直观理解。

例如,一部分可能捕捉名词的“性别”(男性、女性、中性),而另一部分可能捕捉名词的“数”(单数或复数)。这在翻译中可能很重要,因为许多语言的动词使用取决于这些因素。

解码器自注意力与掩码

解码器自注意力的工作原理与编码器自注意力相同,只是它作用于目标序列的每个单词上。

同样地,掩码操作会屏蔽目标序列中的填充词。

解码器编码器-解码器注意力与掩码

编码器-解码器注意力从两个来源接收输入。

因此,与编码器自注意力(计算每个输入单词与其他输入单词之间的交互)和解码器自注意力(计算每个目标单词与其他目标单词之间的交互)不同,编码器-解码器注意力计算每个目标单词与每个输入单词之间的交互。

因此,结果注意力分数中的每个单元格都对应于一个Q(即目标序列单词)与所有其他K(即输入序列)单词和所有V(即输入序列)单词之间的交互,掩码操作会屏蔽目标输出中的后续单词。

结论

本文能让大家对Transformer中的注意力(Attention)模块有了较为清晰的认识。

结合我们在之前文章中详细探讨的Transformer的整体端到端流程,现在我们已经覆盖了Transformer架构的详细操作并明确了Transformer的功能。

零基础如何学习大模型 AI

领取方式在文末

为什么要学习大模型?

学习大模型课程的重要性在于它能够极大地促进个人在人工智能领域的专业发展。大模型技术,如自然语言处理和图像识别,正在推动着人工智能的新发展阶段。通过学习大模型课程,可以掌握设计和实现基于大模型的应用系统所需的基本原理和技术,从而提升自己在数据处理、分析和决策制定方面的能力。此外,大模型技术在多个行业中的应用日益增加,掌握这一技术将有助于提高就业竞争力,并为未来的创新创业提供坚实的基础。

大模型典型应用场景

AI+教育:智能教学助手和自动评分系统使个性化教育成为可能。通过AI分析学生的学习数据,提供量身定制的学习方案,提高学习效果。
AI+医疗:智能诊断系统和个性化医疗方案让医疗服务更加精准高效。AI可以分析医学影像,辅助医生进行早期诊断,同时根据患者数据制定个性化治疗方案。
AI+金融:智能投顾和风险管理系统帮助投资者做出更明智的决策,并实时监控金融市场,识别潜在风险。
AI+制造:智能制造和自动化工厂提高了生产效率和质量。通过AI技术,工厂可以实现设备预测性维护,减少停机时间。

AI+零售:智能推荐系统和库存管理优化了用户体验和运营成本。AI可以分析用户行为,提供个性化商品推荐,同时优化库存,减少浪费。

AI+交通:自动驾驶和智能交通管理提升了交通安全和效率。AI技术可以实现车辆自动驾驶,并优化交通信号控制,减少拥堵。


这些案例表明,学习大模型课程不仅能够提升个人技能,还能为企业带来实际效益,推动行业创新发展。

学习资料领取

如果你对大模型感兴趣,可以看看我整合并且整理成了一份AI大模型资料包,需要的小伙伴文末免费领取哦,无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

在这里插入图片描述

部分资料展示

一、 AI大模型学习路线图

整个学习分为7个阶段
在这里插入图片描述

二、AI大模型实战案例

涵盖AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,皆可用。
在这里插入图片描述

三、视频和书籍PDF合集

从入门到进阶这里都有,跟着老师学习事半功倍。
在这里插入图片描述

在这里插入图片描述

四、LLM面试题

在这里插入图片描述

如果二维码失效,可以点击下方链接,一样的哦
【CSDN大礼包】最新AI大模型资源包,这里全都有!无偿分享!!!

😝朋友们如果有需要的话,可以V扫描下方二维码联系领取~
在这里插入图片描述

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

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

相关文章

ITopologicalOperator.Intersect 直接崩软件,也不报错的解决方案

1、问题描述: 说多崩溃就有多崩溃,执行到下面这个相交分析的时候,就一直崩软件,用catch也catch不到东西,相同的数据放到另外一个工程中的时候,又是正常的,一直找不到原因。 2、终级方案 最终…

LLM - 自定义图像数据集 使用 LoRA 微调 图像生成 Flux 模型

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/141638928 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 在 Dif…

假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的置空队列、判断队列是否为空、入队和出队等算法。

typedef int Datatype; typedef struct queue {Datatype data;struct queue* next; }queue; //队列 typedef struct {queue* rear; }LinkQueue; //初始化 void queueinit(LinkQueue* ps) {ps->rear (queue*)malloc(sizeof(queue));if (ps->rear NULL){perror("err…

家里养宠物空气净化器有用吗,应该怎么挑选宠物空气净化器

养猫,无疑给了我们很多陪伴和乐趣,为我们的生活添上了无数温馨的色彩。然而,在这份甜蜜的负担中,猫毛的问题确实成为了不少铲屎官们共同的“小烦恼”。这些浮毛总能在你最不经意的时候,悄悄占领家中的每一个角落。每天…

不仅仅是文化:解决常见安全问题根源

今年,GitLab对DevSecOps专业人士的年度调查发现了一些与组织文化相关的问题,这些问题可能会阻碍工程团队和安全团队之间的更深层次协调。 大多数(58%)的安全受访者表示,他们很难让开发部门优先修复漏洞,52%的人表示,繁…

Getting AttributeError when using openAI python library

题意:“使用 OpenAI Python 库时出现 AttributeError” 问题背景: Im building a new AI chatbot utilizing the openai library and I have a gradio UI set up in one file (app.py) and a predict() function in another (trainedBot.py) Every time…

【Threejs学习】材质灯光投影

一、光源分类 环境光(AmbientLight):会均匀的照亮场景中的所有物体。无方向,不能投射阴影。平行光(DirectionalLight):沿特定方向散发的光,发出的光线都是平行的。例如太阳光,可投射阴影。点光源(PointLight)&#xf…

2024年大学生适合入手的蓝牙耳机推荐?四款开放式耳机推荐

2024年大学生入手蓝牙耳机的话,我当然是比较推荐入手开放式蓝牙耳机的。 主要是因为开放式蓝牙耳机佩戴起来真的很舒适,它的开放式设计通常是轻巧且适配贴合不同耳型的,所以既不会对耳朵造成压迫感,也适合长时间佩戴使用。 不仅…

华为AC旁挂二层组网配置详解:从DHCP部署到无线业务配置,完成网络搭建

组网需求 AC组网方式:旁挂二层组网。 DHCP部署方式: AC作为DHCP服务器为AP分配IP地址。 防火墙作为DHCP服务器为STA分配IP地址。 业务数据转发方式:直接转发。 网络拓扑图 对于旁边路直接转发,优点就是数据流量不经过AC&…

ubuntu20.04(wsl2)测试 arcface 人脸识别(计算特征向量)

1. 参考博客和代码、模型仓库: 1.1. 【C随记】collect2: error: ld returned 1 exit status错误分析与解决 1.2. Visual Studio 2022新建 cmake 工程测试 tensorRT 自带样例 sampleOnnxMNIST 1.3.报错:ModuleNotFoundError: No module named ‘ten…

杭州城市开发者社区活动:《聚力AI,共创共荣》第二期线下AI论坛活动等你来!

由中也AI共荣社主办,COC杭州城市开发者社区等多家协办的《聚力AI,共创共荣》AI论坛活动来袭! 活动围绕AI技术的创新应用,以及在实际应用落地的场景为主题展开,聚力AI,共同探讨。有机会与行业大咖进行面对面…

沙箱支付支付宝

沙箱支付支付宝 文章目录 沙箱支付支付宝一、进入沙箱应用-支付宝二、基本配置2.1 查看自己的基本信息2.2 生成自定义密钥,进行配置 三、springboot整合沙箱支付3.1 需要导入的两个相关依赖(pom.xml)3.2 需要加入的配置文件信息(a…

网站建设完成后, 行业网站如何做seo

行业网站的SEO优化是一个系统工程,涉及多个方面以确保网站能够在搜索引擎中有良好的表现。以下是行业网站SEO的详细解析: 关键词研究与布局 目标受众分析:了解目标受众的搜索习惯和需求,确定适合的关键词。使用工具来发现相关关键…

启航未来,共绘科技蓝图,2024青岛软件博览会(青岛软博会)

在金秋送爽、硕果累累的十月,青岛,这座镶嵌于黄海之滨的璀璨明珠,以其独特的海滨风光与深厚的文化底蕴,即将迎来一场科技领域的璀璨盛宴——2024青岛国际软件融合创新博览会(简称:青岛软博会)。…

C++ | Leetcode C++题解之第378题有序矩阵中第K小的元素

题目&#xff1a; 题解&#xff1a; class Solution { public:bool check(vector<vector<int>>& matrix, int mid, int k, int n) {int i n - 1;int j 0;int num 0;while (i > 0 && j < n) {if (matrix[i][j] < mid) {num i 1;j;} else…

Java 5.3 - MyBatis

#{} 和 ${} 的区别是什么&#xff1f; ${} 是 Properties 文件中的变量占位符&#xff0c;它可以用于标签属性值和 sql 内部&#xff0c;属于静态文本替换&#xff0c;比如 ${driver} 被静态替换为 com.mysql.jdbc.Driver #{} 是 sql 的参数占位符 xml 映射文件中&#xff0c…

labelImg使用

创建一个名字为data的文件夹&#xff0c;里面images文件夹存放图片&#xff1b;labels存放标注的标签文件&#xff1b;最后创建一个名为 classes.txt 的txt文件来存放所要标注的类别名称。 终端输入&#xff1a; labelImg images classes.txt images 存储图像的文件夹 classe…

【一文详解】内外网文件摆渡系统,解决网间数据安全传输问题

一、内外网文件摆渡系统的背景 数字化转型进一步推动了数据的移动&#xff0c;而随着攻击者加速利用日常生活中的数据依赖性&#xff0c;数据泄露也随之扩大。企业为保护网络安全和数据安全&#xff0c;使用网络隔离手段进行网络隔离&#xff0c;如银行内部将网络隔离为生产网…

基于FFMPEG读取摄像头图像编码为h264

1.调用ffmpeg命令采集摄像头图像 $ ffmpeg -f v4l2 -framerate 30 -video_size 1280*720 -i /dev/video0 -c:v libx264 -preset veryfast -f h264 output.h264-f v4l2: 指定输入设备采用Video4Linux2框架。   -framerate 30: 设置帧率为30。   -video_size 1280720: 设置视…

Shell 脚本入门指南

Shell 脚本入门指南 引言1.1 什么是 Shell 脚本&#xff1f;1.2 为什么学习 Shell 脚本&#xff1f; 准备工作2.1 选择和安装 Shell&#xff08;Bash&#xff09;2.2 设置脚本编辑环境&#xff08;文本编辑器&#xff09; Hello World&#xff01;基本语法4.1 变量4.2 条件判断…