Positional Encoding | 位置编码【详解】

news2024/11/18 7:25:57

文章目录

    • 1、位置编码的2种方案
    • 2、位置编码
    • 3、公式详解 : 绝对位置 、 相对位置
    • 4、代码
      • 4.1 代码1
      • 4.2 代码2

1、位置编码的2种方案

transformer的作者刚开始说固定的位置编码和可学习的位置编码的效果是差不多的,后来证明可学习的位置编码没有太大的必要,还不如省事直接使用固定的位置编码,

代码中,token_num是句子中的单词数量,embed_dim表示每个单词的特征向量长度,

self.pe =nn.Parameter(torch.zeros(token_num, embed_dim))

在这里插入图片描述

2、位置编码

将对应位置的位置编码直接加在输入的单词上,如下图中的最后一行,
为什么 attention 并不能赋予 token 位置信息?

  • 例如下图中的一句话里有5个token,先计算每个token(例如“我”)和其他所有token的相似度,然后再乘以每个token(例如“我”)的value,得到b1值,b1值只包含全局的内容信息,而不包括位置信息,
  • 下图第1行的左图和右图中的“我”的值都是相同的,
  • 所以相应的解决方案就是对每个token加入一个位置信息,如下图第2行中的pe,这样下图第2行中的b1和b3值就不一样了,

在这里插入图片描述

3、公式详解 : 绝对位置 、 相对位置

在这里插入图片描述

如下图,设置token的数量为10,token的特征向量长度为128,偶数项和奇数项的位置编码公式如下图所示,

在这里插入图片描述

下面详细解释一下位置编码公式,下图中也解释了下面这句话:The wavelengths form a geometric progression from 2 π 2\pi 2π to 10000 ⋅ 2 π 10000 \cdot 2\pi 100002π

在这里插入图片描述

在这里插入图片描述

下面解释一下下面这段话:We chose this function because we hypothesized it would allow the model to easily learn to attend byrelative positions, since for any fixed offset k k k, P E p o s + k PE_{pos+k} PEpos+k can be represented as a linear function of P E p o s PE_{pos} PEpos

在这里插入图片描述

在这里插入图片描述

4、代码

4.1 代码1

import torch
import math
import matplotlib.pyplot as plt


def positional_encoding(d_model, length):
    """
    :param d_model: dimension of the token
    :param length: (maximum) token number
    :return: length*d_model position matrix
    """
    if d_model % 2 != 0:
        raise ValueError("Cannot use sin/cos positional encoding with "
                         "odd dim (got dim={:d})".format(d_model))
    pe = torch.zeros(length, d_model)
    position = torch.arange(0, length).unsqueeze(1)
    div_term = torch.exp((torch.arange(0, d_model, 2, dtype=torch.float) *
                         -(math.log(10000.0) / d_model)))
    pe[:, 0::2] = torch.sin(position.float() * div_term)
    pe[:, 1::2] = torch.cos(position.float() * div_term)

    return pe


pe = positional_encoding(128, 10)
plt.plot(range(10), pe[:, 0])
plt.show()

输出:

在这里插入图片描述

4.2 代码2

import torch
import torch.nn as nn
import numpy as np


