Lazy loaded image
记录-Transformer的位置编码(一)
字数 1162阅读时长 3 分钟
2025-8-21
2025-10-20
AI智能摘要
GPT
这里是萌新AI,这篇文章介绍了 Transformer 中的绝对位置编码。作者从面试经历出发,引出位置编码的必要性:自注意力网络具有无序性,需要位置编码来体现 Token 的顺序。文章重点讲解了三角函数位置编码,解释了其公式和设计原因——正弦和余弦的值域为 [-1, 1],有助于模型捕捉长距离的上下文关系。最后,作者简要说明了公式中的参数含义,并预告后续将介绍相对位置编码等其他类型。
URL
type
status
date
slug
summary
tags
category
icon
password
😀
博主最近面试被问到了Transformer的位置编码有哪些?用过哪几个?这个问题把博主这个小菜鸡直接问懵了!博主只了解过绝对位置编码,这个问题没有回答上来。所以面试后博主恶补了这一块的相关知识和代码实践。该篇博客主要记录绝对位置编码。Transformer的位置编码(二)是相对位置编码。Transformer的位置编码(三)是可学习位置编码。Transformer的位置编码(四)是旋转位置编码。如有错误的地方,请及时批评指正!
Tips
在拿到样本数据后,我们会将数据转换为Token。例如:我爱你→1 2 3和你爱我→3 2 1。如果将这两句Token直接输入到自注意力网络中,那么自注意力网络可能认为这两句话代表相同的意思。
为什么会出现这种情况呢?这是因为自注意力网络具有”无序性“,不会关注每个Token的位置。这种情况会忽略原始Token的顺序。因此,自注意力网络需要位置编码,辅助实现Token的”有序性“。

📝 绝对位置编码

三角函数位置编码

理论

根据小标题我们可以得知这一部分会使用到正弦和余弦函数。正弦和余弦的函数图如下:
notion image
这里伙伴们会有一个疑问:为什么要使用正弦和余弦作为位置编码呢?解答:这是因为正弦和余弦值的范围是[-1,1]。那么,文本中相隔甚远的词间距最大值是2。这有助于注意力机制关注到词头和词尾间的上下文关系。伙伴们先有一个基本概念,接下来会用图辅助大家理解。
  • 三角函数位置编码的公式如下:
其中,pos是一个数组集合。pos的大小代表你要为多少个Token生成位置编码。一般pos提前会设置很大,防止重复生成,浪费代码执行时间。d_model代表的此嵌入层的输出维度。i代表每个token特征维度的index。
eg:Embedding层输出的shape=(16, 100, 512)。batch size值为16,也可以理解为一次性输入16句话。每句话的token数量是100。每个token的特征数量是512。那么,公式中的i是从token特征数量上理解的。i是从0到512。但是,从公式中可以发现:位置编码在token特征维度上分为奇数计算和偶数计算。所以,token特征维度上的index值只用偶数位进行计算。
博主对上诉两个公式进行作图,通过图进一步辅助理解。图如下:
notion image
notion image
上图分别是i=0,i=1时正弦和余弦的对比图和i=20,i=21时正弦和余弦的对比图。其中,position index代表的是Token的顺序。从图中发现共有50个token。
  • 问题:为什么每个Token需要经过词嵌入层增加每个Token的维度?因为当i很小时,Token间的编码差值较大,模型可以分析出Token间的差异特征。随着i增加,Token间的编码值逐渐减小(可以绘制一下i=510和i=511的图,伙伴们会发现基本上是一条直线),模型可以分析出Token间的关联特征。
  • 如果大家没有时间编写绘图代码,那么请点击下方链接!博主也提供的相关的代码。
哇奥!整体记录下来,三角函数位置编码真的很神奇,真的不知道大佬们是怎么想出来的!

代码

三角函数的位置编码代码如下,大家可以直接点击链接查看。

📎 参考文章

 
💡
以上便是Transformer的绝对位置编码相关记录,欢迎您在底部评论区留言,一起交流~
上一篇
记录-LlaMA-Factory在英伟达显卡微调大模型出现的Error
下一篇
记录-Transformer的位置编码(二)

评论
Loading...