考古:Transformer

news2025/1/21 4:49:09

论文1: 《Attention is all you need》

模型体系结构

Encoder 将符号表示的输入序列 ( x 1 , . . . , x n ) (x_1,...,x_n) (x1,...,xn)映射到连续表示的序列 z = ( z 1 , . . . , z n ) z=(z_1,...,z_n) z=(z1,...,zn)。 给定 z z z,Encoder 然后一次产生一个元素的符号输出序列 ( y 1 , … , y m ) (y_1,…,y_m) (y1ym)
在每一步,模型都是自回归的,在生成下一步时,将先前生成的符号作为附加输入。

Transformer 架构:
Transformer
Encoder: Encoder有 N = 6 N=6 N=6 层,每层有两个子层,第一层是多头注意力机制,第二层是简单的、位置全连接的前馈网络。 在两个子层中的每一个子层周围使用残差连接,然后进行层归一化。即每个子层的输出为: LayerNorm ( x + Sublayer(x)) (1) \tag{1} \textmd{LayerNorm}(x+\textmd{Sublayer(x))} LayerNorm(x+Sublayer(x))(1)其中 Sublayer(x) \textmd{Sublayer(x)} Sublayer(x) 是子层本身实现的函数。
在这里插入图片描述

Decoder: Decoder也是 N = 6 N=6 N=6 层,除了每个 Encoder 中的两个子层外,Decoder 还插入了第三个子层,该子层对 Encoder Stack 的输出执行多头注意力机制。修改了 Decoder Stack 中的自注意子层,确保对位置 i i i 的预测只能依赖于小于位置 i i i 的已知输出。

Attention

Self-Attention

输入包含维度 d k d_k dk 的 Query 和 Key 以及维度为 d v d_v dv 的 Value.
Self-Attention
Attention ( Q , K , V ) = softmax ( Q K T d k ) V . (2) \tag{2} \textmd {Attention}(Q,K,V)=\textmd{softmax}(\frac {QK^T} {\sqrt{d_k}})V. Attention(Q,K,V)=softmax(dk QKT)V.(2)其中的 1 d k \frac 1 {\sqrt {d_k}} dk 1 为尺度因子 。对于输入序列中每个单词之间的相关性得分进行归一化,归一化的目的主要是为了训练时梯度能够稳定,即为了防止维数过高时的值过大导致softmax函数反向传播时发生梯度消失。两种最常用的 Attention 函数为 additive attentiondot-product (multi-plicative) attention.

a
不同的 X i X^i Xi 分享了同一个 W Q 、 W K 、 W V W^Q、W^K、W^V WQWKWV。通过这个操作, a i a^i ai 之间已经发生了某种程度上的信息交换。获取到不同的 Q i 、 K i 、 V i Q_i 、K_i 、V_i QiKiVi ,从而获取不同 tokens 的 Attention。

Self-Attention通过计算一个注意力权重矩阵,来表征输入序列中每个 token 与其他 token 之间的关系。这个注意力权重矩阵可以看作是每个 token 对其他 token 的重要性权重。通过将注意力权重矩阵与输入序列的嵌入向量进行加权求和(权重即Sotmax()),可以融合各个 token 之间的信息。

具体来说,Self-Attention的计算过程如下:
1.将输入序列中每个token的嵌入向量分别作为查询向量(query)、键向量(key)和值向量(value)。
2.计算查询向量与键向量之间的相似度得分,一般采用点积或双线性形式进行计算。
3.对相似度得分进行归一化,得到注意力权重矩阵,它表示每个token对其他token的重要性权重。
4.将注意力权重矩阵与值向量进行加权求和,得到每个token融合了其他token信息的表示。
5.重复以上步骤多次,每次使用不同的查询、键、值来融合不同的信息。

通过Self-Attention机制,模型可以同时考虑输入序列中每个token与其他token之间的关系,并将这些关系进行融合,从而获取全局的上下文信息。 这使得模型能够捕捉到长距离依赖和语义关联,从而提高了模型的表达能力和性能。

Multi-Attention

如果使用不同的 W Q 、 W K 、 W V W^Q、W^K、W^V WQWKWV就能得到不同的 Q 、 K 、 V Q、K、V QKV, Multi-headed Attention就是指用了很多个不同的 W Q 、 W K 、 W V W^Q、W^K、W^V WQWKWV.
Multi-head
MultiHead ( Q , K , V ) = Concat ( h e a d 1 , . . . , h e a d h ) W O where  h e a d i = Attention ( Q W i Q , K W i K , V W i V ) . (3) \tag{3} \textmd{MultiHead}(Q,K,V)=\textmd{Concat}(head_1,...,head_h)W^O\\ \textmd{where} \space head_i=\textmd{Attention}(QW_i^Q,KW_i^K,VW_i^V). MultiHead(Q,K,V)=Concat(head1,...,headh)WOwhere headi=Attention(QWiQ,KWiK,VWiV).(3)
在这里插入图片描述

Multi-Head Attention(多头注意力)是Self-Attention机制在Transformer模型中的一种变体,它用于增强模型对不同关系和特征的建模能力。

