理解Transformer中的位置编码

news/2025/10/6 17:27:27/文章来源:https://www.cnblogs.com/zyl007/p/19127764

要理解Transformer中的位置编码(Positional Encoding),核心是先搞懂「为什么需要它」,再用「直观比喻+关键特性」拆解它的设计逻辑,全程避开复杂公式,聚焦「它到底在做什么」。

一、先解决核心问题:为什么需要位置编码?

Transformer的核心是自注意力机制,但自注意力有个“天生缺陷”——它会把整个序列的token(比如单词、子词)“一次性并行处理”,完全没考虑token的「顺序」。

举个例子:
“我吃苹果”和“苹果吃我”,这两个句子的token完全一样,但顺序不同导致语义天差地别。如果没有位置编码,Transformer会把这两个句子当成“相同的token集合”,根本无法区分语义。

而RNN/LSTM是“逐词处理”(先算“我”,再算“吃”,最后算“苹果”),天然能捕捉顺序;卷积虽然并行,但也能通过“局部窗口”间接感知位置。
Transformer没有这些结构,所以必须手动给每个token注入“位置信息”——这就是位置编码的核心作用:给token贴“位置标签”,让模型知道“谁在谁前面/后面”。

二、位置编码的直观设计:给每个位置一个“独一无二的指纹”

位置编码的本质是:为序列中每个「位置(pos)」生成一个和「词嵌入(Embedding)维度相同」的向量(论文中是512维),然后把这个“位置向量”和“词嵌入向量”直接相加,这样每个token就同时包含了“语义信息(词嵌入)”和“位置信息(位置编码)”。

关键是:怎么设计这个“位置向量”,才能让模型轻松区分不同位置,还能理解「相对位置」(比如“我”和“苹果”隔了1个词,“苹果”和“吃”相邻)?

1. 论文的选择:用「正弦/余弦函数」生成位置向量

论文没有用“学习型位置编码”(比如随机初始化后让模型学),而是用了固定的正弦和余弦函数,形式很简单(不用记公式,看规律):

  • 对于位置pos(比如第1个词pos=0,第2个pos=1,…,第n个pos=n-1)
  • 对于位置向量的第i个维度(比如512维中的第0维、第1维、…、第511维)
    • 如果i偶数(比如0、2、4…):用正弦函数 sin(pos / 10000^(2i/d_model))
    • 如果i奇数(比如1、3、5…):用余弦函数 cos(pos / 10000^(2i/d_model))

这个设计的直观好处,用一个比喻就能懂:
把每个“位置向量”当成一个「收音机」——不同维度对应不同的“频率频道”,位置pos不同,每个频道的“信号强度”(函数值)也不同。

  • 低维度(比如前几个维度):频率很低,不同位置的信号差异小(适合捕捉“长距离相对位置”,比如pos=0和pos=100的差异);
  • 高维度(比如后几个维度):频率很高,不同位置的信号差异大(适合捕捉“短距离相对位置”,比如pos=0和pos=1的差异);

这样一来,每个位置都有一个独一无二的“信号组合”(位置向量),就像每个人的指纹一样,模型能轻松区分“谁在哪个位置”。

2. 最关键的优势:天然支持「相对位置」

语言中,“相对位置”比“绝对位置”更重要(比如“猫追狗”中,“猫”在“追”前面,“追”在“狗”前面——这个相对关系决定语义,而它们是第1、2、3个词的绝对位置没那么重要)。

而正弦/余弦函数的数学特性刚好满足这一点:对于任意固定的距离k(比如两个词隔了k个位置),位置pos+k的编码向量,都能通过位置pos的编码向量“线性组合”得到

举个简单例子:假设k=2,那么pos=3的编码向量,能由pos=1的编码向量算出来。这就意味着,模型学完pos=1和pos=3的关系后,遇到pos=5和pos=7(同样隔2个位置),能自动理解它们的相对关系——不用重新学习所有位置的组合,泛化能力更强。

3. 为什么不用“学习型位置编码”?

论文也试过“让模型自己学位置向量”(随机初始化,训练中更新),发现效果和正弦余弦几乎一样,但正弦余弦有个致命优势:能外推到“比训练时更长的序列”

比如训练时序列最长是512个词,测试时遇到1000个词的长句子:

  • 正弦余弦编码:直接代入公式计算pos=512、513…1000的向量,完全没问题;
  • 学习型编码:模型没学过pos≥512的位置,无法生成有效向量,直接“懵了”。

三、一句话总结位置编码

位置编码就是给Transformer中的每个token“贴一张带位置信息的身份证”:

  • 身份证的“格式”(维度)和词嵌入完全一致,方便直接结合;
  • 身份证的“内容”(向量值)由正弦余弦函数生成,确保每个位置独一无二,还能让模型看懂“谁和谁隔多远”;
  • 最终目的:解决Transformer“并行处理时丢了顺序”的bug,让模型能正确理解“语序决定语义”的语言规律。

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

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

相关文章

完整教程:android stdio 的布局属性

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

南阳集团网站建设互联网公司营业执照经营范围

ROS2 — quaternion_inverse() quaternion_inverse() 函数用于计算四元数的逆。四元数是一种在三维空间中表示旋转的数学工具,它由一个实部和三个虚部组成,通常表示为 q w xi yj zk,其中 w 是实部,而 x, y, z 是虚部&#xf…

