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čí?
Dáme mu začátek básně:
👉 "Večer nad"Zeptáme se ho: "Co bude dál?"
Robot odpoví "řekou".
Pokud odpověděl správně, dostane hvězdičku ⭐.
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
Model nanoGPT:
Počet parametrů: 123 milionů (123M)
📌 Srovnání s ostatními modely:
==
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:
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.