Lensa ML

Cara Kerja Multi-Head Attention

Langkah 1 dari 6: Batas Satu Head

Satu head hanya menangkap satu pola attention per query

single head: skor attention sama dengan self-attentionThecatsatonthematcat0.200.220.160.100.190.13Thecatsatonthemat

Query

cat

Key teratas

cat

Entropy (bit)

2.54

"cat" memberi weight terbesar pada dirinya sendiri, hanya 22%, dan membagi sisanya hampir merata (entropy 2,54 bit, dekat maksimum 2,58 bit untuk 6 kata). Satu head harus memampatkan semua hubungan ke dalam satu pola kabur ini.

Klik tiap kata untuk mengganti query, lalu perhatikan readout Entropy. Entropy H = −Σ p_i log₂ p_i mengukur seberapa tersebar satu baris: nilainya 0 bit saat semua weight berada di satu kata, dan log₂ 6 ≈ 2.58 bit saat 6 weight itu sama besar. Setiap query di sini berada di antara 2,53 dan 2,58 bit, jadi head ini nyaris tidak fokus sama sekali. Batas yang lebih mendasar dari satu head adalah output-nya hanya satu rata-rata berbobot. Kalau sebuah kata butuh subjek dari satu posisi dan objek dari posisi lain, satu softmax harus membagi weight-nya di antara keduanya, dan keduanya tercampur menjadi satu vector.

Langkah 2 dari 6: Banyak Head

Bagi dimensi model ke beberapa attention head paralel

d_model = 64H1d_k=16H2d_k=16H3d_k=16H4d_k=16

d_model

64

Head

4

d_k

16

Parameter

4x

Masing-masing dari 4 head mendapat d_k = 16 dimensi. Setiap head bisa mempelajari pola attention yang berbeda di subspace-nya sendiri.

Klik 1, 2, 4, dan 8 head, lalu lihat d_k mengecil. Di sini d_model = 64, jadi d_k = 64 / h. Transformer asli memakai d_model = 512 dengan 8 head berukuran 64, dan GPT-3 memakai 12.288 dengan 96 head berukuran 128. Karena tiap head lebih kecil, total komputasi dan jumlah parameter kira-kira tetap sama dengan satu head selebar penuh. Dalam kode tidak ada modul head terpisah: satu proyeksi menghasilkan Q selebar 64, yang diubah bentuknya menjadi (h, length, d_k) agar semua head berjalan dalam satu perkalian matriks ber-batch.

Langkah 3 dari 6: Pola yang Berbeda

Setiap head mempelajari jenis hubungan yang berbeda

ThecatsatonthematThe0.550.270.060.040.050.03cat0.210.470.190.050.040.04sat0.040.210.520.160.040.03on0.030.040.160.570.170.03the0.030.040.040.190.480.21mat0.030.040.040.040.250.60

Head

H1

Pola

Posisi

Key teratas

cat

Entropy

2.00

Head 1 (Posisi): "cat" paling memperhatikan kata di dekatnya. Pola ini menangkap konteks lokal dan urutan kata.

Klik tiap label head, lalu klik kata untuk mengganti query. Kedelapan pola ini dibuat dengan tangan untuk menggambarkan jenis head yang umum. Pada model yang sudah dilatih, peran head hanya bisa ditemukan lewat inspeksi, dan banyak head ternyata redundan. Michel et al. (2019) membuang sebagian besar head dari model terlatih saat pengujian dengan penurunan akurasi yang kecil, dan Voita et al. (2019) menemukan bahwa segelintir head khusus mengerjakan sebagian besar tugasnya. Membuang head adalah salah satu cara membuat model lebih kecil dan lebih cepat.

Langkah 4 dari 6: Concatenation

Gabungkan kembali semua output head

H1:16H2:16H3:16H4:16Concat → [64]W_O → [64]Output: d_model = 64

Per head

16

Concat

64

Output

64

4 head berukuran 16 digabung menjadi 64 = d_model. Linear projection W_O menggabungkan semua output head kembali ke 64 dimensi.

Klik 1, 2, 4, dan 8 head, lalu pastikan lebar hasil concatenation selalu sama dengan d_model = 64. Concatenation hanya menaruh output tiap head berdampingan; tidak ada yang dipelajari di langkah ini. Dengan 4 head, dimensi 0 sampai 15 dari hasilnya berasal dari head 1, 16 sampai 31 dari head 2, dan seterusnya. Dalam kode, langkah ini membalik perubahan bentuk tadi: pindahkan sumbu head kembali, lalu ratakan. Lebarnya harus tetap d_model karena residual connection menjumlahkan output ini ke input block.

Langkah 5 dari 6: Output Projection

W_O mencampur output head menjadi representasi akhir

Hasil concat semua headH1:16H2:16H3:16H4:16W_O[64 x 64]Output [64]Porsi head 1 pada output (ilustrasi): 35%

Concat

64

Ukuran W_O

64x64

Output

64

W_O adalah linear projection hasil belajar yang mencampur semua output head. Dalam gambaran sederhana ini, Head 1 (Posisi) menyumbang 35%, dan pola lokalnya berbaur dengan sinyal dari head lain.

Klik tiap tombol head untuk melihat porsinya. Persentase ini hanya gambaran sederhana. W_O adalah matriks d_model × d_model penuh, di sini 64 × 64 = 4.096 weight, dan setiap dimensi output mencampur setiap dimensi dari setiap head. Jika W_O dipecah menjadi satu kelompok baris per head, terlihat bahwa multi-head attention sama dengan jumlah output tiap head dikali potongan W_O miliknya. Itu sebabnya head bisa dipelajari atau di-prune satu per satu. Secara keseluruhan, W_Q, W_K, W_V, dan W_O memuat 4 × d_model² weight per layer.

Langkah 6 dari 6: Multi-Head Beraksi

Bandingkan pola attention antar-head untuk satu kalimat utuh

H1: PosisiH2: SintaksisH3: GlobalH4: Mundur

Head

H1

Query

cat

Key teratas

cat

Weight

0.47

Membandingkan semua head untuk "cat": Head 1 menangkap kedekatan posisi, sedangkan head lain menangkap hubungan yang berbeda. Bersama-sama, mereka memberi model beberapa sudut pandang atas kalimat yang sama.

Klik tombol kata dan tombol head untuk membandingkan keempat head pada satu query. Head juga bekerja sama antar-layer. Head di layer berikutnya memperhatikan vector yang sudah memuat hasil kumpulan head sebelumnya, sehingga dua head berurutan bisa melakukan pencarian yang tidak bisa dilakukan salah satunya sendirian. Contoh yang banyak diteliti adalah induction head: satu head menandai token yang mengikuti salinan kata saat ini yang muncul lebih awal, lalu head berikutnya menyalinnya ke depan. Olsson et al. (2022) mengaitkan head jenis ini dengan in-context learning pada model bahasa.

Apa itu multi-head attention?

Multi-head attention menjalankan beberapa operasi self-attention, yang disebut head, secara paralel pada input yang sama, lalu menggabungkan hasilnya. Setiap head punya proyeksi query, key, dan value sendiri ke subspace yang lebih kecil, sehingga masing-masing bisa mempelajari pola berbeda tentang kata mana yang perlu diperhatikan. Output tiap head digabung dengan concatenation, lalu melewati linear projection terakhir, W_O, untuk menghasilkan satu vector per token.

Setiap layer Transformer memakai multi-head attention, dari model terjemahan aslinya sampai GPT, BERT, Llama, dan vision transformer. Satu head hanya bisa membentuk satu rata-rata berbobot per query, sehingga berbagai jenis konteks tercampur jadi kabur. Membagi lebar model ke beberapa head membuat satu layer bisa melacak posisi, sintaksis, dan hubungan jarak jauh sekaligus, dengan biaya komputasi kira-kira sama dengan satu head lebar.

Ide utama

  • Multi-head attention menjalankan h attention head secara paralel pada input yang sama.
  • Setiap head bekerja di subspace berukuran d_k = d_model / h.
  • Output tiap head digabung dengan concatenation kembali ke lebar d_model.
  • Output projection W_O mencampur informasi dari semua head.
  • Total biayanya kira-kira sama dengan satu attention head selebar penuh.
  • Banyak head pada model terlatih bersifat redundan dan bisa di-prune.

Pertanyaan umum

Berapa jumlah attention head yang sebaiknya dimiliki Transformer?

Sebagian besar model memilih ukuran head 64 atau 128, lalu menetapkan jumlah head sebagai d_model dibagi ukuran itu. Hasilnya 12 head di BERT-base (lebar 768) dan 32 head di model selebar 4.096. Ukuran head yang sangat kecil merugikan, karena dot product tiap head menjadi terlalu low-rank untuk memisahkan key dengan baik.

Apakah lebih banyak head selalu membuat attention lebih baik?

Tidak. Dengan d_model tetap, menambah head membuat tiap head lebih sempit, dan setelah titik tertentu kualitasnya turun. Eksperimen di makalah Transformer asli menemukan 8 head lebih baik daripada 1, tetapi 16 dan 32 sedikit lebih buruk daripada 8 pada lebar yang sama.

Apa bentuk output multi-head attention?

Sama dengan input-nya: satu vector selebar d_model untuk tiap token, atau (batch, length, d_model) untuk satu batch. Di dalamnya, tensor berbentuk (batch, heads, length, d_k), dan matriks weight tiap head berukuran (length × length).

Apakah multi-head attention sama dengan menumpuk attention layer?

Tidak. Head berjalan berdampingan di dalam satu layer dan semuanya membaca input yang sama, sedangkan layer berjalan berurutan dan masing-masing membaca output layer sebelumnya. Model memakai keduanya: misalnya, 12 layer dengan masing-masing 12 head di BERT-base.

Penjelasan terkait

Referensi

  1. Vaswani et al. (2017), "Attention Is All You Need", NeurIPS
  2. Michel, Levy & Neubig (2019), "Are Sixteen Heads Really Better than One?", NeurIPS
  3. Voita et al. (2019), "Analyzing Multi-Head Self-Attention: Specialized Heads Do the Heavy Lifting, the Rest Can Be Pruned", ACL
  4. Olsson et al. (2022), "In-context Learning and Induction Heads"

Terakhir diperbarui