Belajar AI #16: Transformer & LLM — Attention Mechanism dan GPT

Ini episode yang paling lama saya tunda, karena Transformer terasa seperti gunung. Padahal begitu naik, pemandangannya sederhana: satu ide besar bernama attention, plus keberanian membuang semua mekanisme lama. Hampir semua LLM (Large Language Model) yang Anda pakai hari ini — GPT, Claude, Gemini — adalah turunan arsitektur ini dari paper “Attention Is All You Need”. Episode ini catatan cara saya akhirnya paham attention tanpa tenggelam di rumus.

Masalah yang Dipecahkan Attention

Sebelum Transformer, model bahasa dominan memproses teks berurutan (RNN/LSTM): token demi token, kiri ke kanan, seperti membaca lewat celah kertas. Dua masalah fatal: pertama, tidak bisa diparalelkan — token ke-100 harus menunggu token ke-99 selesai, padahal GPU jago paralel. Kedua, memori jangka panjang buruk: informasi dari awal kalimat panjang tergerus sepanjang perjalanan.

Attention membalik pendekatannya: setiap token boleh “melihat” langsung semua token lain dan menimbang mana yang relevan. Analogi programmer: alih-alih iterasi serial dengan variabel state yang terus dioverwrite, attention adalah lookup dengan bobot relevansi — seperti join antar tabel di mana setiap baris menarik informasi dari baris-baris lain sesuai skor kecocokan.

Query, Key, Value

Inti attention adalah trio Query-Key-Value. Setiap token diproyeksikan jadi tiga vektor:

  • Query: “apa yang sedang saya cari?” — seperti parameter pencarian.
  • Key: “apa label/iklan saya?” — seperti index yang dicocokkan.
  • Value: “isi informasi yang saya tawarkan.”

Skor relevansi = dot product Query satu token dengan Key semua token. Skor dinormalisasi softmax jadi bobot, lalu Value semua token dijumlahkan tertimbang oleh bobot itu. Hasilnya: representasi baru tiap token yang sudah “menyerap” konteks relevan. Contoh favorit: pada kalimat “kucing mengejar bola karena ia lelah”, attention membantu model menghubungkan “ia” dengan “kucing”, bukan “bola”.

import torch
import torch.nn.functional as F

d = 8                       # dimensi embedding
Q = torch.randn(4, d)       # 4 token x d
K = torch.randn(4, d)
V = torch.randn(4, d)

scores = Q @ K.T / d**0.5   # (4, 4): skor tiap token thd semua token
weights = F.softmax(scores, dim=-1)
out = weights @ V           # (4, d): representasi kontekstual

print(weights.shape)        # (4, 4)
print(out.shape)            # (4, 8)

Itu self-attention utuh dalam enam baris. Pembagian dengan √d menjaga skala skor agar softmax tidak terlalu tajam. Multi-head attention hanyalah menjalankan mekanisme ini beberapa kali paralel dengan proyeksi berbeda, lalu menggabungkan hasilnya — tiap head belajar jenis relasi yang berbeda.

GPT: Decoder-Only dan Next-Token Prediction

Paper aslinya punya encoder dan decoder untuk terjemahan. GPT mengambil separuh decoder saja, lalu melatihnya dengan tujuan yang sangat sederhana: prediksi token berikutnya. Beri triliunan kata dari internet, model belajar pola bahasa, fakta, bahkan gaya penalaran — semuanya dari satu objective itu. Trik pentingnya bernama causal masking: token dilarang melihat masa depan, supaya prediksi token berikutnya tetap jujur saat training.

KomponenPeran
Token embeddingToken jadi vektor (episode 15)
Positional encodingInfo urutan, karena attention buta posisi
Multi-head self-attentionToken saling menukar informasi konteks
Feed-forward layerOlahan per-token, tempat mayoritas parameter
Output softmaxDistribusi probabilitas token berikutnya

Jujur soal batas pemahaman saya: detail presisi di dalam LLM modern — teknik scaling, RLHF, sampling strategy — masih wilayah yang saya pelajari bertahap. Tapi mental model di atas cukup kokoh untuk membaca artikel teknis dan tidak lagi merasa tertipu oleh jargon. Attention bukan sihir; ia perkalian matriks yang dirancang cerdas.

