TR3 - Transformer算法详解


目录

  • 文本输入处理
    • 词向量
    • 位置向量
  • 编码器 Encoder
    • Self-Attention
    • 多头注意力机制
    • 残差连接
  • 解码器 Decoder
  • 线性层与Softmax
  • 损失函数
  • 总结与心得体会


这周来看一下Transformer是怎么将文本转换成向量,然后又输入到模型处理并得到最终的输出的。

文本输入处理

词向量

和常见的NLP任务一样,我们会先使用词嵌入(Embedding)算法,将文本序列转换成词向量。实际应用中的向量维数很高,不方便演示,以4维的词向量为例。
于是当我们输入的文本中有3个词时,就会生成三个维度为4的向量。
而在实际的应用过程中,我们会同时给模型输入多个句子,如果每个句子的长度不一样,模型就没有办法批量处理了,所以这里会有一个pad操作,选择一个合适的最大长度,达不到的用0填充,超出的进行截断。
最大序列长度是一个超参数,通常希望越大越好,但是更长的序列会占用更大的显存,所以还是要权衡。

位置向量

输入序列中的每个单词被转换成词向量后,还需要加上位置向量才能得到该词的最终向量表示。
Transformer对每个输入的词向量都加上了位置向量。这些向量有助于确定每个单词的位置特征、句子中不同单词之间的距离特征。
位置嵌入
假设词向量和位置向量的维度是4,下图展示了一种可能 的位置向量+词向量。
位置向量

编码器 Encoder

编码器的输入是经过上一步的文本输入处理后的向量,这个向量将从编码器的第一层开始,第一层编码器输出的同样是一样向量序列,然后以此类推再送入下一层编码器。如图所示,在第一层中,向量先进入Self-Attention块,然后进入FFN神经网络,最后得到当前层的新向量作为输出。

解码器整体结构

Self-Attention

自注意力机制就是使用向量与自己进行注意力计算,通过一个nxn的矩阵来进行,得到每个词向量对句中所有词向量的注意力分数,然后将注意力分数应用到原向量中,得到注意力模块的输出

多头注意力机制

通过多次并行的计算,得到一组向量的结果,然后再合并,可以得到表示能力更强的向量。
多头注意力机制在两个方面增强了Attention层的能力:

  • 扩展了模型关注不同位置的能力。
  • 多头注意力机制赋予Attention层多个“子表示空间”。

残差连接

模型计算得到self-attention输出后,单层的encoder后续还有两个重要的操作:残差连接和标准化。
编码器的每个子层(一个完整的Self-Attention+FFN)都有一个残差连接和层标准化(LayerNormalization),如图。
残差连接,层标准化
更细粒度的图如下:
细粒度的残差和层标准化
这一特性不仅在编码器中应用,也被应用到了解码器中。

简单的2层编码器、解码器

解码器 Decoder

和一般的模型不同的是,解码器的输入也是一个序列文本,和编码器一样。
而编码器的输出会输入到编码器的Encoder-Decoder-Attention层中,与解码器输入的向量进行计算。
编码器与解码器的连接
解码阶段的每一个时间步都输出一个翻译后的单词,然后这个单词又输入到下一个时间步的解码器,重复这个过程,直到输出一个结束符。
输出迭代过程

线性层与Softmax

解码器的最终输出结果是一个向量,其中的每个元素都是浮点数。和基本的分类模型一样,通过线性层和Softmax层可以将向量转换为单词对应的概率(类似于不同的分类)。
线性层就是一个普通的全连接网络,它把解码器输出的向量,映射成一个更大的向量,这个向量被称为logits向量。假设我们的模型有10000个单词(词汇表的容量),此logits向量便要有10000维,每一个数表示一个单词的分数。
然后通过Softmax层把这些数字转换为概率(就是转换为全是正数,并且相加为1),这时我们就可以选择概率最高的那个数字对应的单词,作为本轮的输出单词。
线性层与softmax

损失函数

