Ako fungujú LLM · Prednáška 5 zo 7

Attention a transformer

Toto je srdce celého kurzu. Uvidíš, ako si slová v texte posielajú informácie: každé sa pýta (query), každé sa ponúka (key) a každé niečo odovzdá (value). Celý výpočet si prepočítaš na malých číslach, krok za krokom, a potom si rozoberieš celý transformer z článku Attention Is All You Need.

  • 40 až 45 minút
  • Predpoklad: prednášky 1 až 4
  • 9 interaktívnych ukážok
01

Jedno slovo, veľa významov

Z prednášky 4 vieš, že každý token sa na začiatku zmení na vektor: svoj riadok v embedding matici. V GPT-3 má ten vektor 12 288 čísel a smery v priestore nesú význam.

Je tu ale háčik. Embedding matica je obyčajná tabuľka. Token koruna má v nej jeden riadok, nech stojí v akejkoľvek vete:

Zaplatil 50 korún.

Mena. Peniaze, kurz, banka.

Koruna stromu sa zlomila.

Vrch stromu. Konáre, listy, kmeň.

Kráľovi spadla koruna.

Symbol moci. Zlato, trón, panovník.

Na začiatku dostanú všetky tri „koruny“ presne ten istý vektor. Ak má model predpovedať ďalšie slovo, musí sa ten vektor nejako posunúť smerom k správnemu významu. A ten správny význam sa dá zistiť len z ostatných slov vo vete.

Netýka sa to len viacznačných slov. Slovo Harry znamená niečo iné vo vete o čarodejníkoch a niečo iné vo vete o britskej kráľovskej rodine. Eiffelova veža znamená niečo iné, keď pred ňou stojí „zmenšenina“. A posledné slovo detektívky „Vrahom bol …“ musí v sebe nejako zhrnúť celú knihu, ak má model uhádnuť meno.

Hlavná myšlienka

Informácia musí tiecť medzi tokenmi. Mechanizmus, ktorý to robí, sa volá attention (pozornosť). Každý token si vyberie, na ktoré iné tokeny sa pozrie, a ich informáciu si pripočíta do svojho vektora.

Transformer je sieť postavená okolo tejto myšlienky. Prvýkrát ho opísal článok Attention Is All You Need (Vaswani a kol., Google, 2017). Písmeno T v GPT znamená práve transformer.

02

Attention na prvý pohľad

Predtým, ako začneme počítať, pozri sa, ako výsledok vyzerá. Pri každom slove vety sa dá povedať, na ktoré iné slová sa pozerá a akou váhou. Váhy jedného slova dajú spolu vždy 1, teda 100 %.

Takýchto „pohľadov“ beží v modeli veľa naraz. Každý sa volá head (hlava) a každý hľadá v texte niečo iné. Štyri nižšie som navrhol ručne, aby boli dobre čitateľné. Vo vycvičenom modeli vznikajú samy a bývajú oveľa menej úhľadné.

Vyskúšaj si

Kam sa slová pozerajú

Prejdi myšou alebo ťukni na slovo. Fialové oblúky ukážu, na ktoré skoršie slová sa pozerá. Hore prepínaš medzi štyrmi heads. Ide o ilustračné vzory, nie o váhy skutočného modelu.

Úloha: v head „Prídavné mená“ ťukni na „tvor“, „lese“ a „jaskyňu“. Potom prepni na „Zámeno“ a ťukni na posledné slovo „nej“. Všimni si, že slovo sa vždy pozerá len dozadu, na slová pred sebou. Prečo, to zistíš v kapitole o maske.

Prečo sa podstatné meno pozerá na prídavné mená? Lebo „tvor“ z embedding matice nevie, že je chlpatý a modrý. Po attention by jeho vektor mal ukazovať niekam medzi „tvor“, „chlpatosť“ a „modrosť“. Ako presne sa to vypočíta, to je obsah zvyšku prednášky.

03

Otázka, štítok a obsah: query, key, value

Predstav si archív s priečinkami. Ty máš otázku. Každý priečinok má na chrbte štítok a vnútri obsah. Porovnáš otázku so štítkami, a z priečinkov, ktorých štítok sedí, si zoberieš obsah. Attention robí to isté, len s vektormi:

QQuery (dopyt)

Čo token hľadá. Pre „tvor“ napríklad: „Sú predo mnou prídavné mená?“

KKey (kľúč)

Čo token ponúka, jeho štítok. Pre „chlpatý“: „Som prídavné meno.“

VValue (hodnota)

Čo token odovzdá tomu, kto sa naň pozrie. Pre „chlpatý“: smer „chlpatosť“.

Kde sa tieto tri vektory vezmú? Nie sú nikde uložené. Vypočítajú sa z embeddingu tokenu násobením tromi maticami, presne ako vrstva siete z prednášky 1 (W · a, len bez biasu a bez aktivačnej funkcie):

e 12 288 W_Q · e W_K · e W_V · e q k v 128 čísel128 čísel128 čísel* token
Z jedného embeddingu vzniknú tri kratšie vektory. Čísla platia pre jednu head v GPT-3: matice WQ a WK majú 128 × 12 288 = 1 572 864 váh. *Value je trochu zložitejšia, vrátime sa k nej v kapitole 7.

Ako zistíme, či query „pasuje“ ku key? Zoberieme ich skalárny súčin, ktorý poznáš z prednášky 4: vynásobíme zodpovedajúce si čísla a sčítame. Keď oba vektory ukazujú podobným smerom, výsledok je veľký a kladný. Keď nesúvisia, je blízko nuly.

Matice sa naučia samy

Nikto modelu nepovie „hľadaj prídavné mená“. Matice WQ, WK a WV sú obyčajné váhy, ktoré sa nastavia backpropagation z prednášky 3. Čo sa jednotlivé heads naučia hľadať, to zisťujú výskumníci až potom, a často je to ťažko pomenovateľné.

04

Celý výpočet na malých číslach

Teraz to celé prepočítame. Aby sa to zmestilo na obrazovku, model je malý: 4 tokeny, embedding so 4 číslami a jedna head s dk = 2. GPT-3 robí presne to isté, len s 12 288 číslami na token a 128 číslami v query. Matice som nastavil ručne tak, aby sa podstatné meno pýtalo na prídavné mená.

Attention(Q, K, V) = softmax( Q·KT / √dk ) · V Toto je rovnica (1) z článku Attention Is All You Need. Q, K a V sú tabuľky: jeden riadok na každý token. Celá kalkulačka nižšie je len táto rovnica rozložená na 11 krokov.
Vyskúšaj si

Kalkulačka attention, krok za krokom

Tlačidlom Ďalej prechádzaš výpočtom. Prejdi myšou alebo ťukni na ktorúkoľvek bunku výsledku: rozsvietia sa čísla, z ktorých vznikla (fialová a tyrkysová), a dole sa vypíše presný výpočet. Bunky s bodkovaným okrajom sa dajú meniť.

Úloha: prejdi všetkých 11 krokov s poradím „ten chlpatý modrý tvor“. V kroku 7 nájdi riadok „tvor“: chlpatý aj modrý dostanú po 47 %. Potom zvoľ poradie „ten tvor chlpatý modrý“. Tvor je teraz pred prídavnými menami a maska mu ich zakryje, takže z nich nič nedostane. Nakoniec v kroku 1 zmeň „chlpatosť“ slova chlpatý na 2 a sleduj, ako sa zmení výsledok.

Zhrňme, čo sa stalo. Riadok „tvor“ mal veľkú query q₁ („hľadám prídavné mená“). Prídavné mená mali veľký key k₁ („som prídavné meno“). Ich skalárny súčin bol 4, po delení √2 asi 2,83, a softmax z toho spravil váhy 0,47 a 0,47. Value prídavných mien nesú chlpatosť a modrosť, takže do vektora tvora pribudlo 0,47 chlpatosti a 0,47 modrosti.

Tri veci, ktoré si zapamätaj

