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任务的训练和推理。另外我没想到它的损失函数竟然和最基础的分类网络一样,用简单的交叉熵损失就可以。

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

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

相关文章

【opencv】教程代码 —ml (主成分分析、支持向量机、非线性支持向量机)

1. introduction_to_pca.cpp 主成分分析 /*** file introduction_to_pca.cpp* brief 这个程序演示了如何使用OpenCV PCA 提取物体的方向* author OpenCV团队*/// 包含OpenCV函数库所需要的头文件 #include "opencv2/core.hpp" #include "opencv2/imgproc.hpp&q…

[VulnHub靶机渗透] pWnOS 2.0

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收…

LeetCode刷题实战1:两数之和

从今天开始加入刷题大军,把算法题刷爆,我们直接进入主题。 题目内容 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应…

160 Linux C++ 通讯架构实战14,epoll 反应堆模型

到这里,我们需要整理一下之前学习的epoll模型,并根据之前的epoll模型,提出弊端,进而整理epoll反应堆模型,进一步深刻理解,这是因为epoll实在是太重要了。 复习之前的epoll的整体流程以及思路。 参考之前写…

CSS - 你实现过0.5px的线吗

难度级别:中级及以上 提问概率:75% 我们知道在网页显示或是网页打印中,像素已经是最小单位了,但在很多时候,即便是最小的1像素,精度却不足以呈现所需的线条精度和细节。因此,为了在网页显示和网页打印中呈现更加细致的线条,为了在视觉…

Prometheus+grafana环境搭建Nginx(docker+二进制两种方式安装)(六)

由于所有组件写一篇幅过长,所以每个组件分一篇方便查看,前五篇链接如下 Prometheusgrafana环境搭建方法及流程两种方式(docker和源码包)(一)-CSDN博客 Prometheusgrafana环境搭建rabbitmq(docker二进制两种方式安装)(二)-CSDN博客 Prometheusgrafana环…

自动驾驶涉及相关的技术

当科幻走进现实,当影视照进生活,无数次憧憬的自动驾驶,正在慢慢的梦想成真。小时候天马星空的想象,现在正悄无声息的改变着我们的生活。随着汽车电动化进程的加快,自动驾驶技术映入眼帘,很多人可能感觉遥不…

Jupyter Notebook安装使用(一)

1. 简介 Jupyter Notebook 是一个非常强大的工具,它允许用户创建和共享包含实时代码、方程式、可视化和叙事文本的文档。这种工具特别适合数据清理和转换、数值模拟、统计建模、数据可视化、机器学习等多种应用领域。 2. 安装Jupyter Notebook 2.1. 使用 Anaconda…

Gson的用法

1. 导入依赖 <dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.6</version> </dependency> 2. 使用Gson进行解析 2.1 Gson解析普通对象 package com.jiang.partnetbackend.…

利用Idea实现Ajax登录(maven工程)

一、新建一个maven工程&#xff08;不会建的小伙伴可以参考Idea引入maven工程依赖(保姆级)-CSDN博客&#xff09;&#xff0c;工程目录如图 ​​​​​​​ js文件可以上up网盘提取 链接&#xff1a;https://pan.baidu.com/s/1yOFtiZBWGJY64fa2tM9CYg?pwd5555 提取码&…

Chatgpt掘金之旅—有爱AI商业实战篇|专业博客|(六)

演示站点&#xff1a; https://ai.uaai.cn 对话模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI 一、AI技术创业博客领域有哪些机会&#xff1f; 人工智能&#xff08;AI&#xff09;技术作为当今科技创新的前沿领域&#xff0c;为创业者提供了广阔的机会和挑战。随着AI技…

ABBYY FineReader15免费电脑OCR图片文字识别软件

产品介绍&#xff1a;ABBYY FineReader 15 OCR图片文字识别软件 ABBYY FineReader 15是一款光学字符识别&#xff08;OCR&#xff09;软件&#xff0c;专门设计用于将扫描的文档、图像和照片中的文本转换成可编辑和可搜索的格式。这款软件利用先进的OCR技术&#xff0c;能够识别…

递归算法解读

递归&#xff08;Recursion&#xff09;是计算机科学中的一个重要概念&#xff0c;它指的是一个函数&#xff08;或过程&#xff09;在其定义中直接或间接地调用自身。递归函数通过把问题分解为更小的相似子问题来解决原问题&#xff0c;这些更小的子问题也使用相同的解决方案&…

微信小程序短链接工具推荐

现在微信小程序大行其道&#xff0c;但工作中大部分人选择了短链接的方式来推广微信小程序&#xff0c;那么微信小程序短链接工具哪个好?今天就分享一篇从网上看到的关于《微信小程序短链接工具推荐》文&#xff0c;作者是souki&#xff0c;一起来看看吧! 一、缩链 1、生成方…

Memcached 教程之 PHP 连接 Memcached 服务(十)

PHP 连接 Memcached 服务 在前面章节中我们已经介绍了如何安装 Memcached 服务&#xff0c;接下来我们为大家介绍 PHP 如何使用 Memcached 服务。 PHP Memcache 扩展安装 PHP Memcache 扩展包下载地址&#xff1a;PECL :: Package :: memcache&#xff0c;你可以下载最新稳定…

【VASP学习】在Ubuntu系统安装vasp.5.4.4的全过程(包括VASP官方学习资料、安装过程中相关编辑器的配置、VASP的编译及VASP的测试)

在Ubuntu系统安装vasp.5.4.4的全过程 VASP的简介与相关学习资料安装前的准备工作及说明安装过程intel编译器的安装VASP的编译VASP的测试 参考来源 VASP的简介与相关学习资料 VASP(Vienna Ab initio Simulation Package)是基于第一性原理对原子尺度的材料进行模拟计算的软件。比…

【Linux】线程概念及线程互斥

目录 线程概念 线程优点 线程缺点 线程异常 线程系统编程接口 线程创建及终止 线程等待 使用线程系统接口封装一个小型的C线程库并实现一个抢票逻辑 线程互斥 互斥量的接口 线程互斥实现原理 使用系统加锁接口封装LockGuard 实现自动化加锁 线程安全和可重入函数 …

HTML1:html基础

HTML 冯诺依曼体系结构 运算器 控制器 存储器 输入设备 输出设备 c/s(client客户端) 客户端架构软件 需要安装,更新麻烦,不跨平台 b/s(browser浏览器) 网页架构软件 无需安装,无需更新,可跨平台 浏览器 浏览器内核: 处理浏览器得到的各种资源 网页: 结构 HTML(超…

【Rust】生命周期

Rust 生命周期机制是与所有权机制同等重要的资源管理机制。 之所以引入这个概念主要是应对复杂类型系统中资源管理的问题。 引用是对待复杂类型时必不可少的机制&#xff0c;毕竟复杂类型的数据不能被处理器轻易地复制和计算。 但引用往往导致极其复杂的资源管理问题&#x…

Elasticsearch:我们如何演化处理二进制文档格式

作者&#xff1a;来自 Elastic Sean Story 从二进制文件中提取内容是一个常见的用例。一些 PDF 文件可能非常庞大 — 考虑到几 GB 甚至更多。Elastic 在处理此类文档方面已经取得了长足的进步&#xff0c;今天&#xff0c;我们很高兴地介绍我们的新工具 —— 数据提取服务&…