Embedding Adalah Lookup, Bukan Fungsi
Lapisan Pertama Setelah Tokenizer
Tokenizer memberikan model ID integer: [256, 1842, 7301, ...]. Hal pertama yang dilakukan transformer: mengubah setiap ID menjadi vektor berisi d_model bilangan float. Vektor tersebut berada dalam ruang berdimensi d_model (768 dimensi untuk ANDREA-120M).
Lapisan embedding adalah tabel pencarian, bukan fungsi. Bayangkan sebuah matriks raksasa:
bentuk: (V, d_model)
baris 0: [e_0_0, e_0_1, ..., e_0_767]
baris 1: [e_1_0, e_1_1, ..., e_1_767]
...
baris 8448: [e_8448_0, e_8448_1, ..., e_8448_767]
Token ID i memilih baris i. Akses array langsung. Tanpa aritmatika, tanpa aktivasi. Hanya sebuah indeks.
Float yang Dapat Dilatih
Setiap entri dalam tabel tersebut dimulai sebagai float acak kecil (biasanya diambil dari distribusi normal yang diskalakan dengan 1/sqrt(d_model)). Backpropagation memperbarui setiap baris setiap kali token ID-nya muncul dalam batch. Setelah pelatihan, token yang serupa (cat, dog, pet) akan memiliki vektor yang mirip; token yang tidak terkait (cat, Tuesday, xylophone) akan berada jauh terpisah dalam ruang vektor.
Biaya Embedding Token ANDREA-120M
| Kuantitas | Nilai |
|---|---|
| V | 8,449 |
| d_model | 768 |
| Parameter | 6,488,832 |
Sekitar 6,5 juta parameter berada di tabel embedding token saja, sekitar 5,4% dari total ANDREA-120M. Setiap slot kosakata mendapatkan 768 float ini.
Menghitung Ukuran Tabel Embedding
Dot Product Mengukur Kemiripan
Vektor sebagai Panah
Sebuah vektor berdimensi 768 hidup dalam ruang yang tidak dapat digambarkan manusia, tetapi aljabar yang sama berlaku di dimensi manapun. Dua operasi kunci penting untuk transformer:
Magnitudo (panjang sebuah panah):
||v|| = sqrt(v_0² + v_1² + ... + v_767²)
Dot product (keselarasan antara dua panah):
u · v = u_0 × v_0 + u_1 × v_1 + ... + u_767 × v_767
Apa yang Diberitahukan oleh Dot Product
Dua fakta yang berlaku dalam dimensi apa pun:
- u · v = ||u|| × ||v|| × cos(theta), di mana theta adalah sudut di antara keduanya.
- Vektor yang menunjuk ke arah yang sama menghasilkan hasil kali titik yang besar dan positif.
- Vektor yang menunjuk ke arah berlawanan menghasilkan hasil kali titik yang besar dan negatif.
- Vektor yang membentuk sudut siku-siku menghasilkan hasil kali titik nol.
Hasil kali titik = kesamaan yang belum dinormalisasi. Dua embedding token yang telah dilatih untuk cat & dog menghasilkan hasil kali titik yang tinggi karena backpropagation mendorong keduanya mendekat (keduanya memprediksi konteks terkait hewan peliharaan). cat & Tuesday menjadi hampir ortogonal karena keduanya memprediksi konteks yang berbeda.
Mengapa Transformer Peduli
Activity 5 (grow_a_language_model_attention) membangun attention dari dot products: sebuah query vector di-dot-product-kan dengan key vectors menghasilkan skor yang menunjukkan token mana di masa lalu yang penting untuk memprediksi token berikutnya. Embeddings & dot products bersama-sama membawa setiap interaksi di dalam transformer.
Prediksi Kemiripan
ANDREA Menggunakan Penyisipan Posisi yang Dipelajari
Masalah
Penyisipan token memberi tahu model kata apa yang ada di posisi ini. Ia tidak memberi tahu model di mana kata tersebut berada. Tanpa informasi posisi, transformer memperlakukan the cat sat on a mat & mat a on sat cat the secara identik: kumpulan token yang sama, tanpa sinyal urutan.
Tiga solusi ada dalam literatur transformer:
Sinusoidal (Vaswani 2017). Rumus matematika tetap berdasarkan sinus & kosinus. Posisi 0 mendapatkan vektor 768 tertentu; posisi 1 mendapatkan yang lain; tidak pernah dilatih, tidak pernah diperbarui. Dapat digeneralisasi ke posisi mana pun melalui rumus.
RoPE (Rotary Position Embedding). Memutar vektor query & key berdasarkan posisi. Digunakan oleh LLaMA, Qwen. Tidak ada parameter tambahan; rotasi sudah terintegrasi dalam attention.
Learned. Tabel embedding terpisah berbentuk (T, d_model) di mana T adalah panjang konteks. Setiap baris dilatih melalui backpropagation, sama seperti token embeddings.
Pilihan ANDREA: Learned
ANDREA mewarisi pendekatan learned-position dari microGPT, yang mewarisi dari nanoGPT, yang mewarisi dari GPT-2. Sebuah alasan:
- Kesederhanaan. Tidak ada matematika khusus dalam attention. Tabel posisi terlihat seperti tabel token.
- Kompatibilitas dengan CUDA khusus. Mesin microgpt_cuda.cu ANDREA menangani dua pencarian embedding secara identik; tidak diperlukan kernel sin/cos.
- Cukup untuk konteks tetap. ANDREA membatasi T pada 1024. Tabel yang dipelajari bekerja dengan baik untuk urutan panjang tetap.
Biaya Position Embedding ANDREA-120M
| Kuantitas | Nilai |
|---|---|
| T (konteks) | 1,024 |
| d_model | 768 |
| Parameter | 786,432 |
0.79M parameter untuk posisi. Dikombinasikan dengan token embeddings: 6.49M + 0.79M = 7.27M parameter embedding total untuk ANDREA-120M.
Bagaimana Mereka Digabungkan
Pada setiap posisi t dalam urutan input:
x_t = token_embedding[token_id_t] + position_embedding[t]
Dua vektor 768, dijumlahkan secara elemen demi elemen. Hasilnya, x_t, mengalir ke blok transformer pertama. Model tidak pernah memisahkan keduanya lagi; ia belajar menggunakan sinyal gabungan.
Learned Versus Sinusoidal
Tempat Parameter Embedding Berada
Lapisan Embedding ANDREA-120M Lengkap
| Komponen | Bentuk | Parameter |
|---|---|---|
| Tabel token embedding | 8,449 × 768 | 6,488,832 |
| Tabel position embedding | 1,024 × 768 | 786,432 |
| Total | 7,275,264 |
Sekitar 7,3 juta parameter. Jumlah total parameter ANDREA-120M: ~120 juta. Lapisan embedding saja: 6%. Sisanya 94% berada di blok transformer (attention + MLP, dibahas di aktivitas 5-7).
Embedding Terikat vs Tidak Terikat
Banyak desain transformer (termasuk GPT-2) mengikat token embedding ke proyeksi output akhir: matriks V × d_model yang sama digunakan pada input & output (logits atas kosakata). Pengikatan ini menghemat parameter V × d_model dan sering meningkatkan kualitas.
ANDREA menggunakan embedding yang tidak diikat: embedding input & proyeksi output dilatih sebagai matriks terpisah. Aktivitas 7 (grow_a_language_model_transformer_block) membahas lapisan akhir.
A Forward Pass So Far
Input: ID token [256, 1842, 7301, ...] (1024 buah). Setiap ID mencari vektor 768. Setiap posisi mencari vektor 768. Jumlahkan secara elemen-wise. Hasil: matriks (1024, 768) x yang berisi vektor token-+posisi. x mengalir ke transformer block 1.
Aktivitas 5 (grow_a_language_model_attention) membahas apa yang dilakukan block 1: scaled dot-product attention dengan causal mask & softmax.