【Transformer】深入理解Transformer模型1——初步认识了解

前言

Transformer模型出自论文:《Attention is All You Need》 2017年

近年来,在自然语言处理领域和图像处理领域,Transformer模型都受到了极为广泛的关注,很多模型中都用到了Transformer或者是Transformer模型的变体,而且对于很多任务,使用加了Transformer的模型可以获得更好的效果,这也证明了Transformer模型的有效性。

由于Transformer模型内容较多,想要深入理解该模型并不容易,所以我分了大概4篇博客来介绍Transformer模型,第一篇(也就是本篇博客)主要介绍Transformer模型的整体架构,对模型有一个初步的认识和了解;第二篇是看了b站李宏毅老师的Transformer模型讲解之后,做的知识总结(内容比较多,会分成两篇博客);第三篇从代码的角度来理解Transformer模型。

目前我只完成了前两篇论文,地址如下,之后完成第三篇会进行更新。

第一篇:【Transformer】深入理解Transformer模型1——初步认识了解

第二篇:【Transformer】深入理解Transformer模型2——深入认识理解(上)-CSDN博客

第三篇:【Transformer】深入理解Transformer模型2——深入认识理解(下)-CSDN博客

第四篇:


初步认识

        之前的RNN模型记忆长度有限且无法并行化,只有计算完ti时刻后的数据才能计算ti+1时刻的数据,但Transformer都可以做到。

        本文提出了一个完全基于注意力机制的网络结构transformer来处理序列相关问题,跟以往不同,没有用到CNN和RNN的结构,将encoder-decoder中的循环层替换成了multi-head attention机制,且能够实现并行化操作提高模型效率,同时能够捕捉序列中各个位置之间的相对关系,进而更好地对序列进行建模。

        具体来说,自注意力机制允许模型同时计算输入序列中所有位置之间的关系权重,进而加权得到每个位置的特征表示。在Transformer模型中,子注意力机制被运用在了Encoder和Decoder两个部分中,分别用于编码输入序列和生成输出序列。

注意:transformer的并行化主要体现在self-attention模块上,在encoder端其可以并行处理整个序列,而不像RNN、LSTM那样要一个token一个token的从前往后计算。

        此外,本文还提出了一种新的训练方法,称为“无序列信息的训练(Training without sequence information)”,其基本思想是将输入序列中的每个位置看作独立的词向量,而不考虑它们在序列中的位置信息。通过这种方式,可以避免序列中的位置信息对模型训练的影响,提高模型的泛化性能。

具体结构介绍:

Encoder:

        Encoder的作用是将输入序列编码成一个高维向量表示,该向量表示将被输入到Decoder中用于生成输出序列。Encoder包括多个Encoder层,每个Encoder层由两个子层组成:多头自注意力机制和前馈网络。

(1)多头自注意力机制:

        多头自注意力机制(multi-head self-attention)是transformer模型的核心部分,其作用是从输入序列中学习并计算每个位置与其他位置(包括自身)之间的相关度。具体来说,多头自注意力机制将输入序列中的每个位置看作一个向量,然后对这些向量进行相似度计算,得到每个位置与其它位置(包括自身)之间的相关度。

        多头自注意力机制将输入序列分别映射成多个维度相同的向量,然后分别应用自注意力机制,得到多个输出向量,最后将这些输出向量拼接起来,得到最终的向量表示。这种分头处理的方法可以使模型更好地捕捉不同方面的特征,从而提高模型的表现。

(2)前馈网络:

        前馈网络(feedforward network)是Encoder层的另一个子层,其作用是对多头自注意力机制的输出向量进行非线性变换。前馈网络由两个线性变换和一个激活函数组成,其中线性变换将输入向量映射到一个高维空间,激活函数将这个高维向量进行非线性变换,最后再将其映射回原始维度。

Decoder:

        Decoder的作用是生成输出序列,它包括多个Decoder层,每个Decoder层由三个子层组成:多头自注意力机制、多头注意力机制和前馈网络。

(1)多头自注意力机制:

        多头自注意力机制在Decoder中的作用与Encoder中类似,不同的是,它只关注当前时刻之前的位置。这种机制可以帮助模型更好地捕捉输入序列中的信息,并在生成输出序列时保留这些信息。

        masked的作用就像是在进行解码的时候遮住了后面顺序的向量,只考虑前面已经出现的特征(因为解码的时候是一个一个输出的,在解前面特征的时候没有办法把后i按未解码的部分考虑进来,这和Encoder不一样)。

