Lensa ML

Cara Kerja Self-Attention

Langkah 1 dari 6: Apa Itu Self-Attention?

Setiap kata memperhatikan seluruh kalimat

self-attention: kalimat yang sama memperhatikan dirinya sendiriThe20%cat22%sat16%on10%the19%mat13%ThecatsatonthematKeyQuery (klik sebuah kata)matriks self-attention lengkap (baris = query)ThecatsatonthematThecatsatonthemat

Query

"cat"

Paling memperhatikan

"cat"

Weight tertinggi

22%

"cat" paling memperhatikan dirinya sendiri (22%). Dalam self-attention, setiap kata dalam kalimat memberi skor seberapa relevan setiap kata terhadap maknanya sendiri, termasuk dirinya.

Klik setiap kata di baris atas untuk menjadikannya query. Dengan vector contoh 3 dimensi ini, weight-nya cukup rata: untuk "cat", nilainya berkisar sekitar 10% sampai 22%, dekat dengan nilai seragam 1/6 ≈ 17%. Model yang sudah dilatih dengan head 64 dimensi menghasilkan pola yang jauh lebih tajam. Self-attention sering digambarkan sebagai soft dictionary lookup. Query dibandingkan dengan setiap key, dan alih-alih mengembalikan satu value yang cocok, pencarian ini mengembalikan campuran semua value, dengan weight sesuai seberapa cocok tiap key.

Langkah 2 dari 6: Query, Key, Value

Memproyeksikan input menjadi matriks Q, K, V

membuat vector query, key, dan valueMatriks InputThecatsatonthemat0.80.20.50.30.90.1-0.50.70.4-0.8-0.40.60.70.10.40.2-0.60.8W_Q0.6-0.30.10.40.8-0.20.10.50.7Matriks Query0.60.20.40.60.7-0.10.00.90.1-0.60.20.40.50.10.3-0.0-0.10.7×=ketiga proyeksiQuery0.60.20.40.60.7-0.10.00.90.1-0.60.20.40.50.10.3-0.0-0.10.7Key0.70.20.10.10.90.3-0.30.50.7-0.3-0.60.40.60.10.10.4-0.70.2Value0.40.50.60.4-0.20.8-0.1-0.50.7-0.6-0.1-0.20.30.50.4-0.20.6-0.0

Proyeksi

Query

Ukuran input

6 × 3

Ukuran Query

6 × 3

Matriks Query dihitung dengan mengalikan input embedding dengan W_Q. Setiap baris menjadi vector query, yang bertanya "apa yang aku cari?"

Klik Q, K, dan V untuk menyorot tiap proyeksi. Setiap matriks weight di sini berukuran 3x3, jadi input X berukuran 6 × 3 menjadi tiga matriks 6 × 3 dengan masing-masing satu perkalian: Q = X · W_Q, K = X · W_K, V = X · W_V. Di model sungguhan, lebar X antara 512 sampai beberapa ribu dimensi, dan ketiga proyeksi sering dihitung bersama sebagai satu perkalian matriks yang lebih besar. Q dan K harus punya dimensi d_k yang sama agar dot product-nya bisa dihitung, tetapi V boleh punya ukuran d_v yang berbeda.

Langkah 3 dari 6: Dot Product Q·K

Menghitung kemiripan antara query dan key

menghitung dot product Q·K untuk "cat"Q("cat")[0.55, 0.68, -0.08]0K("The")(0.55)(0.69)+(0.68)(0.24)+(-0.08)(0.14)0.53K("cat")(0.55)(0.15)+(0.68)(0.85)+(-0.08)(0.33)0.63K("sat")(0.55)(-0.30)+(0.68)(0.45)+(-0.08)(0.67)0.09K("on")(0.55)(-0.34)+(0.68)(-0.64)+(-0.08)(0.44)-0.66K("the")(0.55)(0.60)+(0.68)(0.15)+(-0.08)(0.07)0.43K("mat")(0.55)(0.44)+(0.68)(-0.66)+(-0.08)(0.18)-0.22

Query

"cat"

Skor tertinggi

0.63

Paling cocok

"cat"

Skor("cat", "cat") = 0.63 adalah yang tertinggi. Skor attention adalah dot product Q·K: kalikan tiap dimensi berpasangan, lalu jumlahkan. Makin tinggi skornya, makin selaras query dan key.

Klik tiap tombol kata untuk mengganti query dan lihat keenam skor berubah. Dot product q · k = |q| |k| cos θ membesar seiring keselarasan dan panjang vector, jadi key dengan norm besar bisa mendapat skor tinggi terhadap banyak query. Matriks skornya tidak simetris. Skor("cat", "sat") memakai query milik "cat" dan key milik "sat", sedangkan skor("sat", "cat") memakai query milik "sat" dan key milik "cat": setelah diskalakan, nilainya 0,05 dan 0,47 di sini. Semua n² skor berasal dari satu perkalian matriks, Q · Kᵀ.

Langkah 4 dari 6: Skor Attention

Penskalaan, softmax, dan attention weight

Pipeline skor attention untuk Q("cat")ThecatsatonthematQ·K0.530.630.09-0.660.43-0.22÷ √3 = 1.73terskala0.310.370.05-0.380.25-0.13softmaxweight20.3%21.5%15.7%10.2%19.1%13.1%Σ = 1.00 (jumlah weight = 1)

Query

"cat"

1/√d_k

0.58

Weight tertinggi

21.5%

Memperhatikan

"cat"

Skor mentah Q·K dibagi √d_k = 1.73 agar nilai besar tidak mendorong softmax ke titik ekstrem. Lalu softmax mengubah skor menjadi distribusi probabilitas: "cat" menaruh 21,5% attention-nya pada "cat".

Klik tiap tombol kata untuk mengikuti skornya melewati penskalaan dan softmax. Faktor √d_k berasal dari varians. Jika elemen q dan k saling independen dengan mean 0 dan varians 1, dot product-nya punya varians d_k, jadi pembagian dengan √d_k mengembalikannya ke 1. Tanpa itu, head 64 dimensi akan menghasilkan skor sekitar 8 kali lebih besar, softmax akan menaruh hampir semua weight pada satu key, dan gradient-nya nyaris hilang. Implementasi mengurangkan nilai maksimum baris sebelum eksponensiasi, yang tidak mengubah hasil tetapi mencegah overflow.

Langkah 5 dari 6: Causal Self-Attention

Menyembunyikan token mendatang di decoder

bidirectional self-attention: semua token terlihatKeyThecatsatonthematQueryThecatsatonthemat0.3019%0.2118%0.0916%-0.0813%0.2418%0.1316%0.3120%0.3722%0.0516%-0.3810%0.2519%-0.1313%0.1417%0.4724%0.2720%-0.3211%0.0917%-0.3311%-0.1714%0.1419%0.3222%0.1419%-0.1614%-0.1913%0.2419%0.1417%0.0616%-0.0414%0.1918%0.1317%0.0215%0.0616%0.2419%0.2419%0.0015%0.1217%Klik baris untuk memilih query. Atas: skor terskala. Bawah: weight.

Query

"sat"

Token terlihat

6

Weight tertinggi

24.2%

Pada bidirectional self-attention, "sat" bisa memperhatikan semua 6 token. Ini dipakai di encoder (seperti BERT) ketika seluruh konteks tersedia. Bandingkan dengan causal masking untuk melihat bedanya.

Beralih antara Bidirectional dan Causal (Masked), lalu klik baris-baris matriks. Masking dilakukan dengan menambahkan matriks yang berisi 0 pada dan di bawah diagonal, serta −∞ di atasnya, karena e^(−∞) = 0. Hanya n(n + 1)/2 dari n² elemen yang tersisa, 21 dari 36 di sini. Mask inilah yang membuat training untuk pembuatan teks efisien: satu forward pass menghitung prediksi di setiap posisi, dan tidak satu pun bisa melihat token yang harus diprediksinya. Padding mask bekerja dengan cara yang sama dan menyembunyikan padding token di batch yang panjangnya tidak seragam.

Langkah 6 dari 6: Pipeline Lengkap

Seluruh proses attention dalam satu tampilan

Input Embedding"cat" → [0.3, 0.9, 0.1]Proyeksi LinearQ[0.55, 0.68, -0.08]K[0.15, 0.85, 0.33]V[0.41, -0.15, 0.83]Q · KᵀThe0.53cat0.63sat0.09on-0.66the0.43mat-0.22skor÷ √d_k (1.73)terskala0.310.370.05-0.380.25-0.13softmaxweight20.3%21.5%15.7%10.2%19.1%13.1%× V → OutputΣ (weight × V) untuk tiap dimensi20%×V(The)22%×V(cat)16%×V(sat)10%×V(on)19%×V(the)13%×V(mat)Output("cat")[0.14, 0.17, 0.45]Attention(Q, K, V) = softmax(Q·Kᵀ / √d_k) · V

Query

"cat"

Memperhatikan

"cat"

Output

0.14,0.17,0.45

Ini seluruh pipeline attention untuk "cat": embed → proyeksikan ke Q,K,V → hitung skor Q·K → skalakan dengan 1/√3 → softmax → weighted sum dari vector V. Output [0.14, 0.17, 0.45] adalah representasi yang memperhitungkan konteks, memadukan informasi dari semua kata sesuai relevansinya.

Klik tiap tombol kata untuk melihat seluruh jalurnya dari embedding sampai output. Output tiap kata adalah weighted average dari vector value dengan weight positif yang berjumlah 1, jadi hasilnya selalu berada di dalam wilayah yang dibentuk value. Attention saja tidak bisa mendorong nilai keluar dari rentang itu, dan ini salah satu alasan blok Transformer menambahkan proyeksi output dan feed-forward layer sesudahnya. Attention standar menyimpan seluruh matriks weight n × n. FlashAttention (Dao dkk., 2022) menghitung output yang persis sama per tile tanpa menyimpan matriks itu.

Apa itu self-attention di neural network?

Self-attention adalah operasi yang memperbarui setiap elemen sequence dengan weighted average dari semua elemen, dan weight-nya mengukur seberapa relevan tiap elemen. Setiap token menghasilkan vector query, key, dan value. Query dibandingkan dengan setiap key lewat dot product, skornya diskalakan dan dimasukkan ke softmax, lalu weight yang dihasilkan mencampur vector value menjadi representasi baru dari token itu yang sudah memperhitungkan konteks.

Self-attention adalah operasi inti Transformer, jadi operasi ini berjalan di dalam setiap large language model, encoder ala BERT, vision transformer, dan model suara seperti Whisper. Dengan self-attention, model bisa menghubungkan kata ganti ke kata bendanya, kata kerja ke subjeknya, atau satu patch gambar ke patch terkait di mana pun dalam input, cukup dalam satu langkah. Bentuk masked atau causal-nya memungkinkan model bahasa dilatih pada semua posisi teks sekaligus.

Ide utama

  • Setiap token diproyeksikan menjadi vector query, key, dan value.
  • Skor attention adalah dot product antara query satu token dan key setiap token.
  • Skor dibagi √d_k agar softmax tidak jenuh saat dimensi bertambah.
  • Output sebuah token adalah weighted average dari semua vector value, dengan weight dari softmax.
  • Causal mask mengisi posisi mendatang dengan −∞, sehingga token hanya melihat dirinya dan token sebelumnya.
  • Matriks skor tidak simetris karena query dan key memakai weight yang berbeda.

Ulasan singkat tentang topik ini

Pertanyaan umum

Apa bedanya self-attention dan cross-attention?

Pada self-attention, query, key, dan value berasal dari sequence yang sama, jadi kalimat memperhatikan dirinya sendiri. Pada cross-attention, query berasal dari satu sequence, sedangkan key dan value dari sequence lain, misalnya decoder terjemahan yang memperhatikan kalimat sumber yang sudah di-encode. Hitungannya sama persis, hanya input-nya yang berbeda.

Apa bedanya additive attention dan dot-product attention?

Additive attention, yang dipakai Bahdanau dkk., memberi skor pada query dan key dengan feed-forward network kecil: v · tanh(W_1 q + W_2 k). Dot-product attention, yang dipakai Luong dkk. dan Transformer, memberi skor dengan q · k. Bentuk dot product jauh lebih cepat karena semua skor berasal dari satu perkalian matriks, dan penskalaan dengan √d_k mengatasi masalahnya pada dimensi besar.

Apakah attention weight menjelaskan prediksi model?

Hanya sebagian. Attention map menunjukkan dari mana informasi dikumpulkan di satu layer, tetapi layer berikutnya, vector value, dan residual connection ikut membentuk output. Studi seperti Jain dan Wallace (2019) menemukan bahwa pola attention yang sangat berbeda bisa menghasilkan prediksi yang sama, jadi attention adalah petunjuk yang berguna, bukan penjelasan lengkap.

Apakah self-attention hanya dipakai untuk teks?

Tidak. Vision transformer menerapkannya pada patch gambar, model suara pada frame audio, dan graph attention network pada tetangga setiap simpul. Input apa pun yang bisa dipecah menjadi sekumpulan vector bisa memakainya, asalkan posisi atau strukturnya diberikan secara terpisah.

Penjelasan terkait

Referensi

  1. Vaswani et al. (2017), "Attention Is All You Need", NeurIPS
  2. Luong, Pham & Manning (2015), "Effective Approaches to Attention-based Neural Machine Translation"
  3. Dao et al. (2022), "FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness"
  4. Jain & Wallace (2019), "Attention is not Explanation"

Terakhir diperbarui