当前位置: 首页 > news >正文

Transformer的正弦/余弦位置编码

正弦/余弦位置编码 = 用不同频率的波浪给每个位置打独特的"时间戳",让Transformer既能知道绝对位置,又能通过数学运算推导出相对距离。


一句话理解

位置编码 = 给每个座位(位置)发一个独特的"波形密码",让模型知道谁坐在第几排。


为什么需要位置编码?

Transformer没有循环结构(不像RNN逐个处理),它是一次性看完全部token。所以它天生是"瞎子"——不知道顺序!

输入对Transformer来说
“小猫在打滚”一堆向量,不知道谁在前谁在后
“滚打在小猫”也是一堆向量,完全一样对待

位置编码就是给每个位置贴一个"座位号",让模型能区分顺序。


正弦/余弦是什么?(直觉理解)

想象一个弹簧波浪

位置0: 🌊 波浪起点(sin=0, cos=1) 位置1: 🌊 波浪往前一点(sin=0.84, cos=0.54) 位置2: 🌊 再往前(sin=0.91, cos=-0.42) 位置3: 🌊 更前面(sin=0.14, cos=-0.99)

每个位置对应波浪上的一个不同点,所以每个位置的编码独一无二


具体公式拆解

PE(pos,2i)=sin⁡(pos100002i/d)PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d}}\right)PE(pos,2i)=sin(100002i/dpos)

PE(pos,2i+1)=cos⁡(pos100002i/d)PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d}}\right)PE(pos,2i+1)=cos(100002i/dpos)

参数含义

符号含义示例
postoken的位置(第几个字)0, 1, 2, 3, 4
i向量的维度索引0, 1, 2, 3
d总维度(这里=4)4
2i偶数维度(0, 2)用sin
2i+1奇数维度(1, 3)用cos

以"小猫在打滚"为例,手算位置编码

假设d=4(4维向量),计算每个位置的编码:

位置0(“小”)

维度0 (i=0): sin(0 / 10000^(0/4)) = sin(0) = 0 维度1 (i=0): cos(0 / 10000^(0/4)) = cos(0) = 1 维度2 (i=1): sin(0 / 10000^(2/4)) = sin(0) = 0 维度3 (i=1): cos(0 / 10000^(2/4)) = cos(0) = 1

位置0编码 = [0, 1, 0, 1]

位置1(“猫”)

维度0: sin(1 / 10000^0) = sin(1) = 0.84 维度1: cos(1 / 10000^0) = cos(1) = 0.54 维度2: sin(1 / 10000^0.5) = sin(1/100) = sin(0.01) = 0.01 维度3: cos(1 / 10000^0.5) = cos(0.01) = 1.00

位置1编码 = [0.84, 0.54, 0.01, 1.00]

位置2(“在”)

维度0: sin(2) = 0.91 维度1: cos(2) = -0.42 维度2: sin(0.02) = 0.02 维度3: cos(0.02) = 1.00

位置2编码 = [0.91, -0.42, 0.02, 1.00]


完整位置编码表

位置token维度0 (sin)维度1 (cos)维度2 (sin)维度3 (cos)
00.001.000.001.00
10.840.540.011.00
20.91-0.420.021.00
30.14-0.990.031.00
4-0.76-0.650.041.00

关键特性

1. 每个位置编码独一无二

位置0: [0, 1, 0, 1] 位置1: [0.84, 0.54, 0.01, 1] 位置2: [0.91, -0.42, 0.02, 1]

没有两个位置是一样的!

2. 相对位置可以计算

神奇之处:模型可以通过编码相减,知道两个token相距多远!

位置1 - 位置0 的某种组合 → 距离是1 位置3 - 位置1 的某种组合 → 距离是2

这是因为正弦/余弦的周期性线性组合性质

3. 值域固定 [-1, 1]

不管句子多长,位置编码的值永远在-1到1之间,不会爆炸


直观比喻

想象5个人站成一排,每个人手里拿一个不同颜色的灯

位置0: 🔴 红灯(最左边) 位置1: 🟠 橙灯 位置2: 🟡 黄灯 位置3: 🟢 绿灯 位置4: 🔵 蓝灯(最右边)

Transformer通过"灯的颜色"就知道谁站在哪里。正弦/余弦就是生成这些"颜色"的数学方法。


为什么不用简单的 0,1,2,3,4?

方法问题
直接用位置数字[0,1,2,3,4]句子长了数字太大,模型不稳定
用one-hot[1,0,0,0,0]维度爆炸,5000个位置要5000维
正弦/余弦✅ 维度固定,值域稳定,能表达相对位置

最终操作:和词嵌入相加

词嵌入("小") = [0.2, -0.5, 0.8, 0.3] 位置编码(0) = [0, 1, 0, 1 ] ───────────────────────────────────── 最终输入 = [0.2, 0.5, 0.8, 1.3]

模型看到的不是单纯的"小",而是"坐在第0个位置的小"!


http://www.jsqmd.com/news/789844/

相关文章:

  • 鸣潮自动化完整指南:零封号风险的后台智能助手
  • SD-PPP:Photoshop终极AI插件,让你的设计工作流效率提升300%
  • 【硬核测评】亨得利深圳劳力士专业维修全程实录:2026年官方网点实地探访+3135机芯保养避坑指南(附全国最新地址) - 亨得利腕表维修中心
  • 全国大学生电子设计竞赛装备全指南:主控、模块、仪器与软件一网打尽!
  • Perseus:碧蓝航线原生库补丁完整指南
  • 3:原理剖析1
  • 航天器关键设备六自由度隔振平台神经网络设计【附仿真】
  • RAG 一接协作文档就开始引用未发布草稿:从 Publish State Snapshot 到 Share Link Resolution 的工程实战
  • UFS低功耗设计:MIPI M-PHY与UniPro的协同优化
  • 从标定板到真实场景:Kalibr标定结果怎么看?如何评估与提升标定精度?
  • wiliwili:专为手柄优化的跨平台B站客户端终极指南
  • 如何用Python快速接入Taotoken调用多模型API
  • Douyin-Downloader:如何用策略编排范式重构内容提取工作流
  • OBS Composite Blur插件终极指南:5分钟掌握专业模糊效果,让直播和视频质量翻倍!
  • 3步解锁酷安UWP:在Windows电脑上体验完整酷安社区的终极指南
  • 亨得利深圳劳力士专业维修全程实录:2026年官方售后网点深度测评与避坑指南(附全国授权门店地址) - 亨得利腕表维修中心
  • AI测试工程师必抢的3个SITS2026核心信号:从脚本驱动到语义自治,你落后几个迭代?
  • 中小团队如何利用Taotoken统一管理多个AI项目的API成本
  • 2026深圳记账报税避坑指南:6万家企业信赖,征途财税专业护航 - 小征每日分享
  • DXVK架构演进:从API转换层到跨平台图形渲染的桥梁革命
  • 20254205吕紫嫣 实验三《Python程序设计》实验报告
  • fanqienovel-downloader:一键永久保存番茄小说的终极解决方案
  • 避坑指南:HolographicDisplays插件常见问题排查(颜色暗淡、导入图片失败、权限设置)
  • 从十三折线到8比特:深入解析G.711 A律编解码的量化奥秘
  • 智能体编排:让多个AI协同工作的关键方法
  • 终极网盘直链解决方案:八大主流网盘文件下载地址一键获取指南
  • PIDtoolbox完全指南:3步掌握无人机飞控黑盒日志分析的专业工具
  • Go语言开发的MySQL binlog解析利器my2sql:除了闪回,它的统计功能更值得DBA关注
  • 终极指南:ComfyUI ControlNet Aux预处理器模型下载问题全解
  • AppleRa1n:iOS 15-16激活锁绕过终极指南,5分钟免费解锁你的iPhone