Jak se trénují jazykové modely - napsáno nejen pro děti.

Občas děláme s kolegou Komeniusem akce pro „děcka“. Tentokrát je cílem ukázat, jak se trénují jazykové modely. Ať si to vyzkouší, zjistí, že to na první pohled vypadá snadně, ale ve skutečnosti to tak jednoduché není. Ať se podívají na kvalitu výstupů, porovnají je s ChatGPT a hlavně pochopí, jak to funguje uvnitř, aby získali praktickou zkušenost.

Říkal jsem si, že by to mohlo zajímat i vás. Nebo taky ne. A použití „dětského“ jazyka je fajn pro širší pochopení tématu. :-)) Jasně, tohle není žádné curriculum ani metodická příručka. Spíš jen pár poznámek, které jsme měli připravené pro děcka a nás „vedoucí“.

 🧠 Jak se AI učí psát básně?

🎭✨Představ si, že máme kouzelného robota, který se chce naučit psát krásné básně. Ale chudák robot neví, co to báseň je! Musíme ho to naučit. Jak to uděláme? 🤖📖







1️⃣ Robot se učí číst básně

Nejdřív musíme robotovi dát spoustu básní, aby si je přečetl. 📚

📌 Máme knihu básní a dáme ji do souboru poems.txt.
Ale robot nerozumí písmenkům, potřebuje čísla! 🔢

Takže mu pomůžeme a každé slovo převedeme na číslo:

👉 "Večer nad řekou"
🔽 [102, 43, 876] (tak tomu robot rozumí)

Tento převod se nazývá tokenizace a vytvoří train.bin, kde jsou všechny básně převedené na čísla.


2️⃣ Robot se snaží uhodnout další slovo

Teď, když robot viděl básně, zkusíme ho naučit, jak se píší.

📌 Jak se učí?

  1. Dáme mu začátek básně:
    👉 "Večer nad"

  2. Zeptáme se ho: "Co bude dál?"

  3. Robot odpoví "řekou".

  4. Pokud odpověděl správně, dostane hvězdičku ⭐.

  5. Pokud odpověděl špatně, opravíme ho a příště to zkusí lépe!

💡 Tohle dělá pořád dokola, dokud se nenaučí básně psát sám.


3️⃣ Robot se stále zlepšuje

Na začátku je robot hrozný básník! Jeho první pokusy vypadají takto:

"Večer nad... kachna jablko pískoviště"

🙈 To nedává smysl! Ale neboj, po spoustě pokusů už je lepší:

"Večer nad řekou pluje měsíc zvolna"

📌 Jak poznáme, že se zlepšuje?
Máme speciální číslo zvané "loss", které říká, jak moc se robot mýlí.

  • Začátek: loss = 11.0 (hodně chyb)

  • Po pár kolech: loss = 5.0 (lepší!)

  • Pokračujeme dál: loss = 2.0 (skoro jako opravdový básník!)




4️⃣ Robot si pamatuje, co se naučil

Abychom nemuseli učit robota úplně od začátku pokaždé, jeho znalosti ukládáme do souboru model.pt. 💾

Kdykoliv můžeme říct:
👉 "Robote, načti si, co ses naučil posledně!"

Díky tomu může pokračovat tam, kde přestal.


5️⃣ Hotovo! Generujeme básně 🎭

Teď už je robot chytrý básník a může sám tvořit básně!

📌 Stačí mu říct první slovo a on vymyslí zbytek:

python sample.py --dataset=poems

👉 Zadáme mu: "Slunce září..."
👉 A robot odpoví:

Slunce září na nebi,

Vítr šeptá do trávy,

Listí tančí v zahradě,

Tichý večer přichází.


🎉 Máme AI básníka!


🔄 Shrnutí

✅ 1. Robot si přečte básně a převede je na čísla.
✅ 2. Snaží se uhodnout další slovo a učí se.
✅ 3. Postupně se zlepšuje.
✅ 4. Ukládá si, co se naučil.
✅ 5. Nakonec umí generovat básně!

🤖 Takto se AI učí psát jako básník! Jaké básně už napsal tvůj robot? 🚀





Návod pro rodiče - programátorku/programátora.

NanoGPT: Instalace a trénování




1. Instalace a nastavení nanoGPT


1.1 Vytvoření a aktivace nového prostředí

Nejdříve vytvoř virtuální Python prostředí a aktivuj ho:

python -m venv nanogpt_env source nanogpt_env/bin/activate # Linux/macOS # Windows: nanogpt_env\Scripts\activate

1.2 Instalace závislostí

Nezapomeň aktualizovat pip a nainstalovat potřebné knihovny:

pip install --upgrade pip pip install torch numpy tqdm transformers datasets wandb tiktoken

Pro podporu GPU (CUDA):

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

(Změň cu118 podle verze CUDA na tvém systému.)

1.3 Stažení NanoGPT

Získání repozitáře a přesun do složky:

git clone https://github.com/karpathy/nanoGPT.git cd nanoGPT


2. Trénování modelu

2.1 Příprava datasetu

Pokud chceš použít vlastní dataset, vlož ho do data/ a uprav train.py. Pokud chceš trénovat na Shakespeare datasetu:

python data/shakespeare_char/prepare.py

2.2 Spuštění tréninku

Spustě trénink s výchozím nastavením:

python train.py --batch_size=64 --block_size=256 --learning_rate=3e-4 --num_iters=1000

📌 Klíčové parametry:

  • --batch_size=64 → Velikost dávky
  • --block_size=256 → Velikost kontextu
  • --learning_rate=3e-4 → Rychlost učení
  • --num_iters=1000 → Počet iterací tréninku

Pro GPU akceleraci:

python train.py --device=cuda


3. Generování textu

Po natrénování modelu můžeš generovat text:

python sample.py --num_samples=3 --max_new_tokens=150 --temperature=0.7 --top_k=100

📌 Parametry generování:

  • --num_samples=3 → Počet generovaných ukázek
  • --max_new_tokens=150 → Maximální počet vygenerovaných tokenů
  • --temperature=0.7 → Míra náhodnosti výstupu
  • --top_k=100 → Omezuje výběr slov na nejpravděpodobnější možnosti

Chceš snížit náhodnost a zlepšit konzistenci textu? Použij:

python sample.py --temperature=0.5 --top_k=50


4. Pokračování v tréninku

Pokud chceš model dále trénovat s uloženým checkpointem:

python train.py --resume_from_checkpoint=out


5. Hotovo!

Máš funkční NanoGPT a můžeš ho používat pro další experimenty! 🎉🚀


Přílohy


🎯 Obecné hodnoty loss pro jazykové modely


Loss

Kvalita generovaného textu

>10

Náhodný nesmyslný text, často jen opakující znaky

5-10

Model generuje slova, ale nespojuje je do smysluplných vět

3-5

Základní gramatika, občas se objeví smysluplné fráze

2-3

Dobrý text, většinou smysluplný, ale stále se objevují chyby

<2

Téměř plynulý text, velmi podobný lidskému psaní

~1

Kvalitní generovaný text, téměř nerozeznatelný od originálu



Model nanoGPT:

  • Počet parametrů: 123 milionů (123M)

📌 Srovnání s ostatními modely:

Model

Počet parametrů

Velikost modelu

Poznámka

Tvůj nanoGPT

123M

~250 MB

Malý experimentální model

Gemma 2B

2 miliardy (2B)

~4 GB

Nejmenší Gemma model

Gemma 7B

7 miliard (7B)

~14 GB

Výkonnější Gemma model

LLaMA 2 7B

7 miliard (7B)

~13 GB

Nejmenší veřejná verze LLaMA

LLaMA 2 13B

13 miliard (13B)

~26 GB

Střední velikost

GPT-3.5

~175 miliard (175B)

~350 GB

Používaný ve volné verzi ChatGPT

GPT-4o

Neznámé (odhady 200-400B)

~400+ GB

Nejvýkonnější OpenAI model


==

Model (nanoGPT) má jen 123M parametrů, což je o řády méně než velké modely jako GPT-3.5 (175B) nebo LLaMA 7B.


Obecně platí následující přibližné hodnoty pro trénování jazykového modelu:

Typ modelu

Minimální počet trénovacích dat

Optimální počet trénovacích dat

Malý model (NanoGPT, 125M parametrů)

1–10 MB textu (~100 tis. slov)


50–100 MB textu (~10–20 mil. slov)

Střední model (~1B parametrů)

500 MB textu (~100 mil. slov)

5–10 GB textu (~1–2 miliardy slov)

Velký model (GPT-3, 175B parametrů)

50 GB textu (~10 miliard slov)

1+ TB textu (~200+ miliard slov)






Příklady víkendového domácího trénování:

Stroje: MacBook M1, 16G


Dataset

- hoooodně malý dataset básní. A je to znát. A docela "pesimistické texty". Inu Mácha, Nezvla, Březina...

- 0,46 MB (~100k tokenů), což bylo 16 tis textových řádků básní.


Zastavili jsme trénování po 1029 iteracích:

- iter 1029: loss 0.2379, time 48770.94ms, mfu 0.11%




Ukázka kvality


Iterace: 20

Večer padá tichý stín,\n(O.E.N.P.) úr-tú ní Če-wún,\n(O.E.N.P.) úr-tú pál,\n(O.E.N.P.) úr-tú wún,\n(O.E.N.P.) úr-tú pál,\n(O.E.N.P.) úr-tú tál,\n(O.E.N.P.) úr-tú pál,\n(O.E.N.P.) úr-tú pál


Iterace 1029

Večer padá tichý stín, roušky vyprávě věje, že silnými stín vycházím, Stín se s ním, kterakkoli chvějí, Když život plný běd, to všechno jinak zbavil! Jak má se chladný rostlý, jak z všech, věřte, rakev v kterou spolu neznajíc,


Závěr:

Pokus o trénování NanoGPT vedl k výraznému snížení lossu na 0.2379, což znamená, že model se naučil efektivně replikovat vzory z trénovacích dat. Nicméně generovaný text stále vykazuje syntaktické i sémantické nedostatky, což naznačuje, že dataset byl příliš malý pro kvalitní generalizaci.




A jak to dopadlo u vás?