transformer你不学?04|位置编码:让模型知道词的顺序
transformer你不学04位置编码让模型知道词的顺序作 者吴佳浩Alben公众号全栈架构师笔记导读Self-Attention 有一个天生的缺陷它对输入顺序完全无感——“猫咬狗和狗咬猫在它眼里是同一件事。位置编码就是给每个位置盖一个门牌号”把顺序信息重新注入向量。从论文原版的正弦编码到今天主流的可学习编码本篇把顺序这个被 Attention 弄丢的维度补回来。本篇你会学到什么 为什么 Attention 是无序的这为什么是个问题 正弦位置编码的构造与平移不变性 可学习位置编码GPT 风格的实现。一、为什么要学这个做一个 10 秒的实验把 第 3 篇 的输出[[我, 爱, NLP]]换成[[NLP, 爱, 我]]——如果不加位置信息Attention 的输出完全一样。因为 Attention 只做两两相似度计算而相似度与位置无关。RNN 靠逐步喂入天然带顺序Transformer 一次看全序列顺序信息必须显式注入。解法在词向量上加一个位置向量——最终输入 词 Embedding 位置 Embedding。二、核心理论正弦编码的巧妙论文原版用不同频率的正弦/余弦给每个位置生成唯一指纹PE(pos, 2i) sin(pos / 10000^(2i/d)) PE(pos, 2i1) cos(pos / 10000^(2i/d))直觉想象很多根不同粗细的弹簧——高频维度区分相邻位置低频维度区分远距离位置。它有两个漂亮性质唯一性每个位置得到不同指纹平移一致性PE[posk] - PE[pos]只与 k 有关与 pos 无关——模型能学到相对距离。今天的主流模型GPT/BERT更多用可学习位置编码直接建一个nn.Embedding(max_len, d_model)让训练自己决定每个位置长什么样。三、真实项目里怎么用 长文本外推RoPE旋转位置编码让 LLaMA/Qwen 能处理超出训练长度的输入——本质还是位置编码的进化 多模态图像 patch 的 2D 位置编码、语音的时间戳编码思想同源。四、流程图Token Embedding 词向量相加融合Positional Encoding 位置向量带顺序信息的输入进入 Attention五、真实代码正弦位置编码# 正弦位置编码论文原版实现 平移一致性验证importtorchimporttorch.nn.functionalasFimportmath max_len,d_model64,16petorch.zeros(max_len,d_model)postorch.arange(max_len).unsqueeze(1).float()# (64, 1) 位置列divtorch.exp(torch.arange(0,d_model,2).float()*(-math.log(10000.0)/d_model))# 频率衰减项pe[:,0::2]torch.sin(pos*div)# 偶数维放 sinpe[:,1::2]torch.cos(pos*div)# 奇数维放 cosprint(f位置编码矩阵 shape:{pe.shape})# 性质1唯一性——不同位置的编码不同print(f位置0 与 位置5 是否相同:{torch.allclose(pe[0],pe[5])})# 性质2平移一致性——间隔相同的相似度也相同d1F.cosine_similarity(pe[0],pe[3],dim0)# 间隔3d2F.cosine_similarity(pe[10],pe[13],dim0)# 同样间隔3print(f间隔3的相似度: 位置0vs3{d1.item():.3f}, 位置10vs13{d2.item():.3f})输出结果怎么看真实运行输出位置编码矩阵 shape: torch.Size([64, 16]) 位置0 与 位置5 是否相同: False 间隔3的相似度: 位置0vs30.693, 位置10vs130.693 两个不同位置相似度 0.693完全相等——正弦编码的平移一致性不是理论空谈是可直接复现的数值事实 间隔越大相似度越低你可以把 3 改成 7 验证模型由此学会距离感。六、可学习位置编码GPT 风格# 可学习位置编码直接查表训练自动学习importtorchimporttorch.nnasnnclassLearnablePE(nn.Module):def__init__(self,max_len512,d_model64):super().__init__()# 和词 Embedding 一样也是一张可训练的表self.penn.Embedding(max_len,d_model)defforward(self,seq_len):# 返回前 seq_len 个位置的位置向量postorch.arange(seq_len)returnself.pe(pos)# shape: (seq_len, d_model)lpeLearnablePE(max_len512,d_model64)outlpe(10)print(f可学习PE输出:{out.shape}, 可训练:{out.requires_grad})输出可学习PE输出: torch.Size([10, 64]), 可训练: True——用法与词 Embedding 完全同构这就是 GPT 系列的做法。七、常见错误与排查忘记加位置编码模型能跑但效果诡异地差尤其语序敏感的任务——这是新手最常见的隐性 Bug输入超过 max_len可学习编码查表越界报 IndexError。解决截断、滑窗或换 RoPE 类外推方案相加而非拼接词向量 位置向量论文做法不是 concat——维度保持 d_model参数零增加。八、练习题把d_model改成 8重跑平移一致性实验观察不同维度的数值差异用打乱顺序的输入torch.randperm过一遍nn.MultiheadAttention数值验证Attention 无序这个说法查一下 RoPE旋转位置编码资料对比它和正弦编码在长文本外推上的差异写 3 句话小结。一句话总结位置编码用一组不同频率的位置指纹或一张可学习查表补回 Attention 丢掉的顺序信息——没有它Transformer 只是一袋无序词的集合。下一篇transformer你不学05自注意力机制QKV 的魔法。

相关新闻

从“能对话“到“能干活“的端侧时刻:星火 X2.5 开源如何喂饱本地 Agent 与端侧应用生态

从“能对话“到“能干活“的端侧时刻:星火 X2.5 开源如何喂饱本地 Agent 与端侧应用生态

从"能对话"到"能干活"的端侧时刻:星火 X2.5 开源如何喂饱本地 Agent 与端侧应用生态 【免费下载链接】Spark-X2.5-4B Spark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推…

2026/10/10 12:45:29 阅读更多 →
BASM精要:Delphi内嵌汇编实战与避坑指南

BASM精要:Delphi内嵌汇编实战与避坑指南

简介:面向 Delphi 开发者的 BASM(Borland 汇编语言)入门精要,围绕如何在 Delphi 中编写内嵌汇编提升关键代码性能展开,适合希望系统梳理汇编语法、寻址规则与数据访问方式的初级和中级开发者。资源共 1 个 PDF 文件&am…

2026/10/10 12:45:29 阅读更多 →
Python Agent工具调用的白名单、参数校验与审批门禁

Python Agent工具调用的白名单、参数校验与审批门禁

模型决定“建议调用什么函数”,应用决定“是否真的调用”。这句话是 Agent 安全的底线。以“给客户发送回访邮件”为例,模型可能正确识别了意图,也可能被一段网页文本诱导去调用删除工具。解决办法不是写更长的提示词,而是给工具调…

2026/10/10 12:45:29 阅读更多 →

最新新闻

pywebview 开发者指南:环境搭建、协作工作流、测试体系与 Ruff/pre-commit 代码规范

pywebview 开发者指南:环境搭建、协作工作流、测试体系与 Ruff/pre-commit 代码规范

桌面应用前端 【免费下载链接】pywebview Build GUI for your Python program with JavaScript, HTML, and CSS 项目地址: https://gitcode.com/gh_mirrors/py/pywebview 点击查看 免费下载 本文是一份面向 pywebview 贡献者的开发指南,围绕 docs/contr…

2026/10/10 14:05:48 阅读更多 →
Pulse 安装与部署完全指南:从 Proxmox LXC、Docker 到 Helm 的落地实践

Pulse 安装与部署完全指南:从 Proxmox LXC、Docker 到 Helm 的落地实践

可观测性运维后端 【免费下载链接】Pulse Real-time monitoring dashboard for Proxmox VE, PBS, Docker, Kubernetes, TrueNAS and vSphere. Self-hosted, with smart alerts and AI patrols that catch silent failures. 项目地址: https://gitcode.com/gh_mirror…

2026/10/10 14:05:48 阅读更多 →
基于DQN的导弹目标选择:从MDP建模到训练调参实战

基于DQN的导弹目标选择:从MDP建模到训练调参实战

简介:这份资源面向计算机、自动化等专业的学生与开发者,提供基于Python与DQN强化学习实现海防场景导弹目标选择任务的完整项目。任务中敌方舰艇以固定阵型排列,我方18枚导弹需依次选择攻击目标并沿直线轨迹飞行,突防时可能被防御舰…

2026/10/10 14:05:48 阅读更多 →
Kubernetes Python 客户端之 V1NodeFeatures 模型深度解析:从 CRI 特性声明到代码实操

Kubernetes Python 客户端之 V1NodeFeatures 模型深度解析:从 CRI 特性声明到代码实操

后端云原生容器编排 【免费下载链接】python Official Python client library for kubernetes 项目地址: https://gitcode.com/gh_mirrors/python1/python 点击查看 免费下载 本文基于开源仓库 gh_mirrors/python1/python 中由 doc/source/kubernetes.aio.client.m…

2026/10/10 14:05:48 阅读更多 →
Pulse v6 的 Pulse Intelligence Proactive Operations Lane(L23):Monitor-first Patrol 治理契约与落地解析

Pulse v6 的 Pulse Intelligence Proactive Operations Lane(L23):Monitor-first Patrol 治理契约与落地解析

可观测性运维后端 【免费下载链接】Pulse Real-time monitoring dashboard for Proxmox VE, PBS, Docker, Kubernetes, TrueNAS and vSphere. Self-hosted, with smart alerts and AI patrols that catch silent failures. 项目地址: https://gitcode.com/gh_mirror…

2026/10/10 14:04:47 阅读更多 →
本地OAuth测试终极指南:emulate如何让你零凭据跑通GitHub、Google、Apple登录流程

本地OAuth测试终极指南:emulate如何让你零凭据跑通GitHub、Google、Apple登录流程

【免费下载链接】emulate Local API emulation for CI and no-network sandboxes 项目地址: https://gitcode.com/gh_mirrors/emul/emulate 点击查看 免费下载 想测试「登录」功能却不想申请任何 API 密钥?本文带你认识本地 OAuth 测试神器 emulate——…

2026/10/10 14:04:47 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →