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

news2024/11/24 13:03:43

看完肯定懂,可能会更新

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

在这里插入图片描述

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

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,数字太小了,位置信息太弱了,实际训练效果不好。假设原词向量大部分维度的数字都在0-1,起码我叠上去的数字也在这个区间吧。

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

总结:位置信息太强不行,相邻词之间位置信息太弱也不行

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

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

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

sin2
在这里插入图片描述

sin14
在这里插入图片描述

怎么将sin变得具有唯一性呢,原生的sinx函数,周期性较短,很容易出现重复的值,但是我们要求位置信息肯定是唯一的,所以要把sin函数的波长拉长,拉长到10000,下图我拉长到10000,然后将位置x=0,1,2,3…n对应sin(x/10000)叠加到词向量上面,就保证了词与词之间的位置编码具有唯一性。虽然唯一性是保证了,但是相邻词之间的位置编码间隔差值还是太小,不行不行。
在这里插入图片描述

所以,重点来了,

原公式在
每个词向量的倒数第1维,使用的是波长为10000的sin公式
在每个词向量的倒数第2维,使用的是波长为5000的sin公式,
维度越靠前,使用的波长越短。

1、单看最后一维,词与词之间的差值非常小,间隔可能在0.00001之间,但是可以保证唯一性,但在神经网络训练中太弱了,位置信息几乎不起作用。
2、根据公式,维度越靠前面波长越短,倒数第2个维度,词与词之间间隔可能在0.0001之间。
3、依次类推,相邻词语不同维度的差值可以大概看作 [0.5, 0.1, 0.05, 0.001 …0.0001,0.00001]。
4、我们发现维度越靠前,不同词语的同等维度数字差距越大,这就能明显的区分出词与词之间的间隔,同时靠后的维度又保证了位置的唯一性。
5、那为什么又要使用cos呢,我的理解是主要还是为了提取更多的位置特征,增加一点复杂性,让位置编码拥有更多的位置特征。

解析下面公式,dmodel 是单个词向量的总维度,i 是单个词向量的某一个维度。

在这里插入图片描述

看个例子,不同维度使用的是不同波长的三角函数,下面两个矩阵直接对位相加就可以了

在这里插入图片描述

总结:

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

根据规则:你要是个天才,也可以设计出属于自己的位置编码,但是起码你要遵循上面三个规则。

下图借助了一个博主的图:

在这里插入图片描述

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

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

相关文章

向量数据库:从0到original paper

向量数据库相关概念 亿点点历史知识 LLM的模型发展历史,Harnessing the Power of LLMs in Practice: A Survey on ChatGPT and Beyond1: 很多人都是从ChatGPT爆点后才逐渐了解到大模型,但在爆点的前几年大模型的发展已经开始了诸神之战。一…

网络服务综合项目(一键部署shell脚本)

目录 需求: 主机环境描述 注意: 项目需求: 代码讲解 配置本地仓库 安装软件包 配置防火墙 配置策略中的一个布尔值 配置web服务 配置网络仓库 配置DNS服务 配置NTP服务 配置MySQL服务 配置NFS服务 配置论坛服务 进入网站配置…

数据结构(稀疏数组)

简介 稀疏数组是一种数据结构,用于有效地存储和处理那些大多数元素都是零或者重复值的数组。在稀疏数组中,只有非零或非重复的元素会被存储,从而节省内存空间。 案例引入 假如想把下面这张表存入文件,我们会怎么做?…

C语言字符函数与字符串函数超详解

文章目录 前言1. 字符分类函数2. 字符转换函数3. strlen3. 1 strlen 的使用3. 2 strlen 的模拟实现 4. strcpy4. 1 strcpy 的使用4. 2 strcpy 的模拟实现 5. strcat5. 1 strcat 的使用5. 2 strcat 的模拟实现 6. strcmp6. 1 strcmp 的使用6. 2 strcmp 的模拟实现 7. strncpy 函…

如何获得某个Window画面所属包名packageName和用户userId

在安卓上获得某个Window画面所属包名packageName和用户userId的方法 1,用到的工具如下: adb androidSDK里的monitor工具 adb shell dumpsys window animator adb shell dumpsys window命令 jdk 1.8已在安卓14模拟器上测试通过。 以AOSP的launcher中的m…

Nacos适配达梦数据库并制作镜像

背景:因项目需要信创,需将原本的mysql数据库,改成达梦数据库 一、部署达梦数据库 1.1 部署达梦数据库服务 可参考:Docker安装达梦数据库_达梦数据库docker镜像-CSDN博客 1.2 创建nacos数据库 create user SAFE_NACOS identifi…

