第TR4周:Transformer中的位置编码详解

news2024/11/14 6:15:46

在实施 NLP 解决方案时,循环神经网络(RNN)具有处理序列顺序的内置机制。Transformer则是引入来位置编码机制来保存文本中字符的位置信息。

  1. 位置编码定义
    位置编码记录了文本中字符的位置信息,这里位置信息的记录不使用单个数字(例如索引值)来记录位置信息的原因有很多。 对于长序列,索引的大小可能会变大,不利于存储。 如果将索引值规范化为介于 0~1 之间,则可能会为可变长度序列带来问题,因为它们的标准化方式不同。

  2. 三角函数
    这是对正弦函数的快速回顾;你可以等效地使用余弦函数。函数的取值范围是
    [−1,+1]。该波形的频率是一秒内完成的周期数。波长是波形重复自身的距离。不同波形的波长和频率如下所示:

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

  4. 可视化理解位置编码
    Python实现位置编码,这是使用 NumPy 实现位置编码的简短 Python 代码。 简化了代码,以便更容易理解位置编码。

import numpy as np
import matplotlib.pyplot as plt

def 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 P

P = 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]]

单个字符可视化,要理解位置编码,让我们从查看 n=10,000 和 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)

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

  1. 整句话的位置编码可视化
    可视化更大值的位置矩阵。 使用 matplotlib 库中的 matshow() 方法。 如原始论文中所做的那样设置 n=10,000 ,将得到以下结果:
P   = getPositionEncoding(seq_len=100, d=512, n=10000)
cax = plt.matshow(P)
plt.gcf().colorbar(cax)

这里使用颜色来表示位置编码中的数值:
在这里插入图片描述

  1. 位置编码层的最终输出
    Transformer中的位置编码层把位置向量与单词编码相加,并为后续层输出该矩阵。

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

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

相关文章

quartz实现动态定时任务管理

1、需求 配置中,固定周期,单位秒。需要任务每间隔这个秒数 执行进行统计。 2、分析 要实现这个需求,之前一直在用的多线程方案也行。详见 既然前面用quartz 根据cron表达式上一次和下一次的执行时间判断。 本次就用quartz来实现动态任务。…

学生管理系统之数据库设计与开发

学生管理系统之数据库设计与开发 使用SQL创建表格 QT上写逻辑 创建一个类 <

Xilinx FPGA 原语解析(一):IBUFDS_GTE3 差分时钟输入缓冲器

目录 1.使用说明 2.实例化代码 3.参数解释 4.端口连接 1.使用说明 IBUFDS_GTE3 是Xilinx FPGA 中用于高速接口的差分时钟信号输入缓冲器。 BUFDS_GTEx&#xff0c;x2/3/4&#xff08;不同系列的FPGA x的值不同&#xff09;&#xff0c;其中UltraScale使IBUFDS_GTE3…

内网穿透--meterpreter端口隧道

实验背景 通过公司带有防火墙功能的路由器接入互联网&#xff0c;然后由于私网IP的缘故&#xff0c;公网无法直接访问内部主机&#xff0c;则需要通过已连接会话&#xff0c;代理穿透访问内网主机服务。 实验设备 1.路由器一台 2.内网 Win 7一台 3.公网 Kali 一台 4.网络 …

Java算法和集合

1. 排序 1.1. 排序概述 1.2. 冒泡排序 整个数列分成两部分&#xff1a;前面是无序数列&#xff0c;后面是有序数列初始状态&#xff0c;整个数列都是无序的&#xff0c;有序数列为空如果一个数列有n个元素&#xff0c;至多需要n-1趟循环才能保证数列有序每一趟循环可以让无序…

Python:下载数据集

打开网站&#xff1a;搜索 ​​​​​​https://www.kaggle.com 直接下载即可&#xff08;要登陆注册哦&#xff09;,下载完成一定要放到桌面哦&#xff0c;因为读取的是当前目录 在网页上打开上一篇文章所讲的HelloWorld&#xff0c;如果没有安装请跳转 http://t.csdnimg.cn…

视频教程 - 自研Vue3 Tree组件高级功能:虚拟滚动新增节点实现自动滚动

感谢小伙伴们对本套自研vue3 tree组件教程的关注&#xff0c;在前一篇媲美Element Plus JuanTree终极实战&#xff1a;虚拟滚动的功能演示中发现了小bug&#xff0c;特地整理了相关录屏来说明怎么一步步解决bug的&#xff0c;来回馈小伙伴们的支持。 Tree组件高级功能&#xff…

Photoshop Ps2024苹果(mac)版安装下载,(附win/mac下载链接)

一、简介 PS2024即Photoshop 2024&#xff0c;是一款由Adobe公司开发的图像处理软件。其部分功能介绍如下&#xff1a; - 生成式AI绘图&#xff1a;将Photoshop和生成式AI两个强大的成像引擎结合&#xff0c;用户可通过文本提示在Photoshop内部生成内容&#xff0c;并使用Phot…

基于cubeMX的STM32开启SPI及DMA

