Transformer简略了解

Transformer出自论文:《Attention Is All You Need》
该论文的提出,对RNN循环神经网络产生了冲击,席卷了自然语言处理(NLP)领域,后续的GPT4.0版本也是根据其进行训练优化的

一、Transformer主体架构

在这里插入图片描述
可以简化分为Encoders和Decoders,之所以是复数,其主要是由于N个所决定的,论文N的取值为6,每个Encoder结构都是一样的;同理每个Decoder也是相同的结构。但Encoder和Decoder结构大相径庭了

简化流程:输入 —> Encoders(6个Encoder) —> Decoders(6个Decoder) —> 输出
在这里插入图片描述

Ⅰ、Encoders

在这里插入图片描述
Encoders由N个Encoder所组成,其中N在论文中取值为6

Ⅱ、Decoders

在这里插入图片描述
Decoders由N个Decoder所组成,其中N在论文中取值为6

二、Encoder

单挑出一个Encoder进行分析,其主要可分为三部分:
①输入部分、②注意力机制、③前馈神经网络

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

Ⅰ,输入部分

在这里插入图片描述
输入部分主要包括:EmbeddingPositional Encoding位置编码
在这里插入图片描述

RNN中翻译:家驹
RNN结构中,是需要接收前面的数据之后再进行学习,先传入的学习是依据为基准进行的,需要考虑到前面的数据
而在Transformer中,多头注意力机制是可以并行处理数据的,是一并输入的,并不需要考虑之前的汉字之间的前后关系,故需要Positional Encoding位置编码告诉模型哪个字在前哪个字在后

例如:创建一个维度为512的词向量

1.Embedding

以翻译为例:把每个对应的字对应生成不同维度的向量,从而生成一个向量表,方便后续学习,共计512维度

2.Positional Encoding位置编码

论文中给出的位置编码公式:在这里插入图片描述
其中pos表示单词或字的位置;2i代表偶数,2i+1代表奇数
在偶数的位置使用sin,在奇数位置使用cos
在这里插入图片描述

将Embedding得到的512维度和Positional Encoding得到的512维度信息进行相加,得到一个最终的512维度信息,作为整个Transformer的输入
在这里插入图片描述
问:为什么位置嵌入是有用的?
答:正余弦函数,对于同一个Position,不同的函数可以得到一个绝对的位置信息

在这里插入图片描述
但,这种相对位置信息会在注意力机制那里消失

Ⅱ、注意力机制

在这里插入图片描述

1.基本的注意力机制

i)注意力机制的本质

带着问题看图片:婴儿在干嘛?
在这里插入图片描述
颜色深的地方为人们的主要关注的地方
那么如何将关注的区域和这句话进行相互关联,这就是注意力机制所要解决的问题

论文中给出的注意力机制公式:在这里插入图片描述
其中Q,K,V为三个矩阵,通过softmax进行归一化,得到一个相似度向量,然后再乘以V矩阵,最终得到一个加权的和

首先拿到一张图片,将图片进行上下左右四分割,并生成四个Key
在这里插入图片描述在这里插入图片描述
公式中的Q:Query这里传入的是婴儿
K为这里对应生成的Key1Key2Key3Key4
V为Key1-Key4所对应的某种值向量,Value1Value2Value3Value4

点乘:一个向量在另一个向量上投影的长度,是一个标量,可以反应两个向量的相似度。即两个向量点乘结果越大,两个向量越相似

Transformer中原理过程:
婴儿分别与Key1-Key4进行点乘操作,看哪个结果最大,表明越关注哪块区域
例如:婴儿Key3点乘结果最大,表明更关注右上区域
之后在与V矩阵相乘,得到最终的加权和(Attention Value)

ii)获取Q、K、V矩阵

在这里插入图片描述
以X1为例,X2也类似:在这里插入图片描述
得到Q、K、V之后带入公式即可
实际代码使用的是矩阵,方便并行运算
在这里插入图片描述
多头注意力机制主要是因为参数有多套,得到的Q、K、V也有多套
多头相当于把原始数据信息映射到不同的空间
在这里插入图片描述
例如将原始信息进行映射到两个空间,左右两个不同的多头注意力机制,从而映射到两个不同的空间
多头注意力机制,我的理解是:多个头注意力机制,例如下图中有俩头注意力机制(#0和#1)
在这里插入图片描述
将映射到不同空间最终的输出信息进行合并,乘以一个矩阵即得到一个多头注意力机制的输出
在这里插入图片描述

2.残差和LayNorm

i)残差

X作为输入,经过两层网络,这两层网络统一归为函数F(X)
输入参数X通过两层网络得到输出F(X)
残差:将输入X原封不动的与得到的输出F(X)进行对位相加,得到最终的输出
在这里插入图片描述
梯度消失一般情况下是因为连乘的原因,连乘的过程中出现了较小的数,导致越乘越小,从而产生梯度消失
而在残差网络中,通过反向传播链式法则可以看到,因为1的出现导致无论多小的数,确保梯度不为零,从而有效克服了梯度消失的出现,这也是NLP中使用了残差网络就可以使得网络层数更深的原因
在这里插入图片描述在这里插入图片描述

