Transformer总结(三):组件介绍(位置编码,多头注意,残差连接,层归一化,基于位置的前馈网络)

news2024/9/24 19:11:13

文章目录

  • 一、位置编码
    • 1.1 介绍
    • 1.2 简单探讨
  • 二、多头注意力
    • 2.1 一般的多头注意力机制
    • 2.2 解码器中的掩码多头注意力机制(Look-ahead Mask)
  • 三、残差连接
  • 四、层归一化
    • 4.1 对比不同的Normalization
    • 4.2 Batch Normalization的实现
    • 4.3 Layer Normalization的实现
    • 4.4 Layer Normalization所处位置的讨论
    • 4.5 何以使用LN而非BN
  • 五、基于位置的前馈网络


Transformer总结(二)中介绍Transformer的整体架构,下文主要介绍其中涉及的一些组件,尽可能从多角度来探讨它们的作用。

一、位置编码

【Transformer系列】深入浅出理解Positional Encoding位置编码

一文通透位置编码:从标准位置编码、旋转位置编码RoPE到ALiBi、LLaMA 2 Long(含NTK-aware简介)

Transformer总结(一):基础介绍(注意力机制、自注意力机制、位置编码、多头注意力机制)

1.1 介绍

Transformer模型本身不具有处理序列顺序的能力,为了让模型能够理解词序,就需要借助位置编码注入位置信息。

  • 位置编码将位置信息注入到输入里:假设长度为 n n n的序列是 X ∈ R n × d X\in \mathbb{R}^{n\times d} XRn×d

    • 使用位置编码矩阵 P ∈ R n × d P\in \mathbb{R}^{n\times d} PRn×d,输出 X + P X+P X+P作为自编码输入

    • P P P中的元素根据列的奇偶差异,分为: p i , 2 j = sin ⁡ ( i 1000 0 2 j d ) p_{i,2j}=\sin(\frac{i}{10000^{\frac{2j}{d}}}) pi,2j=sin(10000d2ji) p i , 2 j + 1 = cos ⁡ ( i 1000 0 2 j d ) p_{i,2j+1}=\cos(\frac{i}{10000^{\frac{2j}{d}}}) pi,2j+1=cos(10000d2ji) j j j始于0

    • 绝对位置信息:在上述公式中,频率 ω j = 1 1000 0 2 j d \omega_j=\frac{1}{10000^{\frac{2j}{d}}} ωj=10000d2j1,从函数定义中可以得出,频率沿向量维度减小, j j j越大,波长越长;不同词元的位置编码仅由其位置唯一决定

    • 相对位置信息:选择正弦余弦曲线函数,可以让模型更加轻易的学习关注相对位置信息
      [ cos ⁡ ( δ ω j ) sin ⁡ ( δ ω j ) − sin ⁡ ( δ ω j ) cos ⁡ ( δ ω j ) ] [ p i , 2 j p i , 2 j + 1 ] = [ sin ⁡ ( ( i + δ ) ω j ) cos ⁡ ( ( i + δ ) ω j ) ] = [ p i + δ , 2 j p i + δ , 2 j + 1 ] \begin{bmatrix}\cos(\delta\omega_j) & \sin(\delta\omega_j)\\-\sin(\delta\omega_j) & \cos(\delta\omega_j)\end{bmatrix}\begin{bmatrix}p_{i,2j}\\p_{i,2j+1}\end{bmatrix}=\begin{bmatrix}\sin((i+\delta)\omega_j)\\\cos((i+\delta)\omega_j)\end{bmatrix}=\begin{bmatrix}p_{i+\delta,2j}\\p_{i+\delta,2j+1}\end{bmatrix} [cos(δωj)sin(δωj)sin(δωj)cos(δωj)][pi,2jpi,2j+1]=[sin((i+δ)ωj)cos((i+δ)ωj)]=[pi+δ,2jpi+δ,2j+1]
      通过一个 2 × 2 2\times2 2×2的投影矩阵(与 i i i值无关),便可以实现线性投影,也可以理解为某个单词的位置信息是其他单词位置信息的线性组合,这种线性组合就意味着位置向量中蕴含了相对位置信息。
      在这里插入图片描述

1.2 简单探讨

不过值得探讨的是此处对位置编码的使用,它可以与词向量直接相加,也可以直接拼接到词向量后面,而论文选择使用前者,并且前者确实足够有效,从直观角度来看,直接相加可能导致信息损失,但这种损失依然被神经网络强大的抽象能力所理解,并从中得到了更加丰富的上下文信息。


二、多头注意力

Transformer总结(一):基础介绍(注意力机制、自注意力机制、位置编码、多头注意力机制)

d2l-10.5 多头注意力

2.1 一般的多头注意力机制

