基于本文回答
0
评论

位置编码是与Token Embedding相加还是拼接(Concat)?

知识点图片

在标准的Transformer架构(如《Attention is All You Need》中所述)以及大多数经典的NLP模型中,位置编码(Positional Encoding)与Token Embedding是相加(Add)的。

不过,从理论和底层逻辑来看,相加实际上可以看作是拼接(Concat)的一种特例和优化

以下是关于为什么选择“相加”以及它们之间关系的深度解析:

1. 为什么标准做法是“相加”?

在标准的Transformer中,公式为:
Input = Token_Embedding + Positional_Encoding
(注:两者的维度 dmodeld_{model} 必须完全一致,例如都是512维)。

选择相加主要有以下几个原因:

  • 保持维度不变,节省计算资源:如果采用拼接(Concat),一个512维的词向量和512维的位置向量拼接后会变成1024维。这会导致后续所有线性层(Linear/Dense)的参数量翻倍,计算开销大大增加。相加则完美保持了原有的维度。
  • 高维空间的近似正交性:很多人最初的直觉是,相加会把词义信息和位置信息“混在一起”导致信息丢失。但在高维空间(如512维、4096维)中,随机采样的向量或经过不同方式初始化的向量(如正弦波位置编码与学习到的词向量)彼此之间是近似正交的。这意味着模型在后续的线性变换中,能够非常轻松地将词义信息和位置信息“解耦”并分别提取出来,信息并没有真正丢失。

2. 相加与拼接的数学等价性(深度理解)

事实上,相加本质上等价于拼接后做了一次受约束的线性变换

我们可以推导一下。假设词向量为 EE,位置向量为 PP
如果采用拼接,进入Transformer的第一层(线性层投影)时,操作如下(假设没有偏置):
Output=W×[E;P]Output = W \times [E; P]
我们可以将权重矩阵 WW 拆分成两部分:处理词向量的 WEW_E 和 处理位置向量的 WPW_P,那么:
Output=WE×E+WP×POutput = W_E \times E + W_P \times P

如果采用相加,进入Transformer的第一层时,操作如下:
Output=W×(E+P)=W×E+W×POutput = W \times (E + P) = W \times E + W \times P

对比可以看出:
拼接后的线性变换是 WE×E+WP×PW_E \times E + W_P \times P
相加后的线性变换是 W×E+W×PW \times E + W \times P
也就是说,相加其实就是强行让拼接后的 WEW_EWPW_P 共享同一个权重矩阵 WW。由于深度学习模型具有极强的拟合能力,这种参数共享不仅不会严重影响性能,反而大大减少了参数量,防止了过拟合。

3. 现代大模型的位置编码(补充拓展)

虽然“相加”是绝对位置编码(Absolute PE)的标准做法,但在当今的大语言模型(如LLaMA、Qwen、ChatGLM等)中,位置编码的方式已经发生了演变,既不是简单的相加,也不是拼接:

  • RoPE(旋转位置编码):目前最主流的方案。它既不相加也不拼接,而是将位置信息转化为旋转矩阵,通过相乘(Hadamard积/复数乘法)的方式作用于Attention层中的 Query (Q) 和 Key (K) 上。
  • ALiBi / 相对位置偏差:这种方法不把位置编码加到输入向量上,而是直接加到注意力分数(Attention Scores)矩阵上,以此来控制不同距离Token之间的注意力权重。

总结:
回答你的问题,传统和经典的Transformer中是相加(Add)。这种相加不仅节省内存和计算,在数学本质上也是拼接(Concat)的平替方案。但在最前沿的大模型中,往往采用更复杂的乘法(如RoPE)或作用于注意力分数上。

右滑查看面试常问