Visualisasi Attention: Jantung Transformer [Video]
(3blue1brown.com)- Attention pada Transformer adalah mekanisme yang memperbarui embedding token sesuai konteks, sehingga kata yang sama pun berpindah menjadi vektor dengan makna berbeda bergantung pada kata-kata di sekitarnya
- Satu attention head membuat vektor query/key/value dari tiap token, lalu menghitung attention pattern, yaitu bobot relevansi antarkata, melalui hasil kali dalam key-query dan softmax
- Model autoregresif ala GPT menerapkan masking agar token di belakang tidak memengaruhi token di depan; karena ukuran attention pattern adalah kuadrat dari panjang konteks, memperluas context window yang besar menjadi beban
- Dalam contoh GPT-3, matriks key/query masing-masing memiliki 1.572.864 parameter, dan value map dibagi menjadi transformasi low-rank sehingga menjadi sekitar 6,3 juta parameter per head
- Transformer yang mengulang banyak attention head dan block mempelajari beragam cara memperbarui konteks; salah satu pilar besar keberhasilannya adalah kemungkinan paralelisasi untuk memproses banyak komputasi dengan cepat di GPU
Peran attention dalam Transformer
- Transformer menggunakan teks masukan untuk memprediksi token berikutnya, dan masukan terlebih dahulu ditokenisasi menjadi kata atau potongan kata
- Setiap token diubah menjadi embedding, yaitu vektor berdimensi tinggi
- Arah dalam ruang embedding ini dapat berkaitan dengan makna
- Misalnya, perpindahan ke arah tertentu dapat menggeser embedding nomina maskulin ke embedding nomina feminin yang bersesuaian
- Tujuan attention adalah menyesuaikan embedding awal secara bertahap agar tidak hanya memuat informasi kata individual, tetapi juga makna kontekstual yang lebih kaya
Mengapa kata yang sama berubah bergantung pada konteks
- Dalam “American shrew mole”, “One mole of carbon dioxide”, dan “Take a biopsy of the mole”, mole memiliki makna yang berbeda-beda
- Pada tahap embedding pertama, vektor untuk mole mendekati lookup table yang tidak melihat konteks, sehingga sama pada ketiga kasus
- Pada tahap berikutnya, yaitu attention block, embedding di sekitarnya dapat mengirim informasi ke embedding mole dan memperbarui nilainya
- Model yang terlatih dengan baik mengaitkan berbagai makna mole dengan arah-arah berbeda dalam ruang embedding, lalu menghitung apa yang harus ditambahkan ke embedding umum bergantung pada konteks
- Seperti pada “Eiffel tower” dan “miniature Eiffel tower”, embedding sebuah kata dapat diperbarui bukan hanya oleh kata-kata dekat, tetapi juga oleh informasi dari token yang jauh
- Karena prediksi kata berikutnya hanya memakai vektor terakhir, embedding kata terakhir dari masukan panjang harus memuat sampai taraf tertentu seluruh informasi konteks yang diperlukan untuk prediksi
Alur komputasi satu attention head
- Penjelasan dasar berangkat dari single head of attention
- Pada contoh kalimat “A fluffy blue creature roamed the verdant forest.”, diasumsikan situasi ketika adjektiva memperbarui embedding awal nomina yang sesuai
- Contoh ini dimaksudkan untuk menunjukkan tindakan yang dapat dilakukan attention head
- Perilaku head sebenarnya sulit ditafsirkan, karena merupakan hasil penyesuaian banyak parameter untuk menurunkan fungsi biaya
- Embedding awal memuat bukan hanya informasi kata, tetapi juga informasi posisi, dan dilambangkan sebagai
\vec{E} - Tujuannya adalah membuat embedding baru
\vec{E}'yang mencerminkan konteks dari embedding yang sudah ada -
Query
- Pada tahap pertama, setiap embedding token dikalikan dengan query matrix
W_Quntuk membuat vektor query\vec{Q} - Ini dapat dibayangkan seperti nomina yang mengajukan pertanyaan “apakah ada adjektiva di depannya?”
- Elemen-elemen
W_Qadalah parameter model yang dipelajari, dan apa yang sebenarnya dilakukan suatu head tertentu sulit ditafsirkan - Sebagai contoh, ini dapat dilihat sebagai pemetaan embedding nomina ke arah yang “mencari adjektiva pada posisi sebelumnya”
- Pada tahap pertama, setiap embedding token dikalikan dengan query matrix
-
Key
- Pada saat yang sama, setiap embedding dikalikan dengan key matrix
W_kuntuk membuat vektor key\vec{K} - Key dapat dipandang sebagai jawaban potensial atas query, dan berada dalam ruang berdimensi lebih kecil yang sama dengan query
- Tingkat keselarasan key dan query diukur dengan hasil kali dalam
- Semakin besar hasil kali dalam, semakin kuat kedua vektor selaras
- Jika key dari fluffy dan blue cocok dengan query dari creature, nilainya menjadi positif besar
- Menghitung hasil kali dalam untuk semua pasangan key-query menghasilkan kisi skor yang menunjukkan seberapa relevan suatu kata dalam memperbarui makna kata lain
- Pada saat yang sama, setiap embedding dikalikan dengan key matrix
Attention pattern dan softmax
- Karena skor hasil kali dalam dapat bernilai dari
-\inftyhingga\infty, softmax diterapkan pada tiap kolom untuk menormalisasinya menjadi nilai antara 0 dan 1 - Kisi yang telah dinormalisasi disebut attention pattern
- Setiap kolom dapat dilihat sebagai bobot tentang seberapa relevan kata di kiri untuk memperbarui kata di atas
- Makalah Transformer asli menuliskannya dengan notasi yang lebih ringkas
QdanKadalah seluruh array vektor query dan keyK^TQmerepresentasikan kisi semua hasil kali dalam key-query yang mungkin- Dalam notasi makalah, query dan key ditempatkan pada baris dan ditulis dalam bentuk
QK^T, sehingga menjadi bentuk yang terbalik secara diagonal dibanding gambar yang dijelaskan di sini
- Untuk stabilitas numerik, ada suku pembagi
\sqrt{d_k}, yaitu akar kuadrat dari dimensi ruang key-query - Softmax membungkus keseluruhan ekspresi, tetapi secara makna diterapkan pada tiap kolom
Masking dan batasan ukuran konteks
- Selama pelatihan, model tidak hanya memprediksi satu token berikutnya dari teks yang diberikan, tetapi juga secara bersamaan memprediksi token berikutnya yang mungkin setelah tiap subsekuens
- Satu contoh teks bertindak seperti banyak contoh pelatihan, sehingga efisiensinya meningkat
- Dalam contoh GPT, jika token di belakang memengaruhi token di depan, jawaban token berikutnya dapat bocor, sehingga digunakan masking
- Sebelum softmax, nilai pada posisi tersebut diatur menjadi tak hingga negatif
- Setelah softmax, posisi itu menjadi 0, dan kolom tetap dalam keadaan ternormalisasi
- Tidak semua attention selalu menerapkan masking, tetapi dalam contoh GPT masking selalu digunakan agar token di belakang tidak memengaruhi token di depan
- Ukuran attention pattern sama dengan kuadrat dari context size
- Karena itu, context size dapat menjadi batasan penting pada model bahasa besar
- Berbagai variasi yang membuat mekanisme attention lebih mudah diskalakan untuk context window yang lebih besar telah muncul, tetapi di sini hanya bentuk dasarnya yang dibahas
Cara value benar-benar memperbarui embedding
- Attention pattern memberikan bobot tentang kata mana yang akan memperbarui kata mana, dan tahap berikutnya adalah membuat besaran perubahan embedding yang sebenarnya
- Setiap embedding dikalikan dengan value matrix
W_Vuntuk membuat vektor value- Vektor value berada dalam ruang berdimensi tinggi yang sama dengan embedding
- Ini menunjukkan perubahan konkret apa yang harus ditambahkan saat kata yang relevan menyesuaikan makna kata lain
- Pada tiap kolom, vektor value dikalikan dengan bobot terkait dari attention pattern, lalu semuanya dijumlahkan menjadi besaran perubahan
\Delta \vec{E} - Jika besaran perubahan ini ditambahkan ke embedding awal, terbentuk embedding baru
\vec{E}'yang mencerminkan konteks- Dalam contoh, creature menyerap informasi dari fluffy dan blue sehingga memuat makna yang lebih dekat dengan “fluffy blue creature”
- Jika proses yang sama diterapkan pada semua kolom, embedding yang telah disempurnakan untuk seluruh urutan token keluar dari attention block
- Satu attention head diparameterisasi oleh tiga jenis matriks parameter yang dipelajari: key matrix, query matrix, dan value matrix
Perhitungan parameter berdasarkan GPT-3
- Dalam contoh GPT-3, matriks key dan query masing-masing memiliki 12.288 kolom yang sesuai dengan dimensi embedding dan 128 baris yang sesuai dengan dimensi ruang key-query
- Setiap matriks memiliki 1.572.864 parameter
- Jika value matrix dibuat sebagai matriks persegi 12.288×12.288, akan ditambahkan 150.994.944 parameter, jauh lebih besar daripada key/query
- Dalam praktiknya, lebih efisien memecah value map menjadi dua matriks kecil agar jumlah parameternya sebanding dengan key/query
- Matriks pertama menurunkan ruang embedding besar ke ruang kecil seperti 128 dimensi
- Matriks kedua menaikkannya kembali dari ruang kecil ke ruang embedding
- Dari sudut pandang aljabar linear, ini membatasi keseluruhan value map menjadi transformasi low-rank
- Dalam penjelasan ini, kedua matriks tersebut disebut
Value_\downarrowdanValue_\uparrow, tetapi ini bukan nama konvensional - Jika empat matriks digabungkan, satu attention head memiliki sekitar 6,3 juta parameter
Self-attention dan cross-attention
- Struktur sejauh ini, secara lebih tepat, merupakan self-attention head
- Cross-attention head muncul pada model yang memproses dua kumpulan data yang berbeda
- Misalnya pada model terjemahan, key dapat berasal dari satu bahasa dan query dari bahasa lain
- Attention pattern dapat menunjukkan bagaimana kata dalam satu bahasa berkorespondensi dengan kata dalam bahasa lain
- Dalam cross-attention, key dan query map bekerja pada dataset yang berbeda; inilah perbedaannya dari self-attention
- Pada pengaturan seperti terjemahan, biasanya tidak ada masking karena tidak ada konsep token di belakang memengaruhi token di depan
Multi-headed attention dan block yang berulang
- Attention block sebenarnya terdiri dari multi-headed attention, yang menjalankan banyak head secara paralel
- GPT-3 menggunakan 96 attention head di dalam setiap block
- 96 matriks key/query yang berbeda membuat 96 attention pattern yang berbeda
- Setiap head membuat urutan vektor value dengan matriks value-nya sendiri
- Pada tiap posisi token, semua besaran perubahan
\Delta \vec{E}yang diusulkan oleh semua head dijumlahkan dan ditambahkan ke embedding awal
- Menjalankan banyak head secara paralel memberi model kapasitas untuk mempelajari berbagai cara konteks mengubah makna
- Berdasarkan GPT-3, satu multi-headed attention block dengan 96 head memiliki sekitar 600 juta parameter
- Dalam makalah dan implementasi nyata, matriks-matriks yang bersesuaian dengan
Value_\uparrowdari setiap head digabungkan menjadi satu output matrix besar yang tersambung ke keseluruhan multi-headed attention block- Biasanya, ketika menyebut value matrix dari head tertentu, yang dimaksud adalah tahap proyeksi pertama yang di sini disebut
Value_\downarrow
- Biasanya, ketika menyebut value matrix dari head tertentu, yang dimaksud adalah tahap proyeksi pertama yang di sini disebut
Cara makna terakumulasi dalam Transformer yang lebih dalam
- Data di dalam Transformer tidak hanya melewati satu attention block, tetapi melewati banyak attention block dan multi-layer perceptron
- Bahkan setelah embedding sebuah kata menyerap sebagian konteks, masih ada kesempatan berulang untuk dipengaruhi oleh embedding di sekitarnya yang sudah lebih canggih
- Semakin dalam jaringan, setiap embedding menyerap lebih banyak makna dari embedding lain, dan memiliki kapasitas untuk mengodekan fitur abstrak tingkat lebih tinggi seperti emosi, nada, atau apakah teks merupakan puisi
- GPT-3 mencakup 96 layer, dan parameter terkait key/query/value dijelaskan berjumlah total kurang dari 58 miliar
- Ini sekitar sepertiga dari total parameter jaringan, sementara sebagian besar sisanya berasal dari block yang berada di antara attention
- Sebagian besar keberhasilan mekanisme attention bukan berasal dari satu perilaku spesifik, melainkan dari kemungkinan paralelisasi yang tinggi, yang memungkinkan banyak komputasi dilakukan dalam waktu singkat dengan GPU
- Karena pelajaran dalam deep learning menunjukkan bahwa penskalaan dapat memberi peningkatan kualitatif besar pada performa model, arsitektur yang dapat diparalelkan dan memungkinkan penskalaan memiliki keunggulan besar
1 komentar
Komentar di Hacker News
Dari sudut pandang seseorang yang pernah mengerjakan kimia kuantum dan sebagian machine learning, saat menonton video ini kemiripan antara model Transformer dan mekanika kuantum cukup mencolok
Dalam mekanika kuantum, keadaan seluruh sistem fisik dikodekan sebagai vektor ternormalisasi berdimensi sangat tinggi, yakni setengah garis di ruang Hilbert, dan perubahan terhadap waktu ditangani oleh operator translasi waktu yang kurang lebih dapat dilihat sebagai matriks unitary U = exp(-iHt)
Di video ini dikatakan bahwa prediksi token berikutnya ditentukan dengan menghitung vektor embedding sadar-konteks berikutnya hanya dari vektor embedding sadar-konteks terakhir, jadi tampak seperti hasil penerapan fungsi keadaan linear pada vektor berdimensi tinggi
Rasanya mirip dengan membuat Hamiltonian untuk seluruh sistem secara offline dari data pelatihan, lalu mereparametrisasi context window, yaitu subsistem tertentu, ke basis yang sesuai dengan Hamiltonian itu, menerapkan translasi waktu satu langkah, kemudian mengembalikannya ke basis semula
Namun bagi orang yang telah meneliti bidang tertentu, semua masalah bisa tampak seperti paku yang cocok dengan palu bidang itu, jadi saya penasaran apakah kemiripan ini juga terlihat oleh orang lain atau terlalu dipaksakan
Jika satu kali penerapan operator memajukan keadaan alam semesta sebanyak satu waktu Planck, saya juga penasaran apakah kita bisa mengamati perbedaan antara alam semesta seperti itu dan alam semesta dengan waktu kontinu
Keterkaitannya dengan apa yang terjadi di fisika pada masa itu baru sekarang terpikir oleh saya
Video YouTube dari CodeEmporium lebih mudah diikuti: https://www.youtube.com/watch?v=Nw_PJdmydZY
Transformer sulit dijelaskan dengan analogi, dan sebenarnya juga belum ada penjelasan yang baik tentang mengapa ia bekerja, jadi mungkin lebih baik sekadar menunjukkan mekanismenya dan membiarkan penonton menafsirkannya sendiri
Selain itu, dot product lebih sederhana dijelaskan sebagai proyeksi vektor terhadap satu sama lain
Alasan “mat” muncul setelah “the cat sat on the ...” adalah karena itu kata yang paling sering muncul di dataset, dan neural network adalah model dari frekuensi semacam itu
Alasan ia tampak tahu “London in UK” tetapi tidak tahu “London in France” juga karena “UK” jauh lebih sering muncul di dataset
Algoritmenya sendiri tidak melakukan hal yang secara khusus menarik selain menyelaraskan komputasi agar cocok dengan hardware. Nilainya berasal dari struktur probabilitas kondisional di dalam data, dan struktur itu merupakan hasil dari orang-orang yang menyusun kata secara berguna untuk menyampaikan informasi satu sama lain
Saya tahu ini penjelasan yang tidak lengkap, tetapi menurut saya masih lebih baik daripada tidak ada sama sekali
Ada visualisasi yang meyakinkan tentang bagaimana LLM bekerja saat menangani permintaan sederhana: https://bbycroft.net/llm
Ini melengkapi penjelasan rinci dari 3blue1brown dengan baik
Video yang sangat bagus. Ia menunjukkan dengan baik mengapa perkalian matriks Q*K menjadi bottleneck. Jika panjang sekuens, yaitu panjang context window, adalah S, maka matriks berukuran SxS yang merupakan hasil dari semua query dan semua key harus disimpan di memori
Salah satu ide yang relatif baru untuk memperbaiki bottleneck ini adalah Ring Attention, dan artikel ini menjelaskannya dengan baik: https://learnandburn.ai/p/how-to-build-a-10m-token-context
Artikel tersebut saya edit
Di Unsloth, berkat Flash Attention, penggunaan memori meningkat secara linear, bukan kuadrat; fine-tuning menjadi 2x lebih cepat; penggunaan VRAM turun 80%; dan inferensi juga 2x lebih cepat. Namun jumlah komputasinya tetap O(N^2)
Untuk konteks panjang, rilis terbaru Unsloth dapat memuat konteks 4x lebih panjang daripada HF+FA2 dengan overhead +1,9%, sehingga memungkinkan konteks 228K di H100
Tulisan sebelumnya, “But what is a GPT?”, juga sangat bagus: https://www.3blue1brown.com/lessons/gpt
Berkat video ini, saya menyadari bahwa mekanisme attention lebih mirip semacam meta-fungsi daripada fungsi tertentu
Kalau pemahaman saya benar, Attention + bobot yang dipelajari memungkinkan transformer mempelajari fungsi yang sampai batas tertentu arbitrer, dan fungsi itu mencakup mekanisme pencocokan seperti scaled dot-product
Karena itu, menurut saya linear attention sulit sekali mendekati kemampuan attention standar. Sebab suku kuadrat yang menjelajahi semua pasangan input-output adalah fitur yang esensial
Video ini mudah dicerna sebagian besar berkat animasi. Cara elemen-elemen mengembang, menyusut, dan terbuka mengikuti timing narasi dibuat dengan sangat baik
Saya bekerja di bidang yang sangat terkait, dan video ini langsung masuk ke dokumen onboarding tim kami
Fakta bahwa cukup banyak kode visualisasinya tersedia di GitHub juga penting: https://github.com/3b1b/videos/tree/master/_2024/transformers
Akhirnya saya paham. Entah kenapa video-video lain membuatnya begitu membingungkan
Saya jadi berpikir bahwa kemampuan mengajar dan kemampuan riset mungkin pada umumnya merupakan keterampilan yang saling eksklusif
Pertama, istilah standarnya kurang bagus. “attention” saja baru sedikit intuitif, “self-attention” lebih buruk, belum lagi “key” dan “value”
Kedua, makalah-makalah kunci seperti Attention is All You Need dan makalah BERT tidak ditulis dengan baik. Bukan bermaksud meremehkan pencapaiannya; makalah yang berpengaruh dan berisi terobosan besar pun bisa saja kurang baik dalam menjelaskan, dan menurut saya memang begitu kenyataannya
Ketiga, arsitektur-arsitektur ini pada dasarnya ditemukan dengan cara mencoba berbagai hal dan mencari mana yang menempel dengan baik. Bukan karena ada proses perenungan terlebih dahulu yang memprediksi bahwa struktur seperti ini akan bekerja dengan baik lalu diverifikasi lewat eksperimen; dari awal sampai akhir sifatnya empiris
Karena itu kita belum sepenuhnya memahami mengapa ini bekerja begitu baik, semua penjelasan lebih mirip rasionalisasi setelah fakta, dan belakangan ada juga pekerjaan yang mengisyaratkan bahwa jika disetel dengan cukup baik, struktur lain pun bisa bekerja sama baiknya. Sulit menjelaskan sesuatu yang belum sepenuhnya kita pahami
Saya penasaran apakah ada referensi yang menjelaskan bagaimana arsitektur saat ini berevolusi. Saya ingin melihat alur dari ide inti yang sangat sederhana hingga makalah “all you need” yang terkenal itu
Kalau tidak, banyak komponen terasa muncul tiba-tiba, dengan banyak perhitungan tetapi sedikit intuisi
Jeremy Howard pernah mengatakan di Twitter bahwa ia sudah berkali-kali melihat berbagai versi ide ini, yang terdengar seperti berarti ini adalah ide yang alami. Melihat contoh bagaimana ide ini muncul di tempat lain sepertinya bisa membantu membangun intuisi
Pendekatan RNN/LSTM ini punya kelemahan berupa representasi berukuran tetap, serta sulitnya menentukan bagian mana dari sekuens input yang harus dipakai saat menghasilkan bagian tertentu dari output. Bahdanau dkk. mengatasinya dengan arsitektur yang menggabungkan mekanisme attention ke RNN encoder-decoder, sehingga tidak hanya melihat state akhir, tetapi semua state masa lalu RNN
RNN tidak efisien untuk dilatih, sehingga Jakob Uszkoreit mencari cara untuk memanfaatkan hardware paralel berskala besar dengan lebih baik, dan memperhatikan bahwa bahasa bukan hanya bersifat sekuensial, tetapi juga hierarkis. Ia mengusulkan arsitektur berlapis yang memproses token-token subsekuens secara paralel di tiap lapisan, sambil mempertahankan attention ala Bahdanau sebagai self-attention yang membuat token saling merujuk untuk memprediksi lapisan berikutnya
Implementasi awalnya bekerja, tetapi tidak lebih baik daripada pendekatan lain saat itu seperti konvolusi. Setelah itu, setahu saya Noam Shazeer mengembangkan ide tersebut menjadi struktur yang jauh lebih baik, lalu melalui eksperimen menghapus komponen yang tidak perlu, jadilah transformer asli. Saya tidak tahu pasti siapa yang menggagas bentuk attention berbasis key pada struktur akhirnya
Transformer asli dalam makalah Attention is All You Need memiliki encoder dan decoder terpisah, mengikuti pendekatan berbasis RNN sebelumnya, dan ini juga digunakan pada model-model awal seperti BERT dari Google. Namun untuk model bahasa, ini tidak wajib, sehingga GPT dari OpenAI hanya memakai bagian decoder, dan sekarang pada umumnya semua orang memakai pendekatan ini. Pada transformer decoder-only, kalimat input masuk ke lapisan paling bawah, lalu setelah melewati tiap lapisan diubah sedikit demi sedikit dan keluar di bagian atas. Di akhir sekuens input ditambahkan token akhir, dan token itu diubah menjadi token berikutnya dari sekuens output, yaitu token terakhir