transformer系列2---transformer架构详细解析

news2025/2/24 5:23:59

transformer详细解析

  • Encoder
    • 1 输入
      • 1.1 Embedding 词嵌入
        • 1.1.1 Embedding 定义
        • 1.1.2 几种编码方式对比
        • 1.1.3 实现代码
      • 1.2 位置编码
        • 1.2.1 使用位置编码原因
        • 1.2.2 位置编码方式
        • 1.2.3 位置编码代码
    • 2 注意力 Attention
      • 2.1 自注意力self-attention
        • 2.1.1 QKV含义
        • 2.1.2 自注意力公式
        • 2.1.3 自注意力计算流程
      • 2.2 多头注意力 Multi-Head Attention
        • 2.2.1 多头注意力公式
        • 2.2.2 多头注意力计算流程
      • 2.3 模型使用的三种注意力
    • 3 前馈神经网络
    • 4 残差连接和归一化
  • Decoder
    • 1 输入
    • 2 mask 多头自注意力
    • 3 多头交叉注意力
    • 4 前馈神经网络
    • 5 输出

请添加图片描述

Transformer是一个序列到序列的模型,包含一个encoder和一个decoder,每个encoder或decoder均由 H个相同的结构堆叠而成。编码器模块主要包含:多头自注意力模块和前馈神经网络,同时采用残差连接增加网络深度,采用layerNorm进行归一处理。解码器模块基本结构和编码器模块相同,只是使用mask的多头注意力模块,然后增加一个交叉注意力模块,再输入逐点前馈网络,最后经过一个全连接层和一个Softmax,得到输出结果,每个输出结果又会作为下一轮decoder的输入,因此,transformer属于自回归。整体结构如上图所示,下面对每个模块进行详细解读。

Encoder

1 输入

输入部分

1.1 Embedding 词嵌入

1.1.1 Embedding 定义

首先介绍一下常见的几种编码方式:

  1. 整数编码:用一种数字来代表一个词
  2. one-hot 编码:用一个序列向量表示一个词,该向量只有词汇表中表示这个单词的位置是1,其余都是0,序列向量长度是预定义的词汇表中单词数量。
  3. word embedding 词嵌入编码:将词映射或者嵌入(Embedding)到另一个数值向量空间(常常存在降维),它以one hot的稀疏矩阵为输入,经过一个线性变换(查表)将其转换成一个密集矩阵的过程。Embedding的原理是使用矩阵乘法来进行降维,节约存储空间。例如下图,一个2×6的矩阵,乘以6×3的矩阵,得到2×3的矩阵。虽然矩阵的变小,但数字蕴藏的信息没有改变,只是按照某一种映射关系将矩阵映射到一个新的维度的矩阵。每个单词都表示为一个3维的浮点值向量。可以将其理解为“查找表”,通过查找表查找密集矩阵中的值,得到每个单词进行编码。比如下面的第一个词,查找密集矩阵中第一行即可得到新的表示
    在这里插入图片描述
1.1.2 几种编码方式对比

下表是对几种编码方式的对比
在这里插入图片描述

1.1.3 实现代码
class Embeddings(nn.Module):
    def __init__(self, d_model, vocab):
        super(Embeddings, self).__init__()
        self.lut = nn.Embedding(vocab, d_model)
        self.d_model = d_model

    def forward(self, x):
        return self.lut(x) * math.sqrt(self.d_model)

1.2 位置编码

1.2.1 使用位置编码原因

由于句子中的每个词语同时通过Transformer的编码器/解码器,模型本身对于每个词语的位置/顺序没有任何概念。因此,需要将词语的顺序融入到模型中,使模型能够获取词语的位置信息,也就是位置编码。位置编码需要满足以下条件:

  1. 词语在句子中的每个位置应输出一个唯一的编码。
  2. 不同长度的句子之间的任意两个位置之间的距离应保持一致。
  3. 模型应能适应更长的句子,其取值应该受到限制。
  4. 它必须是确定值。
