Transformer总结(二):架构介绍(从seq2seq谈到Transformer架构)

news2024/11/24 8:48:34

文章目录

  • 一、seq2seq应用介绍
  • 二、编码器解码器架构
    • 2.1 流程介绍
    • 2.2 原理说明
  • 三、Transformer整体结构和处理流程
    • 3.1 Attention机制在seq2seq中的引入
    • 3.2 比较RNN与自注意力
    • 3.3 Transformer架构介绍
    • 3.4 处理流程
      • 3.4.1 编码器中处理流程
      • 3.4.2 解码器在训练阶段和预测阶段的差异(重要)
      • 3.4.3 预测阶段解码器中处理流程


在Transformer总结(一)中介绍了基础的注意力机制,接下来将结合具体的任务场景,介绍Transformer的整体架构,并简单探讨一下相应原理。其中涉及到的组件将在Transformer总结(三)中详细说明。

一、seq2seq应用介绍

Seq2Seq(Sequence to Sequence)模型,主要用于处理序列到序列的映射问题,常见的应用场景如下:

  • 机器翻译:将一种语言的序列映射为另一种语言的序列。
  • 文本摘要:将长文本压缩为简洁的摘要。
  • 语音识别:将语音信号转换为文本序列。
  • 对话系统:根据用户的输入生成响应。(可以通用处理很多场景)

二、编码器解码器架构

2.1 流程介绍

Encoder-Decoder是一个更为通用的框架,而Seq2Seq是这个框架下的一种特定实现,专门用于处理序列转换问题。Seq2Seq模型依赖于Encoder-Decoder架构,但具体实现时会有所不同。

一般的Encoder-Decoder架构如下:
在这里插入图片描述
编码器(Encoder)的作用:

  • 信息压缩:将输入序列(如句子、音频等)转换为固定长度的向量,这个向量旨在捕捉输入序列中的关键信息。
  • 特征提取:在压缩信息的过程中,编码器提取输入序列的特征,这些特征有助于后续的解码过程。
  • 表示学习:编码器学习如何表示输入数据,以便这些表示可以用于其他任务,如分类、预测等。

解码器(Decoder)的作用:

  • 序列生成:基于编码器生成的上下文向量,解码器逐步生成输出序列。在每一步,它可能会考虑之前的输出,以及上下文向量。
  • 信息解码:解码器将编码器压缩的信息“解码”成目标序列,如翻译后的句子或语音识别的文本。
  • 概率模型:解码器通常是一个概率模型,它预测在给定当前输出序列和上下文向量的情况下,下一个输出元素的概率分布。

对应到具体的seq2seq场景,可以参照下列图片展示的流程:

感谢李沐老师的教材,下列图片展示了一个机器翻译任务:

  • 编码器先对句子中的单词进行编码学习,得到单词的特征表示和相应阶段的隐藏状态。
  • 解码器借助由编码器得到的上下文变量,再结合每次的输入内容,从而预测输出,然后将此时的输出作为下一次的输入;以‘<bos>’作为初始输入,依次进行,直到输出为‘<eos>’标识,表示句子结尾,结束输出。

在这里插入图片描述

2.2 原理说明

编码器(Encoder)的处理:
考虑由一个序列组成的样本(批量大小是 1 1 1)。

  • 假设输入序列是 x 1 , … , x T x_1, \ldots, x_T x1,,xT,其中 x t x_t xt是输入文本序列中的第 t t t个词元。
  • 在时间步 t t t,词元 x t x_t xt的输入特征向量 x t \mathbf{x}_t xt h t − 1 \mathbf{h} _{t-1} ht1(即上一时间步的隐状态)转换为 h t \mathbf{h}_t ht(即当前步的隐状态)。
    函数 f f f描述了这种变换:

h t = f ( x t , h t − 1 ) . \mathbf{h}_t = f(\mathbf{x}_t, \mathbf{h}_{t-1}). ht=f(xt,ht1).

总之,编码器通过选定的函数 q q q,将所有时间步的隐状态转换为上下文变量:

c = q ( h 1 , … , h T ) . \mathbf{c} = q(\mathbf{h}_1, \ldots, \mathbf{h}_T). c=q(h1,,hT).

解码器(Decoder)的处理:

  • 直接使用编码器最后一个时间步的隐状态来初始化解码器的隐状态。
  • 解码器每个时间步 t ′ t' t输出 y t ′ y_{t'} yt的概率取决于上一次的输出 y t ′ − 1 y_{t'-1} yt1、隐状态 s t \mathbf{s}_{t} st、上下文变量 c \mathbf{c} c
  • 使用函数 g g g来表示解码器的隐藏层的变换:

s t ′ = g ( y t ′ − 1 , c , s t ′ − 1 ) . \mathbf{s}_{t^\prime} = g(y_{t^\prime-1}, \mathbf{c}, \mathbf{s}_{t^\prime-1}). st=g(yt1,c,st1).

  • y t ′ − 1 y_{t'-1} yt1 c \mathbf{c} c拼接得到新参数,再与隐状态 s t \mathbf{s}_{t} st一起传入计算得到 y t ′ y_{t'} yt

三、Transformer整体结构和处理流程

3.1 Attention机制在seq2seq中的引入

在上述展示的内容中,解码器如何使用上下文变量 c \mathbf{c} c是值得探讨的,解码器仅在其初始化阶段使用解码器最终得到的隐藏状态,每次计算使用的上下文 c \mathbf{c} c是一个固定值,但很明显这种方法不能高效地利用解码器中的信息,因为它忽略了输入词元与解码器中词元的关系,所以可以往其中简单引入注意力机制,Bahdanau Attention正是对上述架构的加强:

Bahdanau Attention:

  • 在解码器的处理过程中, c t ′ = ∑ t = 1 T α ( s t ′ − 1 , h t ) h t , \mathbf{c}_{t'} = \sum_{t=1}^T \alpha(\mathbf{s}_{t' - 1}, \mathbf{h}_t) \mathbf{h}_t, ct=t=1Tα(st1,ht)ht,,每个时间步的上下文变量都是重新计算出来的,这里使用的是加型注意力机制计算注意力权重
  • 30和50表示的是训练阶段使用句子的单词数目上限;search表示引入了注意力机制,enc表示传统机制;根据结果可以看到,在长句子中,引入注意力机制的模型不仅鲁棒性更强,而且效果也更好
    NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE原文在这里插入图片描述

3.2 比较RNN与自注意力

Bahdanau Attention基于RNN,观察上述的实现,可以发现RNN存在一些局限:

  • 顺序处理:必须按时间步依次处理序列元素,限制了并行处理的能力,也导致计算效率的低下
  • 长距离依赖受限:RNN在反向传播过程中存在梯度消失或梯度爆炸的问题,这限制了RNN捕捉长距离依赖的能力

针对上述两点,自注意力可以做出提升:

  • 支持并行:自注意力不依赖于时间步,且其中的矩阵运算很适合并行,可以在GPU上高效执行
  • 直接关系建模:直接计算序列中任意两个位置之间的关联,有效地提升了模型捕捉长距离依赖的能力

3.3 Transformer架构介绍

Attention Is All You Need原文
Transformer架构完全基于注意力,它摒弃了传统的循环神经网络(RNN)结构,转而采用自注意力机制来处理序列数据。这种机制允许模型并行计算序列中所有位置的表示,从而有效捕捉长距离依赖关系。

编码器架构
编码器由几个完全一样的块组成,而每个块则由两个子层组成,分别为:

  • multi-head self-attention mechanism
  • positionwise fully connected feed-forward network

对于每个子层,再使用residual connection和layer normalization。子层的输出为:
L a y e r N o r m ( x + S u b l a y e r ( x ) ) LayerNorm(x + Sublayer(x)) LayerNorm(x+Sublayer(x))
为了方便进行残差连接,所以需要统一子层输入输出的维度,此时涉及到了两个超参数,分别为:块数、子层的输入输出维度;而论文中超参数设定块数为6,维度为512。

解码器架构
解码器同样使用6个完全一样的块组成,但与编码器不同的是,此时每个块由三个子层组成,分别为:

  • masked multi-head self-attention mechanism
  • multi-head self-attention mechanism
  • positionwise fully connected feed-forward network

对于每个子层,同样使用residual connection和layer normalization。

整体架构见下图
在这里插入图片描述

3.4 处理流程

接下来将以上述的机器翻译任务为例,简单说明一下如何实现结果的预测,关于一些操作的具体实现会在后文中详细说明,在Transformer总结(一)也稍有提及。

若动图无法加载,可见动图来源

在这里插入图片描述

3.4.1 编码器中处理流程

  1. 最初的输入序列由词元所组成,通过 嵌入层(embedding layer) 来获得输入序列中每个词元的特征向量,经过这一步,数据的结构将变为 (batch_size, num_steps, embed_size)
  2. 位置编码(Positional Encoding) 会给序列中的每个词元(分配一个相同大小的向量。这个向量的维度与词元的嵌入向量维度相同,确保了它们可以相加在一起,并且不改变数据结构。
  3. 多头注意力(Multi-Head Attention) ,先对此时的输入序列进行线性变换,得到多组query、Key、Value,每组单独计算得到的结果进行拼接,再次经过线性变换得到结果,此时输出的结构依然为 (batch_size, num_steps, embed_size),也就是最终结构没有发生变化。
  4. 残差连接(Residual Connection) ,将子层的输出与输入相加,由于维度未发生变化,所以直接相加,结构依然无变化。
  5. 层归一化(Layer Normalization),对每个词元的特征向量进行归一化操作,也就是每个词元都会有各自的均值和方差,但结构依然无变化。
  6. 前馈神经网络(Feed-Forward Neural Network) 是一个两层的全连接层,第一层的激活函数为 Relu,第二层不使用激活函数,对应的公式如下:
    m a x ( 0 , X W 1 + b 1 ) W 2 + b 2 max(0,XW_1+b_1)W_2+b_2 max(0,XW1+b1)W2+b2此时结构将变为 (batch_size, num_steps, ffn_num_outputs),但此时结构依然没有发生变化,后续的残差操作也可作为佐证。

3.4.2 解码器在训练阶段和预测阶段的差异(重要)

需要重点说明的是,解码器是一个自回归模型,使用上一次预测的结果作为下一次的输入,所以它在预测阶段是串行的,但是在训练阶段可以使用 强制教学(Teacher Forcing) 从而并行计算。

teacher-forcing ,在训练网络过程中,每次不使用上一个state的输出作为下一个state的输入,而是直接使用训练数据的标准答案(ground truth)的对应上一项作为下一个state的输入。
这也就意味着训练阶段不必依赖于之前的输出生成输入,而是直接得到每个时间步的输入,也就是可以并行计算。

由强制教学出发,此时便可以说明masked multi-head self-attention mechanism中掩码的作用。掩码通过控制注意力权重,从而在计算多头注意力时query不会关注当前时间步之后的信息,等会将详细说明。预测阶段,也就不需要使用这里的Sequence Mask机制了

3.4.3 预测阶段解码器中处理流程

具体细节可见知乎讲解,此处仅以动图进行演示。

在这里插入图片描述
其中值得说明的是整体右移一位(Shifted Right),解码器每次处理都需要输入,但在最开始的时候还没有上一个阶段的预测输出,此时就要以起始符作为初始的输入,而这个起始符将导致输入句子在原始的基础上右移一位。

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

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

相关文章

Linux平台x86_64|aarch64架构RTMP推送|轻量级RTSP服务模块集成说明

系统要求 支持x64_64架构、aarch64架构&#xff08;需要glibc-2.21及以上版本的Linux系统, 需要libX11.so.6, 需要GLib–2.0, 需安装 libstdc.so.6.0.21、GLIBCXX_3.4.21、 CXXABI_1.3.9&#xff09;。 功能支持 Linux平台x64_64架构|aarch64架构RTMP直播推送SDK 音频编码&a…

UDP服务端、TCP的c/s模式

一、UDP服务端 socket bind //绑定 recvfrom ssize_t recvfrom(int sockfd, socket的fd void *buf, 保存数据的一块空间的地址 …

网络编程TCP与UDP

TCP与UDP UDP头&#xff1a; 包括源端口、目的地端口、用户数据包长度&#xff0c;检验和 数据。 typedef struct _UDP_HEADER {unsigned short m_usSourPort;    // 源端口号16bitunsigned short m_usDestPort;    // 目的端口号16bitunsigned short m_usLen…

一款B to B Connector的仿真结果与开发样品实测的结果对比

下面是一款B to B 连接器开发初期的CST仿真结果: 回波损耗 插入损耗 时域阻抗 开发样品出来后第三方测试机构的实测结果

Auto CAD 常用指令汇总 [持续更新]

简介 AutoCAD是由美国Autodesk公司开发的一款自动计算机辅助设计软件&#xff0c;广泛应用于建筑、工程、城市规划等多个领域。自1982年发布以来&#xff0c;AutoCAD不断进化&#xff0c;成为行业标准之一。它支持二维绘图和三维建模功能&#xff0c;用户可以精确绘制各种图形&…

BSCI(Business Social Compliance Initiative)验厂

在当今全球化的经济环境中&#xff0c;企业社会责任&#xff08;Corporate Social Responsibility, CSR&#xff09;已成为衡量企业成功与否的重要标尺之一。而BSCI&#xff08;Business Social Compliance Initiative&#xff09;验厂&#xff0c;作为国际间广泛认可的社会责任…

服务器Ubuntu22.04系统 使用dcocker部署安装ollama和搭配open_webui使用

服务器Ubuntu22.04系统 使用dcocker部署安装ollama和搭配open_webui使用 一、ubuntu和docker基本环境配置 1.更新包列表&#xff1a; 打开终端&#xff0c;输入以下命令&#xff1a; sudo apt-get updatesudo apt upgrade更新时间较长&#xff0c;请耐心等待 2. 安装docke…

[MOCO] Momentum Contrast for Unsupervised Visual Representation Learning

1、目的 无监督表示学习在自然图像领域已经很成功&#xff0c;因为语言任务有离散的信号空间&#xff08;words, sub-word units等&#xff09;&#xff0c;便于构建tokenized字典 现有的无监督视觉表示学习方法可以看作是构建动态字典&#xff0c;字典的“keys”则是从数据&am…

测评了几百款素材管理软件,新手设计师如何进行高效的素材管理?附教程

设计师朋友们&#xff0c;大家在日常工作中肯定积累了各种各样的素材&#xff0c;大家都保存在哪里呢&#xff1f;是散落在电脑磁盘里&#xff0c;还是用一个专门的素材管家管理呢&#xff1f;作为新手设计师&#xff0c;目前是在使用一款经典好用的素材管理软件—Eagle&#x…

Java学习_17_集合综合练习(待更新)

文章目录 前言一、自动点名器二、斗地主小游戏1、准备牌2、洗牌3、发牌4、理牌 总结 前言 博客仅记录个人学习进度和一些查缺补漏。 学习内容&#xff1a;BV17F411T7Ao 部分内容因没有学到&#xff0c;等待后续更新 一、自动点名器 /**** 点名器1&#xff0c;N个学生随机点名…

Edge-TTS:微软推出的,免费、开源、支持多种中文语音语色的AI工具[工具版]

Edge-TTS&#xff0c;由微软推出的这款免费、开源的AI工具&#xff0c;为用户带来了丰富多样的中文语音体验。它不仅支持多种中文语音语色&#xff0c;还能实现流畅自然的语音合成。Edge-TTS凭借其高度可定制化的特点&#xff0c;广泛应用于智能助手、语音播报、教育培训等领域…

商业软件许可证介绍|简单原理探究

个人博客&#xff1a;无奈何杨&#xff08;wnhyang&#xff09; 个人语雀&#xff1a;wnhyang 共享语雀&#xff1a;在线知识共享 Github&#xff1a;wnhyang - Overview 引入话题 既然是商业软件&#xff0c;涉及到商业&#xff0c;那目的就是赚钱。 就拿IDEA举例&#x…

Linux系统中的常见操作命令

目录 命令总结&#xff1a; 一、目录处理命令 二、文件处理命令 三、权限管理命令 四、其它实用命令 命令总结&#xff1a; &#xff08;目录&#xff09; ls [参数] 目录、&#xff08;查看目录&#xff09;pwd、&#xff08;切换目录&#xff09;cd [目录路径]、&…

4.1栈和队列基本概念+经典OJ题

本篇博客来梳理栈和队列基本概念以及一道经典OJ题&#xff0c;题目已插入超链接&#xff0c;点击即可跳转~ 一、栈的相关概念 1&#xff0e;栈 一种特殊的线性表&#xff0c;只允许在固定的一端插入和删除元素&#xff0c;栈中的数据遵循后进先出原则 &#xff08;1&#x…

Pytorch添加自定义算子之(12)-开闭原则设计tensorrt和onnxruntime推理语义分割模型

一、开闭原则 开闭原则是SOLID原则中的一个,指的是尽量使用开放扩展,关闭修改的设计原则。 在C++中如何使用开闭原则导出动态库,可以按照以下步骤进行: 定义抽象基类:定义动态库中的抽象基类,该基类应该封装可扩展的接口。 实现派生类:实现基类的派生类,这些派生类将封…

Vue 导航条+滑块效果

目录 前言代码效果展示导航实现代码导航实现代码导航应用代码前言 总结一个最近开发的需求。设计稿里面有一个置顶的导航条,要求在激活的项目下面展示个下划线。我最先开始尝试的是使用 after 的伪类选择器,直接效果一样,但是展示的时候就会闪现变化,感觉不够自然,参考了一…

继承(下)【C++】

文章目录 子类继承父类之后&#xff0c;子类的默认成员函数的变化构造函数编译器自动生成的构造函数程序员手动写的构造函数 拷贝构造编译器自动生成的拷贝构造函数程序员手动写的拷贝构造函数 赋值重载编译器自动生成的赋值重载程序员手动写的赋值重载 析构函数 继承与友元菱形…

vm安装mac虚拟机

vm安装mac虚拟机 简介实操 简介 教程&#xff1a;完全面向萌新的黑苹果安装教学&#xff1a;黑苹果安装从入门到入白&#xff0c;借助VMware虚拟机给实体机硬盘按照macOS黑苹果系统 实操 下载unlocker&#xff0c;之后运行vm就可以新建mac虚拟机了 新建一个没有选择镜像的…

【Electron】桌面应用开发快速入门到打包Windows应用程序

electron 实现桌面应用开发快速入门到打包Windows应用程序 一、基本介绍 ‌‌Electron 是一个使用‌ JavaScript、‌HTML 和‌ CSS 构建桌面应用程序的框架。它通过将‌Chromium和‌Node.js嵌入到其二进制文件中&#xff0c;允许开发者使用JavaScript代码库创建跨平台的桌面应…

汽车冷却液温度传感器

1、冷却液温度传感器的功能 发动机冷却液温度传感器&#xff0c;也称为ECT&#xff0c;是帮助保护发动机&#xff0c;提高发动机工作效率以及帮助发动机稳定运行的非常重要的传感器之一。 发动机冷却液温度 &#xff08;ECT&#xff09; 传感器用于测量发动机的冷却液温度&…