1. Skóre počíta každá query s každým key: n tokenov dá tabuľku n × n. 2. Softmax ide po riadkoch, takže váhy jedného tokenu dajú spolu 1. 3. Výsledok sa k pôvodnému vektoru pripočíta. Attention vektor nenahrádza, len ho upraví.

05

Prečo delíme odmocninou z dk

V kalkulačke sme skóre delili √2. V pôvodnom transformeri je dk = 64, takže sa delí 8. V GPT-3 je dk = 128 a delí sa asi 11,3. Prečo vôbec?

Skalárny súčin je súčet dk súčinov. Čím viac čísel sčítaš, tým väčšie výsledky dostávaš. Autori to v článku hovoria presne: ak sú čísla v query aj v key náhodné s priemerom 0 a rozptylom 1, ich skalárny súčin má rozptyl dk. Typická veľkosť skóre teda rastie ako √dk.

A softmax je na veľké čísla citlivý. Rozdiel skóre 1 urobí z váh pomer asi 2,7 : 1. Rozdiel 10 urobí pomer 22 026 : 1, teda prakticky všetko pre jedného víťaza. Takýto softmax je „nasýtený“: malá zmena váh na ňom nič nezmení, gradient je skoro nula a model sa prestane učiť.

Vyskúšaj si

Softmax so škálovaním a bez neho

Jedna náhodná query a 6 náhodných keys, všetky čísla náhodné s priemerom 0 a rozptylom 1. Posuvníkom meníš dĺžku vektorov dk. Vľavo softmax zo surových skóre, vpravo zo skóre vydelených √dk.

Úloha: posuň dk z 2 na 512. Vľavo sa rozpätie skóre zväčšuje a jeden key skoro vždy zhltne takmer celú váhu. Vpravo ostávajú skóre okolo 1 a váhy sa delia rozumne. Skús aj iné náhodné vektory.

Z článku (Vaswani a kol., 2017)

Pri veľkých hodnotách dk skalárne súčiny narastú, čím sa softmax dostane do oblastí s extrémne malými gradientmi. Preto ich škálujeme koeficientom 1/√dk.
Voľný preklad z časti 3.2.1 Scaled Dot-Product Attention.
06

Maska: nepozeraj sa do budúcnosti

V ukážkach si si určite všimol, že slová sa pozerajú len dozadu. Dôvod súvisí s tým, ako sa GPT trénuje.

GPT sa učí hádať ďalší token. Z jedného textu sa dá urobiť veľa úloh naraz: po „Naša“ má prísť „mačka“, po „Naša mačka“ má prísť „spala“, a tak ďalej. Transformer počíta všetky pozície paralelne v jednom prechode, takže z textu so 6 tokenmi dostane naraz 6 tréningových príkladov. Pri 2 048 tokenoch je to 2 048 príkladov z jedného textu.

Lenže ak by sa pozícia „mačka“ mohla pozrieť na „spala“, úloha by bola triviálna: odpoveď by mala priamo pred očami a nič by sa nenaučila. Preto sa pred softmaxom všetky skóre, kde je key za query, prepíšu na −∞. Keďže e−∞ = 0, po softmaxe z nich bude presná nula a zvyšné váhy sa samy prepočítajú, aby dali spolu 1.

Vyskúšaj si

Kauzálna maska

Vľavo sú skóre (vymyslené čísla), vpravo attention váhy po softmaxe. Ťukni na riadok a dole sa vypíše, čo daný token vidí a čo má uhádnuť. Maskou môžeš prepínať.

Úloha: vypni masku a pozri riadok „spala“. Token, ktorý má hádať „na“, dá samotnému slovu „na“ nenulovú váhu, teda podvádza. Zapni masku: horný pravý trojuholník sa zmení na nuly a ostatné váhy v riadku narastú, aby súčet ostal 1.

Kde maska nie je

V encoderi pôvodného transformera (o ňom v kapitole 9) maska nie je. Tam sa spracúva veta, ktorú treba preložiť, a tú model pozná celú. Pozerať sa dopredu je tam v poriadku.

07

Veľa otázok naraz: multi-head attention

