【NLP笔记】Transformer
文章目录
- 基本架构
- Embedding
- Encoder
- self-attention
- Multi-Attention
- 残差连接+LayerNorm
- Decoder
- Mask&Cross Attention
- 线性层&softmax
- 损失函数
论文链接: Attention Is All You Need
参考文章:
- 【NLP】《Attention Is All You Need》的阅读笔记
- 一文了解Transformer全貌(图解Transformer)
- Transformer是什么?看完这篇你就醍醐灌顶
- Transformer 模型详解
- 深度学习之Transformer笔记
- The illurstrated Transformer
Transformer是自然语言处理领域具有里程碑意义的研究成果,后来也逐渐被广泛用于视觉信息处理与分析。之前在总结RNN时有说到,存在一种从长度为M的输入到长度为N的输出的这种seq2seq结构,通过Encoder-Decoder的结构实现对向量化内容的编解码。
基本架构
Transformer的整体架构如上图所示,但从结构来看会觉得很复杂,可以一步一步理解。首先是N层堆叠的编码器结构和N层堆叠的解码器结构组成,如下图所示:
再进一步细化,Encoder的结构都是相同的,但是和RNN不同,Encoder不同的层并不会共享权重。编码器的输入首先通过一个self-attention层,self-attention层的输出反馈给前馈神经网络,如图所示:
解码器也有编码器的两个层,但在这两层之间有一个注意层,帮助解码器关注输入句子的相关部分。
Embedding
Transformer的输入是Embedding后的文本向量,该向量化过程由两部分结果相加得到的,通常向量化表征的维度一般为256或者512(实验确定值,一个时计算资源限制,一个是实验验证效果较好),如图所示:
- 词向量化:通过word2vec的向量化方式,或者通过构造神经网络编码层实现对文本进行向量化;
- 位置编码:对于偶数位置采用sin,奇数位置采用cos的转换方式进行编码。其中 p o s pos pos是时序位置索引, i i i代表位置编码的维度索引。位置编码是一个向量,其维度与模型的嵌入维度( d m o d e l d_{model} dmodel)相同。因此, i i i 的值会从0遍历到 d m o d e l − 1 d_{model}-1 dmodel−1,表示位置编码向量中的每一个元素。
选择正弦和余弦编码的原因:
- 正弦和余弦函数是有界的,其值域在[-1, 1]之间。这有助于限制位置编码的大小,使得训练过程更加稳定。如果位置编码的值过大,可能会导致模型在训练过程中出现梯度爆炸或消失的问题,从而影响模型的性能。
- 正弦和余弦函数在周期性和连续性方面表现出色。这意味着对于相邻的位置,其位置编码的变化是平滑的,有助于模型捕捉序列中单词之间的相对位置关系。这种平滑性也有助于模型在推理时处理未见过的长序列,因为模型可以通过插值来估计未知位置的位置编码。
每个向量化后单词都会流经编码器的两层,如下:
Encoder
编码器接收文本向量列表作为输入,它通过将这些向量传递到“self-attention”层,然后传入前馈神经网络,然后将输出向上发送到下一个编码器来处理。
self-attention
计算self-attention的第一步是从编码器的每个输入向量中创**「建三个向量」(在本例中,输入是每个单词的嵌入)。因此,我们为每个单词创建一个「查询向量」、一个「键向量」和一个「值向量」。这些向量是通过将嵌入乘以我们在训练过程中「训练的三个矩阵」**来创建的,这三个矩阵是需要学习的参数矩阵 W Q 、 W K 、 W V W^Q、W^K、W^V WQ、WK、WV。
假如Thinking、Machines这两个单词经过Embedding后得到向量是 x 1 , x 2 x_{1},x_{2} x1,x2,那么 q 1 = x 1 W Q , q 2 = x 2 W Q q_{1}=x_{1}W^Q,q_{2}=x_{2}W^Q q1=x1WQ,q2=x2WQ,同理可得 k 1 = x 1 W K , k 2 = x 2 W K k_{1}=x_{1}W^K,k_{2}=x_{2}W^K k1=x1WK,k2=x2WK、 v 1 = x 1 W V , v 2 = x 2 W V v_{1}=x_{1}W^V,v_{2}=x_{2}W^V v1=x1WV,v2=x2WV。计算self-attention的第二步是计算分数,假设我们正在计算例子中第一个单词“Thinking”的self-attention,计算当前词与输入句子的每个词的之间相关性:
第三步和第四步是将分数除以 d m o d e l \sqrt {d_{model}} dmodel( 64 = 8 \sqrt {64}=8 64=8)(这一步的操作是为了让梯度的传播更稳定,该值是实验设定,非固定值),然后通过softmax操作传递结果。Softmax将分数标准化,使其全部为正值,加起来等于1。
当最终通过softmax计算出来的归一化分数越高时,说明目标词汇和当前词汇的相关性更高。
第五步是将每个value vector乘以softmax分数。这样通过对计算出来的关联性分数乘以向量,就可以实现对不同部分词汇有不同的关注度。
第六步是对加权值向量求和。这将在该位置(对于第一个单词)生成self-attention层的输出, z i = ∑ i = 1 N s o f t m a x ( q i k i d m o d e l ) v i z_{i}=\sum_{i=1}^{N}softmax(\frac {q_{i}k_{i}}{\sqrt {d_{model}}})v_{i} zi=i=1∑Nsoftmax(dmodelqiki)vi如图所示:
在Transformer中,整个过程是矩阵计算,结合上述步骤,矩阵运算可表达为:
Multi-Attention
论文中通过添加一种称为“多头”注意力机制,进一步细化了self-attention层。这从两个方面提高了注意层的性能:
- 它扩展了模型关注不同位置的能力,self-attention的注意力都集中在自身邻近位置,多头注意力则可以扩散注意力至整个句子;
- 它为注意力层提供了多个“表示子空间”。对于多头注意力,不仅有一组,而且有多组Query/Key/Value 权重矩阵(Transformer设置了8个注意力头,因此每个编码器/解码器有八组)。这些集合中的每一个都是随机初始化的。在训练之后,每一组注意力权重( W Q 、 W K 、 W V W^{Q}、W^{K}、W^{V} WQ、WK、WV)将输入词嵌入(或来自较低编码器/解码器的向量)投影到不同的表示子空间;
如果我们做上面所述的同样的self-attention计算,只需使用不同的权重矩阵进行8次不同的计算,我们最终得到8个不同的Z矩阵。
而前馈层则不需要8个矩阵——它需要一个矩阵(每个单词对应一个向量)。这时就需要一种方法把这8个矩阵压缩成一个矩阵,即将它们乘以一个额外的权重矩阵 W O W^{O} WO进行一次变换:
多头注意力机制的整体流程就可以表示如下:
残差连接+LayerNorm
每个编码器中的每个子层(self-attention,ffnn)在其周围都有一个残差连接,然后是一个层进行归一化步骤。
- 反向传播链式法则易产生梯度消失的问题,而残差则通过相加和shortcut操作避免了梯度为0的情况出现,可以缓解梯度消失。
- Layer Normalization是对每个样本单独计算均值和方差,因此不需要考虑不同位置之间的相关性,也不会破坏向量的位置信息。相比之下,Batch Normalization会计算一个batch内所有样本的均值和方差,这可能会破坏Transformer中每个位置的高维向量表示,因为每个位置都包含重要的语义信息。Layer Normalization能够解决Transformer中的内部协变量位移问题。内部协变量位移是指在训练过程中,神经网络层输入的分布在不断变化,导致网络难以训练。Layer Normalization通过规范化层的输出,使得每一层的输入都保持稳定的分布,有助于加速模型的训练过程并提升模型的性能。
Decoder
Mask&Cross Attention
Decoder的初始输入为开始符号转换成对应的向量作为初始的query向量 Q Q Q,编码器中学习到的注意力向量 K 、 V K、V K、V会作为解码器的Key矩阵和 Value矩阵来使用,之后的每进行一次解码,对应的query会加上上一步的输出结果转换成的向量,再进行下一步的解码,直到解码器输出终止符(如:<EOS>):
Decoder解码过程
解码器中的两大特点:
- mask attention:mask注意力就是在翻译am时,不会参考后续向量数据,仅考虑上文向量;
- cross attention:cross含义就是其中一个序列作为输入的Q(Query),定义了输出的序列长度;另一个序列则提供输入的K(Key)和V(Value)。解码器 Attention层是使用前一层的输出来构造Query 矩阵,而Key矩阵和 Value矩阵来自于编码器最终的输出,也就是上面描述的解码过程。
线性层&softmax
最后一个线性层的工作,后面是一个 Softmax 层。线性层是一个简单的全连接神经网络,它将解码器堆栈产生的向量投影到一个更大的向量中,称为 logits 向量,该向量表示当前输出为当前索引映射词汇的概率,最终输出概率最大的预测结果。
损失函数
最终的目标是使得每个输出结果和目标结果之间的差距最小,一般采用的是交叉熵损失:
相关文章:
【NLP笔记】Transformer
文章目录 基本架构EmbeddingEncoderself-attentionMulti-Attention残差连接LayerNorm DecoderMask&Cross Attention线性层&softmax损失函数 论文链接: Attention Is All You Need 参考文章: 【NLP】《Attention Is All You Need》的阅读笔记 一…...
【Unity】程序创建Mesh(二)MeshRenderer、光照、Probes探针、UV信息、法线信息
文章目录 接上文MeshRenderer(网格渲染器)Materials(材质)Material和Mesh对应Lighting光照Lightmapping材质中的光照 光源类型阴影全局光照Probes(探针)Ray Tracing(光线追踪)Additi…...
每日一练:LeeCode-167. 两数之和 II - 输入有序数组【双指针】
给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 < index1 < index2 < numbers.…...
性能优化(CPU优化技术)-NEON指令详解
原文来自ARM SIMD 指令集:NEON 简介 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:高性能(HPC)开发基础教程 🎀CSDN主页 发狂的小花 🌄人生秘诀…...
服务器硬件基础知识和云服务器的选购技巧
概述 服务器硬件基础知识涵盖了构成服务器的关键硬件组件和技术,这些组件和技术对于服务器的性能、稳定性和可用性起着至关重要的作用。其中包括中央处理器(CPU)作为服务器的计算引擎,内存(RAM)用于数据临…...
深度学习PyTorch 之 transformer-中文多分类
transformer的原理部分在前面基本已经介绍完了,接下来就是代码部分,因为transformer可以做的任务有很多,文本的分类、时序预测、NER、文本生成、翻译等,其相关代码也会有些不同,所以会分别进行介绍 但是对于不同的任务…...
STC 51单片机烧录程序遇到一直检测单片机的问题
准备工作 一,需要一个USB-TTL的下载器 ,并安装好对应的驱动程序 二、对应的下载软件,stc软件需要官方的软件(最好是最新的,个人遇到旧的下载软件出现问题) 几种出现一直检测的原因 下载软件图标…...
后端系统开发之——接口参数校验
今天难得双更,大家点个关注捧个场 原文地址:后端系统开发之——接口参数校验 - Pleasure的博客 下面是正文内容: 前言 在上一篇文章中提到了接口的开发,虽然是完成了,但还是缺少一些细节——传入参数的校验。 即用户…...
IDEA 配置阿里规范检测
IDEA中安装插件 配置代码风格检查规范 使用代码风格检测 在代码类中,右键 然后会给出一些不符合规范的修改建议: 保存代码时自动格式化代码 安装插件: 配置插件:...
数据仓库系列总结
一、数据仓库架构 1、数据仓库的概念 数据仓库(Data Warehouse)是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。 数据仓库通常包含多个来源的数据,这些数据按照主题进行组织和存储&#x…...
gitlab runner没有内网的访问权限应该怎么解决
如果你的GitLab Runner没有内网访问权限,但你需要访问内部资源(如私有仓库或其他服务),你可以考虑以下几种方法: VPN 或 SSH 隧道: 在允许的情况下,通过VPN或SSH隧道连接到内部网络。这将允许Gi…...
el-tree 设置默认展开指定层级
el-tree默认关闭所有选项,但是有添加或者编辑删除的情况下,需要刷新接口,此时会又要关闭所有选项; 需求:在编辑时、添加、删除 需要将该内容默认展开 <el-tree :default-expanded-keys"expandedkeys":da…...
python便民超市管理系统flask-django-nodejs-php
随着人们生活节奏的加快,以前传统的购物方式发生了巨大的改变,以前一个超市要想经营好自己的门店,每天都要忙着记账出账,尤其是出库入库统计,如果忙中出乱,可能导致今天所有的营业流水,要重新换…...
HarmonyOS — BusinessError 不能被 JSON.stringify转换
在鸿蒙中BusinessError 继承于Error,而在JavaScript(以及TypeScript,因为它是JavaScript的超集)中,Error 对象包含一些不能被 JSON.stringify 直接序列化的属性。JSON.stringify 方法会将一个JavaScript对象或者值转换…...
JupyterNotebook 如何切换使用的虚拟环境kernel
在Jupyter Notebook中,如果需要修改使用的虚拟环境Kernel: 首先,需要确保虚拟环境已经安装conda上【conda基本操作】 打开Jupyter Notebook。 在Jupyter Notebook的顶部菜单中,选择 “New” 在弹出的窗口中,列出了…...
预防GPT-3和其他复杂语言模型中的“幻觉”
标题:预防GPT-3和其他复杂语言模型中的“幻觉” 正文: “假新闻”的一个显著特征是它经常在事实正确信息的环境中呈现虚假信息,通过一种文学渗透的方式,使不真实的数据获得感知权威,这是半真半假力量令人担忧的展示。…...
从源码解析AQS
前置概念 要彻底了解AQS的底层实现就必须要了解一下线程相关的知识。 包括voliatevoliate 我们使用翻译软件翻译一下volatile,会发现它有以下几个意思:易变的;无定性的;无常性的;可能急剧波动的;不稳定的;易恶化的;易挥发的;易发散的。这也正式使用vola…...
基于Spring Boot的云上水果超市的设计与实现
摘 要 伴随着我国社会的发展,人民生活质量日益提高。于是对云上水果超市进行规范而严格是十分有必要的,所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套云上水果超市,帮助商家进行…...
游戏引擎中的动画基础
一、动画技术简介 视觉残留理论 - 影像在我们的视网膜上残留1/24s。 游戏中动画面临的挑战: 交互:游戏中的玩家动画需要和场景中的物体进行交互。实时:最慢需要在1/30秒内算完所有的场景渲染和动画数据。(可以用动画压缩解决&am…...
springboot3快速入门案例2024最新版
前边 springboot3 系统要求 技术&工具版本(or later)maven3.6.3 or later 3.6.3 或更高版本Tomcat10.0Servlet9.0JDK17 SpringBoot的主要目标是: 为所有 Spring 开发提供更快速、可广泛访问的入门体验。开箱即用,设置合理的…...
软考 系统架构设计师系列知识点之系统性能(1)
所属章节: 第2章. 计算机系统基础知识 第9节. 系统性能 系统性能是一个系统提供给用户的所有性能指标的集合。它既包括硬件性能(如处理器主频、存储器容量、通信带宽等)和软件性能(如上下文切换、延迟、执行时间等)&a…...
Trent-FPGA硬件设计课程
本课程涵盖FPGA硬件设计的基础概念和实践应用。学生将学习Verilog语言编程、数字电路设计原理、FPGA架构和开发工具的使用。通过项目实践,掌握FPGA设计流程和调试技巧,为硬件加速和嵌入式系统开发打下坚实基础。 课程大小:4.3G 课程下载&am…...
【大模型学习记录】db-gpt源码安装问题汇总
1、首次源码安装时安装的其实dbgpt到conda环境中,会将路径一起安装。 如果有其他的路径使用同样的conda环境会报错,一直读取的就是原先的路径的内容。需要自己新创建一个conda env 2、界面中配置知识库问答时,报错 # 1、报的错如下&#x…...
QB PHP 多语言配置
1: 下载QBfast .exe 的文件 2: 安装的时候 ,一定点击 仅为我 安装 而不是 所有人 3: 如果提示 更新就 更新 , 安装如2 4: 如果遇到 新增 或者编辑已经 配置的项目时 不起作用 : 右…...
Kubernetes实战(三十一)-使用开源CEPH作为后端StorageClass
1 引言 K8S在1.13版本开始支持使用Ceph作为StorageClass。其中云原生存储Rook和开源Ceph应用都非常广泛。本文主要介绍K8S如何对接开源Ceph使用RBD卷。 K8S对接Ceph的技术栈如下图所示。K8S主要通过容器存储接口CSI和Ceph进行交互。 Ceph官方文档:Block Devices a…...
【Python爬虫】详解BeautifulSoup()及其方法
文章目录 🍔准备工作🌹BeautifulSoup()⭐代码实现✨打印标签里面的内容✨快速拿到一个标签里的属性✨打印整个文档🎆获取特定标签的特定内容 🌹查找标签🎈在文档查找标签 find_all🎈正则表达式搜索 &#x…...
C语言经典算法-8
文章目录 其他经典例题跳转链接41.基数排序法42.循序搜寻法(使用卫兵)43.二分搜寻法(搜寻原则的代表)44.插补搜寻法45.费氏搜寻法 其他经典例题跳转链接 C语言经典算法-1 1.汉若塔 2. 费式数列 3. 巴斯卡三角形 4. 三色棋 5. 老鼠…...
Panasonic松下PLC如何数据采集?如何实现快速接入IIOT云平台?
在工业自动化领域,数据采集与远程控制是提升生产效率、优化资源配置的关键环节。对于使用Panasonic松下PLC的用户来说,如何实现高效、稳定的数据采集,并快速接入IIOT云平台,是摆在他们面前的重要课题。HiWoo Box工业物联网关以其强…...
高性能 MySQL 第四版(GPT 重译)(四)
第十一章:扩展 MySQL 在个人项目中运行 MySQL,甚至在年轻公司中运行 MySQL,与在市��已经建立并且“呈现指数增长”业务中运行 MySQL 大不相同。在高速业务环境中,流量可能每年增长数倍,环境变得…...
整型数组按个位值排序 - 华为OD统一考试(C卷)
OD统一考试(C卷) 分值: 100分 题解: Java / Python / C 题目描述 给定一个非空数组(列表),其元素数据类型为整型,请按照数组元素十进制最低位从小到大进行排序,十进制最低位相同的元素…...
水果网店网站建设策划书/seo查询工具有哪些
上篇文章已经介绍了什么是消息队列,以及消息队列的作用,下面我们来用springboot集成一个消息队列ActiveMQ 一、ActiveMQ概述: ActiveMQ是Apache提供的一个开源的消息系统,采用java实现。 二、ActiveMQ的安装 第一步、从官网下载…...
青岛网站设计微动力百家号/新东方线下培训机构官网
轻量级pdf查看阅读工具Sumatra PDF 官方下载网址 https://www.sumatrapdfreader.org/download-free-pdf-viewer 简介 Sumatra PDF 是一款开源免费、体积小巧、启动极为迅速的 Windows 平台上经典的电子书阅读器软件。它不仅支持阅读 PDF 格式文档,同时还能支持 …...
鞍山创网站怎么创/新站点seo联系方式
本节课主要是讲一些前沿知识,理解即可。 上图是一个图形学中的材料例举,下面介绍一些相关概念: 第一部分:Material BRDF 一、Diffuse / Lambertian 上图是漫反射( Lambertian)材质,每个出射光线…...
中小网站 架构/百度指数有什么作用
文章目录选择题1.填空题1. 修改文件或目录的权限的命令是___;修改某个文件或目录的所有者和所属的组的命令是___2. 在压缩的日志文件"youzan.log.gz"中查找关键字"exception"并统计出现次数___选择题 1. 填空题 1. 修改文件或目录的权限的命令是___;修改…...
wordpress怎么自动更新网站地图/线上运营推广
5.匿名函数 匿名函数:定义函数的过程中,没有给定名称的函数就叫做匿名函数;Python中使用lambda表达式来创建匿名函数。 lambda来创建匿名函数规则: lambda只是一个表达式,函数体比def简单很多。 lambda的主体是一个表…...
有什么做任务接单赚钱网站/镇江seo快速排名
SpringMybatis实现动态SQL查询 在报表类应用中,通常需要根据不同的维度去组合复杂的查询条件,然后构造SQL去执行查询。如果只是通过在程序中简单地拼接SQL语句,工作量会非常大,而且代码可能也非常难以维护。Mybatis支持动态SQL查询…...