序列模型與Transformer

位置編碼(positional encoding)

/ puh-ZISH-un-ul en-KOH-ding /

位置編碼,是 Transformer 用來知道每個詞坐在哪裡的辦法,因為注意力本身對順序是盲的。在自注意力眼裡,一句話就是一袋無序的詞元——「狗咬人」和「人咬狗」會無從分辨。位置編碼通過給每個詞元蓋上一個關於它在隊列中位置的資訊,來彌補這一點,讓模型分得清第一個、第二個與最後一個。

它有幾種花樣。最初的 Transformer 給每個詞元的向量加上固定的、波浪般的圖案——不同頻率的正弦與餘弦——這套巧妙的方案無需訓練,還能延伸到從未見過的長度。許多後來的模型則改為從資料中為每個位置學一個位置向量。當今領先的模型常用旋轉位置編碼(RoPE),它按詞元所在位置依賴的一個角度,輕輕旋轉查詢與鍵向量來編碼位置,使注意力看到的是詞元之間的相對距離,而非一個絕對地址。

位置編碼小,卻是承重的:把它去掉,Transformer 對語法與意義的把握就會崩塌,因為詞序佔了語言的一半。它還悄悄決定著模型能伸多遠。編碼絕對位置的方案,在被要求處理比訓練時更長的序列時往往會失靈;而相對與旋轉方案泛化得更好——這也是為何你選哪種方法,會直接影響模型可用的上下文長度。

兩句話用了相同的詞:「只有她告訴了他」對「她只告訴了他」。單靠自注意力分不開它們。位置編碼給兩個「只」蓋上不同的位置戳,模型便知道它限定的是哪個詞。

相同的詞,不同的順序——只有位置戳能把它們分開。

位置如何編碼,直接限制了模型能讀多遠。絕對方案常在超過訓練長度後急劇退化;相對與旋轉方案延伸得更從容——但沒有一種是魔法,「長上下文」的宣稱,永遠應拿在那個長度上實測的準確率來核對,而不是只看廣告裡的數字。

又稱
positional embedding位置编码位置編碼RoPErotary position embedding