【NLP高频面题 - Transformer篇】Position encoding为什么选择相加而不是拼接呢?

发布于:2025-02-10 ⋅ 阅读:(27) ⋅ 点赞:(0)

**【NLP高频面题 - Transformer篇】Position encoding为什么选择相加而不是拼接呢? **

重要性:★

首先明确:Transformer 会对原始输入做嵌入(embedding),从而映射到需要的维度,可采用一个变换矩阵做矩阵乘积的方式来实现,Transformer 中的 position embedding 也是加在这个嵌入后的向量中的。

了解这一点后,我们开始尝试使用 concat 的方式在原始输入中加入位置编码:

给每一个位置 x i ∈ R ( d , 1 ) x^i \in R^{(d,1)} xiR(d,1) concat 上一个代表位置信息的 one-hot 向量 p i ∈ R ( N , 1 ) p^i \in R^{(N,1)} piR(N,1) (N代表共有N个位置)形成 x p i ∈ R ( d + N , 1 ) x_{p}^i \in R^{(d+N,1)} xpiR(d+N,1) ,它也可以表示为 [ [ x i ] T , [ x p ] T ] T [[x^i]^T,[x^p]^T ]^T [[xi]T,[xp]T]T 这个形式。

接着对这个新形成的向量做线性变换,即上述提到的 Transformer 对原始输入做的嵌入操作。记变换矩阵 W ∈ R ( d , d + N ) W\in R^{(d,d+N)} WR(d,d+N) , d 就是需要嵌入到的维度(这里为了简便,直接假设原输入的维度与嵌入维度一致,都是 d ),它也可以表示为 [ W I , W P ] [W^I, W^P ] [WI,WP] ,其中 W I ∈ R ( d , d ) , W P ∈ R ( d , N ) W^I \in R^{(d,d)},W^P \in R^{(d,N)} WIR(d,d)WPR(d,N) 。现在进行变换:

W ⋅ x p i = [ W I , W P ] ⋅ [ [ x i ] T , [ x p ] T ] T = W I ⋅ x i + W P ⋅ x p = e m b e d i + p o s i W \cdot x_{p}^i = [W^I, W^P ] \cdot [[x^i]^T, [x^p]^T ]^T = W^I \cdot x^i + W^P \cdot x^p = embed^i + pos^i Wxpi=[WI,WP][[xi]T,[xp]T]T=WIxi+WPxp=embedi+posi

由变换结果可知,在原输入上 concat 一个代表位置信息的向量在经过线性变换后等同于将原输入经线性变换后直接加上位置编码信息。

也就是说,可以用concat的形式来表示add,某种程度上两者是等价的,但是使用concat会使维度变大,增加计算量。


NLP 大模型高频面题汇总

NLP基础篇
BERT 模型面
LLMs 微调面

网站公告

今日签到

点亮在社区的每一天
去签到