Skip to Content
🌐 Eesti01 · Ülevaade

01 · Ülevaade: andmed → edasisuund → kadu → valimine 30 sekundiga

🌐 English · Русский · Eesti

Selle lehe lõpuks oled näinud, kuidas 4000 nupuga masin loeb pooleldi kirjutatud nimesid nagu ann… ja paneb panuse igale võimalikule järgmisele tähele — seejärel õpib oma vigadest ja mõtleb lõpuks välja nimesid, mida pole kunagi kellelgi olnud. Kogu ülejäänud õpik lihtsalt suumib sisse kastidesse, millega siin kohtud.

Enne sukeldumist. See õppetund toetub kolmele ideele lehelt 00 · Alusmõisted: mudel on funktsioon keeratavate nuppudega (§1), tähemärkidest saavad arvud nimega tokenid (§2) ja softmax muudab toored skoorid tõenäosusteks (§5). Üks lisand: kaofunktsioon kasutab -log p — kõik, mida pead teadma, on see, et tegu on trahviga, mis on väike, kui mudel andis õigele vastusele suure tõenäosuse, ja hiiglaslik, kui mudel eksis enesekindlalt. Jäid mõne sõna taha kinni? Ava Sõnastik.

Teooria

Keelemudel on neli asja ühe vihmamantli all: tokeniseerija, edasisuund (forward pass), kaofunktsioon (loss) ja valija (sampler). Kõik muu — tähelepanu, MLP-d, pöörlevad vektoresitused, ekspertide segud — on lihtsalt uhkem edasisuund.

Kogu see õppetund mahub ühte lausesse:

Mudel loeb mõned tähemärgid, ennustab jaotuse selle üle, mis peaks tulema järgmiseks, ja õpib, võrreldes oma ennustust tõega.

Kolm vaadet sellele tsüklile — igaüks on režiim, mida saad allolevas liivakastis ise juhtida. Iga klipp näitab sama konveierit: sisendtähemärgid → MUDEL (MODEL) → tõenäosus iga võimaliku järgmise tähemärgi kohta.

Forward — mudel loeb tähemärgid ja ennustab tõenäosuse iga võimaliku järgmise tähemärgi kohta. Parempoolsed tulbad ongi see jaotus: mõned kõige tõenäolisemad, pluss neutraalne tulp other, mis on kõigi eraldi näitamata tähemärkide summaarne tõenäosus (summa, mitte üks kandidaat). Üks spetsiaalne token on vahimärk (sentinel): sisendi kõige alguses tähendab see START, ja kui mudel ennustab seda järgmise tähemärgina, tähendab see STOP — teksti lõpp. Iva: mudel väljastab jaotuse, mitte üheainsa vastuse.

Forward: sisendtähemärgid voolavad kasti MODEL; paremal näitavad sildistatud tulbad iga järgmise tähemärgi tõenäosust, kõrgeim esile tõstetud

Loss — igal positsioonil ennustab mudel järgmise tähemärgi ja me võrdleme seda tegeliku järgmise tähemärgiga. Roheline linnuke tähendab, et mudeli esipakkumine oli õige, punane rist tähendab, et see oli vale — aga kadu ise on negatiivne logaritm tõenäosusest, mille mudel andis tõele, -log p(true), keskmistatuna üle positsioonide. Niisiis sõltub kadu tõe tõenäosusest, mitte ainult sellest, kas esipakkumine läks täppi.

Loss: sisendtähemärgid joondatuna oma tegelike järgmiste tähemärkidega, iga veerg märgitud rohelise linnukese või punase ristiga, lõpus keskmine kadu

Sample — viimasel positsioonil loosi üks tähemärk juhuslikult vastavalt tõenäosustele (mitte alati kõige tõenäolisem), lisa see sisendi lõppu ja korda, et genereerida teksti. Kui loos langeb tulpa other, lisatakse tegelik peidetud tähemärk; kui loositakse vahimärk STOP, genereerimine lõpeb.

Sample: oranž marker loosib tõenäosustulpadest ühe tokeni; tavaline tähemärk lendab sisendrea lõppu, vahimärgi STOP loosimine aga lõpetab genereerimise

Õppetund 02 suumib sisse autogradi, mis teeb „kaost õppimise” võimalikuks. Õppetund 03 suumib sisse enesetähelepanu (self-attention) plokki. See õppetund jääb linnulennuvaate juurde.

Kommenteeritud kood

Edasisuund kasutab kolme abifunktsiooni — linear, softmax, rmsnorm — ja ühte suurt funktsiooni gpt(), mis need kokku ühendab. Abifunktsioonid elavad failis src/microgpt_annotated.py, alajaotises overview-pipeline-helpers:

def linear(x, w): return [sum(wi * xi for wi, xi in zip(wo, x)) for wo in w] def softmax(logits): max_val = max(val.data for val in logits) exps = [(val - max_val).exp() for val in logits] total = sum(exps) return [e / total for e in exps] def rmsnorm(x): ms = sum(xi * xi for xi in x) / len(x) scale = (ms + 1e-5) ** -0.5 return [xi * scale for xi in x]

Treeningsamm (alajaotis overview-training-step) on lihtsalt: edasisuund → kao arvutamine võrdluses tõega → loss.backward()Adam-uuendus (õpisammu lineaarse kahanemisega) igal parameetril — optimeerija on õppetunni 05 · Treenimine ja genereerimine teema. TypeScripti port failides src/inference/{model,value,weights}.ts teostab sama edasisuuna, nii et see liivakast saab seda jooksutada otse sinu brauseris, päris ~89 KB treenitud kaaludel, mis on repos kaasas.

Liivakast

Trüki kuni 10 tähemärki (või vali eelseadistus). Vaheta režiime: Forward näitab järgmise tähemärgi ennustatud tõenäosust; Loss võrdleb iga ennustust tegeliku järgmise tähemärgiga; Sample loosib viimase positsiooni jaotusest ühe tähemärgi ja lisab selle lõppu.

Proovi ise.

  1. Trüki režiimis Forward ann. Mudel on näinud palju nimesid — kas a on tema esipakkumine järgmiseks täheks? Kui suure tõenäosuse annab ta STOP-ile?
  2. Nüüd trüki midagi sügavalt nimevõõrast, näiteks xqz. Vaata, kuidas jaotus lamenedes laiali valgub: mudel ütleb sulle arvudega „mul pole õrna aimugi”.
  3. Lülitu režiimi Loss ja kasuta päris nime. Leia positsioon punase ristiga, kus tõel oli siiski korralik tõenäosus — see ongi vahe „esipakkumine vale” ja „suur kadu” vahel.
  4. Loosi režiimis Sample sama algusjadaga mitu korda uuesti. Sama sisend, erinevad väljundid — see ongi jaotusest valimine, mitte maksimumi võtmine.
Last updated on