当前位置: 首页 > news >正文

【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(实验确定值,一个时计算资源限制,一个是实验验证效果较好),如图所示:
在这里插入图片描述

  1. 词向量化:通过word2vec的向量化方式,或者通过构造神经网络编码层实现对文本进行向量化;
  2. 位置编码:对于偶数位置采用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 dmodel1,表示位置编码向量中的每一个元素。
    在这里插入图片描述
    选择正弦和余弦编码的原因:
  • 正弦和余弦函数是有界的,其值域在[-1, 1]之间。这有助于限制位置编码的大小,使得训练过程更加稳定。如果位置编码的值过大,可能会导致模型在训练过程中出现梯度爆炸或消失的问题,从而影响模型的性能。
  • 正弦和余弦函数在周期性和连续性方面表现出色。这意味着对于相邻的位置,其位置编码的变化是平滑的,有助于模型捕捉序列中单词之间的相对位置关系。这种平滑性也有助于模型在推理时处理未见过的长序列,因为模型可以通过插值来估计未知位置的位置编码。

每个向量化后单词都会流经编码器的两层,如下:
在这里插入图片描述

Encoder

编码器接收文本向量列表作为输入,它通过将这些向量传递到“self-attention”层,然后传入前馈神经网络,然后将输出向上发送到下一个编码器来处理。

self-attention

计算self-attention的第一步是从编码器的每个输入向量中创**「建三个向量」(在本例中,输入是每个单词的嵌入)。因此,我们为每个单词创建一个「查询向量」、一个「键向量」和一个「值向量」。这些向量是通过将嵌入乘以我们在训练过程中「训练的三个矩阵」**来创建的,这三个矩阵是需要学习的参数矩阵 W Q 、 W K 、 W V W^Q、W^K、W^V WQWKWV
在这里插入图片描述

假如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=1Nsoftmax(dmodel qiki)vi如图所示:
在这里插入图片描述
在Transformer中,整个过程是矩阵计算,结合上述步骤,矩阵运算可表达为:
在这里插入图片描述

Multi-Attention

论文中通过添加一种称为“多头”注意力机制,进一步细化了self-attention层。这从两个方面提高了注意层的性能:

  1. 它扩展了模型关注不同位置的能力,self-attention的注意力都集中在自身邻近位置,多头注意力则可以扩散注意力至整个句子;
  2. 它为注意力层提供了多个“表示子空间”。对于多头注意力,不仅有一组,而且有多组Query/Key/Value 权重矩阵(Transformer设置了8个注意力头,因此每个编码器/解码器有八组)。这些集合中的每一个都是随机初始化的。在训练之后,每一组注意力权重( W Q 、 W K 、 W V W^{Q}、W^{K}、W^{V} WQWKWV)将输入词嵌入(或来自较低编码器/解码器的向量)投影到不同的表示子空间;
    在这里插入图片描述
    如果我们做上面所述的同样的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 KV会作为解码器的Key矩阵和 Value矩阵来使用,之后的每进行一次解码,对应的query会加上上一步的输出结果转换成的向量,再进行下一步的解码,直到解码器输出终止符(如:<EOS>):

Decoder解码过程


解码器中的两大特点:

  1. mask attention:mask注意力就是在翻译am时,不会参考后续向量数据,仅考虑上文向量;
  2. 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损失函数 论文链接&#xff1a; Attention Is All You Need 参考文章&#xff1a; 【NLP】《Attention Is All You Need》的阅读笔记 一…...

【Unity】程序创建Mesh(二)MeshRenderer、光照、Probes探针、UV信息、法线信息

文章目录 接上文MeshRenderer&#xff08;网格渲染器&#xff09;Materials&#xff08;材质&#xff09;Material和Mesh对应Lighting光照Lightmapping材质中的光照 光源类型阴影全局光照Probes&#xff08;探针&#xff09;Ray Tracing&#xff08;光线追踪&#xff09;Additi…...

每日一练:LeeCode-167. 两数之和 II - 输入有序数组【双指针】

给你一个下标从 1 开始的整数数组 numbers &#xff0c;该数组已按 非递减顺序排列 &#xff0c;请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] &#xff0c;则 1 < index1 < index2 < numbers.…...

性能优化(CPU优化技术)-NEON指令详解

原文来自ARM SIMD 指令集&#xff1a;NEON 简介 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开发基础教程 &#x1f380;CSDN主页 发狂的小花 &#x1f304;人生秘诀&#xf…...

服务器硬件基础知识和云服务器的选购技巧

概述 服务器硬件基础知识涵盖了构成服务器的关键硬件组件和技术&#xff0c;这些组件和技术对于服务器的性能、稳定性和可用性起着至关重要的作用。其中包括中央处理器&#xff08;CPU&#xff09;作为服务器的计算引擎&#xff0c;内存&#xff08;RAM&#xff09;用于数据临…...

深度学习PyTorch 之 transformer-中文多分类

transformer的原理部分在前面基本已经介绍完了&#xff0c;接下来就是代码部分&#xff0c;因为transformer可以做的任务有很多&#xff0c;文本的分类、时序预测、NER、文本生成、翻译等&#xff0c;其相关代码也会有些不同&#xff0c;所以会分别进行介绍 但是对于不同的任务…...

STC 51单片机烧录程序遇到一直检测单片机的问题

准备工作 一&#xff0c;需要一个USB-TTL的下载器 &#xff0c;并安装好对应的驱动程序 二、对应的下载软件&#xff0c;stc软件需要官方的软件&#xff08;最好是最新的&#xff0c;个人遇到旧的下载软件出现问题&#xff09; 几种出现一直检测的原因 下载软件图标&#xf…...

后端系统开发之——接口参数校验

今天难得双更&#xff0c;大家点个关注捧个场 原文地址&#xff1a;后端系统开发之——接口参数校验 - Pleasure的博客 下面是正文内容&#xff1a; 前言 在上一篇文章中提到了接口的开发&#xff0c;虽然是完成了&#xff0c;但还是缺少一些细节——传入参数的校验。 即用户…...

IDEA 配置阿里规范检测

IDEA中安装插件 配置代码风格检查规范 使用代码风格检测 在代码类中&#xff0c;右键 然后会给出一些不符合规范的修改建议&#xff1a; 保存代码时自动格式化代码 安装插件&#xff1a; 配置插件&#xff1a;...

数据仓库系列总结

一、数据仓库架构 1、数据仓库的概念 数据仓库&#xff08;Data Warehouse&#xff09;是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合&#xff0c;用于支持管理决策。 数据仓库通常包含多个来源的数据&#xff0c;这些数据按照主题进行组织和存储&#x…...

gitlab runner没有内网的访问权限应该怎么解决

如果你的GitLab Runner没有内网访问权限&#xff0c;但你需要访问内部资源&#xff08;如私有仓库或其他服务&#xff09;&#xff0c;你可以考虑以下几种方法&#xff1a; VPN 或 SSH 隧道&#xff1a; 在允许的情况下&#xff0c;通过VPN或SSH隧道连接到内部网络。这将允许Gi…...

el-tree 设置默认展开指定层级

el-tree默认关闭所有选项&#xff0c;但是有添加或者编辑删除的情况下&#xff0c;需要刷新接口&#xff0c;此时会又要关闭所有选项&#xff1b; 需求&#xff1a;在编辑时、添加、删除 需要将该内容默认展开 <el-tree :default-expanded-keys"expandedkeys":da…...

python便民超市管理系统flask-django-nodejs-php

随着人们生活节奏的加快&#xff0c;以前传统的购物方式发生了巨大的改变&#xff0c;以前一个超市要想经营好自己的门店&#xff0c;每天都要忙着记账出账&#xff0c;尤其是出库入库统计&#xff0c;如果忙中出乱&#xff0c;可能导致今天所有的营业流水&#xff0c;要重新换…...

HarmonyOS — BusinessError 不能被 JSON.stringify转换

在鸿蒙中BusinessError 继承于Error&#xff0c;而在JavaScript&#xff08;以及TypeScript&#xff0c;因为它是JavaScript的超集&#xff09;中&#xff0c;Error 对象包含一些不能被 JSON.stringify 直接序列化的属性。JSON.stringify 方法会将一个JavaScript对象或者值转换…...

JupyterNotebook 如何切换使用的虚拟环境kernel

在Jupyter Notebook中&#xff0c;如果需要修改使用的虚拟环境Kernel&#xff1a; 首先&#xff0c;需要确保虚拟环境已经安装conda上【conda基本操作】 打开Jupyter Notebook。 在Jupyter Notebook的顶部菜单中&#xff0c;选择 “New” 在弹出的窗口中&#xff0c;列出了…...

预防GPT-3和其他复杂语言模型中的“幻觉”

标题&#xff1a;预防GPT-3和其他复杂语言模型中的“幻觉” 正文&#xff1a; “假新闻”的一个显著特征是它经常在事实正确信息的环境中呈现虚假信息&#xff0c;通过一种文学渗透的方式&#xff0c;使不真实的数据获得感知权威&#xff0c;这是半真半假力量令人担忧的展示。…...

从源码解析AQS

前置概念 要彻底了解AQS的底层实现就必须要了解一下线程相关的知识。 包括voliatevoliate 我们使用翻译软件翻译一下volatile&#xff0c;会发现它有以下几个意思&#xff1a;易变的;无定性的;无常性的;可能急剧波动的;不稳定的;易恶化的;易挥发的;易发散的。这也正式使用vola…...

基于Spring Boot的云上水果超市的设计与实现

摘 要 伴随着我国社会的发展&#xff0c;人民生活质量日益提高。于是对云上水果超市进行规范而严格是十分有必要的&#xff0c;所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套云上水果超市&#xff0c;帮助商家进行…...

游戏引擎中的动画基础

一、动画技术简介 视觉残留理论 - 影像在我们的视网膜上残留1/24s。 游戏中动画面临的挑战&#xff1a; 交互&#xff1a;游戏中的玩家动画需要和场景中的物体进行交互。实时&#xff1a;最慢需要在1/30秒内算完所有的场景渲染和动画数据。&#xff08;可以用动画压缩解决&am…...

springboot3快速入门案例2024最新版

前边 springboot3 系统要求 技术&工具版本&#xff08;or later&#xff09;maven3.6.3 or later 3.6.3 或更高版本Tomcat10.0Servlet9.0JDK17 SpringBoot的主要目标是&#xff1a; 为所有 Spring 开发提供更快速、可广泛访问的入门体验。开箱即用&#xff0c;设置合理的…...

软考 系统架构设计师系列知识点之系统性能(1)

所属章节&#xff1a; 第2章. 计算机系统基础知识 第9节. 系统性能 系统性能是一个系统提供给用户的所有性能指标的集合。它既包括硬件性能&#xff08;如处理器主频、存储器容量、通信带宽等&#xff09;和软件性能&#xff08;如上下文切换、延迟、执行时间等&#xff09;&a…...

Trent-FPGA硬件设计课程

本课程涵盖FPGA硬件设计的基础概念和实践应用。学生将学习Verilog语言编程、数字电路设计原理、FPGA架构和开发工具的使用。通过项目实践&#xff0c;掌握FPGA设计流程和调试技巧&#xff0c;为硬件加速和嵌入式系统开发打下坚实基础。 课程大小&#xff1a;4.3G 课程下载&am…...

【大模型学习记录】db-gpt源码安装问题汇总

1、首次源码安装时安装的其实dbgpt到conda环境中&#xff0c;会将路径一起安装。 如果有其他的路径使用同样的conda环境会报错&#xff0c;一直读取的就是原先的路径的内容。需要自己新创建一个conda env 2、界面中配置知识库问答时&#xff0c;报错 # 1、报的错如下&#x…...

QB PHP 多语言配置

1&#xff1a; 下载QBfast .exe 的文件 2&#xff1a; 安装的时候 &#xff0c;一定点击 仅为我 安装 而不是 所有人 3&#xff1a; 如果提示 更新就 更新 &#xff0c; 安装如2 4&#xff1a; 如果遇到 新增 或者编辑已经 配置的项目时 不起作用 &#xff1a; 右…...

Kubernetes实战(三十一)-使用开源CEPH作为后端StorageClass

1 引言 K8S在1.13版本开始支持使用Ceph作为StorageClass。其中云原生存储Rook和开源Ceph应用都非常广泛。本文主要介绍K8S如何对接开源Ceph使用RBD卷。 K8S对接Ceph的技术栈如下图所示。K8S主要通过容器存储接口CSI和Ceph进行交互。 Ceph官方文档&#xff1a;Block Devices a…...

【Python爬虫】详解BeautifulSoup()及其方法