1.2.2 位置编码方式
  1. 固定位置编码

  2. 可学习的位置编码

1.2.3 位置编码代码

2 注意力 Attention

在这里插入图片描述

2.1 自注意力self-attention

2.1.1 QKV含义
2.1.2 自注意力公式

在这里插入图片描述
dk代表矩阵K的维度,这里进行归一化计算,假设q和k的分量是独立的随机变量,均值为0,方差为1。那么它们的点积在这里插入图片描述的均值为0,方差为dk,点积会变大,因此需要归一化计算。

2.1.3 自注意力计算流程
  1. 对于输入的序列a1,a2,a3,a4,通过Wq,Wk,Wv三个矩阵,将其转换为q1,k1,v1,q2,k2,v2,q3,k3,v3,q4,k4,v4。
    请添加图片描述

  2. q1和k1—k4分别计算相似性,得到相似性系数在这里插入图片描述

  3. 计算soft-max,得到在这里插入图片描述
    在这里插入图片描述
    该步骤

  4. 将上一步得到的注意力分数与v1,v2,v3,v4相乘,求和,得到。
    具体流程如下图:
    请添加图片描述

  5. 总结:上述流程用矩阵表示为:
    请添加图片描述

2.2 多头注意力 Multi-Head Attention

2.2.1 多头注意力公式

在这里插入图片描述
这里在这里插入图片描述在这里插入图片描述

2.2.2 多头注意力计算流程

顾名思义,多头注意力就是用H个不同参数的 QKV注意力结构对输入的 Dk维度的 query,key和 value进行计算;然后将所有输出结果进行拼接,并将N*d_v维度映射回 D_m维,注意,这里的H个head是并行计算的,而不是一个一个head串行。
在这里插入图片描述

2.3 模型使用的三种注意力

  1. 自注意力 self attention
    在 Transformer编码器中使用,Q=K=V=X, X为输入或前一层的输出
  2. 掩码自注意力 masked self attention
    在Transformer解码器中使用,此时自注意力限制为:每个位置的 Query只注意到该位置和之前的所有 Key-Value值。具体实现为:对位归一化的注意力矩阵进行掩码操作,即当 i<j时,设置 A_ij 为负无穷。这种自注意力也称之为自回归(autogress)或因果(causal)注意力。
  3. 交叉注意力 cross Attention
    Q,K,V的来源不同,其中 Q(query)来自于输入或上一层的输出,而 K和 V则来自于编码器的输出。

3 前馈神经网络

逐点前馈网络(Position-wise Feed-Forward Networks)为全连接(通常为两层)前馈结构,对特征图每个点进行逐点计算,计算公式为:
在这里插入图片描述
x是多头注意力的输出,第一层全连接结构经过RELU激活函数后,再计算一次全连接,W1,W2,b1,b2为可学习的参数。

4 残差连接和归一化

Transformer结构在每个模块中采用了残差连接,并对连接后的张量进行归一化操作可以表示为:
LN(X)= LayerNorm(x + Sublayer(x))

Sublayer表示当前层的操作,比如当前层计算多头注意力,这里就是Multihead(x),若是逐点前馈网络,就是FFN(x),LayerNorm表示层归一化操作。残差连接和归一化主要用于构建更深的网络结构,减缓梯度消失问题。

Decoder

1 输入

Decoder的输入部分与Encoder类似,都是将输入先经过embedding转换,然后增加位置编码,区别是,这里的输入是Decoder上一轮的输出结果,因此,transformer是自回归。

2 mask 多头自注意力

Decoder也有多头自注意力(MHA)模块,不过这里需要对当前单词和之后的单词做mask,也就是模型只会看到当前位置之前的内容,这样,才能确保预测仅依赖于已生成的输出单词。

3 多头交叉注意力

