说明:
💡💡💡本文后续更新和完善将在新账号展开,请移步新地址:
深度学习笔记——3种常见的Transformer位置编码
历史文章
机器学习
机器学习笔记——损失函数、代价函数和KL散度
机器学习笔记——特征工程、正则化、强化学习
机器学习笔记——30种常见机器学习算法简要汇总
机器学习笔记——感知机、多层感知机(MLP)、支持向量机(SVM)
机器学习笔记——KNN(K-Nearest Neighbors,K 近邻算法)
机器学习笔记——朴素贝叶斯算法
机器学习笔记——决策树
机器学习笔记——集成学习、Bagging(随机森林)、Boosting(AdaBoost、GBDT、XGBoost、LightGBM)、Stacking
机器学习笔记——Boosting中常用算法(GBDT、XGBoost、LightGBM)迭代路径
机器学习笔记——聚类算法(Kmeans、GMM-使用EM优化)
机器学习笔记——降维
深度学习
深度学习笔记——优化算法、激活函数
深度学习——归一化、正则化
深度学习——权重初始化、评估指标、梯度消失和梯度爆炸
深度学习笔记——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总
深度学习笔记——卷积神经网络CNN
深度学习笔记——循环神经网络RNN、LSTM、GRU、Bi-RNN
深度学习笔记——Transformer
深度学习笔记——3种常见的Transformer位置编码
深度学习笔记——GPT、BERT、T5
深度学习笔记——ViT、ViLT
深度学习笔记——DiT(Diffusion Transformer)
深度学习笔记——多模态模型CLIP、BLIP
深度学习笔记——AE、VAE
深度学习笔记——生成对抗网络GAN
深度学习笔记——模型训练工具(DeepSpeed、Accelerate)
深度学习笔记——模型压缩和优化技术(蒸馏、剪枝、量化)
文章目录
Transformer中常见的编码方式
- 自注意力机制(Self-Attention)本身不具备任何顺序或空间位置信息。
- 为此,需要显式地将位置信息嵌入输入特征,以确保模型能够感知特征间的空间或时间关系。
正弦/余弦位置编码(Sinusoidal Positional Encoding)
在 Transformer 的原始论文(Vaswani et al., 2017)中提出的,最原始的位置编码。正弦/余弦位置编码也叫1D Frequency Embeddings,通过频率函数将每个位置嵌入到特征空间中。
公式:
P
E
(
p
o
s
,
2
i
)
=
sin
(
p
o
s
1000
0
2
i
d
)
PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{\frac{2i}{d}}}\right)
PE(pos,2i)=sin(10000d2ipos)
P
E
(
p
o
s
,
2
i
+
1
)
=
cos
(
p
o
s
1000
0
2
i
d
)
PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{\frac{2i}{d}}}\right)
PE(pos,2i+1)=cos(10000d2ipos)
- p o s pos pos:表示输入序列的位置。
- d d d:表示embedding维度。
- 正弦和余弦的周期性特点可以让模型捕获相对位置信息。
说明:
- 正弦 sin \sin sin 被应用于所有偶数维(索引为 2 i 2i 2i);
- 余弦 cos \cos cos 被应用于所有奇数维(索引为 2 i + 1 2i+1 2i+1)。
这种设计的意义在于:
- 区分不同维度的位置信息:
- 对偶数维和奇数维分别使用不同的函数,可以让不同维度的位置信息具有不同的变化模式。
- 例如,偶数维的位置信息可能更注重某种语义,奇数维则可能补充另一种语义。
- 模型的平移不变性:
- 在一些任务中,特别是相对位置编码时,正弦和余弦函数的周期性可以帮助模型更容易地捕获相对距离信息。
- 消除对称性:
- 如果只用一种函数,比如全是 sin \sin sin,可能导致偶数维和奇数维的输出具有对称性,降低信息的区分度。
基于频率的二维位置编码(2D Frequency Embeddings)
主要针对Transformer处理二维数据(如图像)的情况。在 ViT(Vision Transformer)的标准实现中,将两个独立的 1D Frequency Embeddings 分别应用于图像的行(height)和列(width)方向,然后通过拼接(concat)或求和(add)来构造最终的 2D Frequency Embeddings 。
实现方式:两个 1D Frequency Embeddings 构成 2D Embeddings
给定图像的大小为 H × W H \times W H×W,编码维度为 D D D,这种 2D 编码的计算方式如下:
-
沿行(Height)方向生成 1D Frequency Embeddings:
对行索引 x ∈ [ 0 , H − 1 ] x \in [0, H-1] x∈[0,H−1],生成对应的正弦和余弦位置编码:
P E x , 2 i = sin ( x 1000 0 2 i D ) , P E x , 2 i + 1 = cos ( x 1000 0 2 i D ) PE_{x, 2i} = \sin\left(\frac{x}{10000^{\frac{2i}{D}}}\right), \quad PE_{x, 2i+1} = \cos\left(\frac{x}{10000^{\frac{2i}{D}}}\right) PEx,2i=sin(10000D2ix),PEx,2i+1=cos(10000D2ix) -
沿列(Width)方向生成 1D Frequency Embeddings:
对列索引 y ∈ [ 0 , W − 1 ] y \in [0, W-1] y∈[0,W−1],同样生成正弦和余弦位置编码:
P E y , 2 i = sin ( y 1000 0 2 i D ) , P E y , 2 i + 1 = cos ( y 1000 0 2 i D ) PE_{y, 2i} = \sin\left(\frac{y}{10000^{\frac{2i}{D}}}\right), \quad PE_{y, 2i+1} = \cos\left(\frac{y}{10000^{\frac{2i}{D}}}\right) PEy,2i=sin(10000D2iy),PEy,2i+1=cos(10000D2iy) -
最终组合:
- 拼接:

5624

被折叠的 条评论
为什么被折叠?