class PositionalEncoding(nn.Module):

    def __init__(self, d_hid, n_position=200):
        super(PositionalEncoding, self).__init__()

        self.register_buffer('pos_table', self._get_sinusoid_encoding_table(n_position, d_hid))

    def _get_sinusoid_encoding_table(self, n_position, d_hid):
        def get_position_angle_vec(position):
            return [position / np.power(10000, 2 * (hid_j // 2) / d_hid) for hid_j in range(d_hid)]

        sinusoid_table = np.array([get_position_angle_vec(pos_i) for pos_i in range(n_position)])
        sinusoid_table[:, 0::2] = np.sin(sinusoid_table[:, 0::2])  # dim 2i
        sinusoid_table[:, 1::2] = np.cos(sinusoid_table[:, 1::2])  # dim 2i+1

        return torch.FloatTensor(sinusoid_table).unsqueeze(0)

    def forward(self, x):
        return x + self.pos_table[:, :x.size(1)].clone().detach()

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

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

相关文章

聊一下订单超时自动关闭的几种方式以及使用场景

订单超时自动关闭的本质其实是一种延时的功能实现,具体实现方式有很多种,但是我们方式的选择是需要结合业务场景的,没有更好的方案,只有更适合的方案,所以我们必须要结合自己的实际业务,以及业务的后续发展…

政务大数据解决方案(六)

政务大数据解决方案通过构建全面的数据集成平台,将来自不同政府部门和公共服务领域的多维度数据汇聚起来,运用先进的数据分析和人工智能技术进行深度挖掘与预测,从而为政府提供实时、精准的信息支持,优化决策流程,提高…

工业4.0下的防勒索病毒策略:主机加固在工控机防病毒中前行

MCK主机加固产品是一款专注于数据安全解决方案的软件,它在防勒索病毒和工控机防病毒方面具备一系列独特的功能和优势。 防勒索病毒方面: 内核级签名校验技术:MCK系统通过这项技术对操作系统启动及加载的所有模块进行可信认证,确…

电脑只有一个盘怎么分区?单盘电脑的解决方案

在现代计算机使用中,硬盘分区是一个重要的环节,它有助于我们更好地管理数据、提高系统运行效率,并在一定程度上保护数据的安全。 然而,当我们购买了一台新电脑后发现电脑里只有一个硬盘分区,这时候我们可能就需要对电…

Golang | Leetcode Golang题解之第349题两个数组的交集

题目&#xff1a; 题解&#xff1a; func intersection(nums1 []int, nums2 []int) (res []int) {sort.Ints(nums1)sort.Ints(nums2)for i, j : 0, 0; i < len(nums1) && j < len(nums2); {x, y : nums1[i], nums2[j]if x y {if res nil || x > res[len(re…

什么是CDN,CDN的作用是什么?

CDN CDN英文全称Content Delivery Network&#xff0c;即为内容分发网络。它是建立并覆盖在承载网之上&#xff0c;将内容存储在分布式的服务器上&#xff0c;使⽤户可以从距离较近的服务器获取所需的内容&#xff0c;从⽽减少数据传输的时间和距离&#xff0c;提⾼内容的传输…

基于Java的同城宠物服务预约系统的设计与实现---附源码78744

摘要 随着人们对宠物的喜爱和关注度不断增加&#xff0c;对宠物服务的需求也日益增长。为了提供更便捷、高效的宠物服务&#xff0c;设计并实现了一款基于 Java 的同城宠物服务预约系统。 本系统旨在满足宠物主人对各种宠物服务的需求&#xff0c;同时为宠物服务提供者提供一个…

C++ 设计模式——抽象工厂模式

抽象工厂模式 抽象工厂模式 抽象工厂模式主要组成部分代码实现抽象工厂模式模式的 UML 图抽象工厂模式 UML 图解析优点和缺点适用场景 抽象工厂模式提供一个接口&#xff0c;用于创建一系列相关或相互依赖的对象&#xff0c;而无需指定它们的具体类。它通常用于需要创建多个产品…

电脑怎么截图?截屏电脑快捷键ctrl加什么?

截图是我们日常使用电脑过程中非常常见的操作之一。无论是想保存有用的信息、分享有趣的内容&#xff0c;还是记录某个错误信息&#xff0c;截图都是一个简单而有效的方式。但是&#xff0c;不同的操作系统和需求会决定使用不同的方法来截图。接下来&#xff0c;我们将详细介绍…

opencascade Bnd_Range源码学习区间计算

opencascade Bnd_Range 前言 这个类描述了由两个实数值限定的 1D 空间中的区间。 一个区间可以是无效的&#xff0c;这表示区间中不包含任何点。 方法 1 默认构造函数。创建一个无效区间。 Bnd_Range() &#xff1b; 2 构造函数。创建最小最大值区间 Bnd_Range(const Sta…

使用LoRA对Llama3微调

使用LoRA&#xff08;Low-Rank Adaptation of Large Language Models&#xff09;技术对Llama-3语言模型进行微调。 理论知识参考百度安全验证 微调的前提条件 现在huggingface上下载llama2或llama3的huggingface版本。 我下载的是llama-2-13b-chat。 大语言模型微调方法 …

ComfyUI的部署,Ubuntu22.04系统下——点动科技

在服务器Ubuntu22.04系统下&#xff0c;ComfyUI的部署 一、ubuntu22.04基本环境配置1.1 更换清华Ubuntu镜像源1.2 更新包列表&#xff1a;2. 安装英伟达显卡驱动2.1 使用wget在命令行下载驱动包2.2 更新软件列表和安装必要软件、依赖2.2 卸载原有驱动2.3 安装驱动2.4 安装CUDA2…

【实战】分组校验

在实际的业务场景中同一个Entity的校验可能会有不同的规则&#xff0c;比如添加数据品牌id必须为空&#xff0c;而更新数据品牌Id必须不为空&#xff0c;针对这种情况我们需要使用分组校验来实现 在Entity中指定分组规则 使用 /*** 保存*/RequestMapping("/save")pub…

[STM32]如何正确的安装和配置keil?(详细)

一、我们为什么需要keil? 对于嵌入式开发的硬件来讲STM32可以说有着不可撼动的地位&#xff0c;它可能是很多人入门嵌入式开发接触到的第一款芯片&#xff0c;其强大的生态和大量开放的源代码也深受开发者的喜爱。对于嵌入式开发的软件来讲&#xff0c;keil绝对是在一届软件中…

知识竞赛中限时答题环节竞赛规则有哪些设计方案

限时答题在知识竞赛活动中是一个比较新颖的玩法&#xff0c;通过在一定时间内快速答题来提高现场紧张气氛&#xff0c;达到很好的现场效果。这种方式要求选手不但要答题正确&#xff0c;还要答题速度。那么&#xff0c;常用的限时答题环节规则应怎么设计呢&#xff1f;下面列出…

智能数字矿山钻机机械设备类网站模板

智能数字矿山钻机设备类网站模板&#xff0c;非常高端大气上档次&#xff01;易优内容管理系统是一套专注中小型企业信息传播解决方案的管理系统&#xff0c;更是一套后台管理框架&#xff0c;可以通过个性定制导航入口&#xff0c;扩展前端多个场景&#xff0c;比如可以用于小…

后端开发刷题 | 链表内指定区间反转【链表篇】

描述 将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转&#xff0c;要求时间复杂度 O(n)O(n)&#xff0c;空间复杂度 O(1)O(1)。 例如&#xff1a; 给出的链表为 1→2→3→4→5→NULL1→2→3→4→5→NULL, m2,n4 返回 1→4→3→2→5→NULL 数据范围&#xff1a; 链表…

【Linux】【系统纪元】Linux基础指令

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《C游记》《进击的C》《Linux迷航》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 引言一、文件管理1.1 ls1.2 pwd1.3 cd1.4 mkdir1.5 touch1.6 rm1.7 cp1.8 mv 二、文件输出2.1 echo2.2 cat2.3 less…

新学期新动力,以骨传导耳机开启健康音乐之旅

大学生快开学啦&#xff01;激励自己在学期的状态给自己准备一个礼物应该不过分吧&#xff0c;相信没有大学生能够没有耳机&#xff01;不管是在赶早八的路上也要放收歌来醒醒神&#xff0c;还是日常散步不那么单调&#xff0c;使用频率都很高&#xff0c;但是入耳式的蓝牙耳机…

Stable Diffusion 提示词插件:开启个性化艺术创作大门,探索AI绘画新境界。让灵感枯竭再无可能!

前言 之前的文章介绍了提示词的基础用法和进阶用法&#xff0c;东西很多很复杂&#xff0c;那么非程序员相关行业的人员&#xff0c;对字符不敏感怎么办&#xff1f; 没关系&#xff0c;今天我来介绍几款提示词插件&#xff0c;可以大大提升 Stable Diffusion 的使用效率。 …