文章目录 &#x1f354;准备工作&#x1f339;BeautifulSoup()⭐代码实现✨打印标签里面的内容✨快速拿到一个标签里的属性✨打印整个文档&#x1f386;获取特定标签的特定内容 &#x1f339;查找标签&#x1f388;在文档查找标签 find_all&#x1f388;正则表达式搜索 &#x…...

C语言经典算法-8

文章目录 其他经典例题跳转链接41.基数排序法42.循序搜寻法&#xff08;使用卫兵&#xff09;43.二分搜寻法&#xff08;搜寻原则的代表&#xff09;44.插补搜寻法45.费氏搜寻法 其他经典例题跳转链接 C语言经典算法-1 1.汉若塔 2. 费式数列 3. 巴斯卡三角形 4. 三色棋 5. 老鼠…...

Panasonic松下PLC如何数据采集?如何实现快速接入IIOT云平台?

在工业自动化领域&#xff0c;数据采集与远程控制是提升生产效率、优化资源配置的关键环节。对于使用Panasonic松下PLC的用户来说&#xff0c;如何实现高效、稳定的数据采集&#xff0c;并快速接入IIOT云平台&#xff0c;是摆在他们面前的重要课题。HiWoo Box工业物联网关以其强…...

高性能 MySQL 第四版(GPT 重译)(四)

第十一章&#xff1a;扩展 MySQL 在个人项目中运行 MySQL&#xff0c;甚至在年轻公司中运行 MySQL&#xff0c;与在市&#xfffd;&#xfffd;已经建立并且“呈现指数增长”业务中运行 MySQL 大不相同。在高速业务环境中&#xff0c;流量可能每年增长数倍&#xff0c;环境变得…...

整型数组按个位值排序 - 华为OD统一考试(C卷)

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 题目描述 给定一个非空数组(列表)&#xff0c;其元素数据类型为整型&#xff0c;请按照数组元素十进制最低位从小到大进行排序&#xff0c;十进制最低位相同的元素&#xf…...

水果网店网站建设策划书/seo查询工具有哪些

上篇文章已经介绍了什么是消息队列&#xff0c;以及消息队列的作用&#xff0c;下面我们来用springboot集成一个消息队列ActiveMQ 一、ActiveMQ概述&#xff1a; ActiveMQ是Apache提供的一个开源的消息系统&#xff0c;采用java实现。 二、ActiveMQ的安装 第一步、从官网下载…...

青岛网站设计微动力百家号/新东方线下培训机构官网

轻量级pdf查看阅读工具Sumatra PDF 官方下载网址 https://www.sumatrapdfreader.org/download-free-pdf-viewer 简介 Sumatra PDF 是一款开源免费、体积小巧、启动极为迅速的 Windows 平台上经典的电子书阅读器软件。它不仅支持阅读 PDF 格式文档&#xff0c;同时还能支持 …...

鞍山创网站怎么创/新站点seo联系方式

本节课主要是讲一些前沿知识&#xff0c;理解即可。 上图是一个图形学中的材料例举&#xff0c;下面介绍一些相关概念&#xff1a; 第一部分&#xff1a;Material BRDF 一、Diffuse / Lambertian 上图是漫反射&#xff08; Lambertian&#xff09;材质&#xff0c;每个出射光线…...

中小网站 架构/百度指数有什么作用

文章目录选择题1.填空题1. 修改文件或目录的权限的命令是___;修改某个文件或目录的所有者和所属的组的命令是___2. 在压缩的日志文件"youzan.log.gz"中查找关键字"exception"并统计出现次数___选择题 1. 填空题 1. 修改文件或目录的权限的命令是___;修改…...

wordpress怎么自动更新网站地图/线上运营推广

5.匿名函数 匿名函数&#xff1a;定义函数的过程中&#xff0c;没有给定名称的函数就叫做匿名函数&#xff1b;Python中使用lambda表达式来创建匿名函数。 lambda来创建匿名函数规则&#xff1a; lambda只是一个表达式&#xff0c;函数体比def简单很多。 lambda的主体是一个表…...

有什么做任务接单赚钱网站/镇江seo快速排名

SpringMybatis实现动态SQL查询 在报表类应用中&#xff0c;通常需要根据不同的维度去组合复杂的查询条件&#xff0c;然后构造SQL去执行查询。如果只是通过在程序中简单地拼接SQL语句&#xff0c;工作量会非常大&#xff0c;而且代码可能也非常难以维护。Mybatis支持动态SQL查询…...