Transformer详解:从放弃到入门(一)

news2024/9/22 15:47:44

  Transformer由论文《Attention is All You Need》提出,是一种用于自然语言处理(NLP)和其他序列到序列(sequence-to-sequence)任务的深度学习模型架构,在自然语言处理领域获得了巨大的成功,在这个系列的文章中,我会将模型拆解,并逐一介绍里面的核心概念。

Transformer模型

  Transformer结构如图所示,属于encode-decode架构,左边是编码器,右边是解码器。它们都由N个Transformer Block组成。编码器的输出作为解码器多头注意力的Key和Value,Query来自解码器输入经过掩码多头注意力后的结果。
在这里插入图片描述
  主要涉及以下几个模块:

  • 嵌入表示(Input/Output Embedding) 将每个标记(token)转换为对应的向量表示。
  • 位置编码(Positional Encoding) 由于没有时序信息,需要额外加入位置编码。
  • 多头注意力(Multi-Head Attention) 利用注意力机制对输入进行交互,得到具有上下文信息的表示。根据其所处的位置有不同的变种:邻接解码器嵌入位置是掩码多头注意力,特点是当前位置只能注意本身以及之前位置的信息;掩码多头注意力紧接的多头注意力特点是Key和Value来自编码器的输出,而Query来自底层的输出,目的是在计算输出时考虑输入信息。
  • 层归一化(Layer Normalization) 作用于Transformer块内部子层的输出表示上,对表示序列进行层归一化。
  • 残差连接(Residual connection) 作用于Transformer块内部子层输入和输出上,对其输入和输出进行求和。
  • 位置感知前馈网络(Position-wise Feedforward Network) 通过多层全连接网络对表示序列进行非线性变换,提升模型的表达能力。
    下面依次介绍各模块的功能和关键部分的实现。

嵌入表示

  对于一段输入的文本序列,一个常识是,我们首先应该把它进行分词并进行Word Embedding工作,这有两点原因:计算机无法直接处理一个单词或者一个汉字,需要把一个token转化成计算机可以识别的向量;Transformer对文本的建模是基于细粒度的。
  Embedding(嵌入表示)就是用一个低维稠密的向量表示一个对象,这里的对象指的是句子中的一个token(词)。Embedding向量能够表达对象的语义特征,两个向量之间的距离反映了对象之间的相似性。如果这两个token很像,那么得到的两个向量之间的距离应该很小。
  经过Word Embedding层后,我们就拿到了文本初始的token级别的表示,需要注意的是,bert对于英文的分词是以词为单位,对中文的分词则是以汉字为单位。

位置编码

  经过Word Embedding后,我们获得了词与词之间关系的表达形式,但是,由于Transformer不是基于类似RNN循环的方式,而是一次为所有的token进行建模,这就导致enbedding中不包含token在句子中的位置信息,因此要将位置信息加进去,结合了这种方式的词嵌入就是Position Embedding了。
  为了实现这一点,我们通常容易想到两种方式:(1)通过网络来学习;(2)预定义一个函数,通过函数计算出位置信息。Transformer的作者对以上两种方式都做了探究,发现最终效果相当,于是采用了第2种方式,从而减少模型参数量,同时还能适应即使在训练集中没有出现过的句子长度。公式为: P E ( p o s , 2 i ) = s i n ( p o s 1000 0 2 i / d ) PE(pos,2i)=sin(\frac{pos}{10000^{2i/d}}) PE(pos,2i)=sin(100002i/dpos) P E ( p o s , 2 i + 1 ) = c o s ( p o s 1000 0 2 i / d ) PE(pos,2i+1)=cos(\frac{pos}{10000^{2i/d}}) PE(pos,2i+1)=cos(100002i/dpos)  其中pos表示标记所在的位置;i代表维度,即位置编码的每个维度对应一个波长不同的正弦或余弦波,波长从 2 π 2π 2π 10000 ⋅ 2 π 10000 ⋅ 2π 100002π成等比数列;d表示位置编码的最大维度,和词嵌入的维度相同。
  为何使用这种方式编码能够代表不同位置信息呢?由公式可知,每一维 i 都对应不同周期的正余弦曲线: i = 0 i=0 i=0时是周期为 2 π 2π 2π s i n sin sin函数, i = 1 i=1 i=1时是周期为 2 π 2π 2π c o s cos cos函数…对于不同的两个位置 p o s 1 pos1 pos1 p o s 2 pos2 pos2,若它们在某一维上有相同的编码值,则说明这两个位置的差值等于该维所在曲线的周期,即 ∣ p o s 1 − p o s 2 ∣ = T i |pos1-pos2|=T_i pos1pos2∣=Ti。而对于另一个维度 j ( j ≠ i ) j(j\neq i) j(j=i),由于 T i ≠ T j T_i\neq T_j Ti=Tj,因此 p o s 1 pos1 pos1 p o s 2 pos2 pos2在这个维度 j j j上的编码值就不会相等,对于其它任意 k ∈ { 1 , 2 , . . . , d − 1 } ; k ≠ i k\in \{1,2,...,d-1\};k\neq i k{1,2,...,d1};k=i也是如此。这种生成位置编码的方式保证了不同位置在所有维度上不会被编码到完全一样的值,从而使每个位置都获得独一无二的编码。Position Embedding的内积表示了位置的相对距离。内积的结果是对称的,所以没有方向信息,参考下图:
在这里插入图片描述
  最后得到的位置编码需要和标记的词嵌入向量进行相加。pytorch中给了positional_encodings.torch_encodings自动的实现位置编码,我们给一个使用示例。

from positional_encodings.torch_encodings import PositionalEncoding1D

def get_pos_encode(token_fea):
    fea_dim = token_fea.shape[2]
    p_1d_feature = PositionalEncoding1D(token_fea)
    positional_fea = p_1d_image(token_fea).cuda()
    return positional_fea 

# 生成位置编码,加入到enbedding中
positional_enbedding = get_pos_encode(token_fea)
token_fea = token_fea + positional_enbedding 

  下一篇,我将介绍Transformer中的多头注意机制。

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

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

相关文章

自动化运维工具---Ansible

一 Puppet Puppet是历史悠久的运维工具之一。它是一种基础架构即代码(laC)工具,使用户可以定义其基础 架构所需的状态,并使系统自动化以实现相同状态。 Puppet可监视用户的所有系统,并防止任何偏离已定义状态的情况。从简单的工作流程自动…

数据仓库基础理论(学习笔记)

数据仓库基础理论 1.数据仓库概念 2.数据仓库为何而来 3.数据仓库主要特征 4.OLTP、OLAP系统 5.数据仓库与数据库的区别 6.数据仓库与数据集市的区别 7.数据仓库分层架构 7.1为什么要分层? 8.ETL、ELT

NFS共享存储服务配置实践

一、NFS 1.NFS定义 NFS(Network File System)网络文件服务:基于TCP/IP传输的网络文件系统协议,NFS服务的实现依赖于RPC(Remote Process Call)远端过程调用:通过使用NFS协议,客户机…

ICode国际青少年编程竞赛- Python-1级训练场-变量入门

ICode国际青少年编程竞赛- Python-1级训练场-变量入门 1、 a 4 Dev.turnRight() Dev.step(a)2、 a 4 Spaceship.step(a) Dev.step(a)3、 a 4 Dev.step(a) Dev.turnLeft() Dev.step(a)4、 a 5 Dev.step(a) Spaceship.step(a) Dev.step(a)5、 a 3 Dev.step(a) Dev.tur…

C语言写的LLM训练

特斯拉前 AI 总监、OpenAI 创始团队成员 Andrej Karpathy 用 C 代码完成了 GPT-2 大模型训练过程:karpathy/llm.c: LLM training in simple, raw C/CUDA (github.com) 下载源码 git clone --recursive https://github.com/karpathy/llm.c.git下载模型 从HF-Mirro…

Burp和Proxifier抓包微信小程序

1、Burp设置代理 2、浏览器下载证书 3、安装证书 4、Proxifier设置代理 5、Proxifier设置Proxification Rule 6、Burp查看抓包数据 打开一个小程序,可以看到WeChatAppEx的流量先经过Proxifier,再经过127.0.0.1:8080到Burp

基于现有语言大模型,定制“人人AI气象”公众号天气助手

最近,月之暗面的Kimi大模型非常受欢迎,尝试用了moonshot(128K)基座模型,通过调用各种公开渠道的API,简易实现了一个天气助手,可以回答天气相关的基础概念、原理、应用等方面的问题,同时也可调用多个插件获取…

音频可视化:原生音频API为前端带来的全新可能!

音频API是一组提供给网页开发者的接口,允许他们直接在浏览器中处理音频内容。这些API使得在不依赖任何外部插件的情况下操作和控制音频成为可能。 Web Audio API 可以进行音频的播放、处理、合成以及分析等操作。借助于这些工具,开发者可以实现自定义的音…

MoonBit 开源之夏重磅来袭!12000元奖金等你来拿!

宣讲视频 MoonBit 开源之夏宣讲视频 关于我们 开源之夏 「开源之夏 (OSPP)」是中科院软件所「开源软件供应链点亮计划」指导下的系列暑期活动,旨在鼓励在校学生积极参与开源软件的开发维护,培养和发掘更多优秀的开发者,促进优秀开源软件社区…

JavaScript中Math函数与舍入

立方根 console.log(Math.sqrt(25)); //数学方式25平方根 console.log(25 ** (1 / 2)); //25的0.5次方 console.log(8 ** (1 / 3)); //8的1/3次方计算最大最小值 console.log(Math.max(1, 5, 88, 22, 132)); //返回最大值 console.log(Math.max(1, 5, 88, 22, 132)); //…

【C语言】高质量选择题

目录 题目一: 题目二: 题目三: 题目四: 题目五: 题目六: 题目七: 题目八: 题目九: 题目十: 题目十一: 题目十二: 题目十…

快捷回复软件让你告别回复慢

可能自己是个客服的原因,一连几天大数据给我推了一个叫“客服宝聊天助手”的软件。用了几天真心觉得好用,能解决我回客户很慢的困扰。如果大家对快捷回复软件感兴趣,可以接着了解哦! 一、减少复制粘贴 传统的客服工作中&#xff…

75.网络游戏逆向分析与漏洞攻防-角色与怪物信息的更新-伪造服务端更新属性消息欺骗客户端

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 如果看不懂、不知道现在做的什么,那就跟着做完看效果,代码看不懂是正常的,只要会抄就行,抄着抄着就能懂了 内容…

【查找算法】之二分查找

一、算法介绍 二分查找,也称为折半查找,是一种在有序数组中查找特定元素的高效算法。对于包含 n 个元素的有序数组,二分查找的步骤如下: 确定搜索范围:首先,将要查找的元素与数组中间的元素进行比较。如果…

基于 Linux 自建怀旧游戏之 - 80 款 H5 精品小游戏合集

1)简介 最近又找到了一款宝藏游戏资源分享给大家,包含 80 款 H5 精品小游戏,都是非常有趣味耐玩的游戏,比如 植物大战僵尸、捕鱼达人、贪吃蛇、俄罗斯方块、斗地主、坦克大战、双人五子棋、中国象棋 等等超级好玩的 H5 小游戏&…

Chrome浏览器命令行妙用:使你的网上冲浪更加无障碍

引言 在当今数字化时代,网络浏览器已成为我们日常生活中不可或缺的工具之一。对于许多人来说,Google Chrome浏览器是首选,不仅因为它的普及度,更因为它提供的丰富功能和高度的可定制性。在Chrome的众多特性中,命令行功…

景源畅信数字:抖音怎么挂橱窗商品?

抖音作为一款短视频分享平台,近年来逐渐融入了电商功能,其中“橱窗”就是商家或个人展示和销售商品的一个重要工具。如何在抖音上挂橱窗商品,成为了众多商家关注的焦点。 一、确保账号资质:在抖音上挂橱窗商品前,需要确…

iOS ------ JSONModel源码

一,JSONModel的基本使用 1,基本使用方法 - (instancetype)initWithDictionary:(NSDictionary *)dict error:(NSError **)err; - (instancetype)initWithData:(NSData *)data error:(NSError **)error; - (instancetype)initWithString:(NSString *)str…

yolov5-pytorch-Ultralytics训练+预测+报错处理记录

一、前言 玩一段时间大模型,也该回归一下图像识别。本项目用于记录使用基于Ultralytics的yolov5进行目标检测测试。为什么用Ultralytics呢?答案有3 1、其良好的生态,方便我们部署到其它语言和设备上。因此本次测试结论:大坑没有&…

华为手机连接电脑后电脑无反应、检测不到设备的解决方法

本文介绍华为手机与任意品牌电脑连接时,出现连接后电脑无反应、检测不到手机连接情况的解决方法。 最近,因为手机的存储空间愈发紧缺,所以希望在非华为电脑中,将华为手机内的照片、视频等大文件备份、整理一下。因此,需…