在Self-Attention中,通过计算注意力权重矩阵来融合各个token之间的信息。而在Multi-Head Attention中,模型会同时使用多个注意力头(attention head)来进行注意力计算。

具体来说,Multi-Head Attention通过将输入的嵌入向量分别经过多个独立的查询、键和值投影矩阵来产生多组查询向量、键向量和值向量。然后,每个注意力头都会对这些查询、键和值进行自注意力计算,得到多个注意力权重矩阵。最后,这些注意力权重矩阵会被拼接起来,并经过另一个投影矩阵进行线性变换,得到最终的注意力输出。

通过使用多个注意力头,Multi-Head Attention能够并行地学习不同的关系和特征表示。 每个注意力头可以关注输入序列中不同的相关性,从而提高了模型的表达能力和泛化能力。每个头独立地学习权重,使得模型能够在不同的表示子空间中进行信息融合,捕捉不同的语义特征。

前馈网络

FFN ( x ) = max ⁡ ( 0 , x W 1 + b 1 ) W 2 + b 2 (4) \tag{4}\textmd{FFN}(x)=\max (0,xW_1+b_1)W_2+b_2 FFN(x)=max(0,xW1+b1)W2+b2(4)

Embeding

输入模型的整个 Embedding 是Word Embedding 与 Positional Embedding 直接相加之后的结果。
Encoder输入的是单词的embedding:对其进行随机初始化(当然也可以选择Pre-trained的结果),但设为Trainable。这样在training过程中不断地对embeddings进行改进。 即End2End训练方式。

位置编码

由于 transformer 模型不包含递归和卷积,为了使模型能够利用序列的顺序,必须注入一些关于 tokens 在序列中的相对或绝对位置的信息。因此,在 Encoder Stack 和 Decoder Stack 底部的输入 Embeding 中添加“位置编码”。
使用不同频率的正弦和余弦函数: P E ( p o s , 2 i ) = sin ⁡ ( p o s / 1000 0 2 i / d m o d e l ) P E ( p o s , 2 i + 1 ) = cos ⁡ ( p o s / 1000 0 2 i / d m o d e l ) (5) \tag{5}PE_{(pos,2i)}=\sin(pos/10000^{2i/d_{model}})\\ PE_{(pos,2i+1)}=\cos (pos/10000^{2i/d_{model}}) PE(pos,2i)=sin(pos/100002i/dmodel)PE(pos,2i+1)=cos(pos/100002i/dmodel)(5)其中 p o s pos pos 是位置, i i i 是维度。位置编码的每个维对应于一个正弦曲线。 波长从 2 π 2π 2π 10000 ⋅ 2 π 10000·2π 100002π 呈几何级数。
根据公式 sin ⁡ ( α + β ) = sin ⁡ α cos ⁡ β + cos ⁡ α sin ⁡ β \sin (\alpha+\beta)=\sin\alpha \cos\beta+\cos\alpha\sin\beta sin(α+β)=sinαcosβ+cosαsinβ 以及 cos ⁡ ( α + β ) = cos ⁡ α cos ⁡ β − sin ⁡ α sin ⁡ β \cos (\alpha+\beta)=\cos \alpha\cos\beta-\sin\alpha\sin\beta cos(α+β)=cosαcosβsinαsinβ, 对于任何固定的偏移 k k k P E p o s + k PE_{pos+k} PEpos+k可以表示为 P E p o s PE_{pos} PEpos 的一个线性函数。

参考博客(1):Self-Attention和Transformer
参考博客(2):详解Transformer (Attention Is All You Need)
参考博客(3):Transformer模型详解
参考博客(4):深度学习中的注意力机制

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

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

相关文章

网络安全合规-个人信息安全影响评估

信息安全技术个人信息安全影响评估指南》 一、个人信息安全影响评估定义 个人信息安全影响评估Personal Information Security Impact Assessment,针对个人信息处理活动,检验其合法合规程度,判断其对个人信息主体合法权益造成损害的各种风险…

操作系统原理 —— 什么是进程互斥? 以及进程互斥的实现方式(十四)

什么是进程互斥? 在操作系统中,有两种资源共享方式,一种是互斥共享方式,一种是同时共享方式。 互斥共享方式就是指在系统中的某些资源,虽然可以提供给多个进程使用,但一个时间段内只允许一个进程访问该资…

看懂身份证识别OCR:从算法到 API 使用

引言 身份证识别OCR API是一种基于 OCR 技术的身份证识别服务,可以将身份证上的各种信息自动识别并提取出来,包括姓名、身份证号码、性别、民族、出生年月日、地址、签发机关和有效期等。 这项技术可以大大提高身份验证和信息采集的准确性和效率&#…

SpringBoot——配置文件的作用

简单介绍: 之前我们介绍了有关于SpringBoot文件结构的resources文件夹下面的两个子文件夹的作用,也就是在我们访问页面的时候使用方式静态资源的地方,那么在这个文件夹下面还有一个文件叫做application.properties,这个文件就是项…

【容器化应用程序设计和开发】2.6 DevOps实践和持续集成/持续部署流程

往期回顾: 第一章:【云原生概念和技术】 第二章:2.1 容器化基础知识和Docker容器 第二章:2.2 Dockerfile 的编写和最佳实践 第二章:2.3 容器编排和Kubernetes调度 第二章:2.4 容器网络和存储 第二章&…

IP信息收集

1.DNS服务器类型 例如bbs.neko.com,本地DNS服务器,根DNS服务器,TLD(TOP Level DNS)顶级域名服务器解析neko.com,authoritative DNS server(解析bbs.三级域名) 两种查询方式&#x…

2023年5月深圳数据分析师需要哪些证书?当然CPDA

CPDA数据分析师认证是大数据方面的认证,助力数据分析人员打下扎实的数据分析基础知识功底,为入门数据分析保驾护航。 帮助数据分析人员掌握系统化的数据分析思维和方法论,提升工作效率和决策能力,遇到问题能够举一反三&#xff0c…

《针灸》笔记(倪海厦先生人纪系列针灸篇——任脉)

程序员上了年纪,各种职业病就来了,人工智能成为好工具的同时,自己的时间也多了一些。 了解他才能判断他的真伪,没学过就认为中医是糟粕的,请划走。 学到什么记什么,线上线下齐下手,自用笔记&…

JAVA项目通过IDEA如何构建可执行JAR

开发JAVA工程代码(main方法启动)如何构建出可以通过java -jar命令直接执行的jar?如果工程中依赖其他jar又如何处理?本文即针对以上两点通过IDEA开发工具来做一个简单的分析和尝试,测试如下四种方法,如有瑕疵请轻喷。 文字目录 1.…

命令行下载谷歌云盘超大文件

在这申请API:https://developers.google.com/oauthplayground/

GL绘制自定义线条3_自定义线帽

安卓Path搭配Paint可以设置线帽,我想能不能把我自己的线条绘制Demo也加上类似的功能。 线头规则描述: 1、设一个线宽一半的线段,坐标为(0, 0)到(-lineWidth / 2, 0)。 2、设步骤1的线段有一垂直于它的向量(0,1),然后传…

成功的项目管理的关键之一——时间计划

在现实的项目管理中,由于时间管理控制不力,导致项目拖期交付使用而使各相关方蒙受损失的案例屡见不鲜,究其原因,不完善的项目时间计划安排是一个重要的方面。成功的项目管理的关键之一就是成功的时间管理,而成功的时间…

Docker中如何限制容器可用的 CPU

默认情况下容器可以使用的主机 CPU 资源是不受限制的。和内存资源的使用一样,如果不对容器可以使用的 CPU 资源进行限制,一旦发生容器内程序异常使用 CPU 的情况,很可能把整个主机的 CPU 资源耗尽,从而导致更大的灾难。本文将介绍…

FileInputFormat的实现类

FileINputFormat的切片机制 FileInputFormat是MapReduce中用于处理文件输入的基类,它定义了输入文件的切片规则,并提供了默认的切片实现。具体来说,FileInputFormat会根据输入文件的大小和块大小等因素计算出每个切片的起始位置和长度&#…

【机器学习】多元线性回归详解和特征压缩

注意⚠️阅读本文前,你应该需要掌握:机器学习线性回归模型、高等数学微积分部分内容、线性代数矩阵部分内容 前情提要:https://blog.csdn.net/weixin_45434953/article/details/130593910 一、多元线性回归的假设函数 首先我们考虑以下的例…

linux Ubuntu Python 3.10 环境报错与解决方案集合

环境配置参考文章:使用Alpaca-Lora基于LLaMA(7B)二十分钟完成微调 1.报错.nvidia/cublas/lib/libcublas.so.11: undefined symbol: cublasLtHSHMatmulAlgoInit, version libcublasLt.so.11 解决方法: pip uninstall nvidia_cublas_cu112.CUDA版本对应…

Guitar Pro8优秀的自动扒谱软件

对于一些技术娴熟的音乐人来说,不仅需要演奏已有的乐谱,有时还需要从听到的其他音乐中将谱子扒下来。扒谱时可以借助扒谱软件,比如Guitar Pro,就是一款优秀的扒谱软件。下面就和大家分享一下guitar pro能自动扒谱吗,gu…

基于Java+SpringBoot+Vue餐厅点餐管理系统设计和实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

spring boot与asp.net core区别联系

之前一直使用C#编写网站,最近也在了解学习java,根据目前我了解的和学习到的做一个总结分析,写的不好,大家见谅。 联系 名称javac#DIspringasp.net core、Autofac、UnityAOPspringasp.net coreORMmubatis、HibernateEntityFramew…

【MySQL】MySQL索引之最左前缀优化

文章目录 一、联合索引联合索引执行示例 二、索引的 order by优化MySQL中的排序方式数据准备无索引有索引where子句索引字段顺序不一致order by索引字段顺序不一致索引字段升降序不一致 三、总结 一、联合索引 对主键建立的索引叫做聚簇索引, 对普通字段建立的索引叫做二级索引…