Deep learning

Deep learning (hlboké učenie) je považované za podoblasť umelej inteligencie, strojového učenia a neurónových sietí. Hlboké učenie sa zaoberá špeciálnymi modelmi, ktoré okrem vstupnej (input layer) a výstupnej vrstvy (output layer) neurónov obsahujú aj jednu, prípadne viacej skrytých vrstiev.

Deep learning je pomerne mladá disciplína, nakoľko ešte donedávna existovali veľké problémy dosiahnuť výsledky v rozumnom čase. Hoci teória bola už v pokročilom štádiu do roku 2009 (kedy na scénu prichádza NVIDIA GPU) sa vedci trápili s výpočtovým výkonom a k výraznému rozvoju deep learning prispeli hlavne grafické karty (GPU), ktorých výpočtový výkon je v porovnaní s CPU výrazne vyšší. Tak troška paradoxne boom deep learningu odštartovali GPU určené na hranie hier. Za dôležitý míľnik je považovaný rok 2012 a za krstného otca hlbokého učenia mnohí dnes pokladajú Geoffrey Hintona z University of Toronto. Práve na tejto univerzite Geoffrey Hinton, Hintonov študent Alex Krizhevsky a Ilja Sutskever vytvorili rozsiahlu hlbokú konvolučnú neurónovú sieť s názvom AlexNet, ktorá vyhrala v 2012 ImageNet Large-Scale Visual Recognition Challenge. V tejto súťaži hlboká konvolučná sieť porazila všetky, vtedy popredné technológie a na tréning siete sa použili grafické karty. Od tohto okamihu nastal obrovský boom v rozvoji hlbokého učenia za pomoci GPU. Na obrázku nižšie je zobrazené porovnanie výkonov GPU a CPU a nákladov na chod.

gpu

Hlboké učenie má silnú teoretickú oporu v podobe matematického tvrdenia, že hlboká sieť s jednou skrytou vrstvou dokáže aproximovať s ľubovoľnou presnosťou ľubovoľnú spojitú, nekonštantnú a ohraničenú funkciu ako zobrazenie z množiny reálnych čísel do množiny reálnych čísel. Vďaka tejto matematickej vete nesie sieť hlbokého učenia prívlastok univerzálny aproximátor. Dnes existuje ešte nejednotnosť v definíciách (napr. aj v definícii umelej inteligencie) a aj v názore, čo by malo byť považované za hlboké učenie, či to je sieť s 1, 2 alebo 3 a viac skrytými vrstvami. Sme toho názoru, že sila univerzálneho aproximátora je dostatočná na to, aby sme považovali za hlboké učenie neurónové siete s 1 a viac skrytými vrstvami.

Čo sa týka modelovania alebo programovania hlbokých neurónových sietí je situácia v porovnaní s jednoduchým perceptrónom zložitejšia. Síce aj v programe na hlbokú neurónovú sieť nájdeme podobné bloky ako je definícia aktivačnej funkcie, definícia backpropagačného algoritmu, definícia doprednej propagácie a niečo ako train alebo fit blok (alebo metódu, ak máme použiť terminológiu objektového programovania), v ktorom sú vlastne chyby siete vznikajúce vo všetkých vrstvách, backpropagácia a dopredná propagácia zoradené do správneho poradia, aby odrazili základný algoritmus na učenie.

hlboká neuróvá sieť
Príklad schémy hlbokej neurónovej siete s input layer, 3 skrytými vrstvami a output layer

Do backpropagačného algoritmu oproti jednoduchej neurónovej sieti musíme zaradiť aj väzbu medzi chybami vo všetkých vrstvách. Tu treba uplatniť deriváciu zloženej funkcie, aby sme vyjadrili, že zmenou váh prislúchajúcich k input layer sa ovplyvnia váhy v ďalších vrstvách a aj chyby v ďalších vrstvách až po output vrstvu. Pri vyjadrení celkovej straty alebo chyby samozrejme už do hry vstupujú aj dimenzia (počet zložiek vstupného vektora a ďalších vstupných a výstupných vektorov ) a počet tréningových vzoriek. Častokrát používame kvadratickú stratovú funkciu vyjadrenú ako suma (cez všetky tréningové vzorky alebo lepšie cez tzv. mini batch) chýb predstavujúcich vzdialenosť známych a želaných outputov od vypočítaných outputov podľa nejakej metriky (obyčajne Euklidovskej).

Čo sa týka optimalizácie celkovej stratovej/chybovej funkcie existujú rôzne techniky/algoritmy. Medzi najznámejšie patrí metóda najväčšieho spádu (gradient descent). Ako aktivačné funkcie sa najčastejšie používajú sigmoid, tanh, ReLu, f(x)=x, signum a mnohé ďalšie, ktoré sú vhodné pre riešenie klasifikačných a regresných problémov.

Hoci je možné jednoduché a aj hlboké siete programovať v rôznych jazykoch (napr. aj PHP, javascript, ...), ako jazyk pre matematické výpočty (a machine learning) sa obvykle používa python. Dnes existujú aj moderné frameworky pre neurónové siete a machine learning ako Tensorflow od Google alebo Caffe od Berkeley AI Research, ktoré možno do pythonu nainštalovať.

Na tejto webovej stránke je možné aj spustiť skripty v jazyku python 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.