Transformer 已經漸漸成為目前 LLM 最通用底層架構之一,其中的位置編碼也顯得極其重要,由於注意力分數本質上是每個 token 的 val 加權和,並沒有考慮其中的空間資訊,因此需要在自注意力模組之前就將位置資訊融合進序列中。
絕對位置編碼
絕對位置編碼是一種將序列中的每個位置進行編碼的方法,它為每個位置分配一個唯一的編碼向量。其優勢在於它不依賴於序列中的其他元素,可以獨立地表示每個位置的資訊,比較簡單容易計算。
Transformer 所用的就是絕對位置編碼策略,計算公式如下:
\[\text{PE}(pos,2i)=\sin(pos/10000^{2i/d})
\]
\[\text{PE}(pos,2i+1)=\cos(pos/10000^{2i/d})
\]
其缺點也比較明顯:
- 絕對位置編碼無法反應不同詞之間的相對關係,例如位置 1 和 2 跟 5 和 500 的差異是一樣的
- 表示不了比預訓練文字長度更長的位置向量表示,如果預訓練最大長度為 512 的話,那麼最多就只能處理長度為 512 的句子,再長就處理不了了。