2 poin oleh GN⁺ 2025-03-06 | Belum ada komentar. | Bagikan ke WhatsApp
  • 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, Wv untuk mengirim embedding input ke ruang query, key, dan value
  • Matriks input X diubah menjadi Q=XWq, K=XWk, V=XWv; lalu Ω=QKᵀ dibagi dengan √c, kemudian bobot attention A diperoleh 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.Module dan nn.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
  • 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 adalah d, dan dimensi vektor konteks adalah c
  • Urutan embedding input direpresentasikan sebagai x1, x2, x3, ... xn, dan setiap embedding input adalah vektor berdimensi d
  • Tiga matriks bobot yang dapat dilatih didefinisikan
    • query weights matrix: Wq
    • key weights matrix: Wk
    • value weights matrix: Wv
  • Setiap matriks berukuran d×c, dan memproyeksikan vektor input berdimensi d ke ruang berdimensi c
  • Perhitungan untuk mengirim vektor input xm ke ruang query adalah qm=xmWq
  • Ruang key dan ruang value juga memproyeksikan embedding input ke ruang berdimensi c yang 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×2 dapat 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 lain xp didefinisikan sebagai dot product antara proyeksi query dan proyeksi key
  • Rumus perhitungannya adalah sebagai berikut
    • qm=xmWq
    • kp=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, maka X berukuran n×d
  • Matriks key dihitung sekaligus sebagai K=XWk
    • Hasil K berukuran n×c
    • Setiap baris adalah vektor hasil proyeksi embedding input terkait ke ruang key
  • Matriks query juga dihitung dengan cara yang sama sebagai Q=XWq
  • Dot product antara semua query dan semua key diperoleh dengan QKᵀ
    • Q berukuran n×c
    • Kᵀ berukuran c×n
    • Hasil Ω berukuran n×n
  • Ωm,p adalah skor attention yang menunjukkan seberapa besar xp perlu diperhatikan saat membuat vektor konteks untuk xm

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, d dan c bisa 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=1 adalah notasi ala PyTorch yang berarti softmax diterapkan per baris
  • Hasil A adalah skor attention yang telah dinormalisasi, yaitu matriks bobot attention

Pembuatan Vektor Konteks

  • Proyeksi ruang value dihitung sebagai V=XWv
  • A adalah matriks bobot attention berukuran n×n
    • Am,p adalah bobot attention yang diterapkan pada input p saat membuat vektor konteks untuk xm
  • V berukuran n×c, dan setiap baris adalah vektor hasil proyeksi embedding input ke ruang value
  • Matriks vektor konteks dihitung sebagai C=AV
    • Hasil C berukuran n×c
    • Baris ke-m dari C adalah vektor konteks untuk input xm
  • 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 X berisi embedding input dari urutan token, dan berukuran n×d
  • Input diproyeksikan masing-masing ke ruang query, key, dan value dengan tiga matriks yang dapat dilatih
    • Q=XWq
    • K=XWk
    • V=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.Module sederhana yang melakukan operasi matriks yang sama
  • Versi pertama menggunakan objek nn.Parameter biasa untuk tiga matriks bobot
  • Versi kedua menggunakan nn.Linear untuk 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.

Belum ada komentar.