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

文章目录

  • 一、位置编码
    • 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.mzph.cn/web/51190.shtml

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

相关文章

Variomes:支持基因组变异筛选的高召回率搜索引擎

《Bioinformatics》2022 Variomes: https://candy.hesge.ch/Variomes Source code: https://github.com/variomes/sibtm-variomes SynVar: https://goldorak.hesge.ch/synvar 文章摘要(Abstract) 动机(Mot…

电子电气架构--- 智能汽车电子架构的核心诉求

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不…

8.23工作感悟 关于div样式

一、关于div 样式嵌套在el-dialog框里面,如何让div框里面的东西,例如图片的大小不超出dialog框 首先对div框进行一个自定义class ‌div的class属性‌用于为div元素指定一个或多个类名,类名之间用空格分隔。类名可以在CSS样式表中使用,以定…

统计Statistics | AnyLogic 帮助

统计Statistics | AnyLogic 帮助 统计对象计算一系列数据样本的统计信息(平均值、最小值、最大值等),数据类型为double。 根据数据被视为离散还是连续,对象的工作原理不同。 演示模型: 观测次数的统计函数打开AnyL…

【经验】linux下cuda的更换

linux下cuda的更换 查看当前cuda和cudnn的版本 nvcc -Vcudnn版本 cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2下载对应版本的cuda 查看驱动版本535.54.03 下载对应的cuda版本 版本查看https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.htm…

内存管理篇-02内存硬件电路和接口

1. 内存硬件实现机制 通过D触发器构建寄存器和内存的结构对比,这里主要先表达sram复杂,dram简单。 2. sram和ddr sdram结构图对比 主要是想对比sram和dram在和CPU连接过程的差异。sram需要的地址线较多,dram需要的较少,但是需要多次发送&…

货车制造5G智能工厂工业物联数字孪生平台,推进制造业数字化转型

货车制造5G智能工厂工业物联数字孪生平台,推进制造业数字化转型。随着5G技术的飞速发展与工业物联网的深度融合,货车制造5G智能工厂工业物联数字孪生平台应运而生,它不仅重新定义了生产模式,更以强大的技术驱动力,推动…

[数据集][目标检测]电力场景输电线防震锤检测数据集VOC+YOLO格式2721张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2721 标注数量(xml文件个数):2721 标注数量(txt文件个数):2721 标注…

武汉流星汇聚:亚马逊领跑全球电商,中国卖家迎来前所未有机遇窗口

在数字经济的浪潮中,亚马逊如同一艘巨轮,乘风破浪,引领着全球电商行业的航向。其每月近30亿次的访问量,不仅彰显了其在全球市场的强大影响力,更为中国卖家提供了前所未有的发展机遇。在这个平台上,中国卖家…

Unity URP Shader 修改深度让人物不再被地面遮挡

Unity URP Shader 修改深度让人物不再被地面遮挡 前言项目场景布置代码编写 前言 遇到一个小问题,人物总是被XY平面的地面遮挡,于是在Shader中改一下深度输出,这样地面再也不会挡住人物了。 项目 场景布置 将人物放到XY平面的后面 配置S…

【论文分享】Graviton: Trusted Execution Environments on GPUs 2018’OSDI

目录 AbstractIntroductioncontributions BackgroundGPUSoftware stackHardwareContext and channel managementCommand submissionProgramming modelInitializationMemory allocationHost-GPU transfersKernel dispatch Sharing Intel SGX Threat ModelOverviewGraviton Archi…

设计模式笔记01(java版)

文章目录 设计模式概述学习设计模式的必要性设计模式分类创建型模式结构型模式行为型模式 UML类图概述类图的作用类图表示法类的表示方式类与类之间关系的表示方式1,单向关联2,双向关联3,自关联聚合关系组合关系依赖关系继承关系实现关系 软件…

Pytorch 张量运算函数(补充)

mean() mean()函数是进行张量均值计算的函数,常用参数可以设置参数dim来进行对应维度的均值计算 以下是使用一个二维张量进行演示的例子 import numpy as np import torch device torch.device(mps if torch.backends.mps.is_available() else cpu) print(device ) data1 …

C++ | Leetcode C++题解之第367题有效的完全平方数

题目&#xff1a; 题解&#xff1a; class Solution { public:bool isPerfectSquare(int num) {double x0 num;while (true) {double x1 (x0 num / x0) / 2;if (x0 - x1 < 1e-6) {break;}x0 x1;}int x (int) x0;return x * x num;} };

linux系统,ubuntu安装英伟达NVIDIA4090显卡驱动

文章目录 前言下载英伟达NVIDIA官方驱动安装NVIDIA驱动远程安装关闭交互界面设置权限&#xff08;自己确认版本号5&#xff09;安装&#xff08;自己确认版本号5&#xff09;打开交互界面&#xff0c;并重启系统验证是否安装成功 异常处理问题1问题2问题3&#xff08;可能没解决…

python小游戏——躲避球(可当课设)

游戏简介&#xff1a; 没有美术&#xff0c;画面简洁&#xff08;懒得做&#xff09;。玩家控制小球躲避敌人&#xff08;上下左右&#xff0c;闪避&#xff09;&#xff0c;敌人体积越大速度越慢&#xff0c;随机生成道具球&#xff08;目前只有生命球&#xff09;&#xff0…

​14:00面试,14:06就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到5月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

Redis内存淘汰

Redis内存淘汰 Redis可以存储多少数据 maxmemory配置&#xff0c;默认是注释掉的。 #maxmemory <bytes>我们可以主动配置maxmemory&#xff0c;maxmemory支持各种单位&#xff0c;默认是字节 maxmemory 1024 maxmemory 1024KB maxmemory 1024MB maxmemory 1024GB当Re…

shallowReactive 与 shallowRef

除了之前的 ref与reactive 之外&#xff0c;Vue3 还准备了另外两个API&#xff0c;也是用来对响应式数据做处理&#xff0c;那就是 shallowReactive 与 shallowRef shallowReactive 文档解释&#xff1a;reactive() 的浅层作用形式&#xff0c;只能定义对象类型的数据。和 r…

Spring Boot整合Sentry

Spring Boot整合Sentry Sentry搭建Sentry中新建项目集成SpringBoot1. 添加依赖2. 配置Sentry4. 日志集成&#xff08;可选&#xff09;5. 测试Sentry集成6. 配置实时告警配置Alert Settings配置警报规则 发送消息服务代码参照文档 Sentry 是一个日志平台&#xff0c;分为客户端…