(2)多头注意力机制:

        多头注意力机制(multi-head attention)是Decoder中的另一个子层,其作用是计算当前时刻的输入与输入序列之间的关系,并根据这些关系计算出当前时刻的上下文向量表示

        多头注意力机制将输入序列的向量表示与当前时刻的输入向量表示进行相似度计算,得到每个位置(输入序列中的)与当前时刻输入的相关度。然后,根据这些相关度计算当前时刻的上下文向量表示,用于生成输出序列。与多头自注意力机制类似,多头注意力机制也采用了分头处理的方式,从而更好地捕捉不同方面的特征

(3)前馈网络:

        前馈网络在Decoder中的作用与Encoder中类似,其作用是对多头自注意力机制和多头注意力机制的输出向量进行非线性变换。前馈网络同样由两个线性变换和一个激活函数组成,其中线性变换将输入向量映射到一个高维空间,激活函数将这个高维向量进行非线性变换,最后再将其映射回原始维度。

(4)损失函数:

        Transformer模型使用了交叉熵损失函数(cross-entropy loss)作为优化目标,其目标是最小化模型生成的序列与目标序列之间的差异。具体来说,对于给定的输入序列和目标序列,Transformer模型通过最大化目标序列中每个位置的条件概率来生成输出序列

总结:

        Transformer模型通过引入自注意力机制和多头注意力机制来替代传统的RNN和CNN,从而提高了模型的表现。同时,Transformer模型还采用了分头处理和残差连接等技术,进一步提高了模型的效率和表现。该模型在机器翻译等任务中取得了极高的性能,成为自然语言处理领域的经典模型之一。

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

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

相关文章

OSPF的DR与BDR-新版(16)

目录 整体拓扑 操作步骤 1.基本配置 1.1 配置R1的IP 1.2 配置R2的IP 1.3 配置R3的IP 1.4 配置R4的IP 1.5 检测R1与R4连通性 1.6 检测R1与R2连通性 1.7 检测R1与R3连通性 2.搭建基本的OSPF网络 2.1 配置R1 OSPF 2.2 配置R2 OSPF 2.3 配置R3 OSPF 2.4 配置R4 OSPF…

前端八股文(工程化篇)

目录 1.常用的git命令有哪些? 2.git rebase和git merge的区别 3.有哪些常见的Loader和Plugin? 4.webpack的构建流程 5.bundle,chunk,module是什么? 6.如何提高webpack的打包速度 7.vite比webpack快在哪里 8.说一下你对Monorepo的理解 …

C语言函数篇——strcat()函数

strcat()函数介绍: strcat()函数是C语言中用于连接两个字符串的函数。它将第二个字符串连接到第一个字符串的末尾,并返回第一个字符串的地址。 strcat()函数的语法: char *strcat(char *dest, const char *src); 其中,dest是目标…

数字图像处理——亚像素边缘的轮廓提取

像素 像素是图像处理中的基本单位,一个像素是图像中最小的离散化单位,具有特定的位置和颜色信息。在数字图像中,每个像素都有一个特定的坐标,通常以行和列的形式表示。每个像素的颜色信息可以通过不同的表示方式,如灰…

大数据- Hadoop入门

目录 🐶2.1 hadoop的简介 1. 概述 2. 什么是分布式? 3. Hadoop的指代 🐶2.2 hadoop的发展历程 🐶2.3 hadoop的版本介绍 🐶2.4 hadoop的常用端口号 🐶2.5 hadoop的设计目的 🐶2.6 hadoo…

使用vmware,在ubuntu18.04中使用笔记本的摄像头

步骤1:在windows中检查相机状态 win10系统中,在左下的搜索栏,搜索“相机”,点击进入即可打开相机,并正常显示图像。 注意:如果相机连接到了虚拟机,则不能显示正常。 步骤2:在ubuntu…

轻松调整视频时长,创意与技术的新篇章

传统的视频剪辑工具往往难以精确控制时间,而【媒体梦工厂】凭借其先进的算法和界面设计,让视频时长的调整变得简单而精确,助你释放无限的创意,用技术为你的创意插上翅膀,让每一秒都有意义。 所需工具: 一…

【Matlab】BP 神经网络时序预测算法

资源下载: https://download.csdn.net/download/vvoennvv/88681507 一,概述 BP 神经网络是一种常见的人工神经网络,也是一种有监督学习的神经网络。其全称为“Back Propagation”,即反向传播算法。BP 神经网络主要由输入层、隐藏层…

1、aigc图像相关

aigc图像相关 一、Diffusion webui 在autodl上部署一些问题二、lora和kohyass(1)角色模型(2)风格模型(3)dreambooth(4)模型合并(5)Lora加Adetail其他 三、sd …

数模混合SoC芯片中LEF2Milkyway的golden flow

在数模混合芯片中的项目中,特别是数字模块很少甚至只有一个简单的数字控制逻辑时,我们要做数字模块的后端实现时,通常模拟那边会问我们实现需要他们提供哪些数据。 通常来说,我们可以让模拟设计提供数字模块的GDS或LEF文件即可。…

【LeetCode每日一题】1185.一周中的第几天(模拟+调用库函数:三种方法)

2023-12-30 文章目录 一周中的第几天方法一:模拟思路步骤 方法二:调用库函数方法三:调用库函数 一周中的第几天 ​ 提示:给出的日期一定是在 1971 到 2100 年之间的有效日期。 方法一:模拟 思路 1.可以根据1970年的…

WPF+Halcon 培训项目实战(11):HS组件封装

文章目录 前言相关链接项目专栏运行环境匹配图片封装组件新增类库项目选择依赖顺序并添加Nuget修改原本矩形方法运行结果: 对矩形进行抽象封装抽象基类矩形抽象改造 圆形抽象封装代码运行结果 前言 为了更好地去学习WPFHalcon,我决定去报个班学一下。原…

2023 搞懂git 工作目录---暂存区---本地仓库---版本库

最近了解了下git的底层原理(大神录制的视频放在最下方),记录下: 工作区 就是存放待提交文件的目录(下图图解标注)比如pyhon_test目录暂存区 .git目录下的index文件 对应的指令 git add本地仓库 .gi…

数据库的学习笔记——第一篇

SQL通用语法 SQL语句 DDL 数据定义 数据库、表字段 DML 数据操作 增删改 DQL 数据查询 查询表中记录 DCL 数据控制 创建用户、控制用户权限 DLL语句——数据库操作 SHOW DATABASES; # 查询数据库SELECT DATABASE(); # 查询当前数据库CREATE DATABASE [IF …

链表的一些典型问题

求链表的中间节点/倒数第K个节点 等类似的随机访问,可以考虑用快慢指针 例 求链表的中间节点 可以定义两个指针,一个一次走两步一个一次走一步,当走的快的走到NULL时,走的慢的就是链表的中间节点。(此法求出的偶数个…

uni-app uni-app内置组件

锋哥原创的uni-app视频教程: 2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中...共计23条视频,包括:第1讲 uni…

Oracle OCP怎么样线上考试呢

大家好!今天咱们就来聊聊Oracle OCP这个让人又爱又恨的认证。为啥说又爱又恨呢?因为它既是IT界的“金字招牌”,又是一块硬骨头,不是那么容易啃下来的。好了,废话不多说,我们直奔主题,来看看关于…

Android Studio下载gradle失败

1、打开Android Studio设置Gradle的地方,点击左上角的File->Settings查看gradle存放路径 C:\Users\Administrator.gradle\wrapper\dists\gradle-5.4.1-all\3221gyojl5jsh0helicew7rwx 2、找到正在下载的gradle版本,Android Studio取消下载gradle&…

Spark编程实验四:Spark Streaming编程

目录 一、目的与要求 二、实验内容 三、实验步骤 1、利用Spark Streaming对三种类型的基本数据源的数据进行处理 2、利用Spark Streaming对Kafka高级数据源的数据进行处理 3、完成DStream的两种有状态转换操作 4、把DStream的数据输出保存到文本文件或MySQL数据库中 四…

利用 IntelliJ IDEA 整合 GitHub 实现项目版本控制与协作管理

目录 前言1 设置GitHub登录账号2 将项目分享到GitHub3 IntelliJ IDEA 中导入Github项目4 往GitHub推送代码4.1 Commit Change(提交到本地库)4.2 Git -> Repository -> Push(推送到远程库) 5 拉取远程库代码到本地6 克隆远程…