给定查询 q ∈ R d q q\in \mathbb{R}^{d_q} qRdq、键 k ∈ R d k k\in \mathbb{R}^{d_k} kRdk和值 v ∈ R d v v\in \mathbb{R}^{d_v} vRdv,每个注意力头的计算方法为:
h i = f ( W i ( q ) q , W i ( k ) k , W i ( v ) v ) ∈ R p v h_i=f(W_i^{(q)}q,W_i^{(k)}k,W_i^{(v)}v)\in\mathbb{R}^{p_v} hi=f(Wi(q)q,Wi(k)k,Wi(v)v)Rpv
多头注意力的输出需要经过另一个线性转换, 它对应着 h h h个头连结后的结果:
W o [ h 1 ⋮ h h ] ∈ R p v W_o\begin{bmatrix}h_1\\\vdots\\h_h\end{bmatrix}\in \mathbb{R}^{p_v} Wo h1hh Rpv

  • 其中可学习的参数包括: W i ( q ) ∈ R p q × d q W_i^{(q)}\in\mathbb{R}^{p_q\times d_q} Wi(q)Rpq×dq W i ( k ) ∈ R p k × d k W_i^{(k)}\in\mathbb{R}^{p_k\times d_k} Wi(k)Rpk×dk W i ( v ) ∈ R p v × d v W_i^{(v)}\in\mathbb{R}^{p_v\times d_v} Wi(v)Rpv×dv W o ∈ R p o × h p v W_o\in\mathbb{R}^{p_o\times hp_v} WoRpo×hpv
  • 代表注意力汇聚的函数 f f f,此时是缩放点积注意力

在这里插入图片描述

2.2 解码器中的掩码多头注意力机制(Look-ahead Mask)

在Transformer总结(二)中的3.4.2 讨论了掩码机制是在解码器的训练阶段发挥作用,是为了并行计算时可以获得不同时间步的输入,此时将讨论是如何实现这种掩码计算。

图片来源(Illustrated Guide to Transformers Neural Network: A step by step explanation)

首先根据一般的多头注意力计算得到注意力分数矩阵,此时尚未引入mask
在这里插入图片描述

在计算完注意力分数之后,此时分数矩阵还没有经过sofamax操作,将其与一个右上角填充了负无穷大的mask矩阵相加,相加之后得到一个新的注意力分数矩阵。根据观察,可以发现,在这个新的矩阵上,单词与其后的单词的注意力分数变为了负无穷大。
在这里插入图片描述

对注意力分数使用softmax操作,可以发现原先负无穷大的值逼近了0,它们的注意力权重也就可以忽略不计了。在这里插入图片描述


三、残差连接

Deep Residual Learning for Image Recognition论文原文

在Transformer模型中,残差连接(Residual Connection) 通过将输入数据与其通过子层变换后的数据相加,以提高模型的训练稳定性和深度。这种操作不仅保留了原始数据的某些信息,还允许模型学习输入数据的多个层次表示。
在这里插入图片描述


四、层归一化

详解三种常用标准化 Batch Norm & Layer Norm & RMSNorm
Group Normalization(图片出处)

4.1 对比不同的Normalization

在这里插入图片描述

  • N N N表示批量轴
  • C C C表示通道轴(特征轴)
  • ( H , W ) (H,W) (H,W)表示空间轴
  • 蓝色像素是相应计算时涉及到的位置,通过相同的平均值和方差进行归一化,聚合这些像素的值来计算。

从上图不难发现,不同的归一化方法区别只在于像素集选取的差异。但上图对于数据的表示需要特别说明一下:

  • 如果是2D图片,可以构成一个4D向量,以 (N, C, H, W ) 顺序索引特征,其中 N 是批处理轴,C 是通道轴, H和W是空间高度和宽度轴。
  • 如果是句子,可以将其理解为高度为1的数据,像素的通道数就是token的特征向量长度, C C C作为词嵌入特征向量的索引, ( H , W ) (H,W) (H,W)理解为一个句子中词元的索引。

4.2 Batch Normalization的实现

在这里插入图片描述
如果以 S i S_i Si表示每次计算归一化时涉及到的位置集,Batch Normalization对应的 S i S_i Si定义为:
S i = { k ∣ k C = i C } S_i=\{k\vert k_C=i_C\} Si={kkC=iC}
这意味着只要特征轴索引相同的位置会被一起归一化。

结合上图,Batch Normalization处理的是同一个特征轴下的元素,需要访问每个批次以及其中所有的样本。

  • 如果是图片,它将访问所有批次所有样本的某张特征图,4D向量为(N, C, H, W ) 时,将计算C次归一化
  • 一般不使用BN来处理NLP问题,因为句子长度不一,如果以特征图的角度来理解,也就是不同批次下特征图的大小不同,不利于使用。

4.3 Layer Normalization的实现