Multi-Head Attention: Kenapa Harus Banyak Head?

Saya sempat bertanya: mengapa tidak cukup satu head attention saja? Ternyata satu head hanya bisa belajar satu jenis pola relasi pada satu waktu. Dengan multi-head, misalnya 8 head, head pertama bisa fokus pada relasi gramatikal (subjek-verb), head kedua pada referensi pronoun, head ketiga pada sinonim, dan seterusnya. Secara visual, bayangkan 8 kamera yang masing-masing mengambil sudut pandang berbeda dari adegan yang sama. Setiap kamera menghasilkan foto berbeda, dan ketika digabungkan, gambaran yang didapat jauh lebih kaya daripada satu kamera saja. Dalam implementasi, setiap head punya proyeksi Q, K, V masing-masing yang lebih kecil, sehingga total komputasi tetap efisien. Hasil semua head di-concatenate lalu diproyeksikan sekali lagi menjadi output akhir.

Positional Encoding: Menambahkan Informasi Urutan

Attention sendiri buta terhadap posisi — “Aku mencintai Budi” dan “Budi mencintai aku” menghasilkan skor attention yang identik tanpa posisi. Transformer asli menggunakan sinusoidal positional encoding: fungsi sinus dan cosinus dengan frekuensi berbeda untuk setiap dimensi vektor. Setiap posisi menghasilkan pola unik yang unambigu, bahkan untuk posisi yang belum pernah dilihat saat training. Versi modern seperti GPT menggunakan learned positional embeddings — parameter yang di-training langsung bersama model. Kedua pendekatan punya trade-off: sinusoidal lebih ringan dan bisa extrapolate, learned lebih fleksibel tapi terikat panjang konteks tertentu.

Varian Arsitektur: Encoder-only, Decoder-only, Encoder-Decoder

Tidak semua Transformer sama. Berikut perbandingan tiga varian utama yang membantu saya memahami mengapa arsitektur tertentu dipilih untuk tugas tertentu:

VarianContohKarakteristikCocok Untuk
Encoder-onlyBERT, RoBERTaBidirectional: lihat semua token sekaligusKlasifikasi teks, NER, Q&A
Decoder-onlyGPT series, LLaMACausal: hanya lihat token sebelumnyaText generation, autoregressive
Encoder-DecoderT5, BART, mBARTEncoder memahami input, decoder menghasilkan outputTerjemahan, summarization

GPT memilih decoder-only karena ambisi utamanya adalah generasi teks — model harus bisa melanjutkan kalimat token per token tanpa melihat “jawaban” di depan. BERT memilih encoder-only karena tugas klasifikasi membutuhkan pemahaman konteks penuh dari seluruh input secara simultan.

Evolusi GPT: Dari 117 Juta hingga Triliunan Parameter

ModelTahunParameterCapaian Utama
GPT-12018117MMembuktikan transfer learning efektif di NLP
GPT-220191.5BTeks koheren panjang, sempat ditahan OpenAI karena risiko
GPT-32020175BFew-shot learning tanpa fine-tuning
GPT-42023Rahasia (~1.8T?)Multimodal, lulus ujian profesional

Pola yang mengejutkan: setiap kenaikan parameter menghasilkan kemampuan yang bukan sekali lipat lebih baik, tapi muncul secara emergent — seperti kemampuan reasoning, analogi, dan pemahaman nuansa yang tidak ada di model lebih kecil. Ini bukan sekadar lebih besar = lebih bagus; ada kualitas kualitatif baru yang muncul.

Sampling: Temperature, Top-k, Top-p

Setelah model menghasilkan distribusi probabilitas untuk token berikutnya, ada keputusan penting: token mana yang benar-benar dipilih? Three knob utama yang saya pelajari:

  • Temperature: mengontrol “keberanian” model. Temperature rendah (0.1-0.3) = model konservatif, hampir selalu pilih token probabilitas tertinggi. Temperature tinggi (0.8-1.2) = model eksploratif, kadang pilih token jarang. Analogi: temperature adalah termostat kreativitas.
  • Top-k: hanya pertimbangkan k token dengan probabilitas tertinggi. Top-k=50 berarti model hanya memilih dari 50 kandidat teratas, membuang “kemungkinan aneh” di tail.
  • Top-p (nucleus sampling): ambil set token terkecil yang kumulatif probabilitasnya mencapai p. Top-p=0.9 berarti model mempertimbangkan cukup banyak token hingga mencakup 90% probabilitas, lalu buang sisanya. Lebih adaptif daripada top-k karena jumlah kandidat dinamis.

