Lensa ML

Cara Kerja Positional Encoding

Langkah 1 dari 6: Posisi Itu Berpengaruh

Kenapa urutan kata mengubah makna

Masalahnya: Attention menghitung Q·KT: dot product antara setiap pasangan token. Ini hanya mengukur kemiripan antarkata, bukan letak kata itu. Menyusun ulang kata menghasilkan dot product yang sama, jadi model tidak bisa membedakan urutannya.
Dogemb=[0.8, 0.2]bitesemb=[0.1, 0.9]manemb=[0.5, 0.6]Attention = Q·KT (tanpa info posisi)0.680.260.520.260.820.590.520.590.61DogbitesmanDogbitesman

Kalimat

Dog bites man

Makna

Normal

Perubahan attn

Nilai sama!

"Dog bites man": kalimat normal. Matriks attention menunjukkan dot product antara semua pasangan kata. Coba urutan lainnya.

Klik ketiga tombol kalimat. Tiga kata yang sama menghasilkan sembilan dot product yang sama di setiap urutan. Skema absolut menambahkan vector posisi ke setiap word embedding sebelum layer pertama. Skema relatif membiarkan embedding apa adanya dan mengubah skor attention, baik dengan bias yang dipelajari untuk tiap jarak (T5) maupun dengan memutar query dan key (RoPE). Causal mask juga membocorkan sebagian informasi urutan, karena tiap token melihat jumlah token sebelumnya yang berbeda, dan sebagian model decoder-only pernah di-train tanpa positional encoding sama sekali.

Langkah 2 dari 6: Sinusoidal Encoding

Gelombang sin dan cos mengodekan posisi

PE(pos,2i) = sin(pos / 100002i/dmodel) = sin(10 / 6.31) = 1.000
Dimensi →Posisi →p10d4dim 4 (sin, i=2)1.00+1−1

Posisi

10

Dim

4 sin

Sudut

1.58

Nilai PE

1.000

Dimensi rendah berosilasi cepat, jadi di kolom kiri warnanya berganti setiap beberapa baris. Dimensi ini mengodekan perbedaan posisi yang halus.

Geser slider Posisi dari 0 ke 49 dan slider Dimensi dari 0 ke 19. Rumusnya PE(pos, 2i) = sin(pos / 10000^(2i/d)) dan PE(pos, 2i + 1) = cos(pos / 10000^(2i/d)), dengan d = 20 pada heatmap ini. Setiap nilai tetap berada di antara −1 dan 1, jadi encoding tidak pernah menenggelamkan word embedding pada posisi besar. Di model aslinya, embedding juga dikalikan √d_model sebelum encoding ditambahkan, sehingga skala keduanya mirip. Tidak ada yang dipelajari di sini, jadi tidak ada parameter tambahan.

Langkah 3 dari 6: Pita Frekuensi

Dimensi berbeda, skala berbeda

Posisidim 0

Dimensi

0

Frekuensi

1.0000

Panjang gelombang

6.3

Dimensi rendah punya frekuensi tinggi: nilainya berubah cepat antarposisi dan mengodekan perbedaan yang halus.

Klik dim 0, dim 2, dim 4, dan dim 6, lalu bandingkan readout Panjang gelombang. Dengan d = 16, panjang gelombang untuk dimensi 2i adalah 2π · 10000^(2i/16): sekitar 6,3 posisi untuk dim 0 dan 199 untuk dim 6. Di seluruh lebar, panjang gelombang membentuk deret geometri dari 2π sampai 10.000 · 2π. Cara kerjanya seperti penghitung biner yang ditulis dengan gelombang halus: dimensi cepat membedakan posisi yang bertetangga, dan dimensi lambat membedakan awal dokumen panjang dari akhirnya. Basis 10.000 menentukan panjang gelombang terpanjang.

Langkah 4 dari 6: Jarak Relatif

Kenapa sinusoidal encoding bekerja

Vector positional encoding (16 dimensi pertama)0123456789101112131415pos 3pos 8dot = 6.14

pos_i

3

pos_j

8

Dot product

6.14

Jarak

5

Saat jarak bertambah, dot product turun secara halus. Desain sinusoidal memastikan kemiripan hanya bergantung pada jarak relatif.

