Transformer模型的简单学习

前言

Transformer 来源于一篇论文:Attention is all you need

TRM在做一件什么事情呢?其实一开始它是被用于机器翻译的:

在这里插入图片描述

更详细的:

在这里插入图片描述

更详细的:

在这里插入图片描述

从上图可以看出,一个Encoders 下面包含了 n 个 Encoder,Decoders同理。

需要注意的是,这 n 个 Encoder 从结构上完全相同,n 个 Decoder 从结构上也是完全相同的,同时 Encoder 和 Decoder 的结构是不相同的。还要注意,虽然 Encoder 与 Encoder 之间结构相同,但并非是由一个 Encoder copy n 份得到的 Encoders,因为每个 Encoder 之间的参数并不相同。也就是在训练的时候并非只训练一个 Encoder,而是 n 个 Encoder 都在训练(Decoder同理)。

来看一下原论文中的图示:

在这里插入图片描述

可以看见 Nx 的意思就是有 N 个这样的结构,左边部分就是我们之前说的 Encoder,右边部分就是 Decoder。

接下来我们来详细解释一下这两个部分。

Encoder部分

位置编码

Encoder

在这里插入图片描述

可以看见一个 Encoder 可以被划分为三个部分,第一个部分是 输入部分,第二个部分是 注意力机制部分,第三个部分就是 前馈神经网络部分。

输入部分

输入部分又被分为两块内容:Embedding 和 位置嵌入。

Embedding 是 NLP 中的一个入门小知识点:

在这里插入图片描述

图示就是:

在这里插入图片描述

可以看到上面假设有 “我爱你…” 总共十二个字或单词,此时我们按字切分,每一个字都可以被映射成一个大小为 512 长度的连续向量空间中以供后续操作。

这个过程就是 Embedding。

那么为什么需要 位置嵌入(编码) 呢?

在这里插入图片描述

在上图的 RNN 时间线展开中,词与词之间的顺序可以由时间序列来显式地给出(因为一句话输入 RNN 中,它是一个单词一个单词的进行训练的),因此不需要位置编码,而在 TRM 中则是一下就能直接输入 N 个词,那么词与词之间的位置关系就需要记录,否则无法连词成句了,这就是为什么需要位置编码这一步操作的原因。

论文中的位置编码公式如下:

在这里插入图片描述

其中,pos 指的就是字的位置,2i 和 2i+1 指的是偶数和奇数,即 PE(pos, 2i) 指的就是偶数位置上的字,用 sin 来表示,那么 2i+1 就用 cos 来表示。

结合我们一开始举的例子,一个字被 Embedding 成一个 512 大小的向量,那么就有下图这样的解释:

在这里插入图片描述

得到位置编码之后,我们将位置编码 512 维度和 字 向量的 512 维度进行相加得到一个最终的 512 维度作为我们整个 TRM 的输入:

在这里插入图片描述

为什么位置嵌入会有用:

在这里插入图片描述

注意:这种相对位置信息会在注意力机制那里消失。

多头注意力机制

基本的注意力机制

先来看一张图:

在这里插入图片描述

不难感受到人类在观察东西的时候,有最关注的部分和不怎么关注的部分,上图中颜色越深就表示越受关注,颜色越浅表示不怎么关注。

进一步引申,把人(我们的视角)抽离出来把人替换成一句话,即:婴儿在干嘛。

我们想要知道 “婴儿在干嘛” 这句话更加关注于图片中的哪个区域(也就是这句话和图中哪个区域更相似),想通过公式或者某种方式得到这个结果。

这就是注意力机制的一种基本形式。

在这里插入图片描述

这个东西怎么做呢?有论文中的公式如下:

在这里插入图片描述

上图中,QKV是三个矩阵,计算注意力机制的时候一定要有QKV三个矩阵,首先是 QK转置相乘,然后除以某个值(先不管),再 softmax 做归一化,softmax 之后得到的是一个相似度向量,比如 0.1、0.2、0.4… 最后再乘一个 V 矩阵,得到的应该是一个加权的和,差不多是这样。

归一化概念:

在这里插入图片描述

softmax概念:

在这里插入图片描述

举个例子:

在这里插入图片描述

之前公式中的 QKV 便是这里的 Query、Key 以及 Value,但要注意这是三个矩阵(具体是什么矩阵会在后面详述)。

即 Q 代表 “爱” 这个字的某种向量矩阵,K 是 “我不爱你” 的四个字所对应的某种向量矩阵,而 V 是 “我不爱你” 四个字所对应的某一种值的向量矩阵。

然后进行如下图的计算:

在这里插入图片描述

F(Q,K) 的意思是计算相似性,可以是点乘或者余弦相似度或者MLP等等方式,即 “爱” 这个字分别和 “我不爱你” 四个字进行这种函数计算,然后得到一个值 s1、s2、s3 和 s4,做 softmax 归一化之后得到相似度 a1、a2、a3、a4,四个加起来值为1,最后再和一个value值进行先乘再累加就得到了 Attention Value 。

在 TRM 中怎么操作

主要就是如何得到 QKV 的矩阵值呢?

在这里插入图片描述

因为我们只有单词向量,如何获取 QKV 三个矩阵的值呢?从上图可以看出,就是分别用三个权重参数矩阵来分别进行计算得到相应的三个 QKV 矩阵即可。

接下来计算Attention value :

在这里插入图片描述
在这里插入图片描述

上面图片中的例子只用了一套参数,如果使用了多套参数,那么就成了我们所谓的多头注意力机制:

在这里插入图片描述

类似于CNN中的多通道。

残差和LayerNormalization

先通过一张图来了解一下残差和LayerNormalization大致的流程:

在这里插入图片描述

从上图中不难看出,从下往上看,x1 和 x2是词向量,经过位置编码后被送入注意力机制层,然后输出得到 Attention Value z1 和 z2,然后在残差层,z1和z2合起来成为一个矩阵再和原来经过了位置编码的两个词向量合起来的矩阵进行对位相加,最后进行一下LayerNormalization,这就是残差和LayerNormalization大致做的事情。

什么是残差

在这里插入图片描述

再来看一张图:

在这里插入图片描述

从上往下看,x 作为输入,经过两层 weight layer 网络计算(这两层网络所做的操作可以代称为一个函数F(x)),然后可以看到在经过 F(x)操作之后得到输出,如果没有残差网络的话那么直接输出就结束了,但是有残差网络的话就还会进行一步操作,即将原先输入的 x 原封不动的拿到输出的地方,用来和经过F(x)计算的输出值进行对位相加以形成真正的输出:F(x) + x;

这就是残差做的事情。

残差的作用:

在这里插入图片描述

从上面的计算公式结果中可以看到,在残差网络结构中,即使连乘再多,就算产生梯度消失的情况,结果也不会变成0,因为有个常数 1 存在,这就是残差的作用。

LayerNormalization

在这里插入图片描述

前馈神经网络

在这里插入图片描述

Decoder部分

Decoder部分 就比较简单了,其主要有两个部分:

在这里插入图片描述

一个是多头注意力机制层,还有一个是交互层。

掩盖的多头注意力机制

第一个部分就是 Masked Multi-Head Attention:

在这里插入图片描述

在这里插入图片描述

交互层

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

这里交互的意思是,相当于decoder 中每个 Q(query) 去询问每个 encoder 输出的量,并与之结合。

Encoder 中的 Q 是 Embedding 来的,是已知的输入,而 Decoder 输出的是 Q 是预测的,也就是结果预测的词。

在这里插入图片描述

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

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

相关文章

如何将 Langfuse 链接到自有 PostgreSQL 数据库并升级 PostgreSQL 版本

在本文中,我们将介绍如何将 Langfuse 应用程序链接到自有的 PostgreSQL 数据库,并升级 PostgreSQL 以支持 jsonb 类型。 前提条件 运行 CentOS 7 的服务器已安装的 PostgreSQL 9.2 或更低版本需要将 Langfuse 连接到自有数据库,并升级 PostgreSQL 以支持 jsonb 类型1. 将 La…

五款局域网监控软件良心推荐

五款局域网监控软件良心推荐 有人问我,能不能推荐几款好用的局域网监控软件。 我说,当然可以了,凭良心说,这几款软件在实用性、用户体验、隐私保护以及性价比上,绝对是当前最强监控软件。 1. 安企神 这款软件支持7天…

vue3(一):Vue3简介、创建vue3工程、Vue3中的响应式

目录 一.Vue3简介 1.性能提升 2.源码升级 3.拥抱ts 4.新特性 (1)Composition API(组合API): (2)新的内置组件: (3)其他改变: 二.创建vue…

Postman实现批量发送json请求

最近有一个场景,需要本地批量调用某个接口,从文件中读取每次请求的请求体,实现方法记录一下。 1.读取请求体 在 Postman 中,如果你想在 Pre-request Script 阶段读取文件内容,比如为了将文件内容作为请求的一部分发送…

聊天宝使用技巧揭秘让您快捷回复效率翻倍

聊天宝快捷回复软件,推出大量实用工具,帮助客服能更加高效的实现快捷发送,一键发送,效果翻倍! ​ 前言 聊天宝作为一款快捷回复工具,让客服免去了打字回复之苦。所以很受广大客服欢迎,真是一旦…

什么是“SQL注入攻击”?如何预防和应对?

一、SQL注入攻击的概念 SQL注入攻击是一种针对数据库驱动的应用程序的攻击技术,其中攻击者通过在应用程序的输入字段中插入或“注入”恶意的SQL代码,试图非法访问、操作或破坏后端数据库。当应用程序不正确地处理用户输入,并将其直接拼接到SQ…

