Syntax highlighting of Archiv/Neuronové sítě (státnice)

== Rozsah látky ==

Oficiální seznam otázek ([http://www.mff.cuni.cz/studium/bcmgr/ok/i3b51.htm] léto 2011):

:Neurofyziologické minimum: struktura neuronu, typy synapsí, hlavní části mozku.
:Modely pro učení s učitelem: perceptron, algoritmus zpětného šíření, strategie pro urychlení učení, interní reprezentace znalostí, generalizace, regularizační techniky. Asociativní paměti; Hebbovské učení, BAM, Hopfieldův model, energetická funkce a hledání suboptimálních řešení. Stochastické modely; simulované žíhání, Boltzmannův stroj.
:Klastrovací techniky a samoorganizace; k-means algoritmus, hierarchické shlukování, evoluční stromy.
:Umělé neuronové sítě založené na principu učení bez učitele; Ojův algoritmus učení, laterální inhibice, Kohonenovy mapy a jejich varianty pro učení s učitelem, sítě typu ART.
:Modulární, hierarchické a hybridní modely neuronových sítí; adaptivní směsi lokálních expertů, vícevrstvé Kohonenovy mapy, sítě se vstřícným šířením, RBF-sítě, kaskádová korelace. Genetické algoritmy, věta o schématech.
:Aplikace umělých neuronových sítí a evolučních technik (analýza dat, bioinformatika, zpracování obrazové informace, robotika a další).

==Materiály==

Zejména slajdy Mrázových. Viz [[Neuronové sítě]] (stránka předmětu) - http://ksvi.mff.cuni.cz/~mraz/nn/ http://ksvi.mff.cuni.cz/~mraz/atns/

Pro stručnější nakopávačku na rozjezd můžete zkusit dataminingovou přednášku http://ksvi.mff.cuni.cz/~mraz/datamining/lecture/Dobyvani_Znalosti_Prednaska_Neuronove_site.pdf

Lehce dohledatelna [http://page.mi.fu-berlin.de/rojas/neural/index.html.html na webu](v knihovne jich taky par je) je kniha Neural Networks - A Systematic Introduction, Raul Rojas. Struktura slajdu kopiruje dost presne tuhle knihu, doporucuju otevrit, kdykoliv nerozumite vecem ve slajdech.

[[Category: Státnice Informatika Mgr.]]

== Neurofyziologické minimum ==

* http://ksvi.mff.cuni.cz/~mraz/nn/Neuronove_Site_Prednaska_Uvod.pdf
* Wikipedie (mozek, neuron, synapse)
* Informatika a kognitivní vědy

== Učení s učitelem ==

=== Perceptron ===

http://ksvi.mff.cuni.cz/~mraz/nn/Neuronove_Site_Prednaska_Perceptron.pdf

==== Algoritmus zpětného šíření ====

http://ksvi.mff.cuni.cz/~mraz/nn/Neuronove_Site_Prednaska_BP.pdf

==== Strategie pro urychlení učení ====

Viz slajdy výše. Volba počátečních vah, zpětné šíření s momentem.

Adaptivní parametr učení: Silva & Almeida (zrychluj, zůstává-li znaménko chybového gradientu stejné, zpomal, když se změnilo), Delta-bar-delta (testuj znaménko s momentem), Super SAB (urychluje, při změně znaménka chyby se vrátí a rychle zpomalí).

Algoritmy druhého řádu (druhá derivace chybového gradientu): Newtonova metoda (Hessovská matice), QuickProp (dívá se na poslední dvě parciální derivace), Levenberg-Marquart (kombinace předchozích).

Relaxační metody - náhodná perturbace vah, možná to bude lepší.

==== Interní reprezentace znalostí ====

http://ksvi.mff.cuni.cz/~mraz/nn/Neuronove_Site_Prednaska_IR.pdf

Reprezentace neuronu je v zásadě množina výstupních stavů přes všechny vstupy. Chceme, aby neurony dávaly jednoznačné výstupy (0, 0.5, 1), rozličnou reprezentaci vnitřních neuronů pro různé výstupy sítě, a vůbec unikátní nekonstantní reprezentaci.

==== Generalizace ====

http://ksvi.mff.cuni.cz/~mraz/nn/Neuronove_Site_Prednaska_BP_analyza.pdf

==== Regularizační techniky ====
Metody prevence přeučení. Idea - i když vezmeme náhodně generovaný šum tak v něm back prop po dlouhém učení najde nějaké pravidla, proto do našich dat tak trochu kopeme aby tam tyhle 'pravidla v šumu' nevznikaly. Vlastně chceme síť, co je invariantní na určitou míru šumu.

http://ksvi.mff.cuni.cz/~mraz/nn/Neuronove_Site_Prednaska_Uvod.pdf

http://www.cedar.buffalo.edu/~srihari/CSE574/Chap5/Chap5.5-Regularization.pdf



Nastin - Metody:
* Urceni spravnych vstupnich parametru - korelacni koeficienty, PCA, expert, ...
* Vcasne zastaveni trenovani (trenovaci+validacni sada) - Error na validacni sade nejdriv klesa a kdyz se sit zacne preucovat, tak zacne rust.
* Urceni spravneho poctu skrytych neuronu (nekolik behu s ruznym poctem neuronu, vzit nejnizsi s jeste dobrym vykonem).
* Ruzne druhy zasumovani datove sady (muzeme zasumovat vzdy predtim, nez predlozime vzor; muzem zasumit vsechno pred trenovanim) - gausovske, chytrejsi podle typu dat (treba image data).
* [https://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf Dropout] - nahodne zapinam/vypinam neurony pri uceni - teoreticky sice mam sit, co ma n neuronu. Ale protoze muzou byt nahodne vypnute/zapnute tak vlastne trenuju 2^n siti (co sdileji parametry). Takze ve vysledku pouzivam jakoby sit co predstavuje prumer z 2^n siti.
* Prorezavani neuronovych siti [http://ksvi.mff.cuni.cz/~mraz/nn/Neuronove_Site_Prednaska_IR.pdf] - Celkem intuitivne +- pocitam jak jsou ruzne neurony citlive na vstup, pokud nejsou, tak se moc nepodili na vysledku a muzu je vypnout.
* L1, L2 regularizace - Idea [http://www.machinelearning.org/proceedings/icml2004/papers/354.pdf L2 regularizace] je, ze mame datovou sadu A, z ni udelame B pomoci nejake linearni transformace (pro kazdy x=ax+b, y netransformuju). Kdyz naucime deterministicky dve site, jednu na A, druhou na B, tak bychom meli dostat dve site ktere jsou zas +- linearne zavisle ale davaji stejne vysledky. Ta ktera je ucena z B by mela mit vahy transformovane vahy prvni site. Takze vezmeme tu sit B a upravim vahy tak, aby fungovala pro sadu A, kazdou vahu nejak transformuju zpatky (nejsem si jisty jak). Na webu [http://cs231n.github.io/neural-networks-2/#reg] zas rikaji, ze L2 regularizace je neco jineho, tak si nejsem jisty.

== Asociativní paměti ==

http://ksvi.mff.cuni.cz/~mraz/nn/Neuronove_Site_Prednaska_AM.pdf

Heteroasociativní sítě, autoasociativní, sítě pro rozpoznávání vzorů. Bez zpětné vazby, rekurentní (dynamický systém, atraktory), vlastní automaty (co jsou pevné body systému? vlastní vektory váhové matice), asociativní učení (vzory jsou atraktory).

==== Hebbovské učení ====

http://ksvi.mff.cuni.cz/~mraz/nn/Neuronove_Site_Prednaska_AM.pdf

What fires together wires together. Korelační matice, perturbační člen, crosstalk. Vhodná ortogonálnost vstupů. Omezená kapacita $0.18n$.

==== BAM ====

http://ksvi.mff.cuni.cz/~mraz/nn/Neuronove_Site_Prednaska_BAM_HM.pdf

Bidirektivní asociativní paměť.

==== Hopfieldův model ====

==== Energetická funkce a hledání suboptimálních řešení ====

Tady je asi zajímavé zmínit, proč Hopfieldova metoda byla tak hrozně zajímavá (když byla ještě nová). A to proto, že to trochu vypadalo, že by s její pomocí šlo řešit velmi rychle NP-úplné problémy - za pomoci masivní paralelizace. Pokud sestrojíme takovou H-síť, že její globální minimum je řešení NP-úplné úlohy tak ji můžeme paralelizovat tak, že spočítáme vždy update všech jejích neuronů najednou paralelně. Takže synchronizace by se dělala jen po updatu všech neuronů. Hopfieldův model zaručuje jen dosažení lokálního minima a později se přišlo na to, že abychom postavili sítě co dosáhnou globálního bude potřeba exponenciálně hodně vah. Nakonec tedy H-sítě dopadly jako relativně slušné aproximátory NP-úplných problémů, kde nám nevadí že se zastaví v lokálním minimu.

Použití Hopfieldova modelu pro řešení optimalizačních úloh (n věží, TSP). Postavíme energetickou funkci a pak podle ní nastavíme váhy neuronů.

===TSP pomocí Hopfield modelu===
Máme n měst mezi městy <math>S_i,S_j</math> je cesta délky <math>d_{ij}</math>. Postavíme síť s nxn neurony, kde neuron <math>x_{ik}</math> je zapnutý, pokud cestující navštívil město i jako k-té. Pokud si z toho uděláme matici, tak v každém řádku a sloupci je právě jeden neuron zapnutý. Délku takhle zakódované cesty můžeme napsat jako: <math>L=\sum_{i,j,k}d_{ij}x_{i,k}x_{j,k+1}</math>. Kdybychom jen tohle minimalizovali, tak dostaneme síť kde všechny neurony jsou vypnuté, proto je potřeba přidat ještě podmínku aby to hledalo cesty: <math>P=\sum_i(1-\sum_k x_{i,k})^2+\sum_k(1-\sum_i x_{i,k})^2</math>. Pro P je minimum když v každém řádku respektive sloupci je právě jeden neuron aktivní, což je přesne cesta co navštíví všechny města. Celková energetická funkce tedy bude <math>E=\frac 1 2 L + \frac \gamma 2 P</math>, kde <math>\gamma </math> je regularizační konstanta.

Z energetické funkce nám už teď vypadnou váhy. Napíšeme si <math>L(i,j,k,l)</math> prvek sumy kde je <math>x_{i,k}x_{j,l}</math> v L a podobně v P. Pro <math>L(i,j,k,k+1)=d_{ij}x_{i,k}x_{j,k+1}</math> a jinak 0. Pro P dostaneme <math>P(i,i,k,k)=\delta x_{i,k}^2+\delta/2</math>. Z toho dostaneme váhy <math>w_{i,j,k,l}</math> mezi neurony <math>x_{i,k}</math> a <math>x_{j,l}</math>:
* pokud <math>i=j \vee k=l</math>: <math>w_{i,k,j,l}=-\gamma</math> a práh je <math>\theta_{i,k,j,l}=-\gamma/2</math>.
* jinak 0
* navíc pokud <math>l=k+1<math> tak k <math>w_{i,k,j,l}</math> přidáme délku cesty mezi i a j <math>d_{ij}</math>

Takováhle síť najde nějaké lokální minimum. Podle toho jak velké jsou délky mezi městy a jak je nastavena regularizační konstanta nemusíme dostat vůbec přípustné řešení TSP (cesty co navštíví dvě města za krok apod). Proto je nutné nastavit <math>\gamma</math> dostatečně velké, ale zas ne tak velké aby úplně znevážilo délky cest. Vidíme, že síť používá n^2 neuronů a tak pokud máme hardware co má n^2 procesorů, tak tohle upočítáme velmi rychle. Na druhou stranu TSP má velké množství lokálních minim, takže prakticky nikdy nedostaneme globální minimum.

== Stochastické modely ==
Pozn. tenhle okruh má výrazně nižší rozsah (aspoň v slajdech Mrázové) než jakýkoli jiný okruh. Je docela možné, že i kdyby se na něj zeptali tak asi nebude stačit to co je v slajdech Mrázové (+- to co je tu napsané). Zas na druhou stranu to nejspíš znamená, že aspoň Mrázová se na něj asi moc často neptá.

=== Simulované žíhání ===
Z názvosloví energetických funkcí. Normálně updatujeme nějaké hyperparametry jen pokud to snižuje energetickou funkci. Při simulovaném žíhání to tak není. Pokud update hyperparametru <math>x+\Delta x</math> zvýší energetickou funkci o <math>\Delta E</math> tak přijmeme změnu s pravděpodobností <math>\frac{1}{1+e^{\Delta E/T}}</math>, kde T je teplota co kontroluje celý proces. Prakticky tohle je celý nápad, kdybych dostal tuhle otázku tak bych asi nakreslil třeba obrázek toho, jak to přeskakuje lokální minimum, a asi ještě nějaký fluff okolo. Jak zvolit teplotu - intuitivně teplota je něco jako energie co si půjčujeme když jdeme proti optimální energetické funkci. Typicky bychom chtěli, aby ke konci celého trénování už teplota byla nulová. Problém toho jak správně snižovat teplotu během trénování je ale obecně dost těžký, něco jako explore vs exploit.

=== Boltzmannův stroj ===
Je to Hopfieldova síť co vychází z simulovaného žíhání. Vezmeme v potaz binární síť (hodnoty neuronů jsou 1/0). Energetickou funkci nadefinujeme jako <math>E=-\sum_{i,j}w_{ij}x_{i}x_{j}+\sum_{i}\theta_i x_i</math>. Když se koukneme na to co je rozdíl energie při zapnutí neuronu i tak dostaneme <math>\Delta E=E_{x_i=0}-E_{x_i=1}=\sum_{j}w_{ij}x_{j}-\theta_i</math> což je potencionál neuronu i <math>\zeta_i</math>. Když teď aplikujeme princip z simulovaného žíhání, tak dostaneme, že neuron i zapneme na 1 s pravděpodobností <math>p_i=\frac{1}{1+exp(-\zeta_i/T)}</math>.¨

Výhoda tohohle modelu je podobná, jako rozdíl mezi obyčejným hillclimbingem a simulovaným žíháním. Pokud je teplota T nízká (nulová), tak <math>p_i=sgn(\zeta_i)</math> což je přesně jako v Hopfieldově modelu. Když zvýšíme T tak algoritmus dělá trochu náhodnou procházku (s nepřesným kompasem) a tak s trochou štěstí přeskočí nějaká náhodná minima. Pokud volíme T podle správného plánu tak se dostaneme do globálního minima s vysokou pravděpodobností.

== Klastrovací techniky a samoorganizace ==

=== k-means algoritmus ===

http://ksvi.mff.cuni.cz/~mraz/nn/Neuronove_Site_Prednaska_UBU.pdf

=== hierarchické shlukování ===

=== evoluční stromy ===

== Učení bez učitele v ANN ==

http://ksvi.mff.cuni.cz/~mraz/nn/Neuronove_Site_Prednaska_UBU.pdf

=== Ojův algoritmus učení ===

=== laterální inhibice ===

=== Kohonenovy mapy ===

...a jejich varianty pro učení s učitelem.

=== Sítě typu ART ===

http://ksvi.mff.cuni.cz/~mraz/nn/Neuronove_Site_Prednaska_KH_HM.pdf

== Modulární, hierarchické a hybridní modely neuronových sítí ==

http://ksvi.mff.cuni.cz/~mraz/atns/ATNS_Prednaska_Modular.pdf

=== adaptivní směsi lokálních expertů ===

=== vícevrstvé Kohonenovy mapy ===

http://ksvi.mff.cuni.cz/~mraz/atns/ATNS_Prednaska_Self-Organizing.pdf
Slajdy čerpají z tohoto článku, kde je to, jako vždy, konečně pochopitelně vysvětlené: http://www.cs.uga.edu/~suchi/pubs/suchi-nn-1995.pdf

=== sítě se vstřícným šířením ===

http://ksvi.mff.cuni.cz/~mraz/nn/Neuronove_Site_Prednaska_KM_HM.pdf

=== RBF-sítě ===

http://ksvi.mff.cuni.cz/~mraz/nn/Neuronove_Site_Prednaska_KM_HM.pdf

=== kaskádová korelace ===

http://ksvi.mff.cuni.cz/~mraz/nn/Neuronove_Site_Prednaska_KM_HM.pdf

== Genetické algoritmy ==

http://ksvi.mff.cuni.cz/~mraz/nn/Neuronove_Site_Prednaska_GA.pdf

=== věta o schématech ===

== Aplikace umělých neuronových sítí a evolučních technik ==
Na tuhle otázku se Mrázová ptá opravdu málokdy, ale předpokládám, že přednáška [http://ksvi.mff.cuni.cz/~mraz/atns/ ATNS] ji bude docela dobře pokrývat. Nemyslím, že tahle otázka má nějaké pevné osnovy, spíš to je otázka na to, jestli jste přečetli tak alespoň 10 neteoretických článků o NN.

=== Analýza dat ===
Nejčastěji se používá asi klasická lineární/logistická regrese (což není neuronová síť) pro predikci nějaké cílové proměnné(resp. třídy). Perceptron s logistickou aktivační funkcí je stejný model, jako logistická regrese, rozdíl je v tom jak se trénují parametry.

Jinak obecně pro analýzu dat se používají prakticky všechny metody, které jsou v okruzích, asi je tu od zkoušeného vyžadován nějaký příklad, tak si vyberte nějakou metodu a najděte si k ní článek co se zabývá aplikací.

'''Např:''' V bance mají kopu indikátorů o klientech:
* statistiky o jejich účtech
* behaviorální indikátory - jak často vybírají z bankomatu, ..
* sociální indikátory - věk, jestli žijou v rodině, ...
* indikátory o splácení půjček - jak často jsou po splatnosti, insolvence (nesplatí půjčku), ...
Cíl je, když přijde klient tak určit, s jakou pravděpodobností splatí půjčku. Součástí úlohy je: vybrat relevantní indikátory, natrénovat různé modely (klasické vrstevnaté ANN s různými architekturami), otestovat modely a vybrat ten s nejlepší prediktivní schopností.

=== Bioinformatika ===
V bioinformatice data co analyzujeme budou asi primárně DNA a RNA sekvence. Aplikace je, že vezmeme nejakou anotovanou datovou sadu sekvencovaných DNA/RNA a vyvíjíme nějaký prediktivní model (predikujeme něco z anotací).

=== Zpracování obrazové informace ===
Určitě zmínit [https://en.wikipedia.org/wiki/Convolutional_neural_network konvoluční neuronové sítě]. V dnešní době se prakticky nic jiného nepoužívá. V 2015-2016 relativně populární obor NN, je hodně zajímavých článků, např http://arxiv.org/abs/1508.06576 a články z tohoto vycházející.

=== Robotika ===
Zpracování visual feedu robota spadá pod zpracování obrazové informace. Nějaký prediktivní model o rozhodování akcí robota může být neuronová síť. Možná se kouknout na přednášku [http://ksvi.mff.cuni.cz/~mraz/EvoRob/ Evoluční robotika]. Zvláštní postavení tu bude mít asi online-učení, např [https://en.wikipedia.org/wiki/Reinforcement_learning Reinforcement learning].

'''[https://en.wikipedia.org/wiki/Braitenberg_vehicle Příklad - Braintenberg vehicle]'''
Máme autíčko co má dva laserové senzory - jedno na levém předním světle, druhé na pravém světle. Oba senzory jsou směrové, namířené dopředu a nemají moc překryv. Senzory mají analogický signál od 0-1 který znamená jak daleko od senzoru je nějaká překážka.

Těmito senzory chceme ovládat motory pro jednotlivá kola a tím zatáčet robota tak, aby nenarazil do překážky. Neuronovou síť která ovládá robota zapojíme takhle (L značí levý senzor, R pravý, + znamená excitační synapsi, - inhibiční):
* L + levý motor
* R + pravý motor

Naopak pokud chceme, aby robot sledoval překážky tak zapojíme neurony takhle:
* L - levý motor
* R - pravý motor

Těch zapojení, co to řeší je víc (třeba v prvním příkladu můžeme křížem zapojit inhibitivně). A i tak tohle nebude fungovat dobře, pokud před autem je víc překážek, ale je to jen příklad.