ii)Layer Normalization

Batch Normalization效果差,所以不用
在NLP中,BN使用的很少,一般都是以LN

①Batch Normalization背景

其核心是Feature Scaling,主要是为了让模型收敛的更快
BN重点在于:针对整个Batch中的样本在统一维度特征下进行处理
BN的过程使用的是:整个batch中的样本的均值和方差来模拟全部数据的均值和方差
在这里插入图片描述

②Batch Normalization的优缺点

优点:
1,可以解决内部协变量偏移
2,可以缓解梯度饱和问题

缺点:
1,当batch_size较小的时候,BN效果较差
因为BN是整个batch中的样本的均值和方差来模拟全部数据的均值和方差;若batch_size较小的情况下,就很难代表全部数据
2,在RNN中效果较差
因为RNN的输入是动态的;若有10个样本,其中9个样本长度为5个单词,1个样本长度为10个单词;在输入的时候,前5个单词可以使用10个样本进行计算均值和方差;但,第6个单词到第10个单词,均值和方差就尴尬了,因为只有1个样本有第6到第10个单词,若只用这一个样板进行计算,又变成了缺点1,batch_size小,不能够得到整个batch_size下的均值和方差
在这里插入图片描述

③为什么使用Layer-norm

为什么LayerNorm单独对一个样本的所有单词做缩放可以起到效果?
在这里插入图片描述
因此BN在NLP中是存在问题的!

BN在处理NLP任务中,会将当成同一个语义信息及性能处理,这边出现了问题
在这里插入图片描述
LN则将整个样本进行处理,每个样本都是在同一个语义信息当中的,所以LN是可以理解的
在这里插入图片描述

Ⅲ、前馈神经网络

在这里插入图片描述

Ⅳ、总结

在这里插入图片描述
首先,Inputs输入,得到一个Input Embedding,然后与Positional Encoding位置嵌入进行对位相加,作为整体的输入
得到多头注意力机制,通过残差结构,与多头注意力机制进行相加,得到残差结构的结果,在进行LN得到最终的注意力机制模块的输出结果
然后进行两层Feed Forward全连接,输出结果保持不变,通过残差结构进行相加,然后通过LN得到最终的输出结果

三、Decoder

Decoder和Encoder类似,均由N个完全相同的大模块堆叠构成,论文中N为6
在这里插入图片描述

Ⅰ,Masked Multi-Head Attention掩膜多头注意力机制

在这里插入图片描述
对输入的单词进行mask掩膜操作

mask的作用

正常情况下的机器翻译
在这里插入图片描述

若Decoder中没有mask,和Encoder一模一样的多头注意力机制话;若到生成find的时,所有的单词都会为生成find进行提供相应的语义信息;但模型在预测的时候,find之后的信息是不知道,没有find someone like you这些信息的,模型是看不见未来的单词的,此时就需要mask掉find someone like you这些信息
模型训练find的时候看到了find someone like you未来信息,但是预测的时候是看不到未来信息的,故需要进行mask操作
在这里插入图片描述
此时需要mask掉find someone like you
在这里插入图片描述

Ⅱ,交互层

在这里插入图片描述
这里是Multi-Head Attention,没有mask

在这里插入图片描述
Encoder生成的是K、V矩阵
Decoder生成的是Q矩阵
多头注意力机制由K、V、Q三个矩阵

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

视频学习来源:Transformer从零详细解读(可能是你见过最通俗易懂的讲解)

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

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

相关文章

nginx部署前端项目自动化脚本

文章目录 配置入口服务器nginx的conf.d使用docker创建一个nginx配置自动化脚本 前言 将项目 通过nginx 部署到 新的服务器 通过nginx反向代理出去 配置入口服务器nginx的conf.d 一般在这个文件夹下 找不到使用 find / -name nginx 2>/dev/null 找到nginx 的位置如果有些没有…

WPF 导航界面悬浮两行之间的卡片 漂亮的卡片导航界面 WPF漂亮渐变颜色 WPF漂亮导航头界面 UniformGrid漂亮展现

在现代应用程序设计中,一个漂亮的WPF导航界面不仅为用户提供视觉上的享受,更对提升用户体验、增强功能可发现性和应用整体效率起到至关重要的作用。以下是对WPF漂亮导航界面重要性的详尽介绍: 首先,引人入胜的首页界面是用户与软…

【Flet教程】使用Flet以Python创建TODO应用程序

Flet是基于Python实现的Flutter图形界面GUI。除了使用Python,具备美观、简洁、易用,还有Flutter本身的跨平台(安卓、iOS、Win、Mac、Web)、高性能、有后盾的特点。下面是0.18版官方TODO APP教程,为了准确,保…

Hyperledger Fabric Java App Demo

编写一个应用程序来连接到 fabrc 网络中,通过调用智能合约来访问账本. fabric gateway fabric gateway 有两个项目,一个是 fabric-gateway-java , 一个是 fabric-gateway。 fabric-gateway-java 是比较早的项目,使用起来较为麻烦需要提供一…

shell中的正则表达式、编程-grep、编程-SED、以及编程-AWK