Jedna head položí jednu otázku. Text ich ale potrebuje veľa: Kto je podmet tohto slovesa? Na čo odkazuje „to“? Ktoré prídavné mená patria ku mne? Aké slovo bolo tesne predo mnou? Preto transformer spúšťa veľa heads paralelne, každú s vlastnými maticami WQ, WK a WV. Každá navrhne vlastnú zmenu vektora a všetky zmeny sa sčítajú.

Vyskúšaj si

Heads vedľa seba

Štyri heads z druhej kapitoly ako tabuľky: riadok je slovo, ktoré sa pýta, stĺpec je slovo, na ktoré sa pozerá. Svetlejšia bunka je väčšia váha. Ťukni na slovo alebo bunku. Pod tým je počítadlo heads v GPT-3.

Úloha: ťukni na „nej“ a porovnaj, kam sa to isté slovo pozerá v rôznych heads. Potom posuň posuvník na 96 vrstiev a pozri, koľko váh má attention v GPT-3 spolu.

Pôvodný transformer a GPT-3 v číslach

V článku z roku 2017 má každá vrstva h = 8 heads, embedding má dmodel = 512 čísel a každá head pracuje s dk = dv = 512 / 8 = 64 číslami. GPT-3 má 96 heads v každej vrstve, dmodel = 12 288 a 12 288 / 96 = 128 čísel na head.

Value je tu trochu prefíkaná. Keby matica value mapovala 12 288 čísel priamo na 12 288, mala by vyše 150 miliónov váh. Preto sa rozdelí na dve menšie: value-down zmenší vektor na 128 čísel a output (value-up) ho zväčší späť na 12 288. V kalkulačke to boli matice WV a WO.

GPT-3, jedna headRozmerPočet váh
Query WQ128 × 12 2881 572 864
Key WK128 × 12 2881 572 864
Value-down WV128 × 12 2881 572 864
Output (value-up) WO12 288 × 1281 572 864
Jedna head spolu6 291 456
Jedna vrstva: 96 heads× 96603 979 776
Celý model: 96 vrstiev× 9657 982 058 496

Takmer 58 miliárd váh, teda asi tretina zo 175 miliárd parametrov GPT-3. Väčšinu zvyšku tvoria MLP vrstvy, ku ktorým sa dostaneme v prednáške 6.

08

Čo value robí s vektorom

Výsledok attention je zmena, ktorá sa pripočíta k embeddingu. Geometricky to znamená, že sa vektor posunie. Value „chlpatého“ ukazuje smerom chlpatosti, value „modrého“ smerom modrosti. Attention váhy určia, o koľko sa vektor tvora posunie ktorým smerom.

Vyskúšaj si

Posúvanie embeddingu

Zjednodušený priestor embeddingov s 2 rozmermi namiesto 12 288. Biela šípka je pôvodný vektor slova „tvor“. Posuvníkmi nastavuješ attention váhy na „chlpatý“ a „modrý“. Jantárová šípka je výsledok.

Úloha: skús nájsť váhy, pri ktorých jantárový bod presne trafí „chlpatý modrý tvor“. Potom klikni na „Ako v kalkulačke“: váhy 0,47 a 0,47 tam skoro dovedú. Všimni si, že váhy dajú spolu najviac 1, zvyšok pripadne tokenu samotnému.

Toto je podstata attention: presúva informáciu z jedného tokenu do druhého. Po jednej vrstve už vektor slova „tvor“ nesie aj „chlpatý“ a „modrý“. Po ďalšej vrstve sa naň môže pozrieť sloveso a zistiť, že tvor, ktorý niečo našiel, bol chlpatý a modrý. Vrstva po vrstve sa význam každého tokenu spresňuje podľa kontextu.

09

Transformer: attention, MLP a „add & norm“

Attention je jedna súčiastka. Transformer ju skladá s ďalšími do bloku, ktorý sa opakuje stále dookola:

  1. Attention: tokeny si vymenia informácie.
  2. Add & Norm: výsledok sa pripočíta k vstupu a čísla sa znormalizujú.
  3. Feed forward (MLP): každý token sa spracuje sám, obyčajnou sieťou z prednášky 1. Tu sú podľa všetkého uložené fakty (prednáška 6).
  4. Add & Norm znova.

