【NLP练习】Transformer中的位置编码

  • 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
  • 🍖 原作者:K同学啊

一、什么是位置编码

在这里插入图片描述

1. 位置编码定义

Transformer 模型中的位置编码是为了在处理序列数据时引入位置信息,以便模型能够分辨输入序列中不同位置的词或标记。
其中,每个位置/索引都映射到一个向量。因此,位置编码层的输出是一个矩阵,其中矩阵的每一行代表序列中的一个编码对象与其位置信息相加。下图为仅对位置信息进行编码的矩阵示例。

在这里插入图片描述

2. 三角函数

位置编码由不同频率的正弦和余弦函数给出,下图为正弦函数的快速回顾,不同波形的波长和频率如下所示:

在这里插入图片描述

3. 位置编码公式

假设有一个长度为L的输入序列,要计算第K个元素的位置编码。位置编码有不同频率的正弦和余弦函数给出:

P ( k , 2 i ) = s i n ( k n 2 i / d ) . P(k,2i) = sin(\frac k {n^{2i/d}}). P(k,2i)=sin(n2i/dk).
P ( k , 2 i + 1 ) = c o s ( k n 2 i / d ) . P(k,2i + 1) = cos(\frac k {n^{2i/d}}). P(k,2i+1)=cos(n2i/dk).

参数详解:

  • k k k:对象 (即句子中的字符)在输入序列中的位置, 0 < = k < L 2 0 <= k < \frac L 2 0<=k<2L
  • d d d:输出嵌入空间的维度
  • P ( k , j ) P(k,j) P(k,j):位置函数,用于映射输入序列中 k k k处的元素到位置矩阵的 ( k , j ) (k,j) (k,j)
  • n n n:用户定义的标量(Transformer论文作者的值为10000)
  • i i i:用于映射到列索引, 0 < = i < d 2 0<=i<\frac d 2 0<=i<2d,单个值 i i i映射到正弦和余弦函数
    在这里插入图片描述

4. 位置编码示例

为理解上述表达式,以短语"I am a robot"为例,其中 n = 100 n=100 n=100 d = 4 d=4 d=4。下表显示了该短语的位置编码矩阵。对于任何 n = 100 n=100 n=100 d = 4 d=4 d=4的四字母短语,位置编码矩阵都是相同的。
在这里插入图片描述

二、可视化理解位置编码

1. Python实现位置编码

import numpy as np
import matplotlib.pyplot as pltdef getPositionEncoding(seq_len, d, n=10000):P = np.zeros((seq_len, d))for k in range(seq_len):for i in np.arange(int(d/2)):denominator = np.power(n, 2*i/d)P[k,2*i] = np.sin(k/denominator)P[k,2*i+1] = np.cos(k/denominator)return PP = getPositionEncoding(seq_len = 4, d = 4, n = 100)
print(P)

输出如下:

[[ 0.          1.          0.          1.        ][ 0.84147098  0.54030231  0.09983342  0.99500417][ 0.90929743 -0.41614684  0.19866933  0.98006658][ 0.14112001 -0.9899925   0.29552021  0.95533649]]

2. 单个字符可视化

查看 n = 10000 n=10000 n=10000 d = 512 d=512 d=512的不同位置的正弦波开始

def plotSinusoid(k, d = 512, n = 10000):x = np.arange(0, 100, 1)denominator = np.power(n, 2*x/d)y = np.sin(k/denominator)plt.plot(x, y)plt.title('k = ' + str(k))fig = plt.figure(figsize=(15,4))
for i in range(4):plt.subplot(141 + i)plotSinusoid(i * 4)

输出:
在这里插入图片描述
上图可看出每个位置对应不同的正弦曲线,将单个位置编码为向量。

3. 整句话的位置编码可视化

可视化 n = 10000 n=10000 n=10000的位置矩阵

P = getPositionEncoding(seq_len = 100, d=512, n = 10000)
cax = plt.matshow(P)
plt.gcf().colorbar(cax)

输出:
在这里插入图片描述

三、位置编码的最终输出

Transformer中的位置编码层把位置向量与单词编码相加,并为后续层输出该矩阵。整个过程如下图所示:
在这里插入图片描述

四、总结