Context Window: Keterbatasan dan Solusi

Transformer memiliki keterbatasan fundamental: attention berkompleksitas O(n²) terhadap panjang sequence. Artinya, menggandakan panjang teks memperempat kecepatan dan memperempat memori. GPT-3 awalnya hanya 2048 token, GPT-4 naik ke 8.192 atau 32.768. Tapi ada batas fisika komputasi yang tak bisa dilawan selamanya.

Beberapa solusi yang berkembang: sliding window attention (hanya perhatikan N token terdekat), sparse attention (dengan pola tetap seperti Longformer), dan RoPE/ALiBi (posisi encoding yang efisien untuk sequence panjang). Pendekatan paling pragmatis saat ini: chunking — potong dokumen panjang jadi beberapa bagian, proses per bagian, lalu rangkum. Bukan elegan, tapi berfungsi.

Scaling Laws: Mengapa Model Besar Lebih Bagus

Research yang paling mengubah cara saya memandang AI adalah Chinchilla paper (Hoffmann et al., 2022). Temuan utamanya: loss model berkurang secara power-law terhadap jumlah parameter DAN jumlah data. Tapi rasio ideal antara keduanya terbalik dengan asumsi industri saat itu. Banyak model (termasuk Gopher, PaLM) over-parameterized — terlalu banyak parameter, terlalu sedikit data. Chinchilla membuktikan model 70B yang dilatih lebih banyak data bisa mengalahkan model 280B yang dilatih lebih sedikit. Implikasinya: scaling bukan sekadar bikin model lebih besar, tapi menyeimbangkan besar model dengan kualitas data. Ini mengubah cara saya berpikir tentang training — bukan tentang “siapa paling besar”, tapi “siapa paling efisien”.

Mencoba Langsung: Hugging Face Transformers

Teori tanpa praktik terasa kosong. Berikut cara saya bereksperimen langsung dengan model GPT menggunakan library Hugging Face:

from transformers import AutoModelForCausalLM, AutoTokenizer

# Load model GPT-2 (124M parameter, cukup kecil untuk laptop)
model_name = "gpt2"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

# Tokenisasi input
prompt = "Transformer adalah arsitektur yang"
inputs = tokenizer(prompt, return_tensors="pt")

# Generate dengan temperature 0.7, top-p 0.9
output = model.generate(
    **inputs,
    max_new_tokens=50,
    temperature=0.7,
    top_p=0.9,
    do_sample=True
)

print(tokenizer.decode(output[0], skip_special_tokens=True))

Menjalankan kode ini untuk pertama kali, saya merasa seperti membuka toolbox rahasia. 124 juta parameter — jauh lebih kecil dari GPT-4, tapi sudah cukup untuk menghasilkan teks yang koheren. Dari sini terasa betapa kerasnya kekuatan attention yang ter-skala ke tingkat triliunan parameter.

Catatan Pribadi: Yang Paling Mengejutkan

Yang paling mengejutkan dari Transformer bukan kompleksitasnya — tapi betapa sederhana idenya. Self-attention hanyalah perkalian matriks + softmax. Feed-forward layer hanyalah dua linear layer dengan aktivasi. Tidak ada komponen “ajaib” yang tidak bisa dijelaskan dalam satu halaman. Kekuatan Transformer datang dari skala: ribuan layer ini, miliaran kali eksekusi ini, pada triliunan token ini — dan dari munculnya kemampuan yang tidak pernah secara eksplisit diajarkan. Ini mengajarkan saya satu hal: dalam machine learning, arsitektur yang sederhana pun bisa menghasilkan sesuatu yang luar biasa asalkan datanya cukup dan skalanya tepat.

Sumber

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses