Türkçe makine öğrenmesi platformu

Makine öğrenmesini yazarak öğren

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.

gradient_descent

Kayıp eğrisi · loss curve

-4-20245101520wL(w)minimumbaşlangıç

adım 0 / 12 · w = 4,000 · kayıp = 16,000

Öğrenme yolları

Yolunu seç, kodlayarak ilerle

Her yol kısa derslerden ve kodlama problemlerinden oluşur. İlk yol açık; diğerleri sırayla geliyor.

Tüm yollar →

LLM'in iç yüzü

Bir dil modeli bir cümleyi nasıl işler?

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.

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

Token token üretim NEXT TOKEN

P(xt∣x<t)=softmax(zt)P(x_t \mid x_{<t}) = \mathrm{softmax}(z_t)

Tensorhane'de makine öğrenmesini▍

adım 0 / 3

Önbellek KV CACHE

K1:t=[ K1:t−1; kt ]K_{1:t} = [\,K_{1:t-1} ;\ k_t\,]

adım 0 / 6

Transformer'ın kalbi

Dikkati gör

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.

attention.py
Attention(Q,K,V)=softmax ⁣(QK⊤dk)V\mathrm{Attention}(Q,K,V) = \mathrm{softmax}\!\left(\frac{QK^{\top}}{\sqrt{d_k}}\right)V

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
  • ∑jAij=1\textstyle\sum_j A_{ij} = 1her satırda
  • 0≤Aij≤10 \le A_{ij} \le 1ağırlıklar olasılık

Makale okuma

Transformer'ı makalesinden öğren

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.

transformer.py
Makalenin mimari şekli · ENCODER–DECODER
N××Nmemory (K, V)thecatsleepsInput EmbeddingMulti-Head AttentionAdd & NormFeed ForwardAdd & NormOutput EmbeddingMaskedMulti-Head AttentionAdd & NormMulti-Head AttentionAdd & NormFeed ForwardAdd & NormLinearSoftmaxkodlayıcı (encoder)kod çözücü (decoder)

Makale §3 Model mimarisi

Attention(Q,K,V)=softmax ⁣(QK⊤dk)V\mathrm{Attention}(Q,K,V) = \mathrm{softmax}\!\left(\tfrac{QK^{\top}}{\sqrt{d_k}}\right)V

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:]
  • (n, dmodel)(n,\, d_{\text{model}})katman boyutu korur
  • Aij=0,  j>iA_{ij} = 0,\; j \gt igelecek görünmez
  • μ=0, σ=1\mu = 0,\ \sigma = 1LayerNorm çıktısı

Ajan sistemleri

Bir ajan araçları nasıl kullanır?

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.

agent.py
ReAct döngüsü · TOOL CALLING
döngüyanıtdüşüneylemgözlem

araç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 uyuyor
  • step < max_stepsdöngü kendiliğinden bitti
  • answer == f(observations)yanıt araç sonuçlarından hesaplandı

GPU programlama

Matris çarpımı GPU'da nasıl paralelleşir?

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.

matmul.py
Çarpımların küpü · TILED MATMULCij=∑kAik BkjC_{ij} = \sum_{k} A_{ik}\,B_{kj}
A (i,k)B (k,j)C (i,j)ijk

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)
  • C≈A BC \approx A\,Bsonuç doğru
  • (M/B)2(M/B)^2karonun her biri bir kez hesaplandı

Yazarak öğrenmeye başla

İlk yol ML Temelleri: kısa dersler, kodlama problemleri ve bir bitirme projesi.