废品回收小程序:回收市场下的商业机遇

随着当下大众环保意识的提升,回收行业收到了大众的重视,行业快速发展。在互联网信息技术的支持下,“互联网废品回收”得到了发展,依靠各种技术搭建互联网回收平台,连接到居民与商家,让回收变得更加简单高效…

深度解析Nginx配置文件:从全局块到upstream块的探索之旅

粉丝福利:微信搜索「万猫学社」,关注后回复「电子书」,免费获取12本Java必读技术书籍。 Nginx配置文件的简介 在浩瀚的互联网世界中,Nginx就如同一座大型交通枢纽,将访问者的请求精准地引导到正确的服务终点。而这一切…

【会议征稿,SPIE独立出版】第五届计算机视觉和数据挖掘国际学术会议(ICCVDM 2024)

第五届计算机视觉与数据挖掘国际学术会议(ICCVDM 2024)将于2024年7月19-21日在中国长春举行。此前,ICCVDM系列会议于2020年在中国西安、2021年在中国长沙(线上)、2022年在中国呼伦贝尔(线上线下&#xff09…

基于微信小程序实现的【二手物品交易平台】后端 JAVA Springboot (内附设计LW + PPT+ 源码+ 演示视频 下载)

项目名称 项目名称: 基于微信小程序的二手物品交易平台 项目技术栈 该项目采用了以下核心技术栈: 后端框架/库: Java, SSM框架数据库: MySQL前端技术: 微信小程序技术其他相关技术: HTML, MyEclipse开发…

SQL——SELECT相关的题目(力扣难度等级:简单)

目录 197、上升的温度 577、员工奖金 586、订单最多的客户 596、超过5名学生的课 610、判断三角形 620、有趣的电影 181、超过经理收入的员工 1179、重新格式化部门表(行转列) 1280、学生参加各科测试的次数 1965、丢失信息的雇员 1068、产品销售分…

微信好友,如此的陌生,渐渐都成了只是人名!也许没有利益关系导致!

微信里一直聊天聊的挺好的朋友,不知怎么到后来却联系少了,最后渐渐的变成躺在微信备注里的一个陌生朋友! 以前通过工作认识了一个朋友,初次见面的印象不是很深刻了,只记得当时给我的印象是对方很有礼貌,特别…

vue页面滚动条触底事件

html 滚动区域外层div添加属性 ref,id,scroll 在mounted函数中使用document设置监控div属性 在mathods中监控滚动事件

期货交易的雷区

一、做自己看不懂的行情做交易计划一样要做有把握的,倘若你在盘中找机会交易,做自己看不懂的行情,即便你做进去了,建仓时也不会那么肯定,自然而然持仓也不自信,有点盈利就想平仓,亏损又想扛单。…

基于C#开发web网页管理系统模板流程-主界面管理员录入和编辑功能完善

前言 紧接上篇->基于C#开发web网页管理系统模板流程-登录界面和主界面_c#的网页编程-CSDN博客 已经完成了登录界面和主界面,本篇将完善主界面的管理员录入和编辑功能,事实上管理员录入和编辑的设计套路适用于所有静态表的录入和编辑 首先还是介绍一下…

红外成像人员检测数据集VOC+YOLO格式5838张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):5838 标注数量(xml文件个数):5838 标注数量(txt文件个数):5838 标注…

数据大屏vue3+ts+axios+MockJS+dataV+echarts

一、官网/文档 vue3:https://cn.vuejs.org/api/TypeScript:https://www.tslang.cn/docs/handbook/basic-types.htmlaxios:http://www.axios-js.com/zh-cn/docs/MockJS:http://mockjs.com/dataV:http://datav.jiamingh…

失落的方舟台服注册接收不到验证码 注册怎么验证手机号教程

《失落的方舟》(Lost Ark)是一款引人入胜的大型多人在线角色扮演游戏(MMORPG),由韩国知名游戏开发商Smilegate精心打造。这款游戏凭借其绚丽的视觉效果、错综复杂的故事情节、媲美动作游戏的战斗机制以及无边无际的探索…

Golang | Leetcode Golang题解之第104题二叉树的最大深度

题目: 题解: func maxDepth(root *TreeNode) int {if root nil {return 0}queue : []*TreeNode{}queue append(queue, root)ans : 0for len(queue) > 0 {sz : len(queue)for sz > 0 {node : queue[0]queue queue[1:]if node.Left ! nil {queue…

Android JetPack ViewModel

一、什么是ViewModel? Android ViewModel在我们使用MVVM开发模式时会经常用到,对我来说就是好用,好维护。 它相对于MVC模式, 一来可以减少Activity层的代码,可以把一些业务逻辑和对数据的交互到ViewModel层去&#…