1、打开cubeMX后&#xff0c;设置SPI&#xff0c;如下图 2、设置SPI的DMA中断 3、DMA设置 4、SPI的GPIO设置 5、最后生成代码&#xff0c;可以看到工程文件中有dma.c和spi.c 6、使用举例&#xff1a;如幻彩灯的亮灭使用SPIDMA产生的信号波形来控制&#xff0c;在ws2812.c中调用…

Harbor镜像仓库(v2.10.3)附相关自定义配置

目录 一. 环境准备 二. 部署安装 三. 修改网段的方法 四. 配置开机与伴随docker启动 五. 基础使用 1. 创建一个用户 2. docker登录用户 3. 创建项目 4. 推送镜像 六. 自制证书配置HTTPS 一. 环境准备 Harbor 是一个开源的企业级 Docker 镜像仓库&#xff0c;提供了许…

1.4亿中文知识图谱导入Nebula Graph快速体验

1. 史上最大规模的中文知识图谱 Yener 开源了史上最大规模的中文知识图谱—— OwnThink&#xff08;链接&#xff1a;​​https://github.com/ownthink/KnowledgeGraphData​​&#xff0c;数据量为 1.4 亿条。数据以 ​​(实体, 属性, 值)​​ 和 ​​(实体, 关系, 实体)​​…

AI大模型技术的四大核心架构分析

AI大模型技术的四大核心架构演进之路 随着人工智能技术的飞速发展&#xff0c;大模型技术已经成为AI领域的重要分支。 深度剖析四大大模型技术架构&#xff1a;纯粹的Prompt提示词法、Agent Function Calling机制&#xff0c;RAG&#xff08;检索增强生成&#xff09;及Fine-…

基于若依框架开发的Spring Boot+Vue的MES(生产制造执行系统)是一种专为中小型工厂设计的ERP(企业资源计划)系统

基于若依框架开发的Spring BootVue的MES&#xff08;生产制造执行系统&#xff09;是一种专为中小型工厂设计的ERP&#xff08;企业资源计划&#xff09;系统。这个系统旨在帮助这些工厂实现更有效的生产管理、数据收集与分析、设备监控以及质量管理等&#xff0c;从而提高生产…

VMWare虚拟机如何连接U盘

检查配置 1&#xff09;Win R键&#xff0c;输入services.msc&#xff0c;打开服务。 2&#xff09;将AMware USB Arbitration Services 服务开启&#xff0c;并设置为自动启动&#xff1b; 连接U盘 目前作者了解有两种连接方式&#xff0c;如有其他连接方式&#xff0c;欢…

2024关于日本AI 领域TOP12 的大学介绍

1.东京大学 &#xff08;The University of Tokyo&#xff09; 位于&#xff1a;日本东京都文京区本郷七丁目3 番1 号 网址&#xff1a;東京大学 东京大学也被称为UTokyo 或东大&#xff0c;是日本第一所国立大学。作为领先的研究型 大学&#xff0c;东京大学提供基本所有…

JavaFX布局-SplitPane

JavaFX布局-SplitPane 常用属性orientationpaddingdividerPositionsdisable 实现方式Java实现fxml实现 一个拆分至少两个区域的容器支持水平、垂直布局可以拖动区域的大小初始化大小通过比例设置[0,1] 常用属性 orientation 排列方式&#xff0c;Orientation.VERTICAL、Orien…

k8s学习2

k8s 分成Master 负责整个k8s集群管理 node节点&#xff08;工作&#xff09;运行nginx 节点—服务器 kubernetes 组件 kubernetes集群主要由控制节点(Master)、工作节点(Node)组成 Master组件 集群的控制平面&#xff0c;集群的决策 负责管理k8s 集群管理 apiserver Kuber…

Cesium 相机控制器(1)-wheel 实现原理简析

Cesium 相机控制器(1)-wheel 实现原理简析 已经做大量简化, 不是代码最终的样子. Viewer┖ CesiumWidget┖ ScreenSpaceCameraController(_screenSpaceCameraController)┣ CameraEventAggregator(_aggregator) // 相机事件代理┃ ┖ ScreenSpaceEventHandler(_eventHandler…

3.创建了Vue项目,需要导入什么插件以及怎么导入

如果你不知道怎么创建Vue项目,建议可以看一看这篇文章 怎么安装Vue的环境和搭建Vue的项目-CSDN博客 1.在idea中打开目标文件 2.系在一个插件Vue.js 3.下载ELement UI 在Terminal中输入 # 切换到项目根目录 cd vueadmin-vue # 或者直接在idea中执行下面命令 # 安装element-u…

WordPress 轻量级产品官网类主题 CeoNova-Pro_v4.4绕授权开心版

CeoNova-Pro 主题是一款轻量级、且简洁大气、产品官网类主题&#xff0c;定位于高端产品官网、同时包含了知识付费、定制服务、问答社区、论坛交流、网址导航、以及付费产品购买下载等全方位覆盖。 源码下载&#xff1a;ceonova-pro4.4.zip 变更日志 新增虚拟资源隐藏信息增…