Add je residual connection (reziduálne spojenie): výstup podvrstvy sa pripočíta k jej vstupu, x + Sublayer(x). Vďaka tomu každá vrstva len upravuje vektor a nemusí ho skladať od nuly. Navyše gradient pri backpropagation tečie po tejto „obchádzke“ priamo, takže sa dajú trénovať aj veľmi hlboké siete.

Norm je layer normalization: čísla jedného vektora sa posunú a natiahnu tak, aby mali priemer 0 a rozptyl 1. Potom sa vynásobia naučeným číslom γ (gain) a posunú o β (bias). Bez toho by sa čísla po desiatkach vrstiev ľahko rozbehli do obrovských hodnôt.

Vyskúšaj si

Add & Norm na vektore s 5 číslami

x je vstup podvrstvy, Δ je to, čo podvrstva vypočítala. Sleduj, ako sa sčítajú a znormalizujú. Posuvníkom zväčšuješ Δ, γ a β menia výsledok po normalizácii.

Úloha: zväčši Δ na × 20. Súčet x + Δ narastie na desiatky, ale riadok „normalizované“ ostane v rovnakom rozsahu a má stále priemer 0 a rozptyl 1. Potom zmeň γ a β a pozri, ako sa zmení priemer a rozptyl výstupu.

Celá architektúra z článku

Pôvodný transformer bol stavaný na preklad, napríklad z angličtiny do nemčiny. Preto má dve časti. Encoder (vľavo) prečíta celú vstupnú vetu. Decoder (vpravo) píše preklad token po tokene a pri tom sa pozerá do encodera. GPT si zobral len pravú časť, bez prepojenia na encoder, a postavil z nej 96 vrstiev.

Vyskúšaj si

Rozober si transformer

Prekreslený obrázok 1 z článku Attention Is All You Need. Ťukni na ktorýkoľvek blok, šípku N× alebo nápis a vpravo (na mobile pod obrázkom) sa ukáže, čo do neho ide, čo z neho vyjde a aké veľké je to v pôvodnom modeli a v GPT-3.

Úloha: prepni na „GPT: len decoder“. Encoder a cross-attention zošednú a ostane jeden stĺpec, ktorý sa opakuje 96×. Potom ťukni na Feed Forward a porovnaj jeho rozmery s attention. Pôvodný base model mal spolu 65 miliónov parametrov, GPT-3 ich má 175 miliárd.

Z článku (Vaswani a kol., 2017)

Výstup každej podvrstvy je LayerNorm(x + Sublayer(x)). Aby sa reziduálne spojenia dali sčítať, všetky podvrstvy aj embeddingy majú výstup s rozmerom dmodel = 512.
Voľný preklad z časti 3.1. GPT-2 a GPT-3 dávajú normalizáciu pred podvrstvu: x + Sublayer(LayerNorm(x)).
10

Cross-attention: preklad sa pozerá do originálu

V decoderi pôvodného transformera je ešte jedna attention, ktorú GPT nemá. Volá sa encoder–decoder attention alebo cross-attention. Počíta sa rovnako ako tá v kalkulačke, s jedným rozdielom:

  • Query prichádzajú z decodera, teda z rozpracovaného prekladu.
  • Key a value prichádzajú z encodera, teda z pôvodnej vety.

Každé slovo prekladu sa tak môže spýtať: „Ktoré slovo originálu práve prekladám?“ Maska tu netreba, pôvodnú vetu model pozná celú.

Vyskúšaj si

Zarovnanie pri preklade

Riadky sú slová prekladu, stĺpce slová anglickej vety. Ťukni na riadok a vpravo uvidíš, kam sa dané slovo pozerá. Čísla sú ilustračné, takto podobne vyzerajú skutočné vzory.

Úloha: nájdi slovo, ktoré sa pozerá na koniec anglickej vety, hoci je v preklade prvé („Dnes“ → „today“). Slovosled jazykov sa líši a attention to vyrieši bez akýchkoľvek pravidiel.

11

