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 许可协议,转载请注明出处。




