Transformer中的位置編碼(Positional Encoding)
標準位置編碼
原理上Transformer是無法隱式學到序列的位置資訊的,為了可以處理序列問題,Transformer提出者的解決方案是使用位置編碼(Position Encode/Embedding,PE)[1][2] . 大致的處理方法是使用sin和cos函式交替來建立位置編碼PE, 計算公式如下:
\[PE_{t,2i}=\sin(t/10000^{2i/d}),\\PE_{t,2i+1}=\cos(t/10000^{2i/d}),
\]
在這個公式中, \(t\) 表示的是token的位置, \(i\) 表示的是位置編碼的維度
他的最終視覺化效果長這樣
位置編碼的作用, 就簡而言之就是將每個位置編號,從而每個編號對應一個向量,最終透過結合位置向量和詞向量,作為輸入embedding,就給每個詞都引入了一定的位置資訊,這樣Attention就可以分辨出不同位置的詞了[3],這篇文章[3:1]有標準位置編碼的具體實現.
旋轉位置編碼(RoPE)
reference
[1706.03762] Attention Is All You Need (arxiv.org) ↩︎
Transformer改進之相對位置編碼(RPE) - 知乎 (zhihu.com) ↩︎
一文通透位置編碼:從標準位置編碼、旋轉位置編碼RoPE到ALiBi、LLaMA 2 Long(含NTK-aware簡介)-CSDN部落格 ↩︎ ↩︎