Prečo attention vyhrala nad RNN

Pred rokom 2017 sa text spracúval hlavne rekurentnými sieťami (RNN, LSTM). Tie čítajú text ako človek: slovo po slove, a všetko, čo si majú zapamätať, nesú v jednom vektore stavu. Má to dve veľké nevýhody:

  • Nedá sa to paralelizovať. Na spracovanie 100. slova musíš mať hotových 99 predošlých. Grafická karta s tisíckami jadier väčšinu času čaká.
  • Dlhá cesta. Informácia z 1. slova musí prejsť cez 99 krokov, kým sa dostane k 100. slovu. Po ceste sa rozmaže.

Attention spojí každý token s každým priamo, v jednom kroku, a všetky pozície sa počítajú naraz. Toto zhrňuje tabuľka 1 z článku:

Typ vrstvyVýpočet na vrstvuKroky za sebouNajdlhšia cesta
Self-attentionO(n² · d)O(1)O(1)
Rekurentná (RNN)O(n · d²)O(n)O(n)
KonvolučnáO(k · n · d²)O(1)O(logk n)

n je počet tokenov, d je dĺžka vektora. Výsledok sa ukázal hneď: base model sa na 8 grafických kartách P100 natrénoval za 12 hodín a väčší model „big“ za 3,5 dňa dosiahol pri preklade z angličtiny do nemčiny skóre 28,4 BLEU, lepšie ako všetky dovtedajšie modely.

Cena: n²

Attention má aj nevýhodu. Tabuľka skóre má n × n políčok. GPT-3 má kontext 2 048 tokenov, takže jedna head v jednej vrstve počíta 2 048² = 4 194 304 skóre. Zdvojnásobíš kontext a práce je štyrikrát viac. Preto majú modely obmedzenú dĺžku kontextu a preto sa veľa výskumu venuje tomu, ako attention zlacniť.

4 194 304Skóre v jednej head

2 048 × 2 048 dvojíc query a key pri plnom kontexte GPT-3.

9 216Heads v GPT-3

96 heads v každej z 96 vrstiev. Každá počíta svoju vlastnú tabuľku.

× 4Dvojnásobný kontext

Dvakrát dlhší text znamená štyrikrát viac skóre v každej head.

12

Over si, čo si pochopil

Šesť otázok. Dve z nich si prepočítaj na papieri.

1. Query je q = (1; 2), key je k = (3; −1). Aké je skóre q · k (bez delenia √dk)?

2. Riadok skóre po maske je (1; 1; −∞). Aké sú attention váhy po softmaxe?

3. Prečo sa skóre delia √dk?

4. Prečo GPT používa masku?

5. GPT-3 má 96 vrstiev a v každej 96 heads. Koľko heads má spolu?

6. Kontext sa zväčší z 2 048 na 4 096 tokenov. Koľkokrát narastie počet skóre v jednej head?

13

Čo si odnášaš

  • Attention posiela informácie medzi tokenmi, aby sa význam každého slova spresnil podľa kontextu.
  • Query, key, value sú tri vektory vypočítané z embeddingu násobením maticami WQ, WK, WV.
  • softmax(QKᵀ / √dk) · V: skóre každej query s každým key, škálovanie, softmax po riadkoch, vážený súčet values.
  • Maska nastaví budúce tokeny na −∞, takže dostanú váhu 0. Vďaka tomu sa GPT učí na všetkých pozíciách naraz.
  • Multi-head: veľa heads kladie rôzne otázky paralelne. GPT-3 má 9 216 heads a v attention asi 58 miliárd váh.
  • Transformer blok = attention + MLP, každé s residual connection a layer normalization. GPT je stĺpec 96 takých blokov.

Attention rieši, ako sa tokeny rozprávajú medzi sebou. Ale kde sa v modeli berú vedomosti, napríklad že Michael Jordan hrá basketbal? Na to slúži druhá polovica každého bloku, MLP vrstvy. V nich je aj väčšina zo 175 miliárd parametrov. To je téma ďalšej prednášky.

Piata prednáška je za tebou

Pokračovať na 6. prednášku

Zdroje