【深度学习|基础算法】初识Transformer-encoder-decoder

关于transformer的学习

  • 一、前言
  • 二、初识Transformer
    • 2.1 总览
    • 2.2 encoder
    • 2.3 decoder
  • 三. 流程与细节
    • 1、输入
    • 2、self-attention

一、前言

  我本身是从事图像算法行业的,在之前主要是做传统的图像算法,后来接触了基于CNN的神经网络图像算法,包括图像分类,目标检测,图像分割等场景。对于Transformer的了解,我一直停留在其在NLP领域的优异表现,对于图像算法中的应用,知之甚少,因此对于基于该框架的模型,也是一直没有下定决心好好去学习。然而现在在视觉应用中,Transformer也同样大放异彩,逐步的刷新着人们对于智能的认知,尤其是在自动驾驶,机器人领域,大模型的普遍应用,也让我不得不来窥探一下这其中究竟有着怎么样的绝妙的算法设计,虽然道路是艰苦的,但是我想行,只要经过不断的坚持努力,没有啃不下来的硬骨头,Transformer同样也能成为我工作中的攻城利器!

二、初识Transformer

  在网上搜索之后,发现了一篇针对transformer讲解的非常好的一篇博客,是一位国外的大神写的全英文的博客,因此我的笔记内容会将参考他的文章来进行我个人的一个理解总结,由于本人英语水平有限,如果我的理解有什么不到位的地方,希望大家能在评论区帮我指出问题,我们一起探讨一起进步~~

2.1 总览

  我们首先将transformer模型视为一个黑匣子,在机器翻译任务场景下,它将接收一种语言的句子,并以另一种语言输出翻译的结果,如下图所示。
在这里插入图片描述
我们再打开transformer进入内部看一下,我们可以看到它是由一个encoders组件和一个decoders组件组成的,并且两者之间是存在联系的(耦合),如下图所示。
在这里插入图片描述
事实上,encoders组件是一个由多个单独的encoder堆栈组成的一个结构,他们是一个自下而上的顺序流结构,在作者的paper中使用了六个这样的encoder来进行堆叠,当然,6并没有特别的讲究之处,你也可以用不同数量的encoder来堆叠你的encoders组件。同样的,decoders组件用同样个数的decoder进行堆叠,如下图所示。
在这里插入图片描述

2.2 encoder

  每一个encoder在结构上都是相同的,但是他们不共享权重,各自拥有独立的权重,每一个都可以被拆分成两个子部分:self-attentionFeed Forward Neural Network(FFNN)
在这里插入图片描述
encoder的输入首先流过self-attention层,这个层的作用是帮助encoder关注于句子中的特定单词,我们将会在下面的部分详细的介绍自注意力层自注意力层的输出将会作为输入喂到FFNN中作为输入。

自注意力层的输出将会被喂到一个前馈神经网络中去。完全相同的前馈网络被独立的应用在每一个位置(即相同的前馈网络但是不相同的权重)。

2.3 decoder

decoder拥有完全相同的这些层(即self-attention层和FFPN层,仅结构上相同),但是在decoder中介于这两者之间还有一个注意力层来帮助decoder来关注输入句子的相关部分(与seq2seq模型的注意力类似)。
在这里插入图片描述

三. 流程与细节

  在上一节中,我们已经大概了解了transformer的总体架构,接下去我们将带入向量/张量并观察他们是如何在这些组成部分中流动并最终从输入得到我们的输出的。

1、输入

  与一般的NLP应用场景一样,我们先从使用词嵌入算法将每个输入单词转成一个个向量开始(这里以boxes的形式来代替词嵌入后的向量来展示我们的输入):
在这里插入图片描述
这里的每一个单词都被嵌入成了一个长度为512的向量。用4个boxes来表示这个向量。

这样的词嵌入仅仅会发生在最底层的encoder,对于所有的encoder而言,他们的输入都是一个将每一个单词都嵌入成512长度的向量的列表集合,但是不同的是,只有最底层的encoder接受的输入是通过词嵌入算法转化而来的,而其他层的encoder的输入都将是上一个encoder的输出。而这个列表的大小是一个我们可设置的超参数,即我们的训练数据集中最长句子的长度。

