【NLP】分步图解transformer 数学示例

news2024/12/27 11:15:58

一、说明

        我知道transformer 架构可能看起来很可怕,你可能在网上或博客上遇到了各种解释。但是,在我的博客中,我将通过提供一个全面的数值示例来努力澄清它。通过这样做,我希望简化对变压器架构的理解。

二、输入和位置编码

        让我们解决初始部分,我们将确定输入并计算它们的位置编码。

2.1 步骤 1(定义数据)

        第一步是定义我们的数据集(语料库)。

        在我们的数据集中,有 3 个句子(对话)取自《权力的游戏》电视节目。虽然这个数据集可能看起来很小,但它的大小实际上有助于我们使用即将到来的数学方程找到结果。

2.2 第 2 步(查找词汇大小)

        为了确定词汇量,我们需要确定数据集中唯一单词的总数。这对于编码(即将数据转换为数字)至关重要。

其中 N 是所有单词的列表,每个单词都是单个标记,我们将数据集分解为标记列表,即找到 N。

获得标记为 N 的标记列表后,我们可以应用公式来计算词汇量。

        使用 set 操作有助于删除重复项,然后我们可以计算唯一的单词以确定词汇量。因此,词汇量为 23,因为给定列表中有 23 个唯一单词。

2.3 步骤 3(编码和嵌入)

        我们很好地为数据集的每个唯一单词分配一个整数。

对整个数据集进行编码后,是时候选择我们的输入了。我们将从语料库中选择一个句子开始:

“当你玩权力的游戏”

作为输入传递的每个单词都将表示为编码整数,并且每个相应的整数值都将附加一个关联的嵌入。

  • 这些嵌入可以使用Google Word2vec(单词的矢量表示)找到。在我们的数值示例中,我们将假设每个单词的嵌入向量填充 (0 到 1) 之间的随机值。
  • 此外,原始论文使用512维的嵌入向量,我们将考虑一个非常小的维数,即5作为数值示例。

现在,每个单词嵌入都由维度为 5 的嵌入向量表示,并且使用 Excel 函数 RAND() 用随机数填充这些值。

2.4 步骤 4(位置嵌入)

        让我们考虑第一个单词,即“When”,并计算它的位置嵌入向量。

        位置嵌入有两个公式:

        第一个单词“When”的 POS 值将为零,因为它对应于序列的起始索引。此外,i 的值(无论是偶数还是奇数)决定了用于计算 PE 值的公式。维度值表示嵌入向量的维度,在本例中为 5。

        继续计算位置嵌入,我们将为下一个单词“you”分配一个 pos 值 1,并继续递增序列中每个后续单词的 pos 值。

 找到位置嵌入后,我们可以将其与原始词嵌入连接起来。

 我们得到的结果向量是 e1+p1、e2+p2、e3+p3 等的总和。

        变压器架构初始部分的输出用作编码器的输入。

三、关于编码器

        在编码器中,我们执行涉及查询、键和值矩阵的复杂操作。这些操作对于转换输入数据和提取有意义的表示至关重要。

 在多头注意力机制内部,单个注意力层由几个关键组件组成。这些组件包括:

        请注意,黄色框代表单一注意力机制。使它受到多头关注的是多个黄色框的存在。出于此数值示例的目的,我们将仅考虑上图中描述的一个(即单头注意力)。

3.1 第 1 步(执行单头注意力)

        注意力层有三个输入:

  • 查询
  • 我?
  • 价值

        在上面提供的图中,三个输入矩阵(粉红色矩阵)表示从上一步将位置嵌入添加到单词嵌入矩阵中获得的转置输出。

        另一方面,线性权重矩阵(黄色、蓝色和红色)表示注意力机制中使用的权重。这些矩阵可以具有相对于列的任意数量的维度,但行数必须与输入矩阵中的列数相同以进行乘法。

        在我们的例子中,我们将假设线性矩阵(黄色、蓝色和红色)包含随机权重。这些权重通常是随机初始化的,然后在训练过程中通过反向传播和梯度下降等技术进行调整。

        因此,让我们计算(查询、键和值指标):

        一旦我们在注意力机制中有了查询、键和值矩阵,我们就会继续进行额外的矩阵乘法。

现在我们将结果矩阵与我们之前计算的值矩阵相乘:

        如果我们有多个头部注意力,每个注意力产生一个维度(6x3)的矩阵,下一步涉及将这些矩阵连接在一起。 

         在下一步中,我们将再次执行类似于用于获取查询、键和值矩阵的过程的线性变换。这种线性变换应用于从多个头部注意力获得的级联矩阵。

         由于博客已经变得冗长,在下一部分中,我们将重点转移到讨论编码器架构中涉及的步骤。

 (未完待续)

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

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

相关文章

网络编程-day3

UDP服务器: UDP客户端:

go-redis的基本使用

Golang操作Redis 安装go-redis //redis 6 go get github.com/go-redis/redis/v8 //redis 7 go get github.com/go-redis/redis/v9golang连接redis import "github.com/go-redis/redis/v8" var rdb *redis.Clientfunc init() {rdb : redis.NewClient(&redis.Opt…

云原生之深入解析Prometheus AlertManager的实战操作

一、概述 Prometheus 包含一个报警模块,就是 AlertManager,Alertmanager 主要用于接收 Prometheus 发送的告警信息,它支持丰富的告警通知渠道,而且很容易做到告警信息进行去重、降噪、分组等,是一款前卫的告警通知系统…

