- Dalam Transformer khusus decoder ala GPT, self-attention yang dapat dilatih menghitung token mana dari input sebelumnya yang perlu diperhatikan oleh setiap token untuk membuat vektor konteks
- Intinya adalah scaled dot product attention, yang menggunakan tiga matriks pembelajaran
Wq,Wk,Wvuntuk mengirim embedding input ke ruang query, key, dan value - Matriks input
Xdiubah menjadiQ=XWq,K=XWk,V=XWv; laluΩ=QKᵀdibagi dengan√c, kemudian bobot attentionAdiperoleh melalui softmax per baris - Vektor konteks dibuat dengan satu perkalian matriks
C=AV, dan seluruh perhitungan dapat diterapkan ke semua token dengan 5 perkalian matriks dan satu transpose - Tahap ini melampaui contoh mainan yang melakukan dot product langsung antar-embedding input, menuju attention yang dapat dilatih yang bisa diimplementasikan dengan PyTorch
nn.Moduledannn.Linear
Posisi Self-Attention dalam Alur Pemrosesan LLM
- LLM berbasis Transformer khusus decoder ala GPT memiliki struktur yang melihat token-token sejauh ini untuk memprediksi token berikutnya
- Alur pemrosesannya adalah memecah string menjadi token, mengubah setiap token menjadi token embedding, lalu menambahkan positional embedding yang merepresentasikan informasi posisi untuk membuat embedding input
- Self-attention menghasilkan daftar skor attention yang menunjukkan seberapa besar setiap embedding input perlu memperhatikan token-token lain
- Dalam contoh kalimat
"the fat cat sat on the mat", saat melihat"cat","fat"bisa menjadi penting - Saat melihat
"mat", tingkat kepentingan"fat"bisa relatif lebih rendah
- Dalam contoh kalimat
- Skor attention melewati softmax dan menjadi bobot attention yang jumlahnya 1, lalu embedding input dijumlahkan berbobot dengan bobot tersebut untuk membuat vektor konteks
- Vektor konteks diperlakukan sebagai vektor yang merepresentasikan makna setiap token dalam konteks keseluruhan input
Tujuan Self-Attention yang Dapat Dilatih
- Hingga tahap sebelumnya, digunakan self-attention mainan yang menghitung dot product langsung antar-embedding input
- Tujuan tahap ini adalah menyusun mekanisme attention yang dapat dilatih yang mampu membuat skor attention dari vektor input
- Bagian 3.4 dari buku Sebastian Raschka Build a Large Language Model (from Scratch) mengimplementasikannya sebagai scaled dot product attention
- Fokusnya bukan pada mengapa struktur ini efektif, melainkan pada perhitungan seperti apa yang membuatnya bekerja
Matriks Query, Key, Value dan Proyeksi Ruang
- Misalkan panjang urutan input adalah
n, dimensi embedding input adalahd, dan dimensi vektor konteks adalahc - Urutan embedding input direpresentasikan sebagai
x1, x2, x3, ... xn, dan setiap embedding input adalah vektor berdimensid - Tiga matriks bobot yang dapat dilatih didefinisikan
- query weights matrix:
Wq - key weights matrix:
Wk - value weights matrix:
Wv
- query weights matrix:
- Setiap matriks berukuran
d×c, dan memproyeksikan vektor input berdimensidke ruang berdimensic - Perhitungan untuk mengirim vektor input
xmke ruang query adalahqm=xmWq - Ruang key dan ruang value juga memproyeksikan embedding input ke ruang berdimensi
cyang masing-masing berbeda dengan cara yang sama
Cara Melihat Matriks sebagai Proyeksi
- Matriks dapat digunakan untuk transformasi geometris, seperti memutar titik
- Matriks persegi melakukan transformasi di dalam dimensi yang sama, sedangkan matriks non-persegi dapat mengirim vektor ke ruang berdimensi lain
- Sebagai contoh, matriks
3×2dapat mengubah vektor 3 dimensi menjadi vektor 2 dimensi - Dalam grafika 3D, matriks frustum yang mengubah titik 3D menjadi titik pada layar 2D juga digunakan sebagai contoh proyeksi semacam ini
- Self-attention mengirim embedding input ke tiga ruang proyeksi berbeda bernama query, key, dan value, lalu melanjutkan perhitungan dengan vektor-vektor yang sudah diproyeksikan
- Karena matriks proyeksi ini dipelajari selama pelatihan, muncul ketidaklangsungan yang tidak ada pada attention dot product sederhana
Perhitungan Skor Attention
- Saat mempertimbangkan input tertentu
xm, skor attention terhadap input lainxpdidefinisikan sebagai dot product antara proyeksi query dan proyeksi key - Rumus perhitungannya adalah sebagai berikut
qm=xmWqkp=xpWkωm,p=qm·kp
- Perhitungan ini bisa diproses dengan perulangan untuk semua input, tetapi dengan perkalian matriks semuanya dapat dihitung sekaligus
- Jika seluruh embedding input dianggap sebagai matriks
X, makaXberukurann×d - Matriks key dihitung sekaligus sebagai
K=XWk- Hasil
Kberukurann×c - Setiap baris adalah vektor hasil proyeksi embedding input terkait ke ruang key
- Hasil
- Matriks query juga dihitung dengan cara yang sama sebagai
Q=XWq - Dot product antara semua query dan semua key diperoleh dengan
QKᵀQberukurann×cKᵀberukuranc×n- Hasil
Ωberukurann×n
Ωm,padalah skor attention yang menunjukkan seberapa besarxpperlu diperhatikan saat membuat vektor konteks untukxm
Scaling dan Normalisasi Softmax
- Skor attention, seperti pada contoh sebelumnya, melewati softmax dan diubah menjadi bobot yang jumlahnya 1
- Softmax memperbesar nilai yang besar dan menurunkan nilai yang kecil, sambil menyesuaikan agar jumlah seluruh daftar menjadi 1
- Dalam LLM nyata,
ddancbisa mencapai orde ribuan, sehingga jika hanya menggunakan softmax murni dapat muncul gradient kecil - Dalam kasus ini, softmax dapat berperilaku “seperti step function”
- Ini dapat ditafsirkan sebagai situasi ketika nilai terbesar mendominasi dan nilai-nilai lainnya menjadi sangat kecil
- Untuk meredakannya, skor attention dibagi dengan akar kuadrat dari dimensi ruang proyeksi
c, lalu softmax diterapkan - Representasi matriksnya adalah sebagai berikut
A=softmax(Ω/√c, axis=1)
axis=1adalah notasi ala PyTorch yang berarti softmax diterapkan per baris- Hasil
Aadalah skor attention yang telah dinormalisasi, yaitu matriks bobot attention
Pembuatan Vektor Konteks
- Proyeksi ruang value dihitung sebagai
V=XWv Aadalah matriks bobot attention berukurann×nAm,padalah bobot attention yang diterapkan pada inputpsaat membuat vektor konteks untukxm
Vberukurann×c, dan setiap baris adalah vektor hasil proyeksi embedding input ke ruang value- Matriks vektor konteks dihitung sebagai
C=AV- Hasil
Cberukurann×c - Baris ke-
mdariCadalah vektor konteks untuk inputxm
- Hasil
- Perhitungan ini menjalankan operasi mengalikan vektor-vektor value dengan bobot attention lalu menjumlahkannya untuk setiap token, hanya dengan satu perkalian matriks
Ringkasan Perhitungan Keseluruhan
- Matriks input
Xberisi embedding input dari urutan token, dan berukurann×d - Input diproyeksikan masing-masing ke ruang query, key, dan value dengan tiga matriks yang dapat dilatih
Q=XWqK=XWkV=XWv
- Skor attention dihitung dengan dot product query dan key
Ω=QKᵀ
- Setelah skor di-scale, softmax per baris diterapkan untuk membuat bobot attention
A=softmax(Ω/√c, axis=1)
- Proyeksi value dikalikan dengan bobot attention untuk menghasilkan vektor konteks
C=AV
- Seluruh mekanisme self-attention dapat membuat vektor konteks untuk semua token input dengan 5 perkalian matriks dan satu transpose
Implementasi PyTorch dan Tahap Berikutnya
- Bagian 3.4 dari buku tersebut mengimplementasikan perhitungan di atas dalam kode PyTorch dan membuat subclass
nn.Modulesederhana yang melakukan operasi matriks yang sama - Versi pertama menggunakan objek
nn.Parameterbiasa untuk tiga matriks bobot - Versi kedua menggunakan
nn.Linearuntuk pelatihan yang lebih efektif - Topik yang akan dibahas berikutnya ada dua
- causal self-attention: cara yang tidak memperhatikan token setelahnya saat melihat token tertentu
- multi-head attention: diperkenalkan sebagai topik yang tidak serumit perkiraan awal
- Pemrosesan batch tetap menjadi hal yang perlu dipikirkan terpisah
- Bahkan untuk satu urutan input pun, matriks skor attention digunakan
- Untuk memproses beberapa urutan input secara paralel, mungkin diperlukan tensor dengan orde lebih tinggi daripada matriks
- Artikel berikutnya berlanjut ke Writing an LLM from scratch, part 9 -- causal attention
Belum ada komentar.