pythonGame-实现简单的贪食蛇游戏

通过python简单复现贪食蛇游戏。 使用到的库函数: import pygame import time import random 游戏源码: import pygame import time import randompygame.init()white (255, 255, 255) yellow (255, 255, 102) black (0, 0, 0) red (213, 50, 80…

【秋招突围】2024届秋招笔试-美团笔试题-第一套-三语言题解(Java/Cpp/Python)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新 美团 春秋招笔试题**汇总~ 👏 感谢大家的订阅➕ 和 喜欢💗 01.LYA 的音乐播放列表 问题描述 LYA 有一个包含 n n n 首歌曲的音乐播放列表,歌曲编号从 1 1

护网紧急情况应对指南:Linux 应急响应手册

继上一篇:护网紧急情况应对指南:Windows版v1.2全新升级版 之后 收到小伙伴后台要Linux应急手册,今天给大家安排上。 《Linux应急手册》是一本为Linux系统管理员和运维工程师量身打造的实用指南,旨在帮助他们快速应对各种突发状况…

电测量数据交换DLMSCOSEM组件第10部分:智能测量标准化框架

1.GB/T 17215.6XY系列 IEC 62056 DLMS/COSEM组件标准已经由IEC/TC 13完成制定,用于电测量的目的。有些标准——特别是COSEM数据模型——也已经被其他非电量测量的技术委员会使用。IEC62056-X-Y系列标准对应转换国标GB/T 17215.6XY系列(电测量数据交换DLMSCOSEM组件)。如下图…

Electron的入门介绍与使用(1)共30节

Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发 经验。 入门指南​ Electron 是网页应用 …

repo 工具安装和使用教程(windows+gitee)

repo是什么 官方的定义:Repo是谷歌用python脚本写的调用git的一个脚本,可以实现管理多个git库。 Android的源代码使用Repo 命令行工具来管理多个git仓库,大概有百多个。要想克隆和管理百多个 Git 仓库,不是一件简单的事情。Repo 命…

Java集合——HashMap的底层实现

HashMap将数据以键值对的形式存储,是线程不安全的(即在多线程中若不用concurrentHashMap会导致结果错误)。 // concurrentHashMap编程示例 import java.util.Map; import java.util.concurrent.ConcurrentHashMap;public class HashMapThrea…

快手电商Android一面凉经(2024)

快手电商Android一面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《快手电商Android一面凉经(2024)》。 面试职位: Android工程师 技术一面 面试形式…

新手小白的pytorch学习第十四弹------十一、十二、十三弹卷积神经网络CNN的习题

习题编号目录 No 1No 2No 3No 4No 5No 6No 7No 8No 9No 10No 11No 12No 13 练习题主要就是 写代码,所以这篇文章大部分是代码哟~ No 1 What are 3 areas in industry where computer vision is currently being used? No 2 工业异常检测,目标检测 Sea…

C语言 -- sizeof和strlen的用法

C语言 -- sizeof和strlen的用法 1. sizeof和strlen的对比​1.1 sizeof​1.2 strlen​1.3 sizeof 和 strlen的对比​ 2. 数组和指针笔试题解析2.1 一维数组​2.2 字符数组​2.3 二维数组 3. 指针运算笔试题解析3.1 题目1:3.2 题目2​3.3 题目3​3.4 题目4​3.5 题目5…

力扣高频SQL 50题(基础版)第十九题

文章目录 力扣高频SQL 50题(基础版)第十九题1211. 查询结果的质量和占比题目说明思路分析实现过程准备数据实现方式结果截图 力扣高频SQL 50题(基础版)第十九题 1211. 查询结果的质量和占比 题目说明 Queries 表: …

学习c语言第十五天(初阶测评)

选择题 1.下列程序输出结果为 67 2.下列程序输出结果为 死循环打印 3.i 和j的值分别为什么 2 1 4.k的终值是什么 90 5.输出结果是什么 1 6.正确的是 C 7. C语言规定main函数位置 C 8.不正确的是 D 9.正确的是 c 库函数独立c语言之外 10…

comsol在静水压力下的地应力平衡

comsol在静水压力下的地应力平衡 条件: 水深3m,粗砂层厚度10m,模型长度100m土体的饱和密度1950kg/m3水的密度1000kg/m3浮重度 γ ′ = γ s a t − γ w \gamma=\gamma_{sat}-\gamma_w γ

GD32 PWM输入捕获

前言 通过本次的学习,了解定时器的分类和配置,高级定时器,通用定时器等不同等级的定时器拥有的功能,学习定时器的输入捕获与输出比较功能(PWM)脉冲宽度调制,来控制电机等外设。 定义 定时器的分…