Android Studio实现内容丰富的安卓校园二手交易平台

如需源码可以添加q-------3290510686,也有演示视频演示具体功能,源码不免费,尊重创作,尊重劳动。 项目编号038 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端: 1.注册登录 2.查看二手商品…

[学习笔记] 扩散模型 Diffusion

前置知识-从深度生成模型、隐变量、VAE开始 机器学习是人工智能的一种,它是一种通过利用数据,训练出模型,然后使用模型预测的一种方法。 机器学习分为监督学习、无监督学习和强化学习,这是根据数据训练方式分类的,通俗…

leetcode 100. 相同的树

2023.7.6 这题类似于树的对称性这道题,下面给出递归和迭代两种解法: 递归法: class Solution { public:bool isSameTree(TreeNode* p, TreeNode* q) {if(pnullptr && qnullptr) return true;if(pnullptr && q!nullptr || p…

python实现文本转语音音频

文章目录 文本转语音音频第一步:讯飞平台的注册第二步:导入程序所需要的依赖库第二步:websocket对象类的初始化第三步:websocket建立连接后的函数第四步:websocket数据返回结果的处理函数第五步:pcm音频转换…

VALSE 20200415 | 机器学习 vs 压缩感知:核磁共振成像与重建

【Talk】VALSE 20200415 | 机器学习 vs 压缩感知:核磁共振成像与重建 文章目录 【Talk】VALSE 20200415 | 机器学习 vs 压缩感知:核磁共振成像与重建Deep learning for MR imaging and analysis - Shanshan WangMachine Learning for CS MRI: From Model…

Spring Boot 中的视图解析器是什么,如何使用

Spring Boot 中的视图解析器是什么,如何使用 在 Spring Boot 中,视图解析器是将视图名称解析为具体视图对象的组件。视图对象可以是 JSP、FreeMarker、Thymeleaf 等模板引擎生成的 HTML 页面,也可以是 JSON、XML 等格式的数据响应。Spring B…

基于Javaweb实现ATM机系统开发实战(三)用户查询功能实现

首先通过我们查看前端界面发现,先要实现前端用户查询功能,主要就是要把list1和list2所需的数据传递给前端,由前端进行展示。 首先我们需要写一个servlet处理收到的请求: ps:Servlet是什么? Java Servlet 是…

FreeRTOS ~(五)队列的常规使用 ~ (1/5)队列解决同步缺陷

前情提要 FreeRTOS ~(四)同步互斥与通信 ~ (1/3)同步的缺陷 举例子说明:利用队列解决前述的"同步的缺陷"问题 static int sum 0; /* sum存放计算的结果 */ static volatile int flagCalcEnd 0; /* 标…

哪款3D虚拟人物建模软件好用?

3D虚拟人物建模软件一直以来受到许多人的关注和追捧。现在,随着智能手机的普及,3D虚拟人物手机建模软件也开始走进大家的视野。那么,市面上3D虚拟人物建模软件这么多,究竟哪款3D虚拟人物建模软件是好用的呢? 首先&…

【聚类算法】OPTICS基于密度聚类

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 对DBSCAN的补充,OPTICS聚类 1. 正文 1.0 DBSCAN的存在问题 前面我们介绍了DBSCAN,其能根据密度进行聚类。 但其存在这样一个问…

cv2 安装问题, opencv

解决安装了opencv-python,但 import cv2 报错。 需要安装: pip install opencv-python-headless

VS 2022 修改应用程序选择目标框架为4.8

一、设置访问项目属性为True 打开工具菜单---选项---适用于Unity的工具 将这个访问项目属性一栏设置为True。之后要解决方案再重新打开即可生效。 二、设置应用程序选择目标框架 点击项目-->属性-->应用程序选择目标框架为.netfromwork4.8

Java入门程序——运算符

文章目录 赋值运算符算术运算符自增运算符自减运算符 比较(关系)运算符逻辑运算符逻辑运算符——快速运算(短路运算) 复合赋值运算符条件运算符字符串连接运算符三元运算符总结 赋值运算符 • 格式:变量名表达式&…

1.7 用户注册_判断用户是否存在和自定义响应数据结构

步骤1&#xff1a;在顶级pom.xml添加常用工具依赖。 <!-- apache 工具类 --> <dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.11</version> </dependency> <depen…

实现TCP通信(socket套接字)

一、TCP通信实现的过程 服务器端 socket函数 与 通信域 #include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol); -domain: 指定通信域&#xff08;通信地址族&#xff09;; -type: 指定套接字类型; -protocol: 指定协…

大象机器人myCobot 280 2023版全新功能展示

引言 机械臂是一种可编程的、自动化的机械系统&#xff0c;它可以模拟人类的动作&#xff0c;完成各种任务&#xff0c;例如装配、喷涂、包装、搬运、焊接、研磨等。由于其高度灵活性和多功能性&#xff0c;机械臂在现代社会中已经得到了广泛的应用。 myCobot 280 M5Stack 202…

项目需求管理

项目需求管理的五大过程 一、需求获取 编写项目视图 范围文档 用户群分类 选择用户代表 建立核心队伍 确定使用实例 召开联合会议 分析用户工作流程、 确定质量属性、 检查问题报告 需求重用 二、需求分析 1、绘制关联图&#xff0c;用于定义系统与系统外部实体间的边界和接口的…