Hoppa till innehållet
AI-grafen
E· UniversitetProjekt· ca 180 min· container

Projekt 3: Dissekera en språkmodell

Träna en liten teckenbaserad GPT på en kort text, och sedan öppna den: tokenisering, embeddings, attention-kartor som bild, aktiveringar lager för lager.

Lär ut: bygg-gpt-fran-grunden · Kräver: transformersattentiontokenisering

Teori

En decoder-only-transformer: token-embedding + positionsembedding → N block (kausal self-attention + MLP med residual och layernorm) → logits. Träning = nästa-tecken-prediktion. Efter träning kan varje del inspekteras.

Deluppgifter

  1. tokenisering — `CharTokenizer(text)` med `encode`/`decode` och `vocab_size`.
  2. attention-blocket — `CausalSelfAttention(d, heads)` som returnerar (utdata, attention-vikter) och `Block(d, heads)`.
  3. modell + träning — `TinyGPT(vocab, d, heads, layers, ctx)`; `train(model, data, steps, lr)` → loss-historik.
  4. dissekera — `attention_map(model, tokens)` → matris för första lagret/huvudet; `save_attention_png(mat, tokenizer, tokens)` skriver out/attention.png.

Evals: loss-efter-traning (loss <= 2.2)

Logga in för att köra laborationen.

Förväntade resultat

Loss från ≈ 3,5 till ≤ 2,2 på 600 steg (CPU, ~1 min); attention.png visar tydlig diagonal/lokal struktur; genererad text har ordliknande sekvenser.

Vanliga fel

  • Kausal mask saknas → modellen fuskar och lossen blir orimligt låg.
  • Positionsembedding glömd → modellen kan inte skilja ordning.
  • Loss på fel form: logits ska vara (B·T, V).