在这里插入图片描述
Layer Normalization对应的 S i S_i Si定义为:
S i = { k ∣ k N = i N } S_i=\{k\vert k_N=i_N\} Si={kkN=iN}
这意味着只要批量轴索引相同的位置会被一起归一化。

不过此时需要特别说明

  • CV领域是使用上述公式来进行层归一化计算,如果是图片,每次计算它将访问同一批次下所有的元素(同一批次里所有样本所有通道)
  • 在Transformer模型中,是以token为单位单独计算,每次计算它只会访问句子中一个词元对应的特征向量,如对于形状为(2,3,4)的向量,它将计算6次层归一化。

4.4 Layer Normalization所处位置的讨论

OnLayer Normalization in the Transformer Architecture
《为什么Pre Norm的效果不如Post Norm?》-苏剑林
pre-norm 和 post-norm 的区别 -唐翔昊
在这里插入图片描述
在上述架构中,改变了归一化操作所处的位置,具体而言就是 P r e   N o r m Pre\ Norm Pre Norm是先进行归一化,再将数据输入子层,最后进行残差,公式描述如下:
P r e   N o r m :    x t + 1 = x t + F t ( N o r m ( x t ) ) Pre\ Norm:\ \ x_{t+1}=x_t+F_t(Norm(x_t)) Pre Norm:  xt+1=xt+Ft(Norm(xt))
P o s t   N o r m :    x t + 1 = N o r m ( x t + F t ( x t ) ) Post\ Norm:\ \ x_{t+1}=Norm(x_t+F_t(x_t)) Post Norm:  xt+1=Norm(xt+Ft(xt))

  • 同一设置之下,Pre Norm结构往往更容易训练,但最终效果通常不如Post Norm。
    • 一个L层的Pre Norm模型,其实际等效层数不如L层的Post Norm模型,而层数少了导致效果变差。
    • Pre Norm结构会过度倾向于恒等分支(bottom layers),从而使得Pre Norm倾向于退化(degradation)为一个“浅而宽”的模型,最终不如同一深度的Post Norm。

4.5 何以使用LN而非BN

  • 4.2中已经说明了BN不适用于不定长的序列,可能导致训练的不稳定。
  • BN会损失样本之间的信息差异性,而LN是按照词元进行计算,可以保留不同词之间的差异性。

五、基于位置的前馈网络

在这里插入图片描述

F F N ( X ) = m a x ( 0 , X W 1 + b 1 ) W 2 + b 2 FFN(X)=max(0,XW_1+b_1)W_2+b_2 FFN(X)=max(0,XW1+b1)W2+b2
在Transformer模型中,前馈网络(Feed-Forward Network,FFN)的作用是对序列数据进行进一步的非线性变换,使得模型能够捕捉到更复杂的特征,具体而言就是先将数据映射到高维空间再映射到低维空间

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

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

相关文章

vue3使用simple-mind-map,分分钟开发思维导图

这几天又来了新需求,老板想在系统里一眼可以看到所有部门的相关信息,并且可以编辑,分配任务。所以需要实现一个可编辑的思维导图页面。 思维导图?感觉很复杂的样子,这种很牛p的东西应该不是我三两天就能手写搞定的&am…

I2C代码硬件实现

环境 芯片:STM32F103ZET6 库:来自HAL的STM32F1XX.H 原理图 有图可知SCL和SDA两条线接到了PB10和PB11 芯片的复用功能是I2C2 代码 Driver_I2C.h #include "Driver_I2C.h"void Driver_I2C_Init(void) {/* 1. 打开引脚和片上外设的时钟 I2C2 PB10 PB11 …

【提示学习论文】AAPL: Adding Attributes to Prompt Learning for Vision-Language Models

AAPL: Adding Attributes to Prompt Learning for Vision-Language Models(2024CVPR) 问题:在unseen class上,性能提升有限解决:在提示学习中引入对抗性标记嵌入adversarial token embedding, 将低层次视觉…

SOMEIP_ETS_060: SD_Discover_Port_and_IP

测试目的: 验证设备(DUT)能够响应测试器发出的多播FindService消息,并返回一个单播OfferService消息,列出所有必要的IP地址和端口,以满足与DUT的所有可能通信需求。 描述 本测试用例旨在检查DUT是否能够…

清理linux的buff/cache缓存

通过free -m命令,查看内存占用率。 如果buff/cache 占用内存过高的话,执行以下命令 sync && echo 1 > /proc/sys/vm/drop_caches sync && echo 2 > /proc/sys/vm/drop_caches sync && echo 3 > /proc/sys/vm/drop_ca…

文字怎么生成二维码扫码展示?文本活码在线生成的3步操作技巧

现在很多人会将文本信息用生成二维码的方式来展现,通过二维码来分享内容能够有效的提升内容的传播效率,简化其他人获取信息的流程。只需要通过扫码就能在手机上预览内容,更加符合现在人们的生活习惯,而且这种方式可以降低制作者的…

