Transformer详解【学习笔记】

文章目录

      • 1、Transformer绪论
      • 2、Encoders和Decoder
        • 2.1 Encoders
          • 2.1.1 输入部分
          • 2.1.2 多头注意力机制
          • 2.1.3 残差
          • 2.1.4 LayNorm(Layer Normalization)
          • 2.1.5 前馈神经网路
        • 2.2 Decoder
          • 2.2.1 多头注意力机制
          • 2.2.2 交互层

1、Transformer绪论

Transformer在做一个什么事情?Transformer可以用在机器翻译中,先不要管TRM(Transformer的缩写)具体做什么,输入是【我爱你】,输出是【I Love You】,

在这里插入图片描述

然后再细化TRM,我们把TRM分成2个部分,一个是Encoders(编码),Decoders(解码),

在这里插入图片描述

然后再对Encoders(编码),Decoders(解码)进行细化,如下图,需要注意Encoders之间的结构是相同的,Decoders之间的结构也是相同的,虽然Encoders和Decoders之间各自的结构是相同的,但是是单独训练的,Encoders和Decoders的数量是超参数,可以自己定义,

在这里插入图片描述

Transformer在原论文中的图示如下,左边是Encoders,右边是Decoders,N是相同结构的堆叠次数,

在这里插入图片描述

2、Encoders和Decoder

2.1 Encoders

把单个Encoders分成3个部分,分别是1、输入部分,2、注意力机制,3、前馈神经网络,

在这里插入图片描述

2.1.1 输入部分

输入部分分为Embedding和位置嵌入,什么是Embedding呢?

Embedding:

比如输入的词是【我爱你。。。】等12个字,分别将每个字输出为512维度的vector,vector可以使用word2vector,或者随机初始化,

在这里插入图片描述

位置编码:

为什么需要位置编码?如下图是RNN的结构图,RNN共享一套参数,如下图中的 U , W , V U,W,V U,W,V,依次对输入的【我爱你。。。】等字进行处理。transformer中的multi-head attention是同时对这些字进行处理,好处是加快了速度,缺点是忽略了字与字之间的联系,为了弥补这个缺点,就引入了位置编码,
面试题:RNN的梯度消失有什么不同? RNN的梯度是整个梯度之和,它的梯度消失不是变为0,而是总梯度被近距离梯度主导,远距离可忽略不计,

在这里插入图片描述

位置编码的公式:
pos是位置, 2 i 2i 2i是偶数位置, 2 i + 1 2i+1 2i+1是奇数位置,

在这里插入图片描述

比如对于【爱】而言,它是1号位,所以应该用cos,

在这里插入图片描述

对于【爱】这个词,将字向量的512个维度和位置编码的512个维度相加组成transformer的输入,

在这里插入图片描述

引申一下,为什么位置编码会有用?

由公式(2)得到公式(3),比如对于 P E ( p o s + k , 2 i ) PE(pos+k,2i) PE(pos+k,2i),pos这个位置表示【我】,k这个位置表示【爱】,pos+k表示【你】,从这个公式可以看出,【你】可以由pos【我】和k【爱】的线性组合,意味着绝对位置向量中蕴含着相对位置信息,但是这种相对位置信息会在注意力机制那里消失

在这里插入图片描述

2.1.2 多头注意力机制

注意力机制
看下图婴儿在干嘛?我们可能会关注婴儿的脸,以及文字标题信息,颜色越深,关注度就越高,

在这里插入图片描述

transformer论文注意力机制公式:
Q , K , V Q,K,V Q,K,V是向量,分别代表Query,Key,Value,

在这里插入图片描述

  • 下面来解释这个公式,还是拿上面婴儿的图片举例,首先Query代表的婴儿分别与Key1,Key2,Key3,Key4做点乘,点乘是一个向量在另一个向量投影的长度,它是一个标量,可以反映2个向量之间的相似度,相似度越高,则点乘结果越大,
  • Query代表的婴儿分别与左上,左下,右上,右下做点乘,得到Value1,Value2,Value3,Value4,哪个Value最大说明Query和哪个区域相似度最高,距离最近,也就是越关注哪个区域,
  • 回到上面的公式,假如 Q Q Q K T K^T KT的相乘的结果分别为0.7,0.1,0.1,0.1,做softmax之后,再分别乘以0.7,0.1,0.1,0.1,再相加得到Attention Value,

在这里插入图片描述

下面再举一个NLP的例子,Query代表【爱】,分别与Key1,Key2,Key3,Key4代表的【我】,【不】,【爱】,【你】做点乘,具体步骤如下2图,

在这里插入图片描述


在这里插入图片描述

想要得到Attention,需要知道 Q , K , V Q,K,V Q,K,V这3个向量,我们怎么获取这3个向量呢?

在这里插入图片描述

在只有单词向量的情况下,如何获取 Q K V QKV QKV,如下图输入【Thinking】,【Machines】,把输入Embedding为4维向量,然后分别与 W Q W^Q WQ W K W^K WK W V W^V WV相乘,就得到相应的 Q K V QKV QKV

在这里插入图片描述

如何计算Attention的值呢?由公式可知, q q q k k k相乘,然后再除以 d k \sqrt{d_k} dk ,载经过softmax计算,再乘以 v v v即可得到最终结果 z z z

在这里插入图片描述

实际代码使用矩阵,方便并行,

在这里插入图片描述

  • 多头注意力机制,上图是乘以一套参数,下图是乘以多套参数。
  • 作者通过做实验,发现多头比单头的效果要好,因为可以把输入映射到不同的空间,使transformer捕捉到不同空间的子信息,

在这里插入图片描述

输入信息通过不同的头输出不同的 z z z,如下图,把8个不同的 z z z合在一起输出,

在这里插入图片描述

2.1.3 残差

如下图,将【Thinking】和【Machine】分别转为词向量 X 1 X_1 X1 X 2 X_2 X2,然后分别与各自的位置编码对位相加,得到新的 X 1 X_1 X1 X 2 X_2 X2,然后经过自注意机制得到 Z 1 Z_1 Z1 Z 2 Z_2 Z2 Z 1 Z_1 Z1 Z 2 Z_2 Z2变成一个矩阵 Z Z Z,新的 X 1 X_1 X1 X 2 X_2 X2变成一个矩阵 X X X X X X Z Z Z对位相加,

在这里插入图片描述

残差结构:

如下图是常见的残差结构,

在这里插入图片描述

这里是另一个残差结构,结构和上图类似,A相当于上图中的 X X X,B和C相当于上图中的2个weight layer,D相当于上图中的 F ( X ) + X F(X)+X F(X)+X

在这里插入图片描述

为什么残差结构有用呢?如下公式推导,使用残差结构可以避免梯度消失,因为一般情况下连乘可以使梯度消失,所以NLP模型可以做的更深,

在这里插入图片描述

2.1.4 LayNorm(Layer Normalization)
  • 为什么BN的效果不如LayNorm?
  • 答:BN的效果差,所以不用,
  • 什么是BN,以及使用场景,BN是针对整个batch样本在同一维度特征中做处理,
  • 什么是Feature Scaling?消除量纲的影响,使模型收敛的更快,

在这里插入图片描述

每一个列是一个样本,每一行是同一个特征,

在这里插入图片描述

BN的优点:

  • 第一个就是可以解决内部协变量偏移,
  • 第二个优点就是缓解了梯度饱和问题 (如果使用sigmoid激活函数的话),加快收敛。

BN的缺点:

  • 第一个,batch_size较小的时候,效果差,因为BN的假设是使用一个batch的均值和方差模拟整个全部数据的均值和方差,
  • 第二个缺点就是 BN在RNN中效果比较差。这一点和第一点原因很类似,还有一点解释请看下一点,
  • 如下图,batchsize为10,9个样本单词数为5,1个样本单词数为20,前5个单词的均值和方差可以用batchsize算出来,而第6-20个单词的均值和方差只能用第10个样本的均值和方差表示,所以BN在RNN的效果不好,

在这里插入图片描述

为什么使用LayNorm?

  • 理解:为什么LayerNorm单独对一个样本的所有单词做缩放可以起到效果?
  • 如下图,LN是对第10个样本的20个单词做均值和方差,而BN是对每一个样本的同一位次的单词做均值和方差,

在这里插入图片描述

  • 把BN引申到RNN,BN是对【我】和【今】做均值和方差,【爱】和【天】做均值和方差,但是各个位次的单词没有相似的语义信息,所以在不能把BN引申到RNN,
  • 而LN是对每一个样本的所有单词做均值和方差,每一个样本之间有相同的语义信息,

