Penjelasan Multi-Head Attention: Query, Key, dan Value Dijelaskan dengan Sederhana
Pendahuluan
Multi-head attention adalah konsep fundamental di balik model berbasis Transformer seperti BERT, GPT, dan Vision Transformers. Mekanisme ini memungkinkan model memproses urutan input dengan fokus pada berbagai aspek data secara bersamaan. Alih-alih membaca input secara berurutan, multi-head attention memungkinkan pemahaman hubungan antar token secara paralel, membuat model lebih cepat dan lebih efektif dalam menangkap konteks. Mekanisme ini adalah salah satu alasan utama mengapa arsitektur berbasis attention mendominasi pembelajaran mendalam modern.
Intisari Penting
- Multi-head attention memungkinkan model untuk memperhatikan berbagai bagian dari input secara bersamaan.
- Ini menggunakan beberapa kepala perhatian untuk menangkap berbagai hubungan dalam urutan yang sama.
- Setiap kepala perhatian beroperasi dalam subruang representasi yang dipelajari secara berbeda.
- Menskalakan skor perhatian meningkatkan kestabilan pelatihan.
- Multi-head attention adalah bagian inti dari arsitektur Transformer di berbagai tugas NLP, visi, dan multimodal.
Konsep Penting yang Perlu Diketahui dalam Multi-Head Attention
- Embeddings adalah dasar dari bagaimana transformer memahami teks. Alih-alih memproses kata sebagai string biasa, model mengubah setiap token menjadi vektor numerik padat yang disebut embedding. Vektor-vektor ini menangkap informasi semantik dan sintaksis, yang berarti kata-kata dengan makna serupa cenderung memiliki embedding yang mirip. Misalnya, embedding untuk “cat” dan “dog” akan lebih dekat dalam ruang vektor dibandingkan embedding untuk “cat” dan “table.” Pada tahap ini, embeddings merepresentasikan token, tanpa adanya kesadaran akan konteks di sekitarnya.
- Layer perhatian bertanggung jawab untuk menambahkan konteks pada embedding ini. Layer perhatian memungkinkan setiap token dalam sebuah urutan untuk melihat token lain dan menentukan mana yang paling relevan. Alih-alih memproses teks langkah demi langkah seperti model rekuren tradisional, layer perhatian menganalisis seluruh urutan secara paralel. Ini membantu model menangkap dependensi jangka panjang, seperti bagaimana awal sebuah kalimat berhubungan dengan akhirnya, dan membuat model transformer menjadi lebih cepat serta lebih efektif.
- Saat embedding melewati lapisan attention, mereka diubah menjadi embedding kontekstual yang ditingkatkan. Embedding yang diperbarui ini tidak lagi hanya mewakili token itu sendiri, tetapi juga mencakup informasi dari token di sekitarnya. Inilah yang memungkinkan model untuk memahami bahwa kata seperti "bank" memiliki makna yang berbeda tergantung apakah muncul di dekat kata-kata seperti "river" atau "account." Representasi setiap token diperkaya dengan informasi kontekstual, menjadikannya jauh lebih ekspresif dan berguna untuk tugas-tugas selanjutnya.
- Untuk menghitung attention, setiap embedding input diproyeksikan ke dalam tiga vektor terpisah yang dikenal sebagai query, key, dan value. Vektor query mewakili apa yang dicari oleh sebuah token, vektor key mewakili apa yang ditawarkan oleh sebuah token, dan vektor value berisi informasi yang akan dibagikan jika token dianggap relevan. Pemisahan ini memungkinkan model untuk membandingkan token secara efisien dan memutuskan bagaimana informasi harus mengalir di antara mereka.
- Vektor query, key, dan value dihasilkan menggunakan matriks bobot yang dapat dipelajari. Matriks ini mengubah embedding asli menjadi berbagai ruang representasi yang sesuai untuk perhitungan attention. Karena bobot-bobot ini dipelajari selama pelatihan, model secara bertahap menemukan cara terbaik untuk memproyeksikan embedding agar hubungan yang bermakna muncul. Dalam multi-head attention, setiap head attention memiliki set bobot query, key, dan value-nya sendiri, memungkinkan masing-masing head untuk fokus pada pola linguistik yang berbeda seperti sintaksis, semantik, atau hubungan posisi.
- Matriks berat yang digunakan dalam mekanisme perhatian adalah contoh parameter matriks yang dapat dipelajari. Transformer sangat bergantung pada perkalian matriks besar, dan nilai di dalam matriks ini adalah apa yang sebenarnya dipelajari model. Parameter ini menentukan bagaimana informasi diubah, dibandingkan, dan digabungkan di seluruh token. Model transformer modern mengandung jutaan bahkan miliaran parameter semacam ini, itulah sebabnya mereka mampu menangkap pola kompleks dalam bahasa.
- Skor perhatian mengukur seberapa kuat satu token harus memperhatikan token lainnya. Skor ini dihitung dengan mengambil hasil perkalian titik (dot product) antara vektor kueri dan vektor kunci dari semua token dalam urutan tersebut. Nilai yang dihasilkan menunjukkan kesamaan dan relevansi, dan kemudian diskalakan serta dilewati melalui fungsi softmax untuk menghasilkan bobot perhatian yang dinormalisasi. Token dengan skor perhatian lebih tinggi memberikan kontribusi yang lebih besar pada representasi akhir, sementara token yang kurang relevan memberikan kontribusi sangat kecil.
Dalam multi-head attention, seluruh proses perhatian ini diulang berkali-kali secara paralel menggunakan berbagai set parameter yang dapat dipelajari. Setiap head belajar untuk fokus pada aspek yang berbeda dari urutan input, seperti struktur tata bahasa, makna semantik, atau hubungan jarak jauh. Output dari semua head kemudian digabungkan untuk membentuk representasi akhir yang lebih kaya dan informatif dibandingkan apa yang bisa dihasilkan oleh satu mekanisme perhatian saja. Paralelisme inilah yang memberikan kekuatan dan fleksibilitas pada multi-head attention dalam arsitektur transformer modern.
Memahami Perhatian dengan Cara Sederhana
Perhatian membantu sebuah model memutuskan bagian mana dari input yang paling penting saat memproses token tertentu. Ketika sebuah model membaca sebuah kalimat, pentingnya sebuah kata tergantung pada konteks. Misalnya, makna kata "bank" tergantung pada kata-kata di sekitarnya seperti "sungai" atau "uang." Perhatian memungkinkan model untuk secara dinamis menetapkan tingkat kepentingan berdasarkan konteks, bukan hanya posisi.
Mekanisme ini dibangun menggunakan tiga komponen yang disebut query, key, dan value. Query mewakili apa yang dicari oleh token saat ini. Key mewakili informasi apa yang dimiliki setiap token. Value membawa informasi aktual yang akan digabungkan. Model membandingkan query dengan semua key untuk menentukan relevansi dan kemudian menggunakan value untuk membangun representasi yang sadar konteks.
Mari kita ambil sebuah kalimat yang sangat kecil: “Kucing duduk di tikar.”
Ketika kalimat ini masuk ke dalam model transformer, hal pertama yang terjadi adalah tokenisasi dan embedding. Setiap kata “Cat, sat, on, dan mat ” diubah menjadi vektor numerik. Vektor-vektor ini disebut embedding. Pada tahap ini, setiap embedding mewakili kata itu sendiri, tanpa memahami keseluruhan kalimat. Misalnya, embedding untuk cat mengetahui bahwa itu merujuk pada hewan, tetapi belum mengetahui apa yang dilakukan kucing atau di mana keberadaannya.
| Kata | Vektor Embedding |
|---|---|
| kucing | [0,21, 0,85, 0,14, 0,62] |
| duduk | [0,45, 0,33, 0,71, 0,18] |
| nyala | [0,05, 0,12, 0,88, 0,09] |
| tikar | [0,19, 0,79, 0,22, 0,58] |
Dalam model nyata, embeddings mungkin memiliki ratusan atau ribuan dimensi, tetapi untuk pemahaman, kita akan menggunakan vektor 4-dimensi kecil.
Selanjutnya, embedding ini masuk ke lapisan perhatian, di mana model mencoba memahami hubungan antar kata. Untuk melakukan ini, setiap embedding diubah menjadi tiga vektor berbeda: query, key, dan value. Vektor-vektor ini dibuat menggunakan perkalian matriks dengan matriks bobot yang dapat dipelajari. Meskipun terdengar matematis, intuisinya sederhana. Query mewakili apa yang dicari sebuah kata, key mewakili apa yang ditawarkan sebuah kata, dan value mewakili informasi yang dibawa kata tersebut.
Embedding ini kemudian ditumpuk bersama untuk membentuk matriks embedding untuk kalimat tersebut:
Matriks ini menjadi masukan ke lapisan perhatian. Dari sini, model menggunakan perkalian matriks untuk menghasilkan vektor kueri, kunci, dan nilai, membandingkan kata-kata satu sama lain, dan membuat embedding kontekstual di mana kucing tahu bahwa itu duduk, dan karpet tahu sesuatu duduk di atasnya.
Selanjutnya, penyematan ini memasuki lapisan perhatian, tempat model mencoba memahami hubungan antar kata. Untuk melakukan hal ini, setiap penyematan diubah menjadi tiga vektor berbeda: kueri, kunci, dan nilai. Vektor-vektor ini dibuat menggunakan perkalian matriks dengan matriks bobot yang dapat dipelajari. Meskipun ini terdengar matematis, intuisinya sederhana. Kueri mewakili apa yang dicari oleh sebuah kata, kunci mewakili apa yang ditawarkan oleh sebuah kata, dan nilai mewakili informasi yang dibawa oleh kata tersebut.
Perbandingan ini menghasilkan skor perhatian, yang memberitahu model seberapa besar fokus yang harus diberikan pada setiap kata. Setelah menerapkan fungsi softmax, skor tersebut menjadi bobot yang jumlahnya sama dengan satu. Vektor nilai kemudian dikalikan dengan bobot ini dan dijumlahkan bersama-sama. Ini menciptakan representasi baru untuk sat yang mengandung informasi dari cat dan mat, bukan hanya kata sat itu sendiri.
Setelah proses ini, embedding untuk sat menjadi embedding kontekstual. Ini tidak lagi berarti “duduk” dalam arti umum, tetapi sekarang berarti kucing sedang duduk di atas tikar. Proses yang sama terjadi untuk cat, on, dan mat. Setiap kata melihat kata-kata lain, memutuskan apa yang penting, dan memperbarui representasinya sesuai dengan itu.
Ini adalah ide inti dari attention: setiap kata menentukan kata-kata lain mana yang penting dan seberapa pentingnya. Perkalian vektor dan matriks hanyalah alat matematis yang membuat perbandingan ini menjadi efisien dan bisa dipelajari. Bahkan dengan kalimat kecil yang terdiri dari empat kata, attention memungkinkan model membangun makna dengan menghubungkan kata-kata bersama-sama, daripada memperlakukannya secara terpisah.
Perhatian Produk Titik Berskala
Operasi perhatian inti disebut perhatian dot-product berskala dan didefinisikan sebagai:
Di sini, Q, K, dan V adalah matriks dari query, key, dan value, dan dk adalah dimensi dari vektor key.
Hasil kali titik QKT mengukur kesamaan antara sebuah kueri dan semua kunci. Nilai yang lebih tinggi berarti relevansi yang lebih kuat. Membagi dengan dk mencegah skor kesamaan ini menjadi terlalu besar ketika dimensi vektor meningkat. Tanpa skala ini, fungsi softmax akan menghasilkan distribusi yang sangat tajam, yang menyebabkan gradien sangat kecil dan pelatihan menjadi tidak stabil.
Setelah penskalaan, softmax mengubah skor menjadi probabilitas yang jumlahnya satu. Probabilitas ini menentukan seberapa besar setiap nilai berkontribusi pada keluaran akhir. Vektor yang dihasilkan adalah ringkasan berbobot dari informasi relevan di seluruh urutan.
Mengapa Perhatian Single-Head Terbatas
Single-head attention menerapkan proses ini sekali, menghasilkan satu perspektif dari input. Meskipun efektif, pendekatan ini memaksa model untuk memadatkan semua hubungan ke dalam satu representasi. Hal ini menjadi keterbatasan ketika data mengandung berbagai jenis ketergantungan, seperti tata bahasa, makna, dan hubungan jarak jauh.
Dalam praktiknya, bahasa sering kali membutuhkan pemahaman terhadap beberapa hubungan sekaligus.
Sebagai contoh, satu kata mungkin bergantung secara sintaksis pada satu token sambil terkait secara semantis dengan token lain. Satu kepala perhatian saja kesulitan menangkap semua pola ini secara bersamaan.
Perhatian Multi-Kepala dalam Transformer
Dalam encoder Transformer, perhatian diri multi-kepala memungkinkan setiap token untuk memperhatikan setiap token lain dalam input, menghasilkan embedding yang kontekstual. Dalam decoder, perhatian diri yang dibatasi memastikan bahwa token tidak dapat memperhatikan posisi masa depan, yang penting untuk generasi autoregresif. Dalam perhatian encoder–decoder, query berasal dari decoder sementara key dan value berasal dari encoder, memungkinkan penyelarasan antara urutan input dan output.
Berbagai penggunaan multi-head attention ini memungkinkan Transformers menangani tugas-tugas seperti terjemahan, ringkasan, dan pembuatan teks dengan akurasi tinggi.
Cara Kerja Multi-Head Attention
Multi-head attention mengatasi keterbatasan ini dengan menjalankan beberapa mekanisme perhatian secara paralel. Alih-alih menerapkan perhatian langsung pada embedding asli, model pertama-tama memproyeksikannya ke dalam beberapa ruang berdimensi lebih rendah menggunakan matriks yang dipelajari.
Untuk setiap kepala i, proyeksi dihitung sebagai:
Setiap kepala kemudian menerapkan perhatian hasil kali titik berskala secara independen:
Output dari semua kepala digabungkan dan dilewatkan melalui lapisan linier terakhir:
Secara intuitif, setiap kepala belajar untuk fokus pada aspek yang berbeda dari urutan tersebut. Satu kepala mungkin menangkap urutan kata, kepala lain mungkin fokus pada kesamaan semantik, sementara kepala lainnya mungkin melacak ketergantungan jangka panjang. Proyeksi akhir menggabungkan perspektif-perspektif ini menjadi satu representasi yang kaya.
Multi-Head Attention di PyTorch (Dengan Bentuk Tensor)
Contoh berikut menunjukkan bagaimana multi-head attention bekerja secara internal menggunakan PyTorch. Kita memulai dengan sekumpulan embedding token dan melewati langkah-langkah kunci, menyoroti bagaimana bentuk tensor berubah sepanjang proses.
import torch
import torch.nn as nnKita mengasumsikan sebuah batch dari urutan yang telah ditokenisasi, di mana setiap token direpresentasikan oleh vektor embedding.
batch_size = 2
sequence_length = 4
embedding_dim = 8
num_heads = 2
head_dim = embedding_dim // num_headsDi sini, embedding_dim dibagi rata di antara kepala perhatian. Setiap kepala akan bekerja pada vektor dengan ukuran head_dim.
x = torch.randn(batch_size, sequence_length, embedding_dim)Pada tahap ini, bentuk tensor input adalah:
Langkah 1: Proyeksi Linier untuk Query, Key, dan Value
Setiap embedding token diproyeksikan ke dalam query, key, dan value menggunakan lapisan linier yang dipelajari.
W_q = nn.Linear(embedding_dim, embedding_dim)
W_k = nn.Linear(embedding_dim, embedding_dim)
W_v = nn.Linear(embedding_dim, embedding_dim)
Q = W_q(x)
K = W_k(x)
V = W_v(x)Setelah proyeksi, ketiga tensor memiliki bentuk yang sama:
Langkah 2: Membagi Embedding Menjadi Beberapa Head
Untuk membuat beberapa kepala perhatian, kita mengubah bentuk tensor sehingga setiap kepala bekerja pada subruang yang lebih kecil.
Q = Q.view(batch_size, sequence_length, num_heads, head_dim)
K = K.view(batch_size, sequence_length, num_heads, head_dim)
V = V.view(batch_size, sequence_length, num_heads, head_dim)Bentuk baru menjadi:
(2,4,2,4)
Kemudian kami menranspos tensor untuk memajukan dimensi num_heads.
Q = Q.transpose(1, 2)
K = K.transpose(1, 2)
V = V.transpose(1, 2)Sekarang setiap tensor memiliki bentuk:
Langkah 3: Perhatian Produk Titik Berskala
Kami menghitung skor perhatian dengan mengambil hasil perkalian dot antara kueri dan kunci.
scores = torch.matmul(Q, K.transpose(-2, -1))
scores = scores / (head_dim ** 0.5)Tensor skor perhatian memiliki bentuk:
(2,2,4,4)
Ini menunjukkan seberapa besar setiap token memperhatikan token lain di setiap head.
Langkah 4: Softmax dan Jumlah Tertimbang
Kita menormalkan skor perhatian menggunakan softmax dan menerapkannya pada nilai-nilai tersebut.
attention_weights = torch.softmax(scores, dim=-1)
output = torch.matmul(attention_weights, V)Output per kepala memiliki bentuk:
(2,2,4,4)
Setiap token sekarang mengandung representasi yang sadar konteks berdasarkan perhatian.
Langkah 5: Menggabungkan Kepala dan Proyeksi Akhir
Kami menggabungkan semua kepala perhatian kembali menjadi satu embedding.
output = output.transpose(1, 2)
output = output.contiguous().view(batch_size, sequence_length, embedding_dim)Bentuk keluaran yang digabungkan adalah:
(2,4,8)
Lapisan linier terakhir mencampur informasi di seluruh kepala.
W_o = nn.Linear(embedding_dim, embedding_dim)
final_output = W_o(output)Tensor keluaran akhir memiliki bentuk:
(2,4,8)
Ini sesuai dengan dimensi embedding asli dan dapat diteruskan ke layer Transformer berikutnya.
Menggunakan MultiHeadAttention Bawaan PyTorch
PyTorch juga menyediakan implementasi bawaan yang menangani langkah-langkah ini secara internal.
mha = nn.MultiheadAttention(
embed_dim=embedding_dim,
num_heads=num_heads,
batch_first=True
)
output, attention_weights = mha(x, x, x)Di sini, output memiliki bentuk (2, 4, 8), dan attention_weights memiliki bentuk (2, 2, 4, 4) ketika average_attn_weights=False.
Apa Itu Masked Multi-Head Attention?
Masked Multi-Head Attention adalah bentuk perhatian khusus yang digunakan ketika model tidak boleh melihat kata-kata di masa depan.
Dalam kata-kata sederhana:
Masked Multi-Head Attention mencegah sebuah kata melihat ke depan dalam kalimat.
Ini penting untuk model generasi teks seperti GPT, di mana model memprediksi kata berikutnya satu langkah pada satu waktu.
Saat menghasilkan teks, model harus berperilaku seperti manusia yang menulis sebuah kalimat. Pada setiap saat, Anda hanya bisa menggunakan kata-kata sebelumnya, bukan kata-kata di masa depan. Jika model bisa melihat kata-kata di masa depan saat pelatihan, itu akan dianggap curang. Masking memastikan model belajar memprediksi kata berikutnya hanya dengan menggunakan apa yang sudah muncul.
Multi-head attention berarti menjalankan beberapa mekanisme perhatian secara paralel sehingga model dapat menangkap berbagai jenis hubungan, seperti tata bahasa, makna, atau penekanan. Masking berarti menyembunyikan kata-kata di masa depan agar model tidak bisa curang dengan melihat informasi yang seharusnya belum dimilikinya.
Topeng itu adalah matriks segitiga:
Ini memastikan posisi di masa depan diblokir selama perhitungan skor perhatian.
Setiap kepala perhatian pertama-tama menghitung skor perhatian menggunakan query dan key. Sebelum softmax diterapkan, masker ditambahkan ke skor ini. Masker memberikan nilai negatif yang sangat besar pada posisi di masa depan, membuat probabilitas softmax mereka menjadi nol.
Proses ini diulang secara independen untuk setiap kepala. Setelah itu, semua keluaran kepala digabungkan dan dilewatkan melalui lapisan linier untuk menghasilkan keluaran akhir.
Ide utamanya adalah bahwa masking terjadi sebelum softmax dan secara independen di setiap head.
Pertanyaan yang Sering Diajukan
Mengapa multi-head attention membagi embedding menjadi dimensi yang lebih kecil?
Memisahkan embeddings memungkinkan setiap attention head beroperasi di subspace yang berbeda. Ini mencegah setiap head mempelajari pola yang sama dan mendorong keberagaman dalam hubungan yang ditangkap oleh masing-masing head.
Mengapa softmax digunakan dalam attention daripada metode normalisasi lain?
Softmax mengubah skor kesamaan menjadi probabilitas yang jumlahnya satu, sehingga bobot perhatian dapat ditafsirkan dan stabil. Ini memastikan bahwa token yang lebih relevan menerima bobot lebih tinggi sementara token yang kurang relevan memberikan kontribusi minimal.
Apa yang terjadi jika faktor skala dihapus dari perhatian?
Tanpa penskalaan, nilai hasil kali titik dapat menjadi besar seiring meningkatnya dimensi. Hal ini mendorong softmax ke wilayah jenuh di mana gradien sangat kecil, memperlambat pembelajaran dan merugikan kinerja model.
Apakah perhatian multi-kepala dapat dipahami?
Sampai tingkat tertentu, ya. Bobot perhatian dapat divisualisasikan untuk menunjukkan token mana yang memengaruhi token lainnya. Namun, interpretasi menjadi lebih sulit seiring model bertambah besar dan kepala berinteraksi dengan cara yang kompleks.
Mengapa perhatian multi-kepala memiliki skala yang buruk pada urutan panjang?
Perhatian menghitung interaksi berpasangan antara semua token, yang mengakibatkan kompleksitas waktu dan memori kuadrat. Hal ini membuat urutan panjang mahal untuk diproses, sehingga memotivasi varian yang efisien seperti perhatian sparse dan FlashAttention.
Kesimpulan
Multi-head attention memperluas mekanisme perhatian dasar dengan memungkinkan model untuk fokus pada berbagai aspek input secara paralel. Melalui kepala perhatian yang terpisah, mekanisme ini menangkap berbagai hubungan yang tidak bisa direpresentasikan secara efektif oleh satu mekanisme perhatian saja. Dengan skala yang stabil, komputasi paralel, dan pemodelan kontekstual yang kaya, multi-head attention telah menjadi salah satu pilar arsitektur pembelajaran mendalam modern. Memahami mekanisme ini memberikan wawasan mendalam tentang bagaimana model AI terkuat saat ini memproses dan menganalisis data yang kompleks.
Sumber Daya
- Perhatian Adalah Segalanya yang Kamu Butuhkan
- Panduan Pemula untuk Memahami Transformers
- Regresi vs Transformer: Perbedaan Utama dan Kapan Menggunakan Setiap Model
- Vision Transformers (ViTs): Visi Komputer dengan Model Transformer
- Panduan Lengkap untuk Arsitektur Transformer Byte Latent
Terima kasih telah belajar bersama Komunitas Linux-Console.net.