Transformer训练的时候,需要将解码器的输出和label一同送入损失函数,以获得Loss。通过前面的分析我们可以得知,损失函数只需要和分类网络一样使用交叉熵即可。通过损失函数的反向传播,修正模型的参数,最终得到目标模型。

总结与心得体会

本周在理论上学习了Transformer模型的结构、组成、训练过程。让我印象最深刻的就是Seq2Seq模型不仅有一个输入头,它的编码器是和CV模型共通的,但是编码器也有输入,并且先每个时间步只输出一个单词,这点和RNN一样并没有什么变化 。这也制约了NLP任务的训练和推理。另外我没想到它的损失函数竟然和最基础的分类网络一样,用简单的交叉熵损失就可以。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机内存是如何管理的

计算内存的那些事儿——内存管理 大家回忆一下,计算机结构,或者说一个SoC(system-on-chip)芯片的结构。 cpu、memory、peripherals,这是计算机的主要部件,三者之间通过system bus勾搭在一起。 The main co…

易支付和独角数卡对接TokenPay开通USDT收款教程

TRX、USDT-TRC20、ETH系列区块链代币的支付通道是很多发卡和电商平台需要的,因为传统的微信、支付宝、PayPal等支付接口审查严格、手续费高。自建的代币接口完成没有手续费,稳定可靠,也没有审查要求。 易支付在行业普及广泛,大部…

JVM(Java虚拟机)

文章目录 一、JVM简介1.1 JVM概念1.2 什么是Java虚拟机呢?Java虚拟机的好处是什么呢? 二、JVM整体组成部分三、类加载器3.1 类加载子系统3.2 类加载过程3.2.1 装载(Load)3.2.2 链接(Link)3.2.3 初始化(Initialize) 四、运行时数据区4.1 方法区&#xff0…

stack 与 queue 与 priority_queue 与 仿函数 与 模板进阶

目录 stack queue deque priority_queue 使用 模拟实现 仿函数 仿函数的用法 仿函数的意义 模板进阶 非类型模板参数 模板特化 类模板特化的用法 类模板特化的意义 函数模板特化的用法 模板的分离编译 模板分离编译报错的原因 ​解决方法 模板总结 栈、队列…

Git安装教程(图文安装)

Git Bash是git(版本管理器)中提供的一个命令行工具,外观类似于Windows系统内置的cmd命令行工具。 可以将Git Bash看作是一个终端模拟器,它提供了类似于Linux和Unix系统下Bash Shell环境的功能。通过Git Bash,用户可以在Windows系统中运行基于…

【数据处理包Pandas】DataFrame对象的合并

目录 前言一、回顾Numpy数组的合并二、concat方法合并DataFrame对象三、append方法的使用四、merge方法合并DataFrame对象(一)比较merge与concat(二)参数on、left_on和right_on的用法(三)合并时四种不同的连…

c# wpf template ItemsPanel 简单试验

1.概要 2.代码 <Window x:Class"WpfApp2.Window9"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expression/blend/…

软件测试(Junit5 单元测试框架)(五)

1. Junit单元测试框架 Junit 是 Java 的一个单元测试框架, 使用Selenium写自动化测试用例, 使用Junit 管理写好的测试用例. 2. 注解&#xff1a; Test 表示当前的这个方法是一个测试用例. 示例: 添加依赖 <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-…

[译] 教你如何用 Flutter 的 GestureDetector 构建自定义滑块

这个控件非常简单&#xff0c;我们接收完成的百分比值&#xff0c;以及正面和背面部分的颜色。主 Container 将背面颜色作为背景&#xff0c;我们将绘制正面部分去覆盖它。它的子节点是 Row&#xff0c;虽然它只包含一个子节点&#xff0c;但我保留了它&#xff0c;方便你添加另…

impala使用round函数保留小数失效

问题描述如标题所示 1.理论情况: round()函数,是用来做四舍五入的,比如:select round(2.126,2) 结果为:2.132.异常情况: 但是有时候会出现一些意料之外的情况,比如:select round(1/3,3) 结果为:0.33300000000000002正确的应该是:0.333截图效果示例如下: 3.解决办…

51之LCD1602与模块化编程