建设网站哪里好青岛企业展厅设计公司

你们呼唤了无数次的妙记多 Mojidoc PC客户端 Beta版本正式上线啦! 感谢300位妙友积极参与内测,给予了我们很多非常有效的意见和建议!我们会根据用户反馈不断优化和修复相关功能,在此感谢妙友们一直以来的支持~ PC端拥…

网络风险管理的三大关键洞察

本文深入探讨网络风险管理的三大核心洞察:从攻击者视角审视攻击面、基于风险优先级进行漏洞修复,以及通过AI自动化实现主动风险管理。这些策略能帮助企业从被动防御转向主动安全,有效提升整体安全防护水平。网络风险…

鸿蒙UI研发——组件的自适应拉伸

鸿蒙UI研发——组件的自适应拉伸2025-10-06 17:21 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !import…

网站建设常见问题解决方案wordpress主题手机版不显示侧边栏

这篇文章将详细介绍 如何在 stm32103 板子上点亮一个LED. 文章目录 前言一、开发环境搭建。二、LED 原理图解读三、什么是 GPIO四、cubeMX 配置工程五、解读 cubeMX 生成的代码六、延时函数七、控制引脚状态函数点亮 LED 八、GPIO 的工作模式九、为什么使用推挽输出驱动 LED总结…

网站备案查询 站长传奇手游发布网站

功能配置 一、用户 用户管理小黑屋用户反馈登录设置短信参数 二、作品 视频作品背景音乐库背景音乐分类 三、形象分身 上传记录视频要求参数配置 四、声音克隆 克隆记录参数配置声音要求文案示例 五、AI文案 生成记录创作模型模型分类Al配置 六、充值 充值订单积分套…

seo网站优化服务商html网站怎么做视频教程

高防服务器是一种专门用于防御DDoS(分布式拒绝服务)攻击的服务器。其中一种常见的DDoS攻击就是CC(连续性攻击),它通过向目标服务器发送大量的请求来耗尽服务器资源,使网站无法正常运行。高防服务器采用多种…

php网站开发结构弹窗视频网站

堆叠和IRF其实可以近似看成同一种技术,只是华三叫IRF,华为叫智能堆叠 智能堆叠(iStack):支持堆叠特性的交换机通过堆叠线缆连接在一起,从逻辑上变成一台交换设备,作为一个整体参与数据转发&…

网站开发老是弹广告vi手册

本文旨在以初学者的角度来学习Java异常的知识,尽量简单,一些细枝末节的知识不会讲述,但不影响对知识的掌握。(比如try-catch可以嵌套,不太会这么用)1.什么是异常我们先举个例子int 在IDE里输入这样一个stat…

南宁网站的优化seo整站优化哪家专业

Windows 7 OpenGL配置,解决“无法启动此程序,因为计算机中丢失glut32.dll。”转载于:https://www.cnblogs.com/yangai/p/6253332.html

怎么给网站添加代码只做鱼网站

1.php 不死马权限维持 <?php ignore_user_abort(); //关掉浏览器&#xff0c;PHP脚本也可以继续执行. set_time_limit(0);//通过set_time_limit(0)可以让程序无限制的执行下去 $interval 5; // 每隔*秒运行 do { $filename test.php; if(file_exists($filename)) { echo…

什么叫静态网站seo网络培训

目录 报错信息 解决方法 报错信息 如下所示&#xff08;地址已盲&#xff09;&#xff1a; 控制台报错说找不到这些资源&#xff0c;但是 dist 目录下都有这些 JS 文件啊&#xff0c;这是为什么&#xff1f; 解决方法 在 Vue 项目的 vue.config.js 文件中&#xff0c;添加 …

丝绸之路网站平台建设网站底部 图标

近年来&#xff0c;很多人想要从其他行业跳槽转入计算机领域。非计算机科班如何丝滑转码&#xff1f; 如何规划才能实现转码&#xff1f; 对于非计算机科班的人来说&#xff0c;想要顺利转码成为计算机相关岗位的从业者&#xff0c;需要经过以下几个步骤&#xff1a; 规划转码…

网站建设如何选择宝安网站设计流程

场景还原 今天有小伙伴练习Nginx配置负载均衡时总是无法使用配置好的网址访问 配置文件信详情 http {# 负载均衡 后端IP地址和端口 webservers 策略 轮询upstream webservers{server 192.168.1.100:8080 weight90; server 127.0.0.1:8080 weight10; }server{listen 80;ser…

Java基础 Day28 完结篇 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实用指南:第三十三天打卡复习

实用指南:第三十三天打卡复习pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

实用指南:Hardening fixes lead to hard questions

实用指南:Hardening fixes lead to hard questionspre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

赛前训练6 状压

A 简单树上差分. B 维护 \(d_{i,j}\) 表示人 \(i\) 在第 \(j\) 位与哪些人有区别.预处理即可. 对于每个人,枚举提问的二进制状态;对于提问的每个二进制位,将它们的 \(d\) 全部拼起来,若能拼成 ((1<<n)-1)^(1<…

排序综合

1、基础排序(cmp函数自定义排序) `struct Ren { int a;int b; }ren[1000010]; bool cmp(const Ren& i, const Ren& j) { if (i.zhi < j.zhi) { return true; } else { if (i.zhi == j.zhi) { if (i.ji &g…