交叉注意力也成为跨注意力,这里的K和V是来源于encoder的输出,Q是来源于Decoder的Mask MHA,而解码器自注意力中,Q、K和V都来自上一个解码器层的输出。

4 前馈神经网络

这部分和encoder相同,不再赘述

5 输出

经过decoder后,网络再经过全连接层和softmax,即可得到输出结果

参考内容:
感谢李宏毅老师的视频讲解,文章中的图来源于李老师的PPT。

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

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

相关文章

微信图文如何替换成自己的二维码?

二维码样式中的二维码目前都是小蚂蚁的二维码&#xff0c;如何替换成自己的二维码&#xff0c;其实也很简单&#xff0c;就像替换样式中的图片一样&#xff0c;首先点击二维码&#xff0c;选择工具条中的“换图”&#xff0c;然后在弹出来的框中填入二维码图片的链接地址或者直…

招股书更新9版终上市,飞沃科技能否躲过风电红利后的黯淡?

文丨熔财经 作者丨文泽 碳达峰、碳中和成为主旋律目标下&#xff0c;作为可再生能源主力的风电产业迎来了发展的“黄金时代”。与新能源相关的上下游企业也赚的“盆满钵满”。 在此背景下&#xff0c;飞沃科技(301232.SZ)历经4轮问询&#xff0c;更新9版招股书终于登陆资本市…

Command not found 解决方法

前言&#xff1a;要更新code上服务器用GUI失败&#xff0c;$ patch_delivery_gui&#xff0c;报错&#xff1a;patch_delivery_gui: command not found&#xff0c;上次编TA也是这个问题 写了个脚本&#xff1a;这个脚本会先检查ifconfig、firewall-cmd和vim命令是否可用&#…

ExcelServer EXCEL服务器使用- 用户、角色权限配置

Excel文件服务器搭建 搭建Excel服务器 1、登录 默认 用户名 Admin 密码 3 2、角色管理 添加修改角色 角色配置在 系统管理->角色.fexm文件夹下 可以像修改excel文件一样 修改角色 3、用户管理 添加修改用户 用户的修改在 系统管理->用户.fexm 可以像excel一样编辑用户…

27、Flink 的SQL之SELECT (窗口聚合)介绍及详细示例(4)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

机器人中的数值优化(十七)—— 锥与对称锥

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考&#xff0c;主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等&#xff0c;本系列文章篇数较多&#xff0c;不定期更新&#xff0c;上半部分介绍无约束优化&#xff0c;…

http的网站进行访问时候自动跳转至https

通常情况下我们是用的都是http的路径&#xff0c;对于https的使用也很少&#xff0c;但是随着https的普及越来越多的域名访问需要用到https的&#xff0c;这个我们就演示怎么设置在我们对一个http的网站进行访问时候自动跳转至https下。 用到的工具及软件: 系统&#xff1a;wi…

规划基础知识

1 规划简介 在规划中&#xff0c;我们通过结合高精地图&#xff0c;定位和预测来构建车辆轨迹。 规划的第一步就是路线导航&#xff0c;侧重于如何从地图上的A前往B&#xff0c;在进行路径规划时&#xff0c;将地图数据作为输入&#xff0c;并输出可行驶路径。 在Apollo中&…

亚马逊商品详情数据接口

亚马逊商品详情数据接口可以用于获取商品详情信息&#xff0c;包括但不限于商品ID、商品标题、商品描述等。这些信息可以用于多种用途&#xff0c;例如&#xff1a; 了解商品信息&#xff0c;帮助消费者做出购买决策。整合其他平台或网站的数据&#xff0c;提供全面的商品信息…

成集云 | 金蝶云星空与旺店通ERP集成(旺店通主管供应链)| 解决方案

源系统成集云目标系统 方案介绍 金蝶云星空是一款ERP企业管理软件&#xff0c;致力于为企业提供整体解决方案。金蝶财务软件种类功能齐全&#xff0c;能够全面满足企业的不同阶段、不同功能需求。帮助企业建立规范的业务流程&#xff0c;提升管理能力&#xff0c;降…