在这里插入图片描述

2.1.5 前馈神经网路

Z 1 Z_1 Z1 Z 2 Z_2 Z2经过Feed Forward之后,经过残差和Normalize就是前馈神经网络,

在这里插入图片描述

2.2 Decoder

Decoder结构图如下:

在这里插入图片描述

2.2.1 多头注意力机制

需要对当前单词和之后的单词做mask。

在这里插入图片描述

  • 为什么需要做mask?
  • S代表输入的开始,start,如果Decoder没有mask,则会出现如下图的情形,即【you】的输出是由全部的单词决定,这样训练出来的模型在预测的时候就会出现问题,因为【you】的预测也由you和now决定,所以需要把you和now mask掉,

在这里插入图片描述


在这里插入图片描述

预测【you】的时候需要把you和now mask掉,

在这里插入图片描述

2.2.2 交互层

如下图红框处即为交互层,也是一个多头注意力机制,

在这里插入图片描述

ENCODER的所有输出和所有的DECODER做交互,

在这里插入图片描述

具体的交互过程如下,ENCODER生成K,V矩阵,DECODER生成Q矩阵,交互的时候是由Q,K,V矩阵完成的,

在这里插入图片描述

下图由ENCODER发出的虚线代表K,V矩阵的输出,然后K,V矩阵与DECODER生成的Q做交互,也能看到ENCODER的所有输出和所有的DECODER做交互,

在这里插入图片描述

参考:
1、哔站视频

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

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

相关文章

使用PyTorch实现去噪扩散模型

在深入研究去噪扩散概率模型(DDPM)如何工作的细节之前,让我们先看看生成式人工智能的一些发展,也就是DDPM的一些基础研究。 VAE VAE 采用了编码器、概率潜在空间和解码器。在训练过程中,编码器预测每个图像的均值和方差。然后从高斯分布中对…

【Spring Boot】项目端口号冲突解决方法,一步到位

启动项目遇到以下问题: Description: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port. Process finished with …

「Vue3面试系列」Vue 3.0中Treeshaking特性有哪些?举例说明一下?

文章目录 一、是什么二、如何做Vue2 项目Vue3 项目 三、作用参考文献 一、是什么 Tree shaking 是一种通过清除多余代码方式来优化项目打包体积的技术,专业术语叫 Dead code elimination 简单来讲,就是在保持代码运行结果不变的前提下,去除…

OpenCV入门04:调整图像对比度和亮度

教程开源 本教程开源,地址:https://gitee.com/zccbbg/opencv_study 图像的亮度和对比度说明 亮度: 亮度是指图像中像素的整体明亮程度。在数字图像中,每个像素都有一个灰度值,表示其亮度水平。亮度越高,像…

上海晋名室外暂存柜助力石墨烯材料行业气瓶储存安全

近日上海晋名又有一台室外气瓶暂存柜项目通过验收,此次项目主要用于石墨烯材料行业气瓶的室外暂存。 用户单位创立于2017年,是一家从事石墨烯等新材料技术的科技型高新技术企业。 上海晋名作为一家专注工业安全防护领域,危险化学品安全储存…

基于 Spring Boot 支付宝沙箱支付(Java 版本)

基于 Spring Boot 支付宝沙箱支付(Java 版本) 步骤第一步:使用支付宝账户登录,打开控制台,进入沙箱环境第二步:配置内网穿透账号第三步:引入支付宝 SDK第四步: 配置 SpringBoot第五步…

Prometheus实战篇:Alertmanager配置概述及告警规则

Prometheus实战篇:Alertmanager配置概述及告警规则 在此之前,环境准备和安装我就不在重复一遍了.可以看之前的博客,这里我们直接步入正题. Alertmanager配置概述 Alertmanager主要负责对Prometheus产生的告警进行统一处理,因此在Alertmanager配置中一般会包含以下几个主要部分…

网安入门14-文件包含(file:// )

​ 什么是文件包含漏洞——来自ChatGPT4 文件包含漏洞是指应用程序在加载文件时,允许用户控制被加载文件的名称,从而导致恶意代码的执行或敏感信息的泄露。文件包含漏洞主要分为两种: 本地文件包含漏洞(LFI) &#…

无软件消抖的独立式键盘输入实验

#include<reg51.h> // 包含51单片机寄存器定义的头文件 sbit S1P1^4; //将S1位定义为P1.4引脚 sbit LED0P3^0; //将LED0位定义为P3.0引脚 void main(void) //主函数 { LED00; //P3.0引脚输出低电平 while(1) { if(S10) //P1.4引…

VSCode添加Python解释器并安装Python库

目录 一、安装VSCode 二、安装Python解释器 1、安装包链接 2、安装过程 3、测试 4、安装flake8和yapf两个包 &#xff08;1&#xff09;安装flake8包 &#xff08;2&#xff09;安装yapf包 三、VSCode中选择python解释器 一、安装VSCode VSCode安装教程&#xff08;默…

Java设计模式:责任链模式

❤ 作者主页&#xff1a;欢迎来到我的技术博客&#x1f60e; ❀ 个人介绍&#xff1a;大家好&#xff0c;本人热衷于Java后端开发&#xff0c;欢迎来交流学习哦&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 如果文章对您有帮助&#xff0c;记得关注、点赞、收藏、…

java基于SSM的旅游论坛设计与实现论文

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…

Python的安装与卸载【Windows系统】

在 Windows 上安装与卸载 Python Python的安装 下载Python 安装Python 下载完后打开安装包 注意最底下的"Add Python 3.8 to Path"&#xff08;将Python加入环境变量&#xff09;一定要勾选&#xff01;&#xff01;&#xff01;这样就可以免去之后环境配置的烦恼…

掌握视频节奏,玩转剪辑艺术!,轻松调整视频播放速度与秒数的技巧大揭秘

你是否经常觉得视频播放得太快或太慢&#xff0c;无法满足你的观看需求&#xff1f;或者想要控制视频的长度&#xff0c;却不知道该如何下手&#xff1f;今天&#xff0c;我们将为你揭秘几种简单又实用的方法&#xff0c;让你轻松调整视频的播放速度和秒数&#xff01; 首先&a…

Linux -- firewalld的富语言规则

1. Firewalld支持两种类型的NAT&#xff1a;IP地址伪装和端口转发。 &#xff08;1&#xff09;IP地址伪装 地址伪装&#xff08;masquerade)&#xff1a;通过地址伪装&#xff0c;NAT 设备将经过设备的包转发到指定接收方&#xff0c;同时将通过的数据包的源地址更改为其自己的…

【tensorflowflutterweb】机器学习模型怎样用到前端上(未写完)

书接上回 在上一章 我们谈了怎么根据项目需求构建一个简单的机器学习模型。 ​​​​​​ ​​​​​​【tensorflow&flutter】自己写个机器学习模型用在项目上&#xff1f;-CSDN博客文章浏览阅读852次&#xff0c;点赞22次&#xff0c;收藏15次。【tensorflow&flutter…

k8s的存储卷之静态

存储卷----数据卷 容器内的目录和宿主机的目录进行挂载 容器在系统上的生命周期是短暂的&#xff0c;delete&#xff0c;k8s用控制创建的pod&#xff0c;delete相当于重启&#xff0c;容器的状态也会回复到初始状态 一旦回到初始状态&#xff0c;所有的后天编辑的文件都会消…

C++力扣题目110--平衡二叉树

给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;t…

大数据系列之:腾讯云服务器性能和价格比较

大数据系列之&#xff1a;腾讯云服务器性能和价格比较 一、磁盘性能和价格比较二、高性能云硬盘三、ssd云硬盘四、极速型ssd云硬盘五、增强型ssd云硬盘六、查看腾讯云服务器价格 一、磁盘性能和价格比较 磁盘名称高性能ssd云硬盘极速型ssd云硬盘增强型ssd云硬盘规格500g 5800 …

UM2003A 一款200 ~ 960MHz ASK/OOK +18dBm 发射功率的单发射芯片

UM2003A 是一款工作于 200 ~ 960MHz 频段的单片集成、高性能、可独立运行的 OOK 发射器。内部集成的 OTP 方便用户对各种射频参数以及特色功能进行编程。该芯片以其高集成度和低功耗的设计&#xff0c;特别适用于低成本&#xff0c;低功耗&#xff0c;电池驱动的无线发射应用。…