将每一个单词嵌入我们的输入序列中之后,每个单词都会分别流经encoder的两个层,得到encoder的输出吗,如下图所示:
在这里插入图片描述
这里,我们开始看到Transformer的一个重要的属性——每个位置上的单词都会有在encoder中拥有自己的流经路径。self-attention层中,这些路径存在互相依赖的关系。而FFNN中的路径并不存在这些依赖关系,因此,在流经FFNN的路径中可以并行处理。接下去我们将以一个更短的句子作为输入,来看看在encoder的内部到底发生了些什么。

正如我们前文所提及的,一个encoder将会接收一个向量组成的列表来作为输入。encoder将这个列表传入到self-attention中来处理其中的词向量,然后将这些词向量输入到FFNN中去,然后将每个输出r1,r2作为下一个encoder的输入:
在这里插入图片描述

2、self-attention

假设下面的句子是我们想要翻译的输入句子:
”The animal didn’t cross the street because it was too tired”
问题来了,句子中的it到底代表的是什么意思呢?它是指向street呢还是指向animal呢?这对于人类来说是一个很简单的问题,但是对于算法而言,这一点都不简单。

当模型处理单词it时,self-attention会将它与animal联系在一起。当模型处理每个单词时(句子中的每个位置),self-attention允许它在输入序列的其他位置寻找线索,这些线索可以帮助它更好地编码这个单词。如果你熟悉RNN,那么可以想想我们应该如何去探寻这个隐藏的联系,即将之前处理过的单词/向量的表示与当前正在处理的单词/向量的表示结合起来。self-attention是Transformer用来将对其他相关单词的“理解”转化为我们当前正在处理的单词的方法。
在这里插入图片描述
记得查看Tensor2Tensor笔记本,在那里面您可以加载Transformer模型,并使用这个可视化来查看。

让我们首先来看看它是如何使用self-attention来使用向量,然后进一步解释它是如何使用矩阵来进行计算的。

计算self-attention的第一步是根据encoder的每一个输入向量创建三个向量(在这个例子中,每一个输入向量是输入句子中的每一个被词嵌入的单词)。然后针对每一个单词,我们得到一个Query向量,一个key向量,一个value向量。这些向量是根据我们的输入的词嵌入向量乘以我们刚才创建的三个参数可训练的矩阵得到的。

注意到,这些新的向量在维度上是小于词嵌入的向量的,他们的维度是长度为64的向量,而词嵌入或者encoder输入/输出的向量长度是512。这些新的向量没有必要变得更小,这是一种为了让多头注意力的计算变得更加流畅的方式。

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

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

相关文章

[ritsec CTF 2024] 密码部分

这个比较密码这块还是比较简单的,经过问了N人以后终于完成。 [Warm Up] Words 给了个猪圈密码的图片,这东西好久不见的感觉。 [Warm Up] Emails MTP似乎也没多好的方法,猜更快,先给了几封email然后一个用MTP长度是32&#xff08…

【微服务】------常见模型的分析与比较

DDD 分层架构 整洁架构 整洁架构又名“洋葱架构”。为什么叫它洋葱架构?看看下面这张图你就明白了。整洁架构的层就像洋葱片一样,它体现了分层的设计思想。 整洁架构最主要的原则是依赖原则,它定义了各层的依赖关系,越往里依赖越…

HUD抬头显示器中如何设计LCD的阳光倒灌实验

