在理解Transformer模型时,一个关键问题是:为什么不加位置编码时,注意力权重不会变化?我们可以通过一个生动的“找朋友”类比来理解。
假设在一个班级里,小明和小红这两个名字分别对应了不同座位的同学。老师提出两个要求:其一,同学们只看名字标签,这就好比在Transformer中不加位置编码;其二,每个同学要写纸条说明“自己和谁最相似”。
在这种情况下,会出现如下现象:第1排的小明和第5排的小明,由于名字完全相同,他们会被认为相似度是100%;同样,第3排的小红和第6排的小红也会被判定为完全相似。而且,无论同学们怎么调换座位,相似度的判断仅仅取决于名字。
这一过程其实对应着Transformer的计算过程:
- 词向量如同名字标签:每个词的嵌入向量就像名字一样,比如“bank”这个词,无论它表达“河边”还是“银行”的意思,在不同位置时词向量都是相同的。
- Q/K计算类似查字典:在通过 Q = X W Q Q = XW_Q Q=XWQ和 K = X W K K = XW_K K=XWK进行计算时,如果 X X X中不包含位置信息,那么相同词语的 Q Q Q值和 K K K值会完全一致,就像两个“bank”;并且不同位置的相同词语点积得分也相同,即 s o f t m a x ( Q K T / d ) softmax(QK^T/d) softmax(QKT/d)的值保持不变。
- 最终结果:注意力权重仅仅依赖于词语本身,而与位置毫无关系。
这也就解释了,为什么在没加位置编码时,调换词语位置不会改变注意力权重。就如同只看名字不看座位时,小明换座位并不会改变大家对他与其他同学相似度的判断。
进一步从Transformer模型的原理深入分析,当未加入位置编码时,相同词语在不同位置的点积得分相同,原因如下:
-
词向量相同:每个词语的初始嵌入向量仅仅包含语义信息。例如,两个“bank”(分别表示“银行”和“河岸”)在不同位置的词向量完全一样,即 X i = X j X_i = X_j Xi=Xj(这里假设 i i i和 j j j是相同词语所处的不同位置)。
-
Q/K计算过程:在通过线性变换生成查询向量 Q = X W Q Q = XW_Q Q=XWQ和键向量 K = X W K K = XW_K K=XWK时,如果 X i = X j X_i = X_j Xi=Xj,那么必然有 Q i = Q j Q_i = Q_j Qi=Qj且 K i = K j K_i = K_j Ki=Kj。进而,点积得分 Q i K j T = Q j K i T = Q i K i T Q_iK_j^T = Q_jK_i^T = Q_iK_i^T QiKjT=QjKiT=QiKiT,这体现了点积运算的对称性。
-
数学推导:假设两个相同词语分别位于位置 m m m和 n n n,那么计算点积得分的公式为:
Score ( m , n ) = Q m K n T d = ( X W Q ) ( X W K ) T d = X W Q W K T X T d \text{Score}(m,n) = \frac{Q_mK_n^T}{\sqrt{d}} = \frac{(XW_Q)(XW_K)^T}{\sqrt{d}} = \frac{XW_QW_K^TX^T}{\sqrt{d}} Score(m,n)=dQmKnT=d(XWQ)(XWK)T=dXWQWKTXT
由于 X X X相同,无论位置如何变化,这个计算结果都不会改变。 -
直观例子:比如有句子A:“猫 追 老鼠”,句子B:“老鼠 追 猫”(仅仅调换了词语位置)。在没有位置编码时,“追”与“猫”的点积得分会等于“追”与“老鼠”的点积得分,这样模型就无法区分到底是谁追谁了。
只有当加入位置编码后, X X X会变成 X + P X + P X+P(其中 P P P是位置向量),此时相同词语在不同位置的 Q Q Q向量和 K K K向量会不同,点积得分才会发生变化。