Transformer位置编码详解

在处理自然语言时候,因Transformer是基于注意力机制,不像RNN有词位置顺序信息,故需要加入词的位置信息来显示的表明词的上下文关系。具体是将词经过位置编码(positional encoding),然后与emb词向量求和,作为编码块(Encoder block)的输入信息。在《Attention Is All You Need》论文中,位置编码信息如下:

其中PE的维度为:[序列长度,编码维度](即[seq_len,emb_dim])

pos表示词语在句子中的位置

d_{model}  表示编码(emb)的维度

i表示词向量的位置,偶数位置用sin,奇数位置用cos

据此,即可根据不同的pos信息和i信息得到不同的位置嵌入信息。具体计算时候,由于sin和cos后半部分相同,采用log将次方拿下,方便计算。

具体Pytorch代码实现如下

# coding=utf8import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import torch
import mathdef get_position_encoding(seq_len, emb_dim):pe = torch.zeros(seq_len, emb_dim)pos = torch.arange(0, seq_len, dtype=torch.float)pos = pos.unsqueeze(1)locpos = torch.arange(0, emb_dim, 2).float()div_term = torch.exp(locpos * (-math.log(10000.0) / emb_dim))    #对应上面公式最后一行# 第一维度序列长度,第二维度编码pe[:, 0::2] = torch.sin(pos * div_term)pe[:, 1::2] = torch.cos(pos * div_term)return pe
pe = get_position_encoding(100, 32)
sns.heatmap(pe)
plt.xlabel('emb_dim')
plt.ylabel('seq_len')
plt.show()

生成图如下:

补充知识点:

切片,位置编码赋值:

def clip_pos(x):xdata = torch.arange(1, x, 1)print("###xdata:###", xdata)"""切片的语法使用冒号(:)来表示,形式为`[start:end:step]`,其中start表示起始索引(包含),end表示结束索引(不包含),step表示步长(默认为1)。如果省略start,则默认从序列的第一个元素开始如果省略end,则默认截取到序列的最后一个元素 如果省略step,则默认以步长为1进行截取"""# print(xdata[0::2])print(xdata[0:4:2])print(xdata[1::2])

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

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

相关文章

CAS Server使用Maven构建以及自定义扩展使用

介绍 ​CAS(Central Authentication Service)中心授权/认证服务,是由耶鲁大学发起的一个开源项目,距今已有20年之久,功能相当丰富,目的在于为Web应用系统提供一种可靠且稳定的单点登录解决方案。 CAS分为…

Open CASCADE学习|在给定的TopoDS_Shape中查找与特定顶点 V 对应的TopoDS_Edge编号

enum TopAbs_ShapeEnum{TopAbs_COMPOUND,TopAbs_COMPSOLID,TopAbs_SOLID,TopAbs_SHELL,TopAbs_FACE,TopAbs_WIRE,TopAbs_EDGE,TopAbs_VERTEX,TopAbs_SHAPE}; 这段代码定义了一个名为 TopAbs_ShapeEnum 的枚举类型,它包含了表示不同几何形状类型的常量。这些常量通常…

目标检测——色素性皮肤病数据集

一、重要性及意义 首先,色素性皮肤病变是一类常见的皮肤疾病,其发病率有逐年增高的趋势。这些病变可能由遗传或环境因素导致黑素细胞生成异常,如黑色素瘤等。黑色素瘤具有极高的恶性率和致死率,而且恶化可能性大,容易…

openplc Linux 地址映射io,读写驱动数据等使用记录

1. 上一篇记录 openplc使用C语言文件读写驱动实现基本流程。 openPLC_Editor C语言编程 在mp157 arm板上调用io等使用记录_openplc c 编程-CSDN博客 2. 下面通过映射地址的方式控制io和读写驱动数据。 在runtime 环境的 hardware 硬件配置中 选择 python on Linux(PSM)&#…

柱状图中最大的矩形-java

题目描述(力扣题库 84): 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。 解题思想: 单调栈: 利用先进后出的思想, 先算出长度更高的柱子所能勾勒…

MXNet的下载安装及问题处理

1、MXNet介绍: MXNet是一个开源的深度学习框架,以其灵活性和效率著称,支持多种编程接口,包括Python、C、R、Julia、Scala等。MXNet支持大规模分布式训练,同时兼顾CPU和GPU的计算资源,尤其擅长于模型并行和数…

1.0-spring入门

文章目录 前言一、版本要求二、第一个spring程序1.引入pom2.代码部分2.1 spring bean2.2 springContext.xml2.3 测试2.4 执行结果 总结 前言 最近想要系统的学习下spring相关的框架,于是乎,来到了B站(真是个好地方),spring会专门开一个专栏出来,记录学习心得,与大家共勉。 Spri…

实景三维技术在推进城市全域数字化转型的作用

4月2日,国家数据局发布《深化智慧城市发展推进城市全域数字化转型的指导意见(征求意见稿)》(下称:《指导意见》),向社会公开征求意见。 《指导意见》作为推进城市数字化转型的重要文件&#xf…

Java学习笔记24(面向对象编程(高级))

1.面向对象编程(高级) 1.1 类变量和类方法 1.类变量 ​ *类变量也叫静态变量/静态属性,是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是…

C语言数据结构(11)——归并排序

欢迎来到博主的专栏C语言数据结构 博主ID:代码小豪 文章目录 归并排序两个有序数组的合并归并归并排序 归并排序的代码 归并排序 两个有序数组的合并 当前有两个有序数组arr1和arr2,我们创建一个可以容纳arr1和arr2同等元素个数的新数组arr。 让一个…

探索数据结构:特殊的双向队列

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:数据结构与算法 贝蒂的主页:Betty’s blog 1. 双向队列的定义 **双向队列(double‑ended queue)**是一种特殊的队列…

js中使let关键字报错,改用var关键字解决

js中使let关键字报错,改用var关键字解决 项目场景:问题描述原因分析:解决方案:总结 项目场景: 使用 let 关键字报错,报错信息为: Uncaught ReferenceError: maxNum is not defined at getMaxNum (4-3.htm…

Open-GroundingDino和GroundingDino的推理流程实现

1、简单介绍 GroundingDino是一个多模态检测模型,可以输入文本提示输出视觉目标的位置,实现了文本和图像的匹配。相比较于一众的OVD算法,GroundingDino在文本处理上的灵活度高,因为大多OVD算法是采用clip文本编码器,这…

Stable Diffusion介绍

Stable Diffusion是一种前沿的开源深度学习模型框架,专门设计用于从文本描述生成高质量的图像。这种称为文本到图像生成的技术,利用了大规模变换器(transformers)和生成对抗网络(GANs)的力量,以…

7(8)-2-CSS 盒子模型

个人主页:学习前端的小z 个人专栏:HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 CSS 盒子模型1 盒子模型(Box Model)组成2 边框&#x…

软考程序员2024年5月报名流程及注意事项

2024年5月软考程序员报名入口: 中国计算机技术职业资格网(http://www.ruankao.org.cn/) 2024年软考报名时间暂未公布,考试时间上半年为5月25日到28日,下半年考试时间为11月9日到12日。不想错过考试最新消息的考友可以…

多线程4

死锁 想获取到第二把锁,就需要执行完第一层大括号,想要执行完第一层大括号,就要先获取到第二层的锁。 synchronized (counter2){ synchronized (counter2){} } 例子:t2先启动,t2进行加锁后一定成功,但是如果t2进行二…

图数据库技术:知识图谱的存储与查询

图数据库技术:知识图谱的存储与查询 一、引言 在探索知识的宇宙中,知识图谱是组织和理解海量信息的星系图。在这张图中,每一个概念、实体与事物不再是孤立的点,而是通过关系与边相互连接,形成一个复杂而有机的网络。图…

计算机网络练习-计算机网络概述与性能指标

计算机网络概述 ----------------------------------------------------------------------------------------------------------------------------- 1. 计算机网络最据本的功能的是( )。 1,差错控制 Ⅱ.路由选择 Ⅲ,分布式处理 IV.传输控制 …

3.网络编程-TCP

目录 TCP 建立连接的过程是怎样的 TCP为什么是三次握手 TCP 断开连接的过程是怎样的 TCP挥手为什么需要四次 为什么TIME_WAIT等待的时间是2MSL TCP详解之滑动窗口 TCP 半连接队列和全连接队列是什么 TCP粘包,拆包是怎么发生的,如何解决 TCP是如何…