bedtools安装与使用(v2.31.1)生物信息学工具29

01 背景 bedtools:一个用于基因组算术的强大工具集 总体而言,bedtools 工具集是一个多功能的工具包,可用于广泛的基因组分析任务。其中最广泛使用的工具能够进行基因组算术运算,即在基因组上执行集合论操作。例如,be…

前端实现投影坐标和地理坐标系(CGCS2000)转换

前言 地理坐标系和投影坐标系是地理信息系统(GIS)和制图学中用于描述地球表面位置的两种不同的参考系统。它们在使用方式和应用场景上有显著的区别。 1、什么是地理坐标系和投影坐标系? 1.1、地理坐标系 地理坐标系是基于地球的三维球面模…

虚拟机安装centos7-桥接模式

1、打开虚拟机,点击文件,选择新建虚拟机 2、选择典型,点击下一步 3、选择稍后安装操作系统,点击下一步 4、选择系统类型及版本,点击下一步,因centos7是Linux操作系统,且是64位的,所以…

隐藏的艺术:滥用 404 页面的新 Magecart 活动

介绍 一项新的、复杂的、隐蔽的 Magecart 网页窃取活动已针对 Magento 和 WooCommerce 网站展开。该活动的部分受害者与食品和零售行业的大型组织有关。 根据我们发现的证据,该活动已经持续了几周,在某些情况下甚至更长。该活动采用了一种我们以前从未遇到过的高级隐藏技术…

Linux 内核源码分析---组播/策略路由选择

在 Linux 实现中,组播路由选择不像单播路由选择那样可以由内核单独处理,组播守护程序种类繁多,如 mrouted 和 pimd,它们分别基于距离矢量组播路由选择协议(Distance Vector Multicast Routing Protocol,DVM…

《在数字化时代筑牢软件服务的稳定性防线》

📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…

transform解题reserve

1.64位无壳,拖入ida检查。 选中函数按n键可以更改名称,便于分析和利用 。 重点: 2.分析加密过程,理解用于后续脚本编写。 str2以下表对应的元素作为索引遍历flag的每个元素赋值给str1数组,之后与新的str1每个元素异或…

数分基础(02)销售趋势分析

文章目录 销售趋势分析1. 数据集2. 销售趋势3. 步骤3.1 数据读取与预处理:3.2 计算按月、季度、年度的总销售额 4. 分析工具:Python 或 Excel5. Python5.1 Global_Superstore2.xlsx 文件位置5.2 读取数据集并检查其基本信息5.3 绘制趋势图来观察销售额的…

掌握C语言文件操作

1. 什么是文件 磁盘上的文件就是文件。 然而在程序设计中,我们所谈的文件有两种,一种是程序文件,另一种是数据文件(从文件功能的角度来分类的) 文件名 一个文件要有一个唯一的文件标识,以便用户识别和引用…

金蝶云星空开发简单账表《物料年采购入库报表》

文章目录 业务背景业务需求方案设计详细设计测试业务背景 系统现有功能不支持查询过去一年内所有物料的入库数,需要人工导出,然后再汇总。 业务需求 可以查询所有物料的入库数,多个物料,单个物料,多个组织,单个组织的入库数,以及支持查询入库数大于某个阈值。 方案设…

燃气灶行业分析、淘宝平台销售分析

内容:1.燃气灶(不含集成灶)整体行业分析 2.淘宝平台销量分析 3.针对性建议(涉及商业信息就略) 一、基本情况 (一)产品定义: 以液化石油气(液态)、人工煤…

DRF——router路由,parser解析器

文章目录 路由解析器1.JSONParser2.FormParser3.MultiPartParser4.FileUploadParser 路由 在之前进行drf开发时,对于路由我们一般进行两种配置: 视图继承APIView from django.urls import path from app01 import viewsurlpatterns [path(api/users/, …

趣味算法------尾部零的个数(C语言,python双重解法)

目录 题目描述&#xff1a; 解题思路&#xff1a; 具体代码&#xff1a; 注意&#xff1a; 题目描述&#xff1a; 给出数字 n(0<n<1000000)&#xff0c;计算出 n 阶乘尾部零的个数。 输入输出格式 输入格式 一个整数。 输出格式 一个整数。 输入输出样例 输入 11 输…

技术分享-商城篇-用户订单管理(十五)

前言 在前面的文章中&#xff0c;我们详细阐述了商品模块、购物模块、支付模块等B2B2C&#xff08;Business-to-Business-to-Consumer&#xff09;电商中核心基础模块&#xff0c;接下来我们来聊一下基础模块中最后一个环节订单模块&#xff0c;订单模块属于购物体系闭环内容&…