深入理解Transformer中的位置编码

1 位置编码的作用

由于注意力的作用机制,不论输入序列的顺序如何,输出结果都是一样的。 也就是丢失了位置信息。 但是对于语言模型, 我们都知道顺序是很重要的, 所以需要对输入序列额外注入位置信息。

2 位置编码方式

Transformer 论文中采用了简单的相对位置编码, 用sin 和cos函数表示序列中不同位置的信息。

在这里插入图片描述

3 可视化展示

为了图像清晰起见, 嵌入维度选128(实际网络中是512)。
横轴表示嵌入维度, 纵轴是token在序列中的位置, 如输入是一个长度是32的序列。
在这里插入图片描述

从图上可以看出, 序列位置与位置编码有个近似的线性关系, 同时还有一定的周期特性,因此位置编码一定程度上反应了序列中的位置信息。

4 代码

import matplotlib.pyplot as plt
import numpy as npd_model = 128
seq_len = 32# 创建数据
x = np.linspace(0, d_model - 1, d_model)
y = np.linspace(0, seq_len - 1, seq_len)
X, Y = np.meshgrid(x, y)
Z_even = np.sin(Y / (np.power(10000, X / d_model)))
Z_odd = np.cos(Y / (np.power(10000, X / d_model)))for i in range(d_model // 2):Z_odd[:, 2 * i] = Z_even[:, 2 * i]# 绘制图像
plt.imshow(Z_odd, cmap='gray', aspect='auto', extent=[0, d_model, 0, seq_len], origin='upper')
plt.xlabel('embeddig_dimension')
plt.ylabel('seq_dimension')
plt.show()

5 位置编码其他实现方式

上述是Transformer原始论文Attention is All You Need中的实现方式,还有一些比较著名的实现Transformer的库, 如tensor2tensor, fairseq, 实现方式与原始论文有一些区别,位置信息有较大差异,但含义基本是一致的, 要注意区分。

tensor2tensor 的实现方式: https://github.com/tensorflow/tensor2tensor/blob/master/tensor2tensor/layers/common_attention.py

具体见get_timing_signal_1d 函数。

fairseq 中也沿用了tensor2tensor中的做法。 https://github.com/facebookresearch/fairseq/blob/main/fairseq/modules/sinusoidal_positional_embedding.py
在这里插入图片描述

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

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

相关文章

使用PostgreSQL进行高效数据管理

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 使用PostgreSQL进行高效数据管理 PostgreSQL简介 安装PostgreSQL 在Ubuntu上安装PostgreSQL 在CentOS上安装PostgreSQL 在macOS上…

Git - 两种方式撤销已提交到远端仓库的记录并删除提交记录

文章目录 命令行方式附 命令行方式 确定要撤销的提交记录 首先,使用以下命令查看提交历史: git log找到想撤销的提交记录的哈希值(SHA) ,比如9c9c98d6f7f28c41d971f8efd51ed31f9720792c 撤销提交记录 根据需求选择以下…

vscode markdown-image 图片粘贴自动上传到本地目录设置

.vscode/settings.json文件内容 {"markdown-image.base.fileNameFormat": "${hash}-${YY}${MM}${DD}-${HH}${mm}${ss}","markdown-image.local.path": "./images","markdown-image.base.uploadMethod": "Local",…

Linux入门-基础指令和权限

1.压缩打包 1.1压缩是什么 压缩是通过特定的算法,使文件减小体积,从而达到节省空间的目的。 1.2.为什么要压缩 a.压缩将文件大小减小,在本地可能不太明显,但是在网络传输中,减小了网络传输的成本。 b.将多个文件压…

大数据新视界 -- 大数据大厂之 Impala 性能优化:解锁大数据分析的速度密码(上)(1/30)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

docker pull 拉取镜像失败,使用Docker离线包

1、登录并注册Github,然后在Github中搜索并打开“wukongdaily/DockerTarBuilder” 项目,在该项目主页点击“Fork”。 然后点 “Create Fork”,将项目创建到自己的Github主页。 2、接着在自己创建过来的这个项目中点击“Actions” 3、然后…

HTTP和HTTPS到底啥区别?不只是差一个“S”这么简单.....

在信息时代,互联网已经成为人们生活中不可或缺的一部分。我们每天浏览网页、发送邮件、进行网络购物,都离不开网络数据的传输。 而保障这些数据在传输过程中的安全,就显得尤为重要。 HTTP和HTTPS作为两种应用层协议,在网络数据传…

微服务设计模式 - 发布订阅模式(Publisher Subscriber Pattern)

微服务设计模式 - 发布订阅模式(Publisher Subscriber Pattern) 定义 发布-订阅模式(Publisher-Subscriber Pattern)是一种常见的设计模式,被广泛用于云计算和分布式系统中,以实现松散耦合的组件间通信。发…

0xGame 2024 [Week 4] Jenkins

1.前言 由于好久没做web题了,所以今天来尝试来做一波web题,仅供刷题记录。 2.题目 这个给的提示对于小白来说实在是友好的过劲。 3.分析 上网搜到一个关于Jenkins的历史漏洞,下面链接可供参考 https://blog.csdn.net/2301_80127209/arti…

yolov8训练及测试(ubuntu18.04、tensorrt、ros)

1 数据集制作 1.1标注数据 Linux/Ubuntu/Mac 至少需要 Python 2.6 (推荐使用 Python 3 或更高版本 及 PyQt5) Ubuntu Linux (Python 3 Qt5) git clone https://gitcode.com/gh_mirrors/la/labelImg.git sudo apt-get install pyqt5-dev-tools cd lab…

Nginx 反向代理(解决跨域)

文章目录 前言一、同源策略二、跨域是什么?三、Nginx解决跨域1.前端示例代码2.说明 四、nginx反向代理配置五、启动nginx六、最终效果总结 前言 Nginx反向代理解决跨域 一、同源策略 定义:同源策略(Same-Origin Policy)是指浏览…

ssm《数据库系统原理》课程平台的设计与实现+vue

系统包含:源码论文 所用技术:SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习,获取源码看文章最下面 需要定制看文章最下面 目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容…

多渠道流量获取策略提升网站访问量的有效方法

内容概要 在当今数字时代,企业面临着越来越激烈的竞争,流量获取变得极为重要。多渠道流量获取不仅可以增加网站的访问量,还能够有效提升品牌的知名度和影响力。通过整合多种渠道,企业能够更好地触达目标受众,实现精准…

kafka实时返回浏览数据

在安装完kafka(Docker安装kafka_docker 部署kafka-CSDN博客),查看容器是否启动: docker ps | grep -E kafka|zookeeper 再用python开启服务 from fastapi import FastAPI, Request from kafka import KafkaProducer import kafka import json import …

【MyBatis源码】BoundSql分析

基础 BoundSql是对SQL语句及参数信息的封装,它是SqlSource解析后的结果。Executor组件并不是直接通过StaticSqlSource对象完成数据库操作的,而是与BoundSql交互。BoundSql是对Executor组件执行SQL信息的封装,具体实现代码如下: …

A Consistent Dual-MRC Framework for Emotion-cause Pair Extraction——论文阅读笔记

前言 这是我第一次向同学院同年级的学生和老师们汇报的第一篇论文,于2022年发表在TOIS上,属于CCF A类,主要内容是将MRC应用到情感原因对抽取中。 论文链接:用于情绪-原因对提取的一致双 MRC 框架 |信息系统上的 ACM Transactions 这里我就不放上我自己翻译的中文版还有我…

【Linux系统】—— 基本指令(一)

【Linux系统】—— 基本指令(一) 1 「ls」指令1.1 初识 「ls」 指令1.2 「ls -l」1.3 认识文件1.4 「ls -l」显示的内容1.5 如何区分文件类型1.6 「ls -a」1.7 混合使用命令行选项1.8 「ls」查看指定目录下文件1.9 「ls」 指令常用命令行选项 2 「pwd」 …

js,ts控制流程

摘要: 在 JavaScript 和 TypeScript 中,控制流程是指程序执行的顺序和条件判断。以下是一些常见的控制流程结构,包括条件语句、循环语句和函数调用等。 1. 条件语句: if 语句 let condition true;if (condition) {console.log(C…

计组-Cache的基本概念,计算Cache+主存的平均周期

由于寄存器是集成在CPU中且容量极小,所以我们用Cache来提高速度,在无寄存器时其当做访问速度最快的 Cache的命中率: 是指当CPU要处理某个数据时,首先会考虑在Cache里面去读取,当需要读取的数据在Cache里面时,此时这个…

《大数据与人工智能:提升数据质量与数量的利器》

《大数据与人工智能:提升数据质量与数量的利器》 一、大数据与人工智能的融合趋势二、大数据增加数据数量的方法(一)不同途径的数据增量(二)数据增强的多样方法 三、人工智能提升数据数量的手段(一&#xf…