谈谈变压器中的位置编码

变压器中的位置编码

一、说明

   在上一期的“Transformers for Everyone”系列中,我们介绍了 Transformer 的概念,并深入研究了第一个关键架构元素:输入嵌入。如果你错过了第一集,你可以通过阅读来赶上:适合所有人的变形金刚。在本文中,我们将探讨另一个值得我们关注的关键元素:“位置编码”。

   位置编码就像句子中单词的 GPS。正如我们希望模型能够理解单词一样,我们也希望它能够掌握句子中单词的空间排列。

   想象一下,如果我们能为模型提供有关单词如何相对于彼此定位的信息——无论它们是近的还是远的。这有助于模型理解上下文和含义。

二、运作方式

   原句:我们从原来的句子开始,“Yobi是一家伟大的公司。正如我们在上一篇文章中了解到的那样,我们已经将其转换为嵌入。

在这里插入图片描述

   位置编码向量:接下来,我们创建一个称为位置编码向量的特殊向量。这个向量与我们的嵌入大小相同,并被添加到它们中。

   但是,此向量保持固定,并表示每个单词在句子中的位置。
在这里插入图片描述

   编码器输入:两个向量的结果都是一个编码器输入,一个与我们的嵌入大小相同的向量。此编码器输入将词嵌入的丰富性与位置编码提供的空间感知相结合。

   位置编码使模型不仅可以理解单词,还可以理解它们在句子中的上下文。它是语言翻译、文本生成等任务的重要组成部分。
在这里插入图片描述

   使用 BERT 的示例(可选)
   注意:
   与早期的 transformer 模型不同,BERT 不使用单独的步骤来添加位置编码。相反,它在预训练阶段学习位置信息。
   每个令牌的嵌入在从 BERT 模型出来时都已经编码了位置信息。这与 Vaswani 等人的原始 Transformer 模型不同,后者将位置编码显式添加到嵌入中。
1/我们将从导入库和定义句子开始

import torch
from transformers import BertTokenizer, BertModel
sentence = "Yobi is a great company"

   阿拉伯数字/初始化分词器和模型 (BERT):我将使用这个:https://huggingface.co/bert-base-uncased(英语的 BERT 的特定版本,如果需要,您可以选择其他版本)

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')

   BertTokenizer 用于将句子转换为模型可以理解的格式 (BERT)
   BertModel 是将生成嵌入的模型。
   3/句子的标记化:

inputs = tokenizer(sentence, return_tensors='pt', add_special_tokens=True)
input_ids = inputs['input_ids']

   可选:我们转换回标记只是为了查看模型看到的确切标记,CLS(由 BERT 标记器在每个输入序列的开头添加)和 SEP(用于标记句子的结尾或在需要理解它们之间关系的任务中分隔两个不同的句子)是特殊的标记

tokens = tokenizer.convert_ids_to_tokens(input_ids[0])
print(tokens) #['[CLS]', 'yo', '##bi', 'is', 'a', 'great', 'company', '[SEP]']

   注意:在这种情况下,Yobi 被拆分为子词单元:“yo”、“##bi”。BERT 使用子词标记化 (WordPiece) 来处理未知单词并减少词汇量。## 表示“bi”是前面标记的延续。

   4/生成嵌入:我们将标记化的句子传递给 BERT 模型,嵌入将包含输入句子中每个标记的嵌入。

with torch.no_grad():outputs = model(input_ids)embeddings = outputs.last_hidden_state

   5/准备编码器输入:我们将嵌入分配给一个变量,该变量将在处理管道的下一阶段使用,我们将在下一集🙂中看到

encoder_input = embeddings

   自选:您可以打印“encoder_input”的形状

print(encoder_input.shape) #torch.Size([1, 8, 768])

   这意味着批处理中有 1 个序列,序列中有 8 个标记,每个标记由一个 768 维向量表示。
在这里插入图片描述

   变形金刚 AImemes。图片来源:blog.searce/decoding-llms-513522a5afc