Transformer的位置编码一方面通过正弦和余弦函数来编码位置信息,这种编码方式能够使得不同位置的编码在空间上有良好的分布。
另一方面分别使用正弦和余弦函数来编码偶数和奇数位置,以确保位置编码能够捕捉到位置之间的关系。

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

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

相关文章

蓝卓为中小制造企业注入数字化转型活力

随着劳动力成本上升,原材料价格上涨,企业生产成本逐年增加&#xff0c;市场竞争越来越激烈&#xff0c;传统的中小制造企业面临着巨大的压力。 通过数字化转型应对环境的变化已成为行业共识&#xff0c;在数字化的进程中&#xff0c;中小企业首要考虑生存问题&#xff0c;不能…

Kubernetes集群持久化部署实践

WordPress 网站持久化部署 要持久化MariaDB 可以把 Deployment 改成了 StatefulSet&#xff0c;修改 YAML添加“serviceName”“volumeClaimTemplates”这两个字段&#xff0c;定义网络标识和 NFS 动态存储卷&#xff0c;然后在容器部分用“volumeMounts”挂载到容器里的数据目…

八 、VS的调试技巧

--- 24.4.20 目录 1、什么是Bug&#xff1f; 2、什么是调试&#xff08;Debug&#xff09;&#xff1f; 3、Debug和Release 4、VS基础调试快捷键 4.1、环境准备 4.2、调试快捷键 5、监视和内存观察 5.1、监视窗口 5.2、内存窗口 6、调试举例1 7、调试举例2 8、调试…

旅行者1号有什么秘密?飞行240多亿公里,为什么没发生碰撞?

旅行者1号有什么秘密&#xff1f;飞行240多亿公里&#xff0c;为什么没发生碰撞&#xff1f; 自古以来&#xff0c;人类就对浩瀚无垠的宇宙充满了好奇与向往。从最初的仰望星空&#xff0c;到如今的深空探测&#xff0c;人类探测宇宙的历史发展可谓是一部波澜壮阔的史诗。 在…

双指针练习:有效三角形的个数

题目链接&#xff1a;611.有效三角形的个数 题目描述&#xff1a; 给定一个包含非负整数的数组 nums &#xff0c;返回其中可以组成三角形三条边的三元组个数。 解法一&#xff08;暴力求解&#xff09;&#xff08;会超时&#xff09;&#xff1a; 算法思路&#xff1a; 三层…

Chromium源码阅读:从页面加载到元素展示(1)

​ 从&#xff1c;p&#xff1e;hello world&#xff1c;/p&#xff1e;.html到界面上的hello world 今天&#xff0c;我们一起来看看一个html元素&#xff0c;是如何绘制到界面上。我们选择了最简单的场景&#xff0c;便于快速掌握总体的流程&#xff0c;加深之前阅读知识的…

yolo模型评估指标相关概念

mAP&#xff08;mean Average Precision 平均精度&#xff09;&#xff0c;是一个经常被用来衡量目标 检测模型是否具有较好性能的指标。 计算mAP需要先计算每一类物体的AP&#xff0c;然后取平均值&#xff0c;所以下面介绍的 TP,FP,FN,TN都是针对某一类物体&#xff08;目标&…

Java课程设计:基于Javaweb的超市商品管理系统

文章目录 一、项目介绍二、项目展示三、源码展示四、源码获取 一、项目介绍 管理员用户&#xff1a;需要能够添加商品类型以及商品&#xff0c;能够对商品进行管理&#xff0c;能够查询用户信息&#xff0c;能够查询出售记录&#xff1b;普通用户&#xff1a;需要能够搜索商品…

搜维尔科技:【应用】人形机器人将成为引领产业新浪潮的尖兵

特斯拉纷纷发表人形机器人计划&#xff0c;预示这项先进科技将成为下一个颠覆性的殖民地。人形机器人被视为继电脑、智能手机和电车之后,又一个将改变世界的创新产品。 全球人口结构正在快速老化&#xff0c;至2050年60岁以上人口将达22%,是现今的两倍。劳动人口短缺迫在眉睫&…

NewspaceAi之GPT使用新体验

