Neurónové siete

Čo sú neurónové siete? Zjednodušene môžeme povedať, že úlohou teórie neurónových sietí je vysvetlenie správania sa, na základe spracovaných informácií v nervových bunkách alebo ich imitáciách. Na úvod uvedieme niekoľko dôležitých informácií. Nervový systém ma za úlohu riadiť organizmus a s tým spojenú schopnosť spracovávať informácie. Obsahuje niekoľko sto miliárd nervových buniek, teda môžeme povedať, že je to oblasť, ktorá poskytuje takmer neobmedzené množstvo údajov pre dlhodobé skúmanie, pozorovanie a analýzy. Len samotný mozog obsahuje viac ako sto miliárd buniek. Skladá sa z dvoch hemisfér, kde funkcie jednotlivých hemisfér sa odlišujú, nie veľmi, ale predsa. Experimentmi na pacientoch to zistili vedci Sperry a Gazzaniga. Bolo zistené, že v jednej hemisfére, označovanej ako dominantná, sú lokalizované funkcie, ktoré súvisia s rečou a vedomím. Druhá hemisféra sa zameriava na vnímanie melódií, manipuláciu s objektmi a holistické spracovanie reality, to znamená, že berie na zreteľ všetky vlastnosti a okolnosti daného prostredia. Samotný mozog v priemere váži okolo jeden a pol kilogramu, a zhruba sedemdesiat percent jeho objemu tvorí voda. Len pre zaujímavosť, v mozgu prebieha každú milisekundu viac ako tisíc výpočtov, za päťdesiat milisekúnd vraj dokážeme spracovať obraz a za štyridsať milisekúnd rozpoznáme tvár. Podľa odborníkov vraj iba na to, aby sme dokázali vzpriamene stáť, prebehne v mozgu viac ako tritisíc výpočtov.

neuron

Nervový systém

Informácie sa v nervovom systéme prenášajú vo forme zmien membránového potenciálu nervových buniek, neurónov. Neurón sa skladá z tela a niekoľkých výbežkov. Tie sa môžu deliť na dva typy: dendrity, ktoré predstavujú z hľadiska informatiky vstup. Dendritov má neurón spravidla väčší počet, bývajú kratšie a bohato rozvetvené. Ich povrch býva často pokrytý dendritickými tŕňmi, na ktorých sú synapsy. Čo sú synapsy, vysvetlíme nižšie. Druhý typ je axón (neurit), po ktorom sa vzruch šíri k iným bunkám. Býva spravidla jeden, na konci môže byť značne rozvetvený, každá vetva je zakončená synapsiou. Tvar neurónu nie je presne definovaný, na rôznych miestach v nervovom systéme môžu mať neuróny rozdielne tvary. Už sme zmienili synapsy, teraz sa pri nich pristavíme. Význam slova synapto možno preložiť do pekného slovného spojenia – tesne sa objímať. Synapsou sa nazýva funkčné spojenie v miestach tesného kontaktu axónu jednej bunky s membránou inej bunky. Skladá sa z membrány presynaptického terminálu, synaptickej štrbiny a postsynaptickej membrány. Funguje to nasledovne: po prechode vzruchu cez presynaptický terminál sa otvárajú napätím riadené kalciové kanály. Kalcium prúdi do bunky. Naviaže sa na bielkoviny, ktoré spájajú synaptické vezikuly s membránou presynaptického terminálu. Vezikula predstavuje teliesko transportujúce látky z tela neurónu ohraničené membránou k presynaptickým terminálom. Predstavte si, že na jednom jedinom neuróne sú stovky, tisíce, ba až niekoľko desiatok tisíc synáps.

História a vývoj neurónových sietí

Keď už sme si objasnili niektoré vybrané názvy a definovali základné prvky, teraz si povieme niečo z histórie, nech máme predstavu, ako dlho sa ľudia venujú bádaniu v tejto zaujímavej oblasti. V roku 1943 páni McCulloch a Pitts predstavili prvý model neurónovej siete. Aplikovali sieť z tzv. formálnych neurónov na symbolickú logiku, teda na výroky zložené z elementárnych logických operácií, ktoré poznáme ako x AND y, x OR y, NOT x. V roku 1949 vyšla kniha kanadského psychológa Donalda Hebba, v ktorej uviedol, že účinnosti spojení medzi neurónmi v mozgu sa permanentne menia, ako sa jedinec adaptuje a učí nové veci. V roku 1952 páni Hodgkin a Huxley spracovali tému, ktorá súvisí s modelovaním nervovej bunky. Stalo sa tak na základe meraní generovania a šírenia sa akčného potenciálu v axóne sépie. Čo je axón, bolo vysvetlené vyššie. V roku 1956 jeden z najväčších matematikov dvadsiateho storočia John von Neumann vyriešil problém spoľahlivosti sietí McCulloha a Pittsa v prípade hardwarového poškodenia. V roku 1958 Frank Rosenblatt ukázal, že McCullochove-Pittsove siete s modifikovateľnými synaptickými váhami sa dajú natrénovať tak, aby vedeli rozpoznávať a klasifikovať objekty. Do histórie sa tak zapísali pod názvom perceptróny. V roku 1969 Minsky a Papert poukázali vo svojej knihe na obmedzenia perceptrónov. Ukázali, že tieto siete vôbec nie sú výpočtovo univerzálne a nedokážu riešiť všetky triedy problémov.

perceptron
Schéma perceptrónu len s input layer a output layer

Aby sme sa vrátili nazad k mozgu, musíme povedať, že modelovanie činnosti nervového systému sa neskončilo pri modelovaní spracovania signálov v jednej nervovej bunke, teda neuróne. Najznámejšou prácou, ktorá opisuje modelovanie a objasnenie činnosti mozgu je práca Davida Marra. V nej publikoval teóriu mozočku, kde na základe výpočtovej analýzy neurónových obvodov mozočka vysvetlil, že mozoček funguje ako asociatívna, obsahom adresovaná pamäť, ktorú mozog zjednodušene povedané trénuje na riadenie a vykonávanie sekvencií zložitých vôľou riadených pohybov. Pre pochopenie – jedná sa o šoférovanie, hra na klavír, atď. V jeho teórií je každému z piatich hlavných typov neurónov, ktoré sa nachádzajú v mozočku, priradená špecifická funkcia v učení a vyvolávaní vzorcov aktivity. Bolo definované, kedy a ako sa tieto bunky učia. Marr taktiež zadefinoval tri úrovne popisovania činnosti centrálneho nervového systému. Je to úroveň algoritmická, výpočtová, a implementačná. Konkrétne vypracovanie výpočtovej úrovne popisu videnia, znamená nájdenie optimálnych reprezentácií popisu obrazu v jednotlivých štádiách jeho spracovania a nájdenie operátorov, ktorých pomocou sa spracovávanie uskutočňuje. Algoritmická úroveň popisu definuje špecifikáciu konkrétnych algoritmov, ktoré by tieto výpočty realizovali. Nakoniec implementačná úroveň špecifikuje, či už biologický, alebo iný hardware, ktoré by tieto algoritmy realizoval. Tento Marrov prístup, označovaný aj metodickou paradigmou, je dodnes uznávaný v oblasti neurónových sietí, aj keď s určitými modifikáciami.

neural network
Schéma perceptrónu len s input layer a output layer a analógia k neurónu

V histórii neurónových sietí bol dôležitým okamihom matematický dôkaz G. Cybenka z roku 1989, že neurónová sieť s jednou skrytou vrstvou a sigmoidom dokáže odhadnúť ľubovoľnú spojitú a ohraničenú (nekonštantnú) funkciu definovanú na kompaktnej podmnožine reálnych čísel (alebo na kompaktnej podmnožine n-rozmerného priestoru nad poľom reálnych čísel) s ľubovoľnou presnosťou. V roku 1991 dokázal Kurt Hornik ešte univerzálnejšie tvrdenie, že neurónová sieť s jednou skrytou vrstvou a lineárnym outputom je univerzálnym aproximátorom (teda, že to neplatí len pre sigmoid).

Neurónové siete a umelá inteligencia

Tak ako i v umelej inteligencii, tak aj pri neurónových sieťach vzišla historická inšpirácia zo snahy vytvoriť umelý systém schopný vykonávať komplexné výpočty, podobné rutinným operáciám v ľudskom mozgu. Napriek tomu, že sa dosiahli významné úspechy v oblasti neurónových sietí a že vývoj výrazne pokročil, zatiaľ neexistujú programy a ani neurónové siete schopné inteligentne pracovať na viacerých problémoch súčasne a učiť sa nie v umelom prostredí, ale v reálnom svete. Musíme si tiež uvedomiť, že biologické neurónové siete majú mnohonásobne viac neurónov. Otázne je aj tvrdenie, či bude stačiť vytvoriť dostatočne veľký počítač, zaviesť neurónovú sieť a takýto počítač nadobudne atribúty ľudskej inteligencie.

Takéto tvrdenia ako aj každé iné tvrdenie spojené s umelou inteligenciou budú najskôr kontroverzné, pretože umelá ako aj prirodzená inteligencia nie je presne definovateľným pojmom. Jej základné atribúty by mali zahŕňať schopnosť rozpoznávať vzory, nejaké prvky správania sa metódou pokusu a omylu, a schopnosť učiť sa. Z jedného pohľadu sa ľudia snažia vyvinúť programy riadiace stroje, ktoré by vykonávali to, čo normálne človek nazýva inteligentným správaním sa. Niektorí sa začali zamýšľať nad tým, prečo by sa nedal vytvoriť program, ktorý by sa dokázal vyvíjať ďalej sám, aby sa už človek nemusel zaoberať ani tým programovaním. Na druhej strane sa snažia humanisti, psychológovia, a neurofyziológovia zistiť, čo je to vlastne inteligencia. K tomuto cieľu je najlepšou cestou vytvoriť si umelú inteligenciu a zistiť, či sa správa rovnako ako prirodzená, alebo čo jej chýba, a aké princípy sa zle použili a na čo sa zabudlo.

Programy spojené s počiatočným rozvojom umelej inteligencie boli do detailov vymyslené človekom programátorom, a náhoda v ďalšom vývoji alebo upresňovaní programu nehrala takmer žiadnu úlohu. Človek začal tým, že si predstavil, ako by problém riešil on, a keď sa mu to nedarilo, rozdrobil si problém na časti, čiže ho dekomponoval a tieto jednotlivé časti dokázal zvládnuť. Postup potom naprogramoval do počítača. Automaticky sa predpokladalo, že človek potom dokáže vysledovať, čo vlastne počítač robí, rozhodnúť, či nejaké dané rozhodnutie počítača bolo správne. Toto presvedčenie sa samozrejme s rastúcou komplikovanosťou programov oslabovalo, no principiálne presvedčenie v podvedomí pretrvávalo. Programy boli komplikované z hľadiska množstva námahy vynaloženej programátorom na riešenie konkrétneho typu problému. Výsledný program sa síce správal inteligentne, no bola to inteligencia explicitne vložená programátorom a program bol schopný riešiť iba veľmi obmedzený typ problémov pri presne definovaných podmienkach.

Postupne sa začala preformulovávať aj samotná definícia toho, čo považuje za umelú inteligenciu. V počiatkoch to bol každý program, ktorý sa správal tak, že si laik myslel, že na riešenie takéhoto problému je potrebná inteligencia. Typickým príkladom môžu byť šachové programy, ktoré sú síce na veľmajsterskej úrovni, no ich správanie sa je do detailov určené človekom, a keď urobia chybu, tím analytikov je schopný túto chybu napraviť analýzou rozhodovania programu a pridaním nejakého pravidla alebo zmenou nejakej váhy. Takéto programy sa zo začiatku považovali za umelú inteligenciu, no v súčasnej dobe sa vzhľadom k svojej špecializácii na jeden typ problému už za umelú inteligenciu nepovažujú.

Ďalším medzníkom v tvorbe inteligentných programov bola teda tvorba takých systémov, ktoré by boli úspešne schopné riešiť väčšiu triedu problémov. Príkladom sú expertné systémy, ktoré sú tvorené tzv. prázdnym balíkom programov, v ktorých je zabudovaný logický postup, ako zaobchádzať s pravidlami, no vlastné zadefinovanie konkrétnych pravidiel pre určitý problém je už úlohou užívateľa expertného systému. Expertný systém je teda schopný nielen odpovedať na otázku, no aj dodať užívateľovi prístupnou formou podrobné vysvetlenie, ako sa k odpovedi na nejakú otázku prišlo. Pokiaľ je odpoveď zlá, užívateľ by mal byť schopný ručne pozmeniť pravidlá tak, aby nabudúce dali správnu odpoveď. Vo svojej špecializovanej oblasti môžu pravidlá fungovať perfektne, no akonáhle túto oblasť rozšírime, nájdu sa výnimky. Tieto systémy sú ale neobratné pri zahrnutí heuristík, alebo výnimiek z pravidiel a neurčitosti zadanej informácie.

Pri neurónových sieťach človek ťažko dopredu povie, že synaptická váha má byť taká alebo taká. Je potrebné vytvoriť automatizovanú procedúru učenia sa. Takéto učiace procedúry zaberajú veľa strojového času počítača. Aj vzhľadom k tomu, že v dobe začiatkov umelej inteligencie bol čas počítača drahší vo vzťahu k času programátora, ako je tomu dnes, neurónové siete sa vo vývoji oneskorili za heuristickým programovaním založeným na logike. No s rozvojom počítačov tento nepomer začína prevažovať na druhú stranu. Neurónové siete sú extrémnym príkladom posunu v tvorbe systémov. Namiesto symbolických informácií prenášajú cez komunikačné kanály a spracovávajú vo svojich základných jednotkách numerické informácie. Sú schopné aspoň čiastočne sa učiť, no zatiaľ žiaden systém nevykazuje normálne myslenie, ani na úrovni dieťaťa. Sily spojení medzi neurónmi predstavujú distribuovanú formu uchovanej informácie.

neural networks
Dnešné rozsiahle hlboké neurónové siete

Pokiaľ je neurónová sieť správne natrénovaná, dáva väčšinou vynikajúce výsledky, no stále ju mnohí považujú za čiernu skrinku. Keď sú vstupné informácie neisté, alebo nepoznáme presne zákonitosti systému, ktorého správanie sa snažíme predpovedať, vtedy sú neurónové siete vhodnou voľbou. No pritom ani neurónové siete nie sú vo všeobecnosti schopné rozpoznať jednotlivé objekty fungujúce na zložitej báze. Keď vieme, že sa niečo správa na základe zákonov a princípov, ktoré poznáme a máme dostatok informácií ako určiť súčasný stav, môžeme predpovedať budúce správanie sa, budúce stavy a dokonca odvodiť optimálnu politiku pre riadenie nejakého procesu bez použitia neurónových sietí. Každopádne však fakt, že dnes sú už výkonné GPU cenovo dostupné a koncept univerzálneho aproximátora sú dosť lákavé na to, aby sme neurónové siete, hlavne tie hlboké, používali v praxi oveľa častejšie.

Využitie neurónových sietí

Vo všeobecnosti dokážu neurónové siete s ľubovoľnou presnosťou aproximovať akúkoľvek spojitú, ohraničenú nekonštantnú funkciu, čím si vyslúžili prívlastok univerzálneho aproximátora. V praxi sa neurónové siete najviac používajú na klasifikáciu a regresiu pri použití množstva trénovacích dát. Medzi najčastejšie oblasti využitia neurónových sietí patrí počítačová informatika, finančníctvo, fyzika, chémia, biológia, medicína, štatistika, neurofyziológia a neuropsychológia. Jednoduché (perceptrón) a aj hlboké neurónové siete sú podoblasťou umelej inteligencie a machine learning. Na tejto webovej stránke je možné aj spustiť skripty v pythone, v ktorých sú naprogramované neurónové siete napr. v príspevkoch na blogu: Ako si vytvoriť prvý model neurónovej siete, Pohľad do hĺbky neurónovej siete, Operácia XOR a ekvivalencia a tým pochopiť úplne do hĺbky procesy v neurónových sieťach.