Geser Posisi i dan Posisi j dari 0 ke 19, lalu perhatikan kartu Dot product. Setiap pasangan sin dan cos berbagi satu frekuensi ω, jadi PE(i) · PE(j) = Σ cos(ω_k (i − j)), yaitu fungsi yang hanya bergantung pada jarak. Saat i = j, setiap pasangan menyumbang 1, sehingga nilai maksimumnya 8 untuk d = 16. Sifat offset berasal dari rumus penjumlahan sudut: sin(ω(p + k)) dan cos(ω(p + k)) adalah rotasi tetap dari sin(ωp) dan cos(ωp) yang hanya bergantung pada k. Proyeksi yang dipelajari sebagian mengacak struktur ini, dan itu salah satu pendorong lahirnya RoPE.

Langkah 5 dari 6: RoPE

Rotary position embedding lewat rotasi 2D

Cara RoPE mengubah Q dan K (menampilkan pasangan 0)
q=[0.60, 0.40]→R(3·θ₀)→q'=[-0.65, -0.31]
k=[0.60, 0.40]→R(7·θ₀)→k'=[0.19, 0.70]
q diputar sebesar 3 × θ₀ = 3.00 rad  |  k diputar sebesar 7 × θ₀ = 7.00 rad  |  q'·k' hanya bergantung pada |3−7| = 4
pasangan 0Δ=-4.0pasangan 1Δ=-0.4pasangan 2Δ=-0.0pasangan 3Δ=-0.0q (pos 3)k (pos 7)sudut di antaranya = f(|3−7|) saja

q pos

3

k pos

7

q·k

1.18

|q−k|

4

RoPE memutar q dan k dengan besar yang berbeda (Δθ bergantung pada |3−7|=4). Dot product hanya bergantung pada jarak relatif ini, bukan posisi absolut. Geser kedua slider dengan offset yang sama, dan q·k tetap konstan.

Geser slider Posisi query dan Posisi key. RoPE membagi setiap query dan key menjadi d/2 pasangan dan memutar pasangan i dengan sudut pos · θ_i, dengan θ_i = 10000^(−2i/d); di sini d = 8, jadi ada 4 pasangan. Memutar q dengan sudut a dan k dengan sudut b membuat q · k hanya bergantung pada a − b, sehingga skor melihat m − n. Secara bawaan, RoPE tidak bekerja baik jauh melewati panjang training, jadi metode seperti position interpolation dan YaRN mengubah skala sudutnya untuk memperpanjang konteks.

Langkah 6 dari 6: Sinusoidal vs RoPE

Membandingkan kedua pendekatan

Kemiripan dengan posisi 2 saat posisi n berubahposisi nkemiripanm=2SinusoidalRoPE
SinusoidalRoPE
Diterapkan diDitambahkan ke inputMemutar Q, K
KapanSebelum proyeksiSetelah proyeksi
Jenis posisiAbsolutRelatif
Parameter00
EkstrapolasiTerbatasLebih baik
Dipakai olehTransformer asliLLaMA, Mistral, Gemma

|m−n|

6

Sin dot

3.78

RoPE dot

1.97

Pada jarak besar, keduanya menunjukkan kemiripan rendah. Keunggulan RoPE: posisi relatif langsung masuk ke Q·K dan tidak menambah parameter. LLaMA, Mistral, dan Gemma semuanya memakainya.

Geser Posisi m (query) dan Posisi n (key), lalu bandingkan kartu Sin dot dan RoPE dot. Kurvanya tampak mirip di sini karena keduanya memakai frekuensi yang sama. Bedanya ada pada titik masuk posisi. Kode sinusoidal ditambahkan sekali di paling bawah, dan setelah layer pertama yang dipelajari, kode itu bercampur dengan isi. RoPE bekerja di dalam setiap skor attention di setiap layer. Metode relatif lainnya adalah ALiBi (Press et al., 2021), yang mengurangi setiap skor dengan penalti sebanding dengan jarak dan bisa menangani input yang lebih panjang daripada saat training.

Apa itu positional encoding di Transformer?

