AI学习记录 - transformer的位置编码的理解

看完肯定懂,可能会更新

一看位置编码公式,感觉很懵逼

在这里插入图片描述

懵逼四点:(或者你还有其他不懂的点)

1、为什么使用正弦余弦公式?不可以使用其他公式?
2、为什么奇数位置使用余弦,偶数位置使用正弦?
3、为什么不单独使用正弦,或者单独使用余弦?
4、正弦余弦公式到底是怎么影响原词向量的?怎么进行计算的?

如果原词向量为下图,你打算怎么给词向量叠加上位置编码呢?(假设词向量只有5位,实际上gpt是几万位)

在这里插入图片描述

我来告诉你几种脑子突然出现的想法。
1、给每个词向量的每一个位置都加上位置号码,例如have = [0.1,0.4,0.8 …] …day[4.8, 4.1, 4.4, 4.6, 4.6],发现一个问题,当我们的句子很长例如500个字的时候,后面词语位置编码会很大,本来词向量大部分都是0-1的数字,你这么大,位置编码会严重覆盖掉原有的词向量语义,词向量会丢失原有的语义。

2、等比例缩小行不行,假设100个词语,第1个词汇叠加0,第2个词汇叠加0.01,第3个词汇叠加0.02,第100个词汇叠加0.99,这样确实是可以的,没有问题,但是在实际训练中词与词之间的距离是0.01,太小了,位置信息太弱了,实际训练效果不好也不行。

。。。。或者你还想到其他的办法

总结:太强不行,太弱也不行

先看三角函数为什么可以,我们看下三角函数的图像
在这里插入图片描述

先提一个点:位置信息肯定是唯一的,或者是在很长的文字当中,起码重复度不会太高,x轴代表位置,y轴代表叠加上去的值

假设只使用一个三角函数sin,我们将第2和第14两个位置输入到sin,他们的值很像,在神经网络的训练中,很容易把第2个位置和第14个位置当成是一个位置,不满足我们上面说到的要求位置唯一性。

sin2
在这里插入图片描述

sin14
在这里插入图片描述

怎么将sin变得具有唯一性呢,把sin函数的波长拉长,拉长到10000,这就是公式里面的10000那个数字,大家可以看一看公式,下图我拉长了4,假设拉长到10000,然后将位置x=0,1,2,3…n对应sin(x/10000)叠加到词向量上面,就保证了词与词之间的位置编码具有唯一性。虽然唯一性是保证了,但是词与词之间的位置编码间隔还是太小,不行不行。
在这里插入图片描述

所以,重点来了,原公式在每个词向量的倒数第1维,使用的是波长为10000的sin公式,在每个词向量的倒数第2维,使用的是波长为5000的sin公式,维度越靠前,使用的波长越短。单看最后一维,词与词之间的距离非常小,间隔可能在0.00001之间,但是可以保证唯一性。越到前面波长越短,倒数第2个维度,词与词之间间隔可能在0.0001之间,依次类推,间隔可以看作 [0.5, 0.1, 0.05, 0.001 …0.0001,0.00001],维度越靠前,不同词语的同等维度数字差距越大,这就能明显的区分出词与词之间的间隔,同时靠后的维度又保证了位置的唯一性。那为什么又要使用cos呢,我的理解是主要还是为了提取更多的位置特征,增加一点复杂性,让位置编码拥有更多的位置特征。
在这里插入图片描述

看个例子,不同维度使用的是不同波长的三角函数

在这里插入图片描述
总结:
所以我们设计位置编码必须遵守三个规则
1、位置信息不可比语义信息要强势。
2、位置信息必须有界,防止越到后面位置信息太大覆盖语义信息。
3、文字太长的情况下,相邻字之前的位置信息也不会太弱势。

下图借助了一个博主的图:
在这里插入图片描述

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

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

相关文章

FreeModbus学习——定时器

FreeModbus版本:1.6 协议栈初始化时会初始化定时器: eMBInit → eMBRTUInit → xMBPortTimersInit( ( USHORT ) usTimerT35_50us ) 协议栈使能时会使能定时器: eMBEnable → pvMBFrameStartCur → eMBRTUStart → vMBPortTimersEnable 定时…

基于单片机控制的变压器油压油温故障检测

摘 要 在电力系统的运行中,通过对其核心设备变压器的故障进行检测,以此能够及时、准确的发现变压器的故障,基于单片机控制的变压器油压油温的故障检测的方法,利用压力传感器、温度传感器对变压器的油压、油温进行采集并送入单片机…

day08:订单状态定时处理、来单提醒和客户催单

文章目录 Spring Task介绍cron表达式入门案例 订单状态定时处理需求分析代码开发扩展 WebSocket介绍入门案例特点 来单提醒需求分析和设计代码实现 客户催单需求分析和设计代码实现 Spring Task 介绍 Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时…

Dify 零代码 AI 应用开发:快速入门与实战

一、Dify 介绍 Dify 是一个开源的大语言模型 (LLM) 应用开发平台。它结合了后端即服务 (Backend-as-a-Service) 和 LLMOps (LLMOps) 的概念,使开发人员能够快速构建生产级生成式 AI (Generative AI) 应用。即使是非技术人员也可以参与 AI 应用的定义和数据操作。 …

鸿蒙UI系统组件10——菜单(Menu)

果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧!扫描下面名片,关注公众号。 Menu是菜单接口,一般用于鼠标右键弹窗、点击弹窗等。 1、创建默认样式的菜单 菜单需要调用bindMenu接口来实现。bindMenu响应绑定组件的点击事件&am…

【MATLAB APP】建立独立桌面APP

背景:已有MATLAB APP的.mlapp文件,但客户提出需要可以直接使用的exe文件。 要求:点开即用,无需下载MATLAB。使用者无法修改APP的代码。 一、环境配置 APP创建者:安装MATLAB R2023a,配置Application Compile…

【SpringBoot】5 Swagger

官网 https://swagger.io/ 介绍 Swagger 是一套基于 OpenAPI 规范构建的开源工具,可以帮助开发者实现设计、构建、记录、使用 Rest API。 Swagger 是一款根据 Restful 风格生成的接口开发文档,并且支持做测试的一款中间软件。 Swagger主要包括三部分&…

AI绘画;Stable Diffusion再升级:学会以图生图!

前言 Stability AI 很高兴地宣布推出 Stable Diffusion Reimagine!我们邀请用户通过 Stable Diffusion 尝试图像并“重新构想”他们的设计。 Stable Diffusion Reimagine 是一种新的 Clipdrop 工具,它允许用户无限制地生成单个图像的多个变体。无需复杂…

科研绘图系列:R语言山脊图(Ridgeline Chart)

介绍 山脊图(Ridge Chart)是一种用于展示数据分布和比较不同类别或组之间差异的数据可视化技术。它通常用于展示多个维度或变量之间的关系,以及它们在不同组中的分布情况。山脊图的特点: 多变量展示:山脊图可以同时展示多个变量的分布情况,允许用户比较不同变量之间的关…

【Java基础语法】字符修改,以及equals的用法

前言: 小编这里将上一期String类型进行了补充,添加了字符串的修改,以及equals的用法内容,和hashcode的使用;上一期:http://t.csdnimg.cn/ijiM6 1.字符串的修改 在上一期中我们说到字符串是不能被修改的&am…

计算机视觉项目-2024年第3号超强台风“格美”登陆福建带来大暴雨造成城市积水,通过模型识别路段积水避开积水道路

大家好,我是微学AI,今天给大家介绍一下计算机视觉项目-2024年第3号超强台风“格美”登陆福建带来大暴雨造成城市积水,通过模型识别路段积水避开积水道路。今年第3号台风“格美”(强台风级)的中心今天(24日)早晨5点钟位于我国台湾省宜兰县东南…

多表查询的内连接与外连接

目录 1. 内连接 1.1 概述 1.2 等值连接 1.3 非等值连接 1.4 自连接 2. 外连接 2.1 概述 2.2 左/右连接 2.3 全连接 3. 多张表连接 1. 内连接 1.1 概述 查询满足条件的两张表数据,也就是两张表的交集; 内连接使用过程中,尽量对表重…

linux系统安装pytorch_中文地址命名实体识别案例

命名实体有关文章参考这篇文章 中文地址命名实体识别训练和预测 win10系统安装cuda环境参考这篇文章 搭建Pytorch的GPU环境超详细 1、下载python https://www.python.org/downloads/release/python-368/ 2、下载python包 https://pypi.org/search/?q=transformers 1、搜…

董宇辉离职,我一点都不意外!只不过感觉来的太快

下面这张图,是我在半年多前写的一段随笔,没想到来的这么快! 碰巧的是今天中午,在开发者群里有两位老铁自曝,本以为能公司干到老,但公司却不给机会,已经不在是公司员工了。 最近,晓衡…

C++——QT:保姆级教程,从下载到安装到用QT写出第一个程序

登录官网,在官网选择合适的qt版本进行下载 这里选择5.12.9版本 点击exe文件下载,因为服务器在国外,国内不支持,所以可以从我的网盘下载 链接: https://pan.baidu.com/s/1XMILFS1uHTenH3mH_VlPLw 提取码: 1567 --来自百度网盘超级…

我澄清下,大数据界面虽然有点花,但对趋势的判断还是很准的!

我澄清下,大数据界面虽然有点花,但对趋势的判断还是很准的! 艾斯视觉的观点认为:在这个充满不确定性的世界里,大数据就像一位智者,透过那些令人眼花缭乱的界面,总能以它独到的洞察力&#xff0…

matlab笔记 - 最小二乘法拟合直线的原理与实现

最小二乘法拟合直线原理与实现 一、引言二、原理概述1. 建模思路2.误差函数3.求解最优参数 三、matlab实现最小二乘法拟合直线1.直接代码实现2.MATLAB内置函数实现 四、扩展统计学与回归分析经济学工程学图像处理机器学习 一、引言 最小二乘法(Least Squares Metho…

遇到Websocket就不会测了?别慌,学会这个Jmeter插件轻松解决....

websocket 是一种双向通信协议,在建立连接后,websocket服务端和客户端都能主动向对方发送或者接收数据,而在http协议中,一个request只能有一个response,而且这个response也是被动的,不能主动发起。 websoc…

常见的jmeter面试题及答案

1、解释什么是JMeter? JMeter是一款Java开源工具, 用于性能负载测试。它旨在分析和衡量Web应用程序和各种服务的性能和负载功能行为。 2、说明JMeter的工作原理? JMeter就像一群将请求发送到目标服务器的用户-样。它收集来自目标服务器的响应以及其他统计数据&…

WARNING: Ignoring invalid distribution -ip警告信息如何去掉?

查看已安装依赖列表的时候,出现了很多警告信息,如何去掉呢? 解决办法 打开这个路径:d:\software\python\python39\lib\site-packages 这种波浪线开头的,我们将它删除掉,就可以了。