Tokenizasyon BPE
Sık görülen harf çiftleri birleşir; Türkçe ekler kendi token'larına ayrılır.
birleşme 0 / 26 · token sayısı 36
Türkçe makine öğrenmesi platformu
Makine öğrenmesini, LLM'leri, ajan sistemlerini ve GPU programlamayı Python'da kodlayarak ve pratik yaparak öğren. Hepsi Türkçe.
Hesabınla kodunu çalıştırır, çözümleri görür, ilerlemeni her cihazda sürdürürsün.
Kayıp eğrisi · loss curve
adım 0 / 12 · w = 4,000 · kayıp = 16,000
Öğrenme yolları
Her yol kısa derslerden ve kodlama problemlerinden oluşur. İlk yol açık; diğerleri sırayla geliyor.
gradyan inişi (gradient descent) · kayıp fonksiyonları · sinir ağları · geri yayılım (backprop) · normalizasyon
tokenizasyon (BPE) · embedding · dikkat (attention) · transformer · RoPE · LoRA · RLHF, DPO · MoE · RAG
Yolları birleştiren proje: tokenizer'dan eğitime, KV cache'ten Triton çekirdeğine kendi küçük GPT'ni eğit.
LLM'in iç yüzü
Metin önce parçalara (tokens) bölünür. Model her adımda bir sonraki parçayı tahmin eder ve önceki hesapları önbellekte (KV cache) tutar.
Sık görülen harf çiftleri birleşir; Türkçe ekler kendi token'larına ayrılır.
birleşme 0 / 26 · token sayısı 36
Tensorhane'de makine öğrenmesini▍
adım 0 / 3
adım 0 / 6
Transformer'ın kalbi
Dikkat mekanizması (attention), bir kelimeyi anlamlandırırken cümlenin hangi kısımlarına bakılacağını hesaplar. Kodu çalıştır: önce skorlar (scores) bulunur, softmax onları ağırlıklara (weights) çevirir, oklar ağırlık kadar kalınlaşır. Sonra istediğin kelimeye tıkla.
Anlam ilişkilerine bakar: zamir «o», cümlede kimi kastettiğini bulur.
import numpy as npdef softmax(x): e = np.exp(x - x.max(axis=-1, keepdims=True)) return e / e.sum(axis=-1, keepdims=True)def attention(Q, K, V): d_k = Q.shape[-1] scores = Q @ K.T / np.sqrt(d_k) weights = softmax(scores) return weights @ V
Makale okuma
Bilimsel makale (research paper) okumak da kodlayarak öğrenilir. Transformer'ı tanıtan Attention Is All You Need makalesinin mimari şeklini yeniden çizdik: her blok bir kod satırı, her formül bir test. Çalıştır: İngilizce bir cümle kodlayıcıdan (encoder) geçer, kod çözücü (decoder) Türkçesini token token yazar.
Makale §3 Model mimarisi
Solda kodlayıcı (encoder) kaynak cümleyi okur, sağda kod çözücü (decoder) çeviriyi token token yazar.
kaynak: the cat sleeps
def encoder_layer(x): x = layer_norm(x + self_attention(x)) return layer_norm(x + feed_forward(x))def decoder_layer(y, memory): y = layer_norm(y + masked_self_attention(y)) y = layer_norm(y + cross_attention(y, memory)) return layer_norm(y + feed_forward(y))def translate(src, N=6): x = embed(src) + positional_encoding(src) for _ in range(N): x = encoder_layer(x) out = ["<s>"] while out[-1] != "</s>": y = embed(out) + positional_encoding(out) for _ in range(N): y = decoder_layer(y, x) probs = softmax(linear(y[-1])) out.append(vocab[argmax(probs)]) return out[1:]
Ajan sistemleri
Ajan (agent), bir döngü içinde araç çağıran bir dil modelidir: düşünür, bir araç çağırır, sonucu gözler ve yeterli bilgi olunca yanıtlar. Bu kalıbın adı ReAct (reason + act). Kodu çalıştır: model iki aracı gerçekten çağırarak soruyu yanıtlar.
search(query="GPT-2 small parametre sayısı")GPT-2 small: 124M parametre, 12 katman, d_model = 768, 12 dikkat başı.calculate(expr="124e6 * 2 / 1e9")0.248araçlar: search, calculate · en fazla 5 adım
TOOLS = {"search": search, "calculate": calculate}def run_agent(task, max_steps=5): messages = [{"role": "user", "content": task}] for step in range(max_steps): reply = llm(messages, tools=TOOLS) messages.append(reply) if not reply.tool_calls: return reply.content for call in reply.tool_calls: result = TOOLS[call.name](**call.args) messages.append({"role": "tool", "content": result}) raise RuntimeError("adım sınırı aşıldı")
validate(call.args)her çağrı şemaya uyuyorstep < max_stepsdöngü kendiliğinden bittianswer == f(observations)yanıt araç sonuçlarından hesaplandıGPU programlama
Matris çarpımı (matrix multiplication), derin öğrenmedeki hesabın büyük kısmıdır. GPU, çıktıyı karolara (tiles) böler; her karoyu bir blok (thread block) hesaplar ve bloklar akış çoklu işlemcilerinde (streaming multiprocessor, SM) aynı anda çalışır. Kod Triton'da, yani Python'da.
dalga 0/2 · k 0/2 · karo 0/4
import tritonimport triton.language as tl# Her blok, C'nin bir karosunu hesaplar (kare matrisler).@triton.jitdef matmul_kernel(A, B, C, K, BLOCK: tl.constexpr): i, j = tl.program_id(0), tl.program_id(1) rows = i * BLOCK + tl.arange(0, BLOCK) cols = j * BLOCK + tl.arange(0, BLOCK) acc = tl.zeros((BLOCK, BLOCK), dtype=tl.float32) for k in range(0, K, BLOCK): ks = k + tl.arange(0, BLOCK) a = tl.load(A + rows[:, None] * K + ks[None, :]) b = tl.load(B + ks[:, None] * K + cols[None, :]) acc += tl.dot(a, b) tl.store(C + rows[:, None] * K + cols[None, :], acc)grid = (K // BLOCK, K // BLOCK) # 2 x 2 blokmatmul_kernel[grid](A, B, C, K=64, BLOCK=32)
İlk yol ML Temelleri: kısa dersler, kodlama problemleri ve bir bitirme projesi.