Nedávno sme písali o tom, ako vznikla umelá inteligencia ChatGPT. V skratke, upravovali sa jej vnútorné parametre s cieľom, aby čo najlepšie vedela predpovedať, akým slovom majú pokračovať texty, ktoré autori stiahli z internetu. Teraz sa pozrieme na to, čo sú tie vnútorné parametre vlastne zač.
ChatGPT je neurónová sieť. Nejde o skutočné neuróny, ale o ich extrémne zjednodušený matematický popis. Každý takýto „matematický neurón“ funguje takto:
- Má niekoľko vstupov a jeden výstup, pričom každý vstup má svoju „váhu“, teda dopredu dané číslo.
- Na každom vstupe pošlete do neurónu jedno číslo.
- Neurón každý vstup prenásobí jeho váhou a všetky ich sčíta dokopy.
- Ak je tento súčet záporný, neurón dá na výstupe nulu. Ak je súčet kladný, neurón ho pošle na svoj výstup. (Tento posledný krok sa volá nelineárna aktivačná funkcia a je kupodivu absolútne kľúčový.)
Celá sieť pozostáva z množstva neurónov, ktoré sú do seba navzájom pozapájané. Väčšinou bývajú usporiadané do vrstiev, a výstupy neurónov z jednej vrstvy sú vstupom ďalšej vrstvy.
A to je všetko: každý neurón je len pár jednoduchých matematických operácií. Iste ste už uhádli, že tie vnútorné parametre, ktoré sa pri trénovaní sietí menia, sú práve váhy vstupov. Ale ako môže viesť niečo také jednoduché k programu, ktorý vie napísať rozprávku alebo odpovedať na otázky?
Jednoduchosť je opäť klamlivá. Aj malé množstvo jednoduchých operácií zvládne zložité veci: napríklad dva neuróny stačia na udržiavanie rovnováhy na bicykli [1]. V neurónovej sieti pritom môžu byť miliardy neurónov. Napríklad ChatGPT má 175 miliárd váh, každý neurón má desiatky až stovky vstupov a sú zoradené v 96 vrstvách. Ako informácia prechádza z neurónu do neurónu v tejto hustej spleti, každý ju trochu poupraví, a dokopy ich koordinovaný tanec vytvára všetko to komplexné správanie, ktoré pozorujeme.
Na veľkosti pri neurónových sieťach skrátka záleží. Čím sú väčšie, tým komplikovanejšie veci ich vieme naučiť.
Jednotlivé váhy neurónov väčšinou nemajú nejakú ľudsky zrozumiteľnú interpretáciu – pravdepodobne neexistuje jedna konkrétna váha pre „vtipnosť“, „pravdovravnosť“ alebo výber jazyka. Tieto vlastnosti, ak ich vôbec sieť rozoznáva, bývajú rozprestrené cez množstvo neurónov a reprezentované nejakým konkrétnym vzorom všetkých ich váh. Píšem pravdepodobne, pretože občas neurónové siete prekvapia a objaví sa v nich jeden neurón zodpovedný za rozoznávanie konceptu Spidermana [2].
Všimnite si, že takáto sieť má vždy vstup, podľa svojich váh ho spracuje a vráti nejaký výstup. Nemá sama o sebe ani pamäť, ani schopnosť učiť sa. To sú externé vlastnosti, ktoré sieti dodávajú programy okolo nej. Sieť sa učí len vtedy, keď externý program upravuje jej váhy tak, aby výsledky siete viac zodpovedali očakávaniam [3]. Presnejšie je teda asi hovoriť, že sieť učíme, než že sa učí.
Neurónové siete pritom nie sú nový vynález, vymysleli ich už v roku 1943. Ako to, že o nich počujeme až v posledných rokoch? Ich potenciál dlho blokoval slabý hardvér – prvá neurónová sieť nastavovala váhy neurónov elektromotormi. Ďalším problémom bol nedostatok trénovacích dát. No a tretí problém bol, že prechod k súčasným hlbokým neurónvým sieťam skrátka nebol priamočiary, a vyžadoval si ešte množstvo teoretických aj praktických inovácií. Nabudúce sa na jednu takú inováciu, ktorá pred pár rokmi odštartoval súčasnú revolúciu veľkých jazykových modelov, pozrieme.
[Ján]PS: Prečo je aktivačná funkcia kľúčová? Nie je dôležité, aby bola práve taká, ako som popísal, ale nejaká funkcia tam byť musí (aj keď táto je najjednoduchšia a aj často používaná, volá sa Rectified Linear Unit, skrátene ReLU). Keby neboli dve vrstvy neurónov oddelené od seba nelineárnou funkciou, dokázali by presne len to isté, čo jedna vrstva samotná, teda skoro nič. Matematicky je to ľahko vidno: ak by každá vrstva iba násobila vstupy váhami a sčitovala ich, tak aj po ľubovoľnom množstve vrstiev zas skončíme len so vstupmi prenásobenými nejakou kombináciou váh a sčítanými dokopy.
[1] https://www.paradise.caltech.edu/~cook/papers/TwoNeurons.pdf[2] https://openai.com/research/multimodal-neurons
[3] Veľké jazykové modely sa síce dokážu zdanlivo učiť aj za behu, bežne sa to označuje “few shot learning”, ale to je len krátkodobé a sieť všetkú informáciu po vygenerovaní výstupu zabudne.