关键词:阳光倒灌实验、HUD光照温升测试、LCD光照温升测试、太阳光模拟器 HUD(Head-Up Display,即抬头显示器)是一种将信息直接投影到驾驶员视线中的技术,通常用于飞机、汽车等驾驶舱内。HUD系统中的LCD(Liq…

51单片机之LED点阵屏

目录 1.LED点阵屏简介 2.配置LED点阵屏代码 1.LED点阵屏简介 LED点阵屏真的是遍布我们我们生活的每个角落,从街边的流动显示字的招牌到你的液晶显示屏,都是基于点阵屏的原理研究出来的。还有那个世界上最大的球状建筑物:MSG Sphere&#xff…

GridView控件的使用(一)

GridView控件通常用于在Windows窗体或Web应用程序中显示数据表格。它是一个强大的数据绑定控件,能够灵活地显示和编辑数据源中的数据。 在何种情况下应使用GridView进行绑定控件: 显示结构化数据:当您需要展示一系列具有相同字段的数据记录…

机器学习 —— 使用机器学习进行情感分析 详细介绍版

机器学习 —— 使用机器学习进行情感分析 详细介绍版 机器学习 —— 使用机器学习进行情感分析 演示版 目录 一、 绪论二、 数据处理1. 构建CSV文档2. 构建模型前的思考2.1. 问题2.2. 解决方法 3. 读取数据4. 用正则表达式来进行对特定符号的剔除5. 使用口袋模型进行文本处理和…

稀碎从零算法笔记Day44-LeetCode:整数转罗马数字

题型:贪心、模拟 链接: 12. 整数转罗马数字 - 力扣(LeetCode) 来源:LeetCode 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 …

【Springboot开发】后端代码基础框架

前言:主要介绍最基础的springboot开发架构 目录 1. overall2. 配置文件2.1 YAML2.2 properties2.3 配置文件加载顺序2.4 多配置文件 3. 代码包3.1 infrastructure3.1.1 persistence 3.2 application3.2.1 dto3.2.2 converter3.2.3 service 3.3 api3.3.1 vo3.3.2 req…

go websocket

WebSocket 是一种网络协议,建立在 HTTP 协议之上,允许双向通信。WebSocket 协议允许服务器发送数据到客户端,同时也可以让客户端向服务器发送数据。WebSocket 使用 HTTP 协议的升级请求和响应来建立连接。WebSocket 的主要优点在于它可以通过…

【JavaSE】接口 详解(下)

前言 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 前言 接口实例运用 代码举例理解 比较对象的年龄 比较对象的姓名 利用冒泡排序实现Array.sort 年龄比较器 姓名比较器 比较示例测试 clone接口 浅拷贝和深拷贝 浅…

代码随想录学习Day 26

332.重新安排行程 题目链接 from collections import defaultdictclass Solution:def findItinerary(self, tickets):targets defaultdict(list) # 创建默认字典,用于存储机场映射关系for ticket in tickets:targets[ticket[0]].append(ticket[1]) # 将机票输入…

GlusterFS分布式存储

目录 前言 一、GlusterFS分布式存储概述 1、GFS概念 2、GFS特点 3、GFS术语 4、GFS构成 5、GFS工作流程 6、后端存储如何定位文件 7、GlusterFs的卷类型 7.1 Distributed Volume(分布式卷) 7.2 Striped Volume(条带卷&#xff09…

【JavaEE初阶系列】——网络初识—TCP/IP五层网络模型

目录 🚩网络的发展史 🎈局域网LAN 🎈广域网WAN 🚩网络通信基础 🎈IP地址 🎈端口号 🎈协议类型 🎈五元组 🚩协议分层 🎈什么是协议分层 &#x…

Web前端-Ajax

Ajax 概念:Asynchronous JavaScript And XML,异步的JavaScript和XML。 作用: 1.数据交换:通过Ajax可以给服务器发送请求,并获取服务器响应的数据。 2.异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如:搜索联想、用户名是否可用的校验等等…

TryHackMe - HTTP Request Smuggling

学完、打完后的复习 HTTP 1 这部分比较简单,直接略过 HTTP2请求走私 首先要了解HTTP2的结构,与HTTP1之间的一些差异 HTTP2中不再使用CRLF来作为字段的边界限定,而是在二进制中直接通过长度、名字、值长度、值,来确认边界 而这…

Leetcode算法训练日记 | day21

一、二叉搜索树的最小绝对差 1.题目 Leetcode:第 530 题 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数,其数值等于两值之差的绝对值。 示例 1: 输入:root [4,2,…

不到6毛钱的I2C总线实时时钟日历芯片LK8563

前言 8563实时时钟芯片,国内外均有多家生产,今推荐一个性价比极高的RTC芯片,LK8563,一片不到6毛钱. 特点 基于32.768kHz晶体的秒,分,小时,星期,天,月和年的计时 带有世…

Redis系列之基于Linux单机安装

Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。最近学习需要用到Redis,所以就去Linux服务器上部署一个,做下记录,方便…

web安全学习笔记【22】——文件上传(1)

WEB攻防-PHP应用&文件上传&函数缺陷&条件竞争&二次渲染&黑白名单&JS绕过 演示案例: PHP-原生态-文件上传-前后端验证PHP-原生态-文件上传-类型文件头验证PHP-原生态-文件上传-后缀黑白名单验证PHP-原生态-文件上传-解析配置&二次渲染…

JUC 线程及创建线程

最近想再系统地复习一遍并发,随便再把以前整理的笔记整理为博客。 概念 了解线程前先要了解一下进程,进程是程序的一次执行过程,是系统运行的基本单位,其可以拥有资源,一个进程在执行期间会执行一系列的命令。 什么…