仅用于站内搜索,没有排版格式,具体信息请跳转上方微信公众号内链接
哈喽,我是cos大壮!~
今天咱们聊一个话题:Transformer位置编码的可视化分析,不同位置编码方式的几何特征比较。
首先,咱们大致和大家做一个简单介绍:
Transformer模型是并行处理输入序列的,也就是说,它不像RNN或LSTM那样按顺序处理数据。
因此,Transformer自身并不知道“第一个词”“第二个词”这样的位置信息。
为了让模型理解“词语的顺序”,我们需要给每个词一个“位置标签”,这就是位置编码。
假设句子是:“我爱自然语言处理”
模型在输入每个词向量时,是平等对待的,它不知道“我”在第一个,“处理”在最后一个。位置编码就是一个额外的向量,用来标识每个词的位置,让模型知道:“这个词在第1位,那个词在第4位”。
位置编码的本质:把“位置”变成一个向量,加到词的向量里,像给每个词打上时间戳一样。
主要有以下几种位置编码方式:
正余弦位置编码(SinusoidalPE)
可学习的位置编码(LearnablePE)
相对位置编码(RelativePE)
旋转位置编码(RoPE)
下面用直观的方式描述它们的几何特征。
特征:基于sin和cos的周期函数,固定不变
可视化效果:每个位置是一个高维空间的“波形曲线点”
几何意义:不同位置的向量在空间中间隔有规律、且具有“旋转对称性”
优点:模型能通过线性变换推断出“相对距离”
特征:直接为每个位置分配一个向量,参数可学习
可视化效果:点的位置不规则,分布随训练改变
几何意义:没有明确的数学结构,靠模型自己去学
优点:灵活,但容易过拟合;训练数据不够时泛化差
特征:编码的是“词与词之间的相对距离”,而非绝对位置
可视化效果:表示“当前位置与上下文之间的偏移”
几何意义:适合长文本,位置移动不会破坏表示
优点:更自然地处理序列迁移和插入
特征:将每个位置编码为二维向量对,位置影响表现为高维空间中的旋转
可视化效果:高维复平面旋转,等价于在向量空间中执行角度变化
几何意义:位置变化≈向量旋转,保持模长,方向变化
优点:支持无限长推理,稳定性强
对于位置,维度的位置编码定义为:
其中:
是单词在句子中的位置(从0开始)
是维度索引(从0到d/2)
是位置编码的总维度
推理目的:
使用不同频率的正弦波,确保每个位置的编码唯一
不同维度的频率不一样:高维频率更快,低维频率更慢
可以通过线性变换识别出相对位置信息
直接定义一个矩阵,其中:
是最大序列长度
是嵌入维度
每个位置都有一个向量作为参数,训练时和模型其他参数一起更新。
没有公式推导,结构上就是一个表格查值。
相对位置表示不使用绝对位置向量,而是计算位置之间的相对距离,定义一个相对位置嵌入矩阵:
其中:
是与位置偏移相关的编码向量
是注意力中的权重矩阵
该机制允许注意力随距离变化
核心思想:注意力不是对“第5个词”,而是对“前3个词”或“后2个词”的关系进行编码。
RoPE的目标是让位置信息以“旋转”的方式作用于嵌入向量。
假设我们将维度划分为若干个二维对,并将其表示为复数形式(或二维向量):
将每个乘以复数旋转因子:
通过这种旋转,每个维度对随着位置改变而“旋转”,但模长不变。
这让模型能感知位置偏移为角度变化。
方法
是否可学习
几何特征
是否支持长距离
是否支持相对位置
位置泛化
正余弦编码
否
波形/周期函数
是
否
较好
可学习编码
是
无结构
否
否
差
相对位置编码
是
距离差空间表示
是
是
好
RoPE
否(或弱学习)
高维旋转空间
是
近似支持
极好
在自然语言处理和序列建模任务中,Transformer之所以能够高效并行,是因为其自注意力机制没有像RNN那样带有内在的时序顺序感。
为了让模型获取位置信息,需要在输入嵌入中添加额外的位置编码(PositionalEncoding)。
本案例目标:
使用PyTorch从头实现上述四种PE的对比实验;
构造简单的虚拟回归任务数据集,训练小型Transformer;
可视化多种编码在高维空间和注意力模式上的差异;
算法优化建议和完整调参流程。
序列长度:
特征维度:
生成方式:每个序列第一half为正弦信号,第二half为随机噪声。目标值为序列所有元素之和。
可以看到,数据集明显带有周期信号和噪声,适合观察位置编码对模型捕获序列全局统计特征的影响。
以上实现支持pe_mode参数为sinusoidal或learnable。
相对位置编码(RelativePE)和RoPE可以在注意力计算时替换nn. TransformerEncoderLayer的forward函数。
训练/验证损失曲线对比(loss_vs_epoch)
高维位置编码的PCA降维分布(pe_pca)
注意力权重随相对位置变化曲线(attn_vs_pos)
RoPE维度旋转示意图(rope_rotation)
Loss曲线对比:展示不同编码方式下,模型收敛速度和最终泛化性能的差异。
PCA降维分布:直观对比正余弦编码在低维空间形成的周期轨迹与可学习编码的随机分布。
Attention衰减曲线:说明在引入相对位置编码时,注意力权重如何随距离衰减。
RoPE旋转示意:演示旋转编码如何保持向量模长不变,但改变方向。
混合位置编码:将Sinusoidal和Learnable编码结合,兼具结构化和可适应性。
吸收式归一化:在添加位置编码后,使用LayerNorm,稳定训练。
多尺度频率:动态调整Sinusoidal的频率范围,使高频低频兼顾。
剪切与掩码:对过长序列进行窗口化,避免位置编码过度。
基线验证:先使用SinusoidalPE,验证基础性能;
学习率搜索:在[1e-4,1e-2]区间,采用3倍学习率缩放;
PE模式对比:对比sinusoidal、learnable、relative、rope;
注意力头数与层数:网格搜索nhead∈{4,8,16},num_layers∈{2,4,6};
正则与丢弃:测试dropout∈{0. 1,0. 2,0. 3},LayerNorm位置前后;
混合与融合:引入混合PE,将sinusoids与learnable按比例加权;
超参稳定性:在最优组合上,重复训练5次,取平均性能;
扩展测试:在更真实数据集(如Wikitext-2)上,验证方法泛化。
以上流程,大家可以参考,目前是为了保障模型性能的可重复性与最优性。
购买半年多送1个月(7个月)
包年多送3个月(15个月)
购买方法:加我微信【hsst1901】,备注:gpt,我会立马通过微信好友请求。
备注:gpt加我微信咨询
购买这个账号,一直有售后,不用担心中途封号或者用不了,非常省心!