Transformer详解【学习笔记】

news2024/11/16 17:34:09

文章目录

      • 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、哔站视频

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

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

相关文章

第11章 GUI Page495~496 步骤三十一:另存为别的文件

当前的TrySaveFile(bool hint_on_dirty true)有两个特征无法满足“另存”的需求: 一,TrySaveFile仅在数据为“新”的时候才提问用户输入文件名。而“另存”总是要求用户输入一个文件名,多以它总应该弹出一个文件选择对话框,这也…

从零到一的方法:学习视频剪辑与嵌套合并技巧

随着社交媒体和数字技术的快速发展,视频制作已是常见的工作。那么如何批量嵌套合并视频呢?下面一起来看云炫AI智剪如何批量合并的方法。 嵌套合并后的视频截图查看。 批量嵌套合并的操作: 操作1、在云炫AI智剪上选择“嵌套合并”功能&#…

PHP版学校教务管理系统源码带文字安装教程

PHP版学校教务管理系统源码带文字安装教程 运行环境 服务器宝塔面板 PHP 7.0 Mysql 5.5及以上版本 Linux Centos7以上 系统介绍: 后台权限控制:支持多个管理员,学生管理,学生成绩,教师管理,文章管理&#x…

CSS3简单运用过渡元素(transition)

CSS3过渡 概念:在CSS3中,我们可以使用transition属性将元素的某一个属性从“一个属性值”在指定的时间内平滑地过渡到“另一个属性值”,从而实现动画效果。 CSS3变形(transform)呈现的仅仅是一个结果,而CSS过渡&…

方波 离散傅里叶级数 MATLAB

%方波 离散时间傅里叶变换 L 5; N 10; k [-N/2:1:N/2]; %占空比 基本周期 离散时间的参数 xn [ones(1,L),zeros(1,N-L)]; %生成方波序列 XK dfs(xn,N); magXK abs([XK(N/21:N),XK(1:N/21)]); subplot(2,2,3); stem(k,magXK); axis([-N/2,N/2,-0.5,5.5]); xlabel(k); y…

麒麟OS + DM8数据库(Graalvm for JDK17) 测试

1、添加依赖 implementation com.dameng:DmJdbcDriver18:8.1.3.62 implementation com.baomidou:mybatis-plus-boot-starter:3.5.4 2、application.yml 数据源配置 spring: datasource: driver-class-name: dm.jdbc.driver.DmDriver #com.mysql.cj.jdbc.Driver url: jdbc:d…

Web前端 ---- 【Vue3】Proxy响应式原理

目录 前言 安装Vue3项目 安装 Proxy 语法格式 前言 从本文开始进入vue3的学习。本文介绍vue3中的响应式原理,相较于vue2中通过object.defineProperty(vue2中的响应式)来实现响应式,vue3中换成了Proxy来进行实现。 安装Vue3项目…

c#图片作为鼠标光标

图片转换为鼠标光标代码如下: private void Form1_Load(object sender, EventArgs e) {//button1.Cursor System.Windows.Forms.Cursors.Hand;Bitmap bmp new Bitmap("780.jpg");Cursor cursor new Cursor(bmp.GetHicon());button1.Cursor cursor;} …

腾讯云的域名使用阿里云服务器配置

因为近期云服务器到期了,之前的域名已经完成了备案不想轻易回收。于是就换了个厂商,从腾讯云换到了阿里云。但是因为两个厂商不互通。我又不想把域名转入到阿里云。所以就开启了配置之路,一路磕磕绊绊。给大家整理一份顺序,一步到…

在 Flutter 中创建圆角图像和圆形图像有多少种方法?

使用 Container 、 ClipRRect 、 CircleAvatar 、 Card 和 PhysicalModel 实现具有视觉吸引力的图像效果。 在 Flutter 应用 UI 设计中,圆形图像是常见的视觉元素。本博客探讨了使用不同技术实现圆形图像效果的各种方法。无论是使用网络图像、本地文件还是资源&…

Realm Management Extension领域管理扩展之系统架构

RME不仅仅是一组处理器功能,为了充分利用RME引入的功能,系统的其余部分需要提供支持。 下图显示了一个示例系统以及引入RME后受到影响的组件: 主存储器保护 RME启用的系统包括内存加密和可能的完整性。基线加密要求支持对外部内存进行加密,使用每个PA空间的单独加密密钥或…

便捷特惠的快递寄件快递物流折扣平台 ,通常都有什么常见问题?

首先,最重要的一点是怎么寄快递更便宜? 我们在寄快递时,尽量把包裹压缩空间大一点,这样在体积上面就会减少一部分的费用呢,另外就是选择有优惠的平台下单。例如在闪侠惠递平台下单,单单打折,单…

全面解析微服务

导读 微服务是企业应用及数据变革升级的利器,也是数字化转型及运营不可或缺的助产工具,企业云原生更离不开微服务,同时云原生的既要最大化发挥微服务的价值,也要最大化弥补微服务的缺陷。本文梳理了微服务基础设施组件、服务网格、…

Python 解决安装三方包失败的问题

pip 安装三方包失败&#xff0c;常见的情况有三种&#xff1a;不能访问源所在服务器&#xff1b;Python 版本不支持&#xff1b;和本地版本冲突。 不能访问源服务器 对于这张问题&#xff0c;有两种解决方法 # 方法一 pip config set global.index-url <源服务器> pip…

网络中的网络 NiN

目录 1.NiN 2.代码 1.NiN 卷积层的参数等于输入的通道数*输出的通道数乘以窗口的平方&#xff0c;然而全连接层的参数的大小等于输入的通道乘以图片的大小乘以输出的通道数。全连接层的参数很多&#xff0c;占用很多的内存&#xff0c;占用很多的计算带宽&#xff0c;很容易出…

Rust-类型

bool 布尔类型(bool)代表的是“是”和“否”的二值逻辑。它有两个值&#xff1a;true和false。 一般用在逻辑表达式中&#xff0c;可以执行“与”“或”“非”等运算。 char 字符类型由char表示。它可以描述任何一个符合unicode标准的字符值。在代码中&#xff0c;单个的字符…

【工具栏】RestfulTool 插件的使用(接口开发规范)

目录 1. 安装 2.使用 1. 安装 2.使用 点开控制层&#xff0c;该控制层写了什么接口一目了然 跳转对应的接口&#xff0c;查看代码

使用CloudCompare对obj网格模型转换为pcd/ply点云模型

1.打开CloudCompare&#xff0c;点击文件夹图标&#xff0c;首先先把文件类型选择为.obj&#xff0c;然后再去找预处理的obj网格模型&#xff0c;点击打开。 2.测试打开的obj网格模型如下图&#xff1a; 3.选中obj文件&#xff0c;点击网格上样本点的图标&#xff0c;输入预生成…

计算机毕业设计---SSH协会志愿者服务管理系统

项目介绍 该项目分为前后台&#xff0c;分为管理员与普通用户两种角色&#xff0c;前台为普通用户登录&#xff0c;后台为管理员登录&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录,管理员管理,志愿者管理,活动管理,捐赠管理,关于我们管理,友情链接管理,新闻类…

添加 自定义校验方法,让用户自定义校验规则

目录 一、前置说明1、总体目录2、相关回顾3、本节目标 二、操作步骤1、项目目录2、代码实现3、测试代码4、日志输出 三、后置说明1、要点小结2、下节准备 一、前置说明 1、总体目录 《 pyparamvalidate 参数校验器&#xff0c;从编码到发布全过程》 2、相关回顾 添加 常用校…