Kde sme: druhá polovica bloku
V 5. prednáške si videl, ako attention presúva informácie medzi tokenmi. Po attention už vektor tokenu „Jordan“ vie, že pred ním stojí „Michael“. Každý blok transformera má však ešte druhú časť. Volá sa MLP (multilayer perceptron, viacvrstvový perceptron). V článkoch ju nájdeš aj pod menom feed-forward sieť.
Rozdiel medzi oboma časťami je jednoduchý. Attention je chvíľa, keď sa tokeny rozprávajú. MLP je chvíľa, keď každý token premýšľa sám. Na každý vektor sa použije presne tá istá malá sieť, ale nezávisle. Vektor „Michael“ pri tom vôbec nevidí, čo sa deje s vektorom „Jordan“.
Prečo také niečo potrebujeme? Doplň vetu „Michael Jordan hrá …“. Slovo „basketbal“ v texte nie je. Model ho musí mať uložené vo svojich váhach. Výskum naznačuje, že veľa takých faktov sedí práve v MLP vrstvách. V tejto prednáške si postavíme malú MLP, ktorá presne takýto fakt drží, a prepočítame ju číslo po čísle.
Starý známy: husté vrstvy z 1. prednášky
Spomeň si na neurón z 1. prednášky. Vynásobí vstupy váhami, sčíta ich, pridá bias a výsledok prepustí cez aktivačnú funkciu. Celá vrstva takých neurónov sa dá zapísať jedným násobením matice: σ(W·a + b). Každý riadok matice W sú váhy jedného neurónu.
MLP v transformeri nie je nič nové. Sú to presne dve také vrstvy za sebou, rovnaké vážené súčty, rovnaké biasy, rovnaká nelinearita. Rozdiel je len v tom, že už nie sú celým modelom. Sedia vo vnútri každého bloku, striedavo s attention.
Vektor jedného tokenu v GPT-3. Toľko čísel má embedding a toľko má aj residual stream.
Štyrikrát viac neurónov. Každý z nich je jeden perceptron so 12 288 váhami a jedným biasom.
Späť na pôvodnú šírku, aby sa výsledok dal pripočítať k vektoru tokenu.
Z článku Attention Is All You Need (2017), časť 3.3
Okrem attention obsahuje každá vrstva aj plne prepojenú feed-forward sieť, ktorá sa použije na každú pozíciu samostatne a rovnako. Skladá sa z dvoch lineárnych transformácií, medzi ktorými je aktivácia ReLU.Voľný preklad. Vzorec v článku: FFN(x) = max(0, xW1 + b1)W2 + b2, s rozmermi dmodel = 512 a dff = 2 048. Vaswani a kol., 2017.
Všimni si pomer: 512 → 2 048 je presne štvornásobok. GPT-3 robí to isté vo veľkom, 12 288 → 49 152. Článok o GPT-3 to hovorí priamo: feed-forward vrstva je vždy štyrikrát širšia ako dmodel. A max(0, …) nie je nič iné ako ReLU.
Prečo v článku xW a nie Wx?
V článku je vektor zapísaný ako riadok a násobí sa maticou sprava. V 1. prednáške sme ho písali ako stĺpec a násobili zľava. Je to tá istá operácia, len matica je preklopená. My zostaneme pri zápise W·x, kde riadok matice patrí jednému neurónu.
Prvý krok: každý riadok sa pýta otázku
Zo 4. prednášky vieš, že smery v priestore embeddingov nesú význam. Predstavme si, že existuje smer, ktorý znamená „krstné meno Michael“, iný smer pre „priezvisko Jordan“ a ďalší pre „basketbal“. Pre jednoduchosť budú tieto smery na seba kolmé a budú mať dĺžku 1.
Vektor tokenu „Jordan“ po attention potom vyzerá zhruba takto: trochu smeru Michael, trochu smeru Jordan a kopa iných vecí. Ako sa ho MLP opýta, či je v ňom Michael? Skalárnym súčinom. Keď je riadok matice rovný smeru Michael, skalárny súčin povie, koľko Michaela vo vektore je: 1, ak tam je, 0, ak nie je. Iné kolmé smery k výsledku neprispejú vôbec.
Je tá vlastnosť vo vektore?
Modrá šípka je vektor tokenu, zložený z troch smerov. Jantárová šípka je jeden riadok matice W↑. Zelený pás je „tieň“ vektora na riadok, teda skalárny súčin. Vpravo vidíš celý výpočet.
Úloha: vyber otázku „Michael + Jordan?“ a prepínaj medzi troma ľuďmi. Iba Michael Jordan dá z > 0. Potom posuň bias na 0 a pozri, kto sa zrazu „počíta“ tiež. Všimni si aj, že posuvník „iné veci“ výsledok nemení: kolmý smer má s otázkou nulový skalárny súčin.
Takých otázok má jedna MLP vrstva v GPT-3 rovných 49 152. Každá je jeden riadok matice W↑ a všetky sa vypočítajú naraz jedným násobením matice vektorom. Presne ako vrstva v sieti na číslice, len oveľa väčšia.
Celý fakt v malej MLP, číslo po čísle
Teraz celý výpočet. Je to hračka: namiesto 12 288 dimenzií má vektor len 8 pomenovaných smerov a namiesto 49 152 neurónov máme 5. Každé číslo vo vektore hovorí, ako silno je v ňom daný smer. Postup je ale presne taký istý ako v GPT-3:
- Vstup. Vektor jedného tokenu, ako ho zanechala attention.
- Otázky (W↑). Každý riadok spraví skalárny súčin so vstupom a pridá bias. Vznikne číslo z pre každý neurón.
- ReLU. Záporné z sa zmenia na nulu. Zostanú len neuróny, ktorých odpoveď je jasné „áno“.
- Odpovede (W↓). Každý aktívny neurón pridá svoj stĺpec matice W↓, vynásobený svojou aktiváciou.
- Sčítanie. Výsledok sa pripočíta k pôvodnému vektoru. Nič sa neprepisuje.
Fakt vnútri MLP krok za krokom
Vyber, čo token znamená, a prechádzaj krokmi. Prejdi myšou alebo ťukni na hocijaké číslo a pod tabuľkou uvidíš, ako vzniklo. Čísla vo W↑, b, W↓ a x sa dajú meniť posuvníkom dole.
Úloha: prejdi kroky 1 až 5 pre „Michael Jordan“ a potom pre „Michael Phelps“. Potom klikni na „Pokaz bias N1“ a pozri, čo sa zrazu pridá k Michaelovi Phelpsovi. Nakoniec skús „Jordan (krajina)“: ktorý neurón sa ozve a prečo práve ten?
Čo si práve videl? Neurón N1 je hradlo AND: ozve sa len vtedy, keď je vo vektore krstné meno Michael a zároveň priezvisko Jordan. Jeho stĺpec v matici W↓ obsahuje smer „basketbal“ a smer „Bulls“. Celý fakt „Michael Jordan → basketbal“ je teda uložený v dvoch kúskoch čísel: v jednom riadku W↑ (kedy) a v jednom stĺpci W↓ (čo pridať).
Ďalšie vrstvy a nakoniec posledný krok modelu, ktorý z vektora vyberá ďalší token (rozoberieme ho v 7. prednáške), potom vo vektore uvidia silný smer „basketbal“ a slovo „basketbal“ dostane vysokú pravdepodobnosť ako ďalší token.
Hlavná myšlienka
Riadky W↑ sú otázky, stĺpce W↓ sú odpovede. Neurón medzi nimi rozhodne, či sa odpoveď pridá. Všetko sú to obyčajné vážené súčty a biasy z 1. prednášky.
Prečo je ReLU také dôležité
Skús si predstaviť MLP bez ReLU. Neurón s riadkom Michael + Jordan a biasom −1 by vrátil priamo z: pre Michaela Jordana 1, pre Michaela Phelpsa 0, pre text bez mien −1. To posledné je problém. Každý token bez týchto mien by dostal záporné množstvo basketbalu. Lineárna funkcia jednoducho nevie povedať „nula, pokiaľ nie sú splnené obe podmienky“.
ReLU to vyrieši tak, že všetko záporné zreže na nulu. Z hodnôt −1, 0, 0, 1 sa stane 0, 0, 0, 1. To je tabuľka funkcie AND. Je to ten istý trik ako pri hradlách v 1. prednáške, len namiesto schodu tu robí prah ReLU.
GPT-2 a GPT-3 používajú namiesto ReLU funkciu GELU. Je to vyhladená verzia ReLU: GELU(z) = z·Φ(z), kde Φ(z) je pravdepodobnosť, že náhodné číslo zo štandardného normálneho rozdelenia je menšie ako z. Pre veľké kladné z je skoro rovnaká ako ReLU, pre veľké záporné dáva skoro 0 a okolo nuly má jemný záporný „zárez“ (najnižšia hodnota je asi −0,17).
ReLU ako hradlo AND, GELU ako jeho hladká sestra
Neurón má riadok Michael + Jordan. Zapínaj mená a posúvaj bias (alebo ťahaj priamo v grafe). Tabuľka pod grafom ukazuje všetky štyri kombinácie naraz.
Úloha: nájdi všetky hodnoty biasu, pri ktorých neurón počíta AND. Prečo funguje −1,9 aj −1, ale −2 už nie? Potom nastav bias na −0,5 a pozri, ako sa z AND stane OR. Pri GELU si všimni, že ani „vypnutý“ neurón nedáva presne nulu.
Prečo GELU a nie ReLU?
ReLU má v nule ostrý zlom a pre všetky záporné vstupy má nulový sklon, takže cez ne pri učení neprejde žiaden gradient. GELU je hladká a malý sklon má aj pre mierne záporné z. V praxi sa s ňou veľké modely učili o niečo lepšie. Pre naše uvažovanie je rozdiel malý: obe funkcie „pustia“ kladné hodnoty a „zatvoria“ záporné.
Kde je väčšina parametrov GPT-3
Spočítajme to rovnako ako v 1. prednáške. Up-projection má jeden riadok pre každý z 49 152 neurónov a každý riadok má 12 288 váh. Down-projection má jeden stĺpec pre každý neurón, tiež po 12 288 číslach.
jeden blok: 1 207 959 552 × 96 blokov = 115 964 116 992 Asi 116 miliárd váh. Biasy (49 152 + 12 288 = 61 440 na blok, spolu 5 898 240) sú pri tom zanedbateľné. Rovnako ako 3Blue1Brown ich do súčtu nezapočítavame.
Počítadlo parametrov MLP
Vyber model alebo nastav vlastnú šírku vektora a počet vrstiev. Skrytá vrstva je vždy štyrikrát širšia, ako v článkoch o Transformeri aj o GPT-3.
Úloha: prepni medzi troma modelmi. Potom ťahaj dmodel a sleduj, že počet váh rastie s druhou mocninou: dvakrát širší vektor znamená štyrikrát viac váh. Pri počte vrstiev je rast iba lineárny.
Dve tretiny modelu
Zo 175 miliárd parametrov GPT-3 patrí MLP vrstvám zhruba 116 miliárd, teda asi 66 %. Attention má asi 58 miliárd. Ak si model niekde pamätá obrovské množstvo faktov o svete, MLP vrstvy na to majú najviac miesta.
Residual stream: jeden vektor, do ktorého všetci píšu
V labe so Michaelom Jordanom sa výsledok MLP pripočítal k vstupu. To nie je detail. Takto funguje celý transformer. Každý token má jeden vektor, ktorý tečie cez všetkých 96 blokov. Každá attention aj každá MLP si ho prečíta a pripíše k nemu malú zmenu:
Bloky teda vektor nenahrádzajú, ale dopĺňajú. Čo do neho zapísal skorší blok, zostane tam a neskoršie bloky to môžu použiť. Fakt sa tak môže skladať postupne: jedna vrstva zistí, o koho ide, ďalšia pridá šport, ďalšia tím.
Residual stream: tri bloky, jeden vektor
Hračka s piatimi smermi a tromi blokmi. Každá MLP tu má jediný neurón typu AND, napríklad ReLU(Michael + Jordan − 1). Prepínačmi vypínaš jednotlivé časti a vidíš, ako ich príspevok zmizne.
Úloha: prehraj tok vektora. Potom vypni attention v bloku 1. MLP v bloku 1 už nevie, že ide o Michaela Jordana, a celá reťaz sa preruší: chýba basketbal, Bulls aj NBA. Zapni ju späť a vypni iba MLP v bloku 2. Čo zostane a prečo?
Superpozícia: viac vlastností ako dimenzií
Doteraz sme si veci zjednodušovali. Každá vlastnosť mala svoj vlastný smer a všetky smery boli na seba presne kolmé. Lenže v 12 288-rozmernom priestore sa presne kolmých smerov zmestí len 12 288. Vecí, ktoré model pozná (mená, miesta, tímy, gramatické javy, štýly), je oveľa, oveľa viac.
Trik je v slove „presne“. Ak povolíš, aby boli smery len takmer kolmé, napríklad v rozmedzí 89° až 91°, počet smerov, ktoré sa zmestia, rastie s počtom dimenzií exponenciálne. Matematicky to súvisí s Johnsonovou–Lindenstraussovou lemou. V dvoch či troch rozmeroch to vôbec necítiš, vo vysokých rozmeroch je to prekvapivo silný efekt.
Koľko takmer kolmých smerov sa zmestí?
Prehliadač vygeneruje náhodné jednotkové vektory v N dimenziách a spočíta uhol medzi každou dvojicou. Histogram ukazuje, ako sú uhly rozložené.
Úloha: začni pri 10 dimenziách. Uhly sú rozhádzané po celom grafe. Potom posúvaj N nahor a sleduj, ako sa histogram sťahuje k 90°. Pri 100 dimenziách nastav 300 vektorov: je ich viac ako dimenzií, a predsa je väčšina dvojíc blízko 90°.
Toto má pre model veľký dôsledok. Vlastnosti môžu byť uložené ako takmer kolmé smery a model ich do priestoru napchá oveľa viac, ako má dimenzií. Hovorí sa tomu superpozícia. Cenou je drobné rušenie: keď je vo vektore „Michael“, skalárny súčin s nesúvisiacou otázkou nie je presne 0, ale malé číslo. A tu opäť pomáha bias s ReLU: malé náhodné prekrytia zostanú pod prahom a neurón sa neozve.
To isté platí aj pre 49 152 neurónov v skrytej vrstve. Vlastnosť nie je jeden neurón, ale smer v priestore neurónov. Preto keď sa výskumníci pozrú na jeden konkrétny neurón, často zistia, že reaguje na úplne nesúvisiace veci naraz. Takým neurónom sa hovorí polysémantické. Aj preto je ťažké modelom „čítať myšlienky“. Jednou z metód, ako vlastnosti z modelu vytiahnuť, sú riedke autoenkodéry (sparse autoencoders). Rozložia aktivácie na oveľa väčší počet smerov, z ktorých je naraz aktívnych len pár.
Poctivá poznámka
Ako presne si veľké modely ukladajú fakty, je stále otvorená výskumná otázka. Odbor, ktorý sa tomu venuje, sa volá mechanistická interpretovateľnosť. Príbeh o Michaelovi Jordanovi je zjednodušená a uveriteľná predstava, nie dokázaný mechanizmus. Experimenty však naozaj ukazujú, že veľa faktov sa dá nájsť a dokonca upraviť práve v MLP vrstvách stredných blokov.
Kto tie riadky a stĺpce napísal?
Nikto. V našich labach sme váhy nastavili ručne, aby sa dali čítať. Skutočný model začína s náhodnými číslami. Potom dostane text a má predpovedať ďalší token. Keď pri vete „Michael Jordan hrá …“ dá slovu „basketbal“ nízku pravdepodobnosť, backpropagation z 3. prednášky vypočíta, ako má každú váhu trochu posunúť, aby to nabudúce bolo lepšie. Posunie aj riadky W↑, aj stĺpce W↓.
GPT-3 takto prešiel približne 300 miliardami tokenov. Fakty, ktoré sa v textoch opakujú často, sa do váh „vyryjú“. Model pritom nikdy nedostal pokyn „ulož si, že Jordan hrá basketbal“. Usporiadanie, ktoré sme si dnes ukázali, je len jedno z riešení, na ktoré môže gradient zostup naraziť.
Over si, čo si pochopil
Šesť krátkych otázok. Nič sa nikam neposiela, je to len pre teba.
1. Riadok W↑ je (1, 1, 0), bias je −1 a vektor tokenu je x = (0,8; 0,9; 0,3). Aká je aktivácia neurónu po ReLU?
z = 1·0,8 + 1·0,9 + 0·0,3 − 1 = 0,7. Je kladné, takže ReLU ho nechá tak: aktivácia je 0,7. Tretia zložka nič nepridá, lebo jej váha je 0.
2. Čím sa MLP vrstva líši od attention?
Informácie medzi tokenmi presúva attention. MLP sa použije na každý vektor samostatne a rovnako („position-wise“), tokeny sa pri nej „nerozprávajú“.
3. Model má dmodel = 1 000 a skrytú vrstvu štyrikrát širšiu. Koľko váh (bez biasov) má jedna jeho MLP vrstva?
Skrytá vrstva má 4 000 neurónov. W↑ má 4 000 × 1 000 = 4 000 000 váh, W↓ má 1 000 × 4 000 = 4 000 000. Spolu 8 000 000.
4. Čo predstavuje jeden stĺpec matice W↓?
Riadky W↑ sú otázky, stĺpce W↓ sú odpovede. Aktívny neurón pridá svoj stĺpec, vynásobený svojou aktiváciou, napríklad smer „basketbal“.
5. Neurón Michael + Jordan má bias −1. Čo sa stane, keď bias zmeníš na 0?
S biasom 0 dá jediné meno z = 1 > 0. Michael Phelps by tak dostal smer „basketbal“. Bias určuje, koľko „dôkazov“ musí neurón vidieť, presne ako v 1. prednáške.
6. Ako sa v 12 288-rozmernom priestore zmestí viac ako 12 288 vlastností?
To je superpozícia. Presne kolmých smerov je len 12 288, ale takmer kolmých (napríklad 89° až 91°) je obrovské množstvo. Platí sa za to drobným rušením a polysémantickými neurónmi.
Čo si odnášaš
- MLP vrstva sú dve husté vrstvy z 1. prednášky: vážené súčty, biasy a nelinearita. V každom bloku nasleduje po attention.
- Každý token zvlášť: MLP sa použije na každý vektor samostatne a s rovnakými váhami. Tokeny sa pri nej nerozprávajú.
- Riadky W↑ sú otázky, stĺpce W↓ sú odpovede. Bias a ReLU (v GPT GELU) z neurónu robia prah, napríklad hradlo AND pre „Michael a zároveň Jordan“.
- Residual stream: výsledok MLP sa k vektoru pripočíta. Bloky vektor dopĺňajú, nenahrádzajú.
- 116 miliárd váh: MLP vrstvy tvoria asi dve tretiny zo 175 miliárd parametrov GPT-3.
- Superpozícia: takmer kolmých smerov je exponenciálne veľa, preto model pozná viac vecí, ako má dimenzií. Jeden neurón však často reaguje na veľa nesúvisiacich vecí.
Teraz už poznáš všetky súčiastky: tokeny a embeddingy, attention, MLP vrstvy a residual stream. V poslednej prednáške ich poskladáme do celého GPT-3, prejdeme ním jednu vetu od prvého tokenu po predpoveď a dopočítame všetkých 175 181 291 520 parametrov.
Šiesta prednáška je za tebou
Zdroje
- 3Blue1Brown: How might LLMs store facts (video, 2024). Príklad s Michaelom Jordanom, počty parametrov a superpozícia.
- A. Vaswani a kol.: Attention Is All You Need, 2017. Časť 3.3 Position-wise Feed-Forward Networks.
- T. Brown a kol.: Language Models are Few-Shot Learners (GPT-3), 2020. Tabuľka 2.1 a dff = 4 · dmodel.
- D. Hendrycks, K. Gimpel: Gaussian Error Linear Units (GELUs), 2016.
- M. Geva a kol.: Transformer Feed-Forward Layers Are Key-Value Memories, 2021.
- K. Meng a kol.: Locating and Editing Factual Associations in GPT, 2022.
- Anthropic: Toy Models of Superposition (2022) a Towards Monosemanticity (2023).