GPT功能 使用地址&#xff1a;https://newspace.ai0.cn/ 上车 挂挡 踩油门&#xff0c;一脚到底&#xff0c;开始你的表演 问题1&#xff1a;你能做什么详细告诉我&#xff1f; 下面内容是GPT的回答 当然&#xff01;作为一个基于GPT-4架构的AI&#xff0c;我能够在许多方面为…

关于FPGA对 DDR4 (MT40A256M16)的读写控制 2

关于FPGA对 DDR4 &#xff08;MT40A256M16&#xff09;的读写控制 2 语言 &#xff1a;Verilg HDL EDA工具&#xff1a;ISE、Vivado、Quartus II 关于FPGA对 DDR4 &#xff08;MT40A256M16&#xff09;的读写控制 2一、引言二、DDR4的简介四、DDR4 SDRAM状态框图 关键词&#x…

【Hachker News】如果你不需要钱,你会干什么?

Hachker News上的一个问题&#xff0c;标题是“如果你不需要钱&#xff0c;你会做什么&#xff1f;” 回答摘要 问题链接&#xff1a;What would you spend your time working on if you didn’t need money? A1&#xff1a; 我会把时间投入到城市周围的农村地区&#xff0c…

Matlab使用Simulink仿真实现AM和BPSK信号的解调

前言 本篇实现了基于AM和BPSK调制的通信系统&#xff0c;采用Bernoulli Binary Generator生成随机二元序列&#xff0c;码元速率为0.5秒/个。AM调制使用Sine Wave模块生成载波&#xff0c;频率40Hz&#xff0c;相位π/2。BPSK调制通过Switch模块切换相位0和π的载波。信号传输…

【java计算机专业毕设】房屋租赁系统代码源码MySQL springboot vue html maven送文档ppt

1项目功能 【java计算机专业毕设】房屋租赁系统javaweb MySQL springboot vue html maven 送报告 2项目介绍 系统功能&#xff1a; 房屋租赁系统包括管理员和用户和房东三种角色。 该系统包含多个功能模块&#xff0c;分别为管理员、用户和房东提供服务。管理员功能包括个人中…

20.2 JSON-JSON解码、映射数据类型、处理JSON响应

1. JSON解码 JSON解码&#xff0c;即将JSON格式在字符串转换为Go语言数据类型的变量。 函数Unmarshal接受一个JSON字节切片和一个指定目标格式的接口。而这个借口即与JSON字符串中的结果相匹配的结构体类型的变量。 定义结构体类型 type Person struct { ... }创建结构体变量…

聚鼎科技:现在的装饰画做起来难吗

在当代&#xff0c;装饰画作为一种体现个人品味和审美情趣的方式&#xff0c;已经广泛应用于各种室内空间。不少人会产生这样的疑问&#xff1a;在现代化技术和材料的支持下&#xff0c;制作一幅装饰画是变得容易了&#xff0c;还是依旧充满挑战? 现代科技的确为装饰画的制作带…

微信小程序查分易如何使用?

期末马上到了&#xff0c;老师们又开始为发放成绩而头疼了&#xff0c;堆积如山的试卷&#xff0c;密密麻麻的分数&#xff0c;还有那些不断响起的家长电话&#xff0c;真是让人心烦。别担心&#xff0c;今天就让我来介绍一个让老师“偷懒”神器——查分易微信小程序 第一步&am…

ROS中Twist消息类型

Twist消息类型在Robot Operating System (ROS)中是一个常见的数据结构&#xff0c;主要用于描述物体的线性速度和角速度。这种消息类型在ROS的geometry_msgs包中定义&#xff0c;常用于机器人运动控制&#xff0c;尤其是当需要向机器人发布速度指令时。 Twist消息由两个Vector…

6月14日 Qtday2

#include "widget.h" #include "ui_widget.h" #include <QTimer> using namespace std; Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget), lab1(new QLabel(this)) //初始化一个标签显示登录状态 {//设置华清远见的标签图…

再谈 dijkstra 算法和最短路径问题

前置文章&#xff1a; dijkstra 算法为什么高效 有向图的负权值边与建模 求单源最短路径的新方法 前天晚上实现了一个基于 dijkstra 算法的求单源最短路径的新算法&#xff0c;整理了一篇文章。我非常不愿意把一些直观的问题太过于技术化&#xff0c;但多年的职业经历偏偏让一…