我们在文章的最后,在整个剧集中,我们发现了位置编码在理解单词方面的关键作用,以及它们在句子中的上下文,这些句子是由嵌入输入编码器的单词形成的!请继续关注下一集😁的更多见解

请考虑关注有关商业、数据科学、机器学习和扩展现实的更多文章:。

统计与数据科学 : https://medium.com/@soulawalid/list/statistics-data-science-65305693779d
商务 : https://medium.com/@soulawalid/list/business-1528f08575a7
量子机器学习 : https://medium.com/@soulawalid/list/qml-be0b06f7a986
扩展现实 : https://medium.com/@soulawalid/list/extended-reality-bf03607b0b80
神经营销学 : https://medium.com/@soulawalid/list/neuromarketing-8f94149e3c73

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

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

相关文章

IRIS / Chronicles 数据库结构

对于我们用得最多的关系型数据库来说,首先有的是数据库名字,然后是表名字,然后就是字段名,随后就是一条一条的数据。 对于 IRIS 来说,因为是使用的层级数据库,所以上面的定义就不能完全的照搬了&#xff0…

【傅里叶变换、短时傅里叶变换、小波变换】

傅里叶:可以知道信号中的成分,但对非平稳过程,不能看出各成分出现的时刻短时傅里叶变换-:加固定窗的傅里叶变换,无法满足非稳态信号变化的频率的需求小波变换:时域能量有限,频域带通滤波 一、傅…

系统可靠性分析与设计相关知识总结

一、软件可靠性定义 软件可靠性使软件产品在规定的条件下和规定的时间区间内完成规定的功能的能力。是软件系统在应用或系统错误面前,在意外或错误使用的情况下维持软件系统功能特性的基本能力。 规定的条件:直接与软件运行相关的使用该软件的计算机系统…

Android知识 - 代码混淆ProGuard规则介绍

ProGuard 的规则及示例 规则概述 ProGuard 是一个代码优化工具,它通过移除未使用的代码、重命名类、字段和方法等方式来减小应用的大小。在 ProGuard 的配置文件中,我们可以定义一系列的规则来控制优化和混淆的过程。 规则语法 ProGuard 的规则通常包…

husky配置实现代码提交前校验与规范提交信息

husky是一个Git Hook管理工具,主要用于实现提交前eslint校验和commit信息的规范校验。 Husky 的原理是让我们在项目根目录中写一个配置文件,然后在安装 Husky的时候把配置文件和 Git Hook 关联起来,这样我们就能在团队中使用 Git Hook 了。 …

Matplotlib数据可视化实战-2绘制折线图(2)

2.11营业额可视化 已知某学校附近一个烧烤店2022年每个月的营业额如下图所示。编写程序绘制折线图对该烧烤店全年营业额进行可视化,使用红色点画线连接每个月的数据,并在每个月的数据处使用三角形进行标记。 烧烤店营业额 月份123456789101112营业额/万…

机器学习的分类——监督学习(Supervised Learning)

监督学习(Supervised Learning)是机器学习中最常用和最直观的一类方法。它的核心思想是利用一组已知输入与输出的样本(即训练数据)来训练模型,目的是使模型能够学习到输入与输出之间的映射关系,以便对新的输…

【MySQL】14. 全文索引(选学)

全文索引的创建 当对文章字段或有大量文字的字段进行检索时,会使用到全文索引。 MySQL提供全文索引机制,但是有要求,要求表的存储引擎必须是MyISAM,而且默认的全文索引支持英文,不支持中文。 (为啥一定要用MyISAM呢&am…

Redis - 5k star! 一款简洁美观的 Redis 客户端工具~

项目简介 Tiny RDM 是一款现代化、轻量级的跨平台 Redis 桌面客户端,可在 Mac、Windows 和 Linux 系统上运行。初次打开 Tiny RDM,你会被它舒适的风格和配色所吸引,界面简约而不简单,功能齐全。 Tiny RDM 有着如下的功能特性 项…

男生t恤什么牌子好?男士T恤品牌推荐?

很多男士朋友最近都打算准备一套春夏季穿的短袖,但奈何当前的市场上充斥着大量低劣质的衣裤。这些产品的质量普遍不耐穿、耐洗,并且版型不好等情况。为此我特意为大家整理五个质量好且价格不贵的五个男装品牌。希望能够帮助到大家挑选到合适的短袖。 因为…

保研线性代数机器学习基础复习1

1.什么是代数(algebra)? 为了形式化一个概念,构建出有关这个概念的符号以及操作符号的公式。 2.什么是线性代数(linear algebra)? 一项关于向量以及操作向量的公式的研究。 3.举一些向量的例子&#x…

【opencv】教程代码 —ImgProc (7)使用维纳滤波器来恢复失焦的图像

7. out_of_focus_deblur_filter.cpp使用维纳滤波器来恢复失焦的图像 代码的主要功能是通过使用维纳滤波器来恢复失焦的图像,它读取一个灰度图像文件,对其进行滤波操作,并将结果保存为新文件。这个过程包括计算点扩散函数(PSF),执行…

机器学习模型——KNN

KNN的基本概念: KNN(K-Nearest Neighbor)就是k个最近的邻居的意思,即每个样本都可以用它最接近的k个邻居来代表。KNN常用来处理分类问题,但也可以用来处理回归问题。 核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某…

python实现在线 ChatGLM调用

python实现在线 ChatGLM调用 1. 申请调用权限: 收钱进入到质谱AI开放平台,点击“开始使用”或者“开发者工具台”进行注册: 对于需要使用 API key 来搭建应用的话,需要点击右边红框中的查看 API key,就会进入到我们…

yolov8 pose keypoint解读

yolov8进行关键点检测的代码如下: from ultralytics import YOLO# Load a model model YOLO(yolov8n.pt) # pretrained YOLOv8n model# Run batched inference on a list of images results model([im1.jpg, im2.jpg]) # return a list of Results objects# Pr…

【408直通车】(考研数一、二、三合集)高等数学公式全覆盖(上)

数学集合定义总结: 自然数集( N \mathbb{N} N):包括0、1、2、3等正整数,即 { 0 , 1 , 2 , … } \{0, 1, 2, \ldots\} {0,1,2,…}。 整数集( Z \mathbb{Z} Z):包括负整数、0和正整数…

读所罗门的密码笔记04_社会信用

1. 人工智能 1.1. 人工智能可以帮助人们处理复杂的大气问题,完善现有的气候变化模拟,帮助我们更好地了解人类活动对环境造成的危害,以及如何减少这种危害 1.2. 人工智能也有助于减少森林退化和非法砍伐 1.3. 人工智能甚至可以将我们从枯燥…

代码随想录算法训练营 Day29 回溯算法5

Day29 回溯算法5 491.递增子序列 思路 跟上一题类似,需要去重 但问题是该题要求递增子序列,因此不能在一开始将数组排序,不知道这种情况如何去重 根据代码随想录 要点: 本题不可以对数组进行排序对于每一层使用uset记录取过的…

RISC-V特权架构 - 中断定义

RISC-V特权架构 - 中断定义 1 中断类型1.1 外部中断1.2 计时器中断1.3 软件中断1.4 调试中断 2 中断屏蔽3 中断等待4 中断优先级与仲裁5 中断嵌套6 异常相关寄存器 本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 中断类型 RISC-V 架构定义的中…

idea打开文件乱码,设置编码

idea整个项目都设置了utf-8了,但是还是有一个文件是其他编码_(ཀ」 ∠)__ 。 配置项目编码 在设置中设置编码 配置具体目录的编码 上面的设置之后,还是有几个文件一直是乱码,需要单独配置。 偶尔引入的依赖中的文件也会乱码,需…