【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 向量,该向量表示当前输出为当前索引映射词汇的概率,最终输出概率最大的预测结果。
在这里插入图片描述

损失函数

最终的目标是使得每个输出结果和目标结果之间的差距最小,一般采用的是交叉熵损失:
在这里插入图片描述

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

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

相关文章

【C语言】结构体类型名、变量名以及typedef

文章目录 分类判断结构体成员的使用typedef 分类判断 struct tag {char m;int i; }p;假设定义了上面这一个结构体&#xff0c;tag 就是类型名&#xff0c; p 就是变量名&#xff0c; m 和 i 就是结构体成员列表。 可以这么记&#xff0c;括号前面的是类型名&#xff0c;括号后…

内存条@电脑支持的最大内存@升级内存硬件

文章目录 电脑支持的最大内存规格cpu官网查看支持的规格命令行查看脚本化 DDR内存LPDDR内存内存升级扩展&#x1f47a;插槽检查板载内存SPD内存厂商其他 内存参数&#x1f47a;性能指标使用软件查看更多内存相关的软件工具 电脑支持的最大内存规格 确认电脑最大支持内存大小和频…

在Ubuntu20.04(原为cuda12.0, gcc9.几版本和g++9.几版本)下先安装cuda9.0后再配置gcc-5环境

因为自己对Linux相关操作不是很熟悉&#xff0c;所以因为之前的代码报错之后决定要安cuda9.0&#xff0c;于是先安装了cuda9.0。里面用到的一些链接&#xff0c;链接文件夹时直接去copy它的路径&#xff0c;就不那么容易错了。 今天运行程序之后发现gcc环境不太匹配cuda9.0&am…

图解CodeWhisperer的安装使用

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! ​ 目录 &#x1f4d8; CodeWhisperer简介 &#…

原生html vue3使用element plus 的树tree上移下移案例源码

上效果 html源码 <!DOCTYPE html> <html lang"en"> <!-- * Name: mallSalesReports.html * Description: * Author Lani * date 2024-02-28 18:32:36 --> <head><meta charset"UTF-8"><meta name"viewport" …

[uni-app] uni.createAnimation动画在APP端无效问题记录

文章目录 uni.createAnimation动画描述动画代码templatejs部分 问题原因改进方案template js部分改动git 改进截图 uni.createAnimation 动画描述 实现一个以左上角为锚点,以Z轴做平面抬起及落下的动画效果 动画代码 template <image v-if"showHot(item.cname)&quo…

wayland(xdg_wm_base) + egl + opengles 使用 Assimp 加载带光照信息的材质文件Mtl 实现光照贴图的最简实例(十七)

文章目录 前言一、3d 立方体 model 属性相关文件1. cube1.obj2. cube1.Mtl3. 纹理图片 cordeBouee4.jpg二、实现光照贴图的效果1. 依赖库和头文件1.1 assimp1.2 stb_image.h2. egl_wayland_obj_cube1.cpp3. Matrix.h 和 Matrix.cpp4. xdg-shell-client-protocol.h 和 xdg-shell…

GitHub gpg体验

文档 实践 生成新 GPG 密钥 gpg --full-generate-key查看本地GPG列表 gpg --list-keys关联GPG公钥与Github账户 gpg --armor --export {key_id}GPG私钥对Git commit进行签名 git config --local user.signingkey {key_id} # git config --global user.signingkey {key_id} git…

ASPICE规范之系统追溯矩阵

系统追溯矩阵的需求来自 ISO26262 举例在描述系统追溯矩阵时&#xff1a;客户需求->系统需求&#xff1b;系统需求->客户需求&#xff1b;系统需求->软件需求&#xff1b;系统需求->硬件需求

(简单成功)Mac:命令设置别名

案例&#xff1a;给"ls -l"命令&#xff0c;设置别名通过”ll“快速访问 1、在项目根目录底下查看有无.bash_profile文件&#xff0c;注意这个是个隐藏文件&#xff0c;需要使用ls -a命令查看&#xff1a; 没有.bash_profile新建一个文件&#xff0c; 在最后添加一行…

.NET 异步编程(异步方法、异步委托、CancellationToken、WhenAll、yield)

文章目录 异步方法异步委托async方法缺点CancellationTokenWhenAllyield 异步方法 “异步方法”&#xff1a;用async关键字修饰的方法 异步方法的返回值一般是Task<T>&#xff0c;T是真正的返回值类型&#xff0c;Task<int>。惯例&#xff1a;异步方法名字以 Asy…

Java城管智慧执法管理系统源码带APP

目录 一、系统概述 二、系统开发环境 三、功能模块 四、应用价值 1、提升案件办理效率 2、提升监管效能 3、提升行政执法水平 4、推进行政执法创新 一、系统概述 智慧城管系统是一个基于现代信息技术手段的综合管理平台&#xff0c;旨在通过强化信息获取自动化、监督管…

UE5拷贝复制快捷键修改Ctrl+w

UE5默认修改了原来的Ctrl w的快捷键方式&#xff0c;改成Ctrl D 非常不习惯 其实可以在编辑器中进行修改快捷键的 位置在 Editor Preferences &#xff0c;搜索 Duplicate&#xff0c; 在其中的command selection中&#xff0c;修改 按键为Ctrl w 如图所示&#xff1b; …

js指定浏览器打开页面

文章目录 前言Js错误示例Node.js实现小结 前言 今天在过需求的时候&#xff0c;碰到一个问题&#xff0c;A系统要将B系统的页面嵌入进来并进行展示。但是A系统只支持google浏览器&#xff0c;而B系统里面有几个菜单是必须运行在IE浏览器中的&#xff0c;因此该怎么实现呢&…

MT6825编码器在STM32中的使用

文章目录 1、PWM 绝对值位置读取功能1.1 DataSheet说明1.2 硬件支持1.3 Cubemax配置及使用1.4 项目代码实现1.5 效果验证1.6 注意事项 2、SPI 绝对值位置读取功能2.2 硬件支持2.3 Cubemax配置及使用2.4 项目代码实现 1、PWM 绝对值位置读取功能 1.1 DataSheet说明 1.2 硬件支持…

计算机二级(Python)真题讲解每日一题:《方菱形》

描述‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬ 请写代码替换横线&#xff0…

uniapp 云开发省钱之调整函数执行内存大小

我这个5块钱一个月的服务空间配置&#xff1a; 现在还只有少量的用户和自己测试之用&#xff0c;目前消耗的情况&#xff1a; 云函数的使用量还是挺高的&#xff0c;目前还是正好能覆盖一个月的使用量&#xff0c;等用户量上来肯定是不行的&#xff0c;所以得想想办法压榨一下云…

2024年度最佳大型语言模型(LLMs)汇总

大型语言模型(LLMs)是人工智能文本处理的主要类型&#xff0c;也现在最流行的人工智能应用形态。ChatGPT是迄今为止最著名的使用LLM的工具&#xff0c;它由OpenAI的GPT模型的特别调整版本提供动力。但还有许多其他聊天机器人和文本生成器&#xff0c;包括从Google Bard和Anthro…

Basic RNN

文章目录 回顾RNNRNN CellRNNCell的使用RNN的使用 RNN例子使用RNN Cell实现使用RNN实现 嵌入层 Embedding独热向量的缺点Embedding LSTMGRU(门控循环单元)练习 回顾 DNN&#xff08;全连接&#xff09;&#xff1a;和CNN相比&#xff0c;拥有巨大的参数量&#xff0c;CNN权重共…

MySQL与金蝶云星空对接集成SELECT语句连通销售订单新增(销售订单集成测试)

MySQL与金蝶云星空对接集成SELECT语句连通销售订单新增(销售订单集成测试) ​​ ​​ 数据源系统:MySQL MySQL是一个关系型数据库管理系统&#xff0c;由瑞典MySQLAB公司开发&#xff0c;属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一&#xff0c;在WEB应用方…