Positional encoding adalah informasi yang ditambahkan Transformer agar attention bisa mengetahui letak tiap token dalam sequence. Attention membandingkan token hanya berdasarkan isinya, jadi tanpa informasi ini "dog bites man" dan "man bites dog" terlihat sama. Transformer asli menambahkan pola tetap berupa gelombang sinus dan kosinus ke setiap token embedding; banyak model yang lebih baru justru memutar query dan key dengan sudut yang bergantung pada posisi (RoPE).

Setiap Transformer butuh informasi posisi dalam bentuk tertentu, baik saat membaca teks, patch gambar, frame audio, maupun kode. Pilihannya memengaruhi seberapa baik model menangani input panjang: tabel posisi yang dipelajari berhenti di panjang tertentu, sedangkan kode sinusoidal, RoPE, dan bias berbasis jarak seperti ALiBi bisa diterapkan di posisi mana pun. Memperpanjang context window model bahasa besar sebagian besar bergantung pada perilaku positional encoding-nya setelah melewati panjang training.

Ide utama

  • Attention hanya membandingkan isi, jadi posisi harus diberikan secara terpisah.
  • Sinusoidal encoding memakai gelombang sin dan cos dengan panjang gelombang yang tumbuh secara geometris antardimensi.
  • Dot product dua sinusoidal encoding hanya bergantung pada jarak antarposisi.
  • RoPE memutar setiap pasangan dimensi query dan key dengan sudut yang sebanding dengan posisi.
  • Dengan RoPE, skor attention bergantung pada posisi relatif m − n.
  • Perilaku setelah melewati panjang training berbeda antarmetode dan membatasi perpanjangan konteks.

Ulasan singkat tentang topik ini

Pertanyaan umum

Apa bedanya positional encoding absolut dan relatif?

Encoding absolut memberi tiap posisi vector sendiri yang ditambahkan ke token embedding, sehingga model mempelajari arti posisi 7. Encoding relatif mengubah interaksi dua token berdasarkan jarak di antara keduanya, sehingga model mempelajari arti "3 token sebelumnya". Metode relatif biasanya lebih mudah digeneralisasi antarposisi karena jarak yang sama terlihat sama di mana pun dalam sequence.

Apakah positional encoding dipelajari atau tetap?

Keduanya dipakai. Transformer asli dan RoPE memakai rumus tetap tanpa parameter. BERT dan GPT-2 mempelajari tabel dengan satu vector per posisi. Cara ini bekerja baik, tetapi tidak bisa melewati ukuran tabel: 512 posisi untuk BERT dan 1.024 untuk GPT-2. Makalah aslinya menemukan versi yang dipelajari dan versi sinusoidal berkinerja kurang lebih sama.

Bisakah model membaca sequence yang lebih panjang daripada saat training?

Tergantung encoding-nya. Tabel yang dipelajari tidak punya entri untuk posisi baru. Kode sinusoidal dan RoPE menghasilkan nilai di posisi mana pun, tetapi kinerja model biasanya menurun setelah melewati panjang training karena model belum pernah melihat kombinasi sudut itu. ALiBi dan RoPE dengan interpolasi atau YaRN bisa menjangkau lebih jauh, sering kali setelah fine-tuning singkat pada teks yang lebih panjang.

Bagaimana vision transformer mengodekan posisi?

Vision transformer memotong gambar menjadi patch, misalnya grid 14 × 14, dan ViT asli menambahkan vector yang dipelajari untuk tiap indeks patch. Beberapa varian memakai kode sinusoidal 2D atau RoPE 2D yang mengodekan baris dan kolom secara terpisah. Saat resolusi gambar berubah, position vector yang dipelajari diinterpolasi ke ukuran grid baru.

Penjelasan terkait

Referensi

  1. Vaswani et al. (2017), "Attention Is All You Need", NeurIPS
  2. Su et al. (2021), "RoFormer: Enhanced Transformer with Rotary Position Embedding"
  3. Shaw, Uszkoreit & Vaswani (2018), "Self-Attention with Relative Position Representations"
  4. Press, Smith & Lewis (2021), "Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation"
  5. Chen et al. (2023), "Extending Context Window of Large Language Models via Positional Interpolation"

Terakhir diperbarui