LCD1602&#xff0c;即我们开发板上附赠的那个液晶显示屏&#xff0c;我们通常可以使用这个液晶显示屏用来做调试工具&#xff0c;我们使用一下江科大提供的关于这个LCD1602的代码&#xff0c;用来为我们提供了类似C语言标准库里面的printf函数的用法&#xff0c;只是这个更加复…

非关系型数据库-----------探索 Redis高可用 、持久化、性能管理

目录 一、Redis 高可用 1.1什么是高可用 1.2Redis的高可用技术 二、 Redis 持久化 2.1持久化的功能 2.2Redis 提供两种方式进行持久化 三、Redis 持久化之----------RDB 3.1触发条件 3.1.1手动触发 3.1.2自动触发 3.1.3其他自动触发机制 3.2执行流程 3.3启动时加载…

AssetBundle在移动设备上丢失

1&#xff09;AssetBundle在移动设备上丢失 2&#xff09;Unity云渲染插件RenderStreaming&#xff0c;如何实现多用户分别有独立的操作 3&#xff09;如何在圆柱体类型的地图中编程玩家的输入 4&#xff09;Mixamo动画的根运动问题 这是第380篇UWA技术知识分享的推送&#xff…

如何处理ubuntu22.04LTS安装过程中出现“Daemons using outdated libraries”提示

Ubuntu 22.04 LTS 中使用命令行升级软件或安装任何新软件时&#xff0c;您可能收到“Daemons using outdated libraries”&#xff0c;“Which services should be restarted?”的提示&#xff0c;提示下面列出备选的重启服务&#xff0c;如下。 使用以下命令&#xff0c;能够…

盒子模型和伪元素

一.盒子模型的理解 我们平常在布局的时候,少不了盒子模型,今天讲解一下对盒子模型的理解。 理解:我们可以把盒子模型比作一个装着快递的包裹:里面的东西可以比作是内容,盒子里面的填充物可以比作是padding 外层的包装纸线条,可以比作是border&#xff0c;这个快递离另外个快递…

PS从入门到精通视频各类教程整理全集,包含素材、作业等(9)复发

PS从入门到精通视频各类教程整理全集&#xff0c;包含素材、作业等 最新PS以及插件合集&#xff0c;可在我以往文章中找到 由于阿里云盘有分享次受限制和文件大小限制&#xff0c;今天先分享到这里&#xff0c;后续持续更新 第一课 ——第三课素材文件 https://www.alipan.c…

20230405让WIN11暂停更新365天(暂停更新35天)

20230405让WIN11暂停更新365天&#xff08;暂停更新35天&#xff09; 2024/4/5 20:34 缘起&#xff0c;备用的笔记本电脑只要一开机&#xff0c;就会被比尔盖茨/微软提醒去更新/升级&#xff01; 不胜其烦&#xff01; 虽然可以在设置里设置暂停更新35天。但是也是不胜其扰&…

蓝桥杯杯赛之深度优先搜索优化《1.分成互质组》 《 2.小猫爬山》【dfs】【深度搜索剪枝优化】【搜索顺序】

文章目录 思想例题1. 分成互质组题目链接题目描述【解法一】【解法二】 2. 小猫爬山题目链接题目描述输入样例&#xff1a;输出样例&#xff1a;【思路】【WA代码】【AC代码】 思想 本质为两种搜索顺序&#xff1a; 枚举当前元素可以放入哪一组枚举每一组可以放入哪些元素 操…

解决windows下Qt Creator显示界面过大的问题

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 问题描述 解决方法 1、右击此电脑--->属性 2、点击高级系统设置--->点击环境变量 3、 找到系…

YOLOv3

YOLOv3 论文简介论文内容1. 采用darknet53FPN结构2. 边框预测保持与YOLOv2保持一致3. 沿用YOLOv2 kmeans生成先验anchors4.类别预测改为多分类格式 论文简介 论文&#xff1a;《YOLOv3: An Incremental Improvement》 作者&#xff1a;Joseph Redmon, Ali Farhadi 论文下载地址…