正则表达式RE 用来处理文本 正则表达式(Regular Expression, RE)是一种字符模式, 用于在查找过程中匹配指定的字符. 在大多数程序里, 正则表达式都被置于两个正斜杠之间; 例如/l[oO]ve/就是由正斜杠界定的正则表达式, 它将匹配被查找的行中任何位置出现的相同模式. 在正则表达…

SpringBoot 如何 配置端口号

结论 server:port: 8088演示 [Ref] 快速构建SpringBoot项目

是时候扔掉cmder, 换上Windows Terminal

作为一个Windows的长期用户,一直没有给款好用的终端,知道遇到了 cmder,它拯救一个习惯用Windows敲shell命令的人。 不用跟我安利macOS真香!公司上班一直用macOS,一方面确实更加习惯windows下面学习, 另一方面是上课需要…

天津最新web前端培训班 如何提升web技能?

随着互联网的迅猛发展,web前端成为了一个热门的职业方向。越来越多的人希望能够通过学习web前端技术来提升自己的就业竞争力。为了满足市场的需求,许多培训机构纷纷推出了web前端培训课程。 什么是WEB前端 web前端就是web给用户展示的东西,…

Python将Labelme文件的真实框和预测框绘制到图片上

Python将Labelme文件的真实框和预测框绘制到图片上 前言前提条件相关介绍实验环境Python将Labelme文件的标注信息绘制到图片上代码实现输出结果 前言 由于本人水平有限,难免出现错漏,敬请批评改正。更多精彩内容,可点击进入Python日常小操作专…

深入理解Java源码:提升技术功底,深度掌握技术框架,快速定位线上问题

为什么要看源码: 1、提升技术功底: 学习源码里的优秀设计思想,比如一些疑难问题的解决思路,还有一些优秀的设计模式,整体提升自己的技术功底 2、深度掌握技术框架: 源码看多了,对于一个新技术…

猫头虎分享已解决Bug || Error: ImagePullBackOff (K8s)

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通Golang》…

快速幂算法总结

知识概览 快速幂可以在O(logk)的时间复杂度之内求出来的结果。 例题展示 快速幂 题目链接 活动 - AcWing 系统讲解常用算法与数据结构,给出相应代码模板,并会布置、讲解相应的基础算法题目。https://www.acwing.com/problem/content/877/ 代码 #inc…

电子学会2023年12月青少年软件编程(图形化)等级考试试卷(一级)真题,含答案解析

青少年软件编程(图形化)等级考试试卷(一级) 分数:100 题数:37 一、单选题(共25题,共50分) 1. 观察下列每个圆形中的四个数,找出规律,在括号里填上适当的数?( )

Python武器库开发-武器库篇之端口扫描器开发(四十四)

Python武器库开发-武器库篇之端口扫描器开发(四十四) 端口是计算机网络中用于区分不同应用程序或服务的逻辑概念。计算机通过端口号来识别数据包应该发送给哪个应用程序或服务。在互联网协议(IP)中,端口号是16位的数字,范围从0到…

计算机毕业设计 基于javaweb的学生交流培养管理平台/系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

软件测试|测试平台开发-Flask 入门:URL组成部分详解

简介 Flask 是一款流行的 Python Web 框架,它简单轻量而灵活,适用于构建各种规模的 Web 应用程序。在 Flask 中,URL(Uniform Resource Locator)是指定 Web 应用程序中资源的唯一标识符。URL 组成部分是构成一个完整 U…

IDEA卡在”正在解析Maven依赖项“的解决方法

修改Maven镜像,修改Maven镜像为阿里云镜像 1.文件路径 C:\Program Files\JetBrains\IntelliJ IDEA 2022.2.3\plugins 2.因为我使用的是InteliJ idea 自带的Maven,所以直接去idea 插件安装目录,找到Maven插件,找到setting.xml 文…

数据库系统-甘晴void学习笔记

数据库系统笔记 计科210X 甘晴void 202108010XXX 教材&#xff1a;《数据库系统概论》第6版 &#xff08;图片来源于网络&#xff0c;侵删&#xff09; 文章目录 数据库系统<br>笔记第一篇 基础篇1 绪论1.1数据库系统概述1.2数据模型1.3数据库系统的结构(三级模式结构…

【代码随想录算法训练营-第七天】【哈希表】454,383,15,18

454. 四数相加 II 第一遍 思路 想不出来&#xff0c;除了暴力解法&#xff0c;完全想不出来其他解法&#xff0c;看答案思路了…学习了两个新的方法&#xff1a; getOrDefault&#xff1a;返回指定键对应的值&#xff0c;如果不存在&#xff0c;则返回默认值containsKey&…

LiveGBS流媒体平台GB/T28181功能-国标级联对接海康大华宇视华为等上级平台选择通道支持只看已选只看未选

LiveGBS功能国标级联对接海康大华宇视华为等上级平台选择通道支持只看已选只看未选 1、国标级联2、只看已选3、只看未选4、搭建GB28181视频直播平台 1、国标级联 LiveGBS可以作为下级平台&#xff0c;级联到第三方国标平台&#xff0c;详见&#xff1a; LiveGBS国标GB/T28181流…