怎么设置IP白名单

IP白名单是一种网络安全机制&#xff0c;用于限制只允许特定的IP地址或IP地址范围通过访问控制。在本文中&#xff0c;我将详细解释IP白名单的概念、用途以及如何设置IP白名单。 **1. 什么是IP白名单&#xff1f;** IP白名单是一种访问控制列表&#xff0c;它允许或阻止特定的…

Django Web开发入门基础

官方有很详细的文档&#xff0c;但是看过几遍之后如果要翻找还是有点麻烦&#xff0c;本文算作是学习笔记&#xff0c;提取一些关键点记录下来&#xff0c;另附上官方教程 Writing your first Django app 注&#xff1a; 文中的指令使用py&#xff0c;是在Windows上&#xff0c…

室外配电箱防护等级总结、基础大样图

一、室外配电箱防护等级规范条文归纳&#xff1a; 1、《城市夜景照明设计规范》JGJ/T 163-2008&#xff0c;8.3.5&#xff1a; 照明设备所有带电部分应采用绝缘、遮拦或外护物保护&#xff0c;距地面2.8m以下的照明设备应使用工具才能打开外壳进行光源维护。室外安装照明配电箱…

OSCP系列靶场-Esay-Gaara保姆级

OSCP系列靶场-Esay-Gaara 目录 OSCP系列靶场-Esay-Gaara总结准备工作信息收集-端口扫描目标开放端口收集目标端口对应服务探测 信息收集-端口测试22-SSH端口的信息收集22-SSH端口版本信息与MSF利用22-SSH协议支持的登录方式22-SSH弱口令爆破(待定)22-SSH手动登录尝试(无) 80-HT…

Android 应用上线注意事项

将 Android 应用上线到 Google Play 商店需要仔细注意一系列问题&#xff0c;以确保应用的质量、安全性和用户体验。以下是一些在 Android 应用上线过程中需要注意的关键问题&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&…

DBAPI安装教程

安装教程 请先下载安装包。默认账户admin/admin。 为了便于您理解安装的时候需要配置的参数&#xff0c;请您先学习日志监控相关的功能设计 本地部署单机版 依赖java环境&#xff0c;先自行在服务器安装jdk8&#xff0c;并配置环境变量下载安装包解压到需要安装的目录修改conf…

vue/react/node项目通过eslint检查语法规范

首先 我们打开终端 全局安装依赖 npm install -g eslint然后 以管理员身份运行项目终端 输入 eslint --init然后 这里 在初始化时会问我们想如何使用它? 分别对应 仅检查语法 检查语法并发现问题 检查语法、发现问题并强制执行代码样式 这里建议第二种 第三种肯定是不行的 …

el-date-picker改日期显示方式

效果&#xff1a; 代码&#xff1a; <template><div><el-date-picker v-model"selectedDate" type"date" input"handleDateChange"><template #default"{ date }"><span>{{ formatDate(date) }}</s…

PoE交换机出现不稳定的原因有哪些?

带有供电设备的PoE交换机给使用者带来了方便&#xff0c;因此被广泛应用。然而&#xff0c;很多使用商反映他们所使用的PoE交换机不稳定。那么&#xff0c;PoE交换机出现不稳定的原因有哪些&#xff1f; 首先需要考虑的是数据传输的距离。尽管PoE供电交换机具有方便灵活的特点&…

详解yolov1理论 代码

目标检测要解决的3大问题&#xff1a; 1、有没有&#xff1f; 图片中是否有要检测的物体&#xff1f;&#xff08;检测物体&#xff0c;判定前景背景&#xff09; 2、是什么&#xff1f; 这些物体分别是什么&#xff1f;&#xff08;检测到的物体是什么&#xff09; 3、在…