AI智能摘要
GPT
这里是萌新 AI,这篇文章介绍了 Transformer 为什么需要位置编码。博主通过 NLP 示例,展示没有位置编码时,“我爱”和“爱我”经过模型处理后,cls 维度输出相同,导致模型无法区分词序。这说明位置编码对捕捉语义和序列顺序至关重要。
URL
type
Post
status
Published
date
Apr 8, 2026
slug
whypositional
summary
位置编码
tags
深度学习
Pytorch
Python
category
深度学习
icon
password
此篇博客主要记录博主对Transformer为什么使用位置编码的个人理解。希望对大家有帮助!
不管在学习NLP的Transformer时,还是学习CV的Transformer。我们都会碰到位置编码。很多人都说位置编码就是对每个词元(Token)进行位置标记,有助于模型对文本语义(图像特征)理解。但是,我们无法从数据的角度去理解这是为什么?那么,博主会在本篇博客借助矩阵计算,简单的解释一下为什么需要位置编码?

记录-Transformer的位置编码(一) | 山潍
绝对位置编码-NLP

记录-Transformer的位置编码(二) | 山潍
相对位置编码-NLP
这里博主以NLP的Transformer为例,假设输入Embedding层后输出的维度(b,s,n)。其中,b代表batch size,s代表句子长度,也就是词元个数,n代表每个词源的特征维度。
假设一个场景:博主需要识别两句话,哪句话是在暧昧场景下说出来的?哪句话是在挣扎情感中说出来的?这两句话分别是“我爱”和“爱我”。这两句话分别经过同一个Tokenizer字典。“我爱”的数值为[23, 31],“爱我”的数值[31, 23]。同时,博主使用的是Bert模型。那么,我们会在原有的基础上增加一个cls的类别标签,cls对应的数值为3。(我们不使用位置编码)
最终“cls 我爱”的数值为[3, 23, 31],“cls 爱我”的数值[3, 31, 23]。这两个经过相同的embedding层(512, 7),形成的特征矩阵如下图:
“cls 我爱”

“cls 爱我”

接着,经过相同的QK层(7,4)(假设weight矩阵类似单位矩阵):
“cls 我爱”

“cls 爱我”

接着,经过相同的V层(7,4)(假设weight矩阵类似单位矩阵):
“cls 我爱”

“cls 爱我”

接着,计算Q*K.T值,这里博主将Q和K分别按行分割,形成以下的结构:
“cls 我爱”

“cls 爱我”

最后,与V进行矩阵乘法:
“cls 我爱”

“cls 爱我”

到了这里,大家会发现:没有使用位置编码时,cls维度的每个元素对应的值是相同的。这会造成Bert模型对“爱我”和“我爱”的语义识别是相同的。
总结:位置编码的主要的作用是对词元位置的编排,让模型知道该词元位于哪里,附近有哪些词元。希望博主的内容能够帮助大家理解。
欢迎您在底部评论区留言,一起交流~
- 作者:山潍
- 链接:https://hexo.levsongsw.com//deeplearn/whypositional
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。





