自然语言处理---Tr ansformer机制详解之Transformer结构

news2024/12/22 6:01:11

1 Encoder模块

1.1 Encoder模块的结构和作用

  • 经典的Transformer结构中的Encoder模块包含6个Encoder Block.
  • 每个Encoder Block包含一个多头自注意力层,和一个前馈全连接层.            

1.2 Encoder Block

  • 在Transformer架构中,6个一模一样的Encoder Block层层堆叠在一起,共同组成完整的Encoder,因此剖析一个Block就可以对整个Encoder的内部结构有清晰的认识.

1.3 多头自注意力层(self-attention)

首先来看self-attention的计算规则图

  • 上述attention可以被描述为将query和key-value键值对的一组集合映射到输出,输出被计算为values的加权和,其中分配给每个value的权重由query与对应key的相似性函数计算得来。这种attention的形式被称为Scaled Dot-Product Attention,对应的数学公式形式如下:
  • 所谓的多头self-attention层,则是先将Q,K,V经过参数矩阵进行映射,再做self-attention,最后将结果拼接起来送入一个全连接层即可。

  • 前馈全连接层模块

    • 前馈全连接层模块, 由两个线性变换组成, 中间有一个Relu激活函数, 对应的数学公式形式如下:
  • 注意: 原版论文中的前馈全连接层,输入和输出的维度均为d_model = 512,层内的连接维度d_ff = 2048,均采用4倍的大小关系。

  • 前馈全连接层的作用:单纯的多头注意力机制并不足以提取到理想的特征,因此增加全连接层来提升网络的能力。

1.4 Decoder模块

  • Decoder模块的结构和作用:
    • 经典的Transformer结构中的Decoder模块包含6个Decoder Block.
    • 每个Decoder Block包含三个子层.
      • 一个多头self-attention层
      • 一个Encoder-Decoder attention层
      • 一个前馈全连接层
  • Decoder Block中的多头self-attention层
    • Decoder中的多头self-attention层与Encoder模块一致, 但需要注意的是Decoder模块的多头self-attention需要做look-ahead-mask, 因为在预测的时候"不能看见未来的信息", 所以要将当前的token和之后的token全部mask.
  • Decoder Block中的Encoder-Decoder attention层
    • 这一层区别于自注意力机制的Q = K = V, 此处矩阵Q来源于Decoder端经过上一个Decoder Block的输出, 而矩阵K, V则来源于Encoder端的输出, 造成了Q != K = V的情况.
    • 这样设计是为了让Decoder端的token能够给予Encoder端对应的token更多的关注.
  • Decoder Block中的前馈全连接层
    • 此处的前馈全连接层和Encoder模块中的完全一样.
  • Decoder Block中有2个注意力层的作用
    • 多头self-attention层是为了拟合Decoder端自身的信息
    • Encoder-Decoder attention层是为了整合Encoder和Decoder的信息

1.5 Add & Norm模块

  • Add & Norm模块接在每一个Encoder Block和Decoder Block中的每一个子层的后面. 具体来说Add表示残差连接, Norm表示LayerNorm.
    • 对于每一个Encoder Block, 里面的两个子层后面都有Add & Norm.
    • 对于每一个Decoder Block, 里面的三个子层后面都有Add & Norm.
    • 具体的数学表达形式为: LayerNorm(x + Sublayer(x)), 其中Sublayer(x)为子层的输出.
  • Add残差连接的作用: 和其他神经网络模型中的残差连接作用一致, 都是为了将信息传递的更深, 增强模型的拟合能力. 试验表明残差连接的确增强了模型的表现.
  • Norm的作用: 随着网络层数的额增加, 通过多层的计算后参数可能会出现过大, 过小, 方差变大等现象, 这会导致学习过程出现异常, 模型的收敛非常慢. 因此对每一层计算后的数值进行规范化可以提升模型的表现.

1.6 位置编码器Positional Encoding

  • Transformer中直接采用正弦函数和余弦函数来编码位置信息, 如下图所示:

  • 需要注意: 三角函数应用在此处的一个重要的优点, 因为对于任意的PE(pos+k), 都可以表示为PE(pos)的线性函数, 大大方便计算. 而且周期性函数不受序列长度的限制, 也可以增强模型的泛化能力.

2 小结

  • Encoder模块

    • 经典的Transformer架构中的Encoder模块包含6个Encoder Block.
    • 每个Encoder Block包含两个子模块, 分别是多头自注意力层, 和前馈全连接层.
      • 多头自注意力层采用的是一种Scaled Dot-Product Attention的计算方式, 实验结果表明, Mul ti-head可以在更细致的层面上提取不同head的特征, 比单一head提取特征的效果更佳.
      • 前馈全连接层是由两个全连接层组成, 线性变换中间增添一个Relu激活函数, 具体的维度采用4倍关系, 即多头自注意力的d_model=512, 则层内的变换维度d_ff=2048.
  • Decoder模块

    • 经典的Transformer架构中的Decoder模块包含6个Decoder Block.
    • 每个Decoder Block包含3个子模块, 分别是多头自注意力层, Encoder-Decoder Attention层, 和前馈全连接层.
      • 多头自注意力层采用和Encoder模块一样的Scaled Dot-Product Attention的计算方式, 最大的 区别在于需要添加look-ahead-mask, 即遮掩"未来的信息".
      • Encoder-Decoder Attention层和上一层多头自注意力层最主要的区别在于Q != K = V, 矩阵Q来源于上一层Decoder Block的输出, 同时K, V来源于Encoder端的输出.
      • 前馈全连接层和Encoder中完全一样.
  • Add & Norm模块

    • Add & Norm模块接在每一个Encoder Block和Decoder Block中的每一个子层的后面.
    • 对于每一个Encoder Block, 里面的两个子层后面都有Add & Norm.
    • 对于每一个Decoder Block, 里面的三个子层后面都有Add & Norm.
    • Add表示残差连接, 作用是为了将信息无损耗的传递的更深, 来增强模型的拟合能力.
    • Norm表示LayerNorm, 层级别的数值标准化操作, 作用是防止参数过大过小导致的学习过程异常, 模型收敛特别慢的问题.
  • 位置编码器Positional Encoding

    • Transformer中采用三角函数来计算位置编码.
    • 因为三角函数是周期性函数, 不受序列长度的限制, 而且这种计算方式可以对序列中不同位置的编码的重要程度同等看待.

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

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

相关文章

《算法设计与分析(第4版)》笔记——第 1 章 算法入门

现在跟的是 b站黑马 的视频课,还是这个好哇 2023新版数据结构与算法Java视频教程(上篇) 2023新版数据结构与算法Java视频教程(下篇) 之前跟的是 青岛大学 张公敬教授 的《算法设计与分析》(做了笔记就发出…

【德哥说库系列】-RHEL8环境源码编译安装MySQL8.0

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

docker 安装 sftpgo

sftpgo 简介 sftpgo 是一个功能齐全且高度可配置的 SFTP 服务器,具有可选的 HTTP/S、FTP/S 和 WebDAV 支持。支持多种存储后端:本地文件系统、加密本地文件系统、S3(兼容)对象存储、Google 云存储、Azure Blob 存储、SFTP。 官…

香港科技大学广州|可持续能源与环境学域博士招生宣讲会—广州大学城专场!!!(暨全额奖学金政策)

香港科技大学广州|可持续能源与环境学域博士招生宣讲会—广州大学城专场!!!(暨全额奖学金政策) “面向未来改变游戏规则的——可持续能源与环境学域” ���专注于能源环…

【27】c++设计模式——>迭代器模式(遍历双向链表)(2)

//实现双向链表 #pragma once #include<iostream> #include<string> #include<vector> using namespace std;class Iterator; class ForwardIterator; class ReverseIterator;//链表的最小组成部分是一个节点&#xff0c;先实现一个节点 struct Node //c中st…

【每周一测】Java阶段二第五周学习

目录 1、关于static说法不正确的是&#xff1f; 2、以下关于继承的叙述正确的是&#xff08;&#xff09; 3、Restful风格传参用的注解是 4、反射可以访问私有成员变量和方法吗&#xff1f; 5、关于SqlSession的说法&#xff0c;说法正确的是 6、自定义SpringMvc拦截器时…

Web攻防04_MySQL注入_盲注

文章目录 MYSQL-SQL操作-增删改查盲注概念盲注分类盲注语句参考&更多盲注语句/函数 注入条件-数据回显&错误处理PHP开发项目-注入相关条件&#xff1a;基于延时&#xff1a;基于布尔&#xff1a;基于报错&#xff1a; CMS案例-插入报错&删除延时-PHP&MYSQL1、x…

项目管理实战总结(一)-沟通路径问题

前言 那是2021年春节之后&#xff0c;我决定主动申请参与到这个项目&#xff0c;是知道工作强度大、难度大的情况的。有很多的同事是想躲&#xff0c;而我是明知山有虎偏向虎山行。我确定&#xff0c;通过这个项目&#xff0c;一定有我需要的东西。现在项目已经完成了终验专家…

java1.8流的新特性使用

案例描述 今天跟着黑马程序员的视频&#xff0c;完成“瑞吉外卖”项目的菜品信息管理模块的时候&#xff0c;遇到了一个比较陌生的写法 用到了Java8的新特性 stream().map((item) -> {}).collect() List<DishDto> collect records.stream().map((item) -> {DishDt…

数据库基础(一)【MySQL】

文章目录 安装 MySQL修改密码连接和退出数据库服务器使用 systemctl 管理服务器进程配置数据库从文件角度看待数据库查看连接情况 安装 MySQL 这是在 Linux 中安装 MySQL 的教程&#xff1a;Linux 下 MySQL 安装。本系列测试用的 MySQL 版本是 5.7&#xff0c;机器是 centOS7.…

力扣刷题 day51:10-21

1.分发饼干 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff0c;都有一…

Python在列表中如何对多个参数进行修改

1 问题 在python中经常会使用到列表&#xff0c;列表是常见的一种数据类型。对于一个庞大的列表&#xff0c;要调取列表中的对象&#xff0c;应如何快速准确的调取或快速的调取多个对象&#xff1f; 2 方法 解决问题的步骤采用如下方式&#xff1a; 基本的&#xff0c;已知元素…

【C语言进阶】指针进阶(三)

指针进阶&#xff08;三&#xff09; 9.指针和数组笔试题解析10.指针笔试题 9.指针和数组笔试题解析 数组名的理解 数组名是数组首元素的地址 但是有2个例外&#xff1a; sizeof(数组名)&#xff0c;这里的数组名表示整个数组&#xff0c;sizeof(数组名)计算的是整个数组的大…

5G投资下降,遥遥领先的主流5G或被运营商抛弃,“假5G”更获青睐

虽然媒体仍然在宣扬5G的诸多领先技术优势&#xff0c;不过需要付钱的运营商已在行动中做出抉择&#xff0c;那就是放缓主流5G的投资&#xff0c;大举投资曾被称为“假5G”的低频5G&#xff0c;现实迫使运营商做出了如此选择。 媒体披露的数据指2022年中国的5G投资下滑了2.5%&am…

golang 反射机制

在 go 语言中&#xff0c;实现反射能力的是 reflect包&#xff0c;能够让程序操作不同类型的对象。其中&#xff0c;在反射包中有两个非常重要的 类型和 函数&#xff0c;两个函数分别是&#xff1a; reflect.TypeOfreflect.ValueOf 两个类型是 reflect.Type 和 reflect.Value…

1024程序员博客创作者活动

1024程序员博客创作者活动 参加博客创作者活动&#xff0c;获取创作者荣誉、活动奖品、稿费、涨粉。每到节假日就会出现比较多的活动 常见的博客网站有CSDN、博客园、掘金者、51CTO、简书、慕课笔记、开源中国。 最近1024出现了各种各样的程序员活动&#xff0c;而且活动的奖…

操作系统学习笔记6-文件系统

侵权请联系我&#xff0c;会及时删除的。下面的图片主要是B站UP主的课程中的截图。 课程推荐链接地址&#xff0c;这个课程很好&#xff0c;具体课程在B站。 操作系统 文章目录 1、文件系统的由来-文件的由来2、文件系统的由来-目录的由来3、文件管理逻辑图4、闲聊文件系统5、…

第五届太原理工大学程序设计竞赛新生赛(初赛)题解

第五届太原理工大学程序设计竞赛新生赛&#xff08;初赛&#xff09;题解 时隔半年重做一次&#xff0c;还是有几道不会&#xff0c;&#xff0c;&#xff0c;&#xff0c;&#xff0c; ⭐️A.饿饿饭饭 题目&#xff1a; &#x1f31f;题解&#xff1a; 很简单&#xff0c;签…

【软考】11.3 需求分析/获取/定义/验证/管理

《软件需求》 需求分类 需求获取 联合需求计划&#xff08;JRP&#xff09;&#xff1a;联合各个关键用户代表、系统分析师、开发团队代表一起讨论需求 需求分析 结构化的需求分析 自顶向下&#xff0c;逐步分解&#xff0c;面向数据 功能模型&#xff08;数据流图&#xff0…

跟随光标圆形文本旋转

今天给大家带来的是光标变成圆形字符串环绕 不多说先上效果图 原理呢,也很简单 就是先把文本 <h2>大威天龙 - 世尊地藏 - 般若诸佛 - 般若巴嘛哄 -</h2>然后使用js将文本处理成每个字符一个span,并且让他们旋转 let text document.querySelector(h2)text.innerH…