Umělá inteligence
Obsah Soubory
Neuronové sítě

Umělý neuron a perceptron

Aktualizováno 7 min čtení 1 241 slov

Umělý neuron a perceptron

V roce 1969 vyšla kniha, která na sedmnáct let zastavila výzkum neuronových sítí. Minsky a Papert v ní ukázali jedinou věc: jeden neuron nedokáže realizovat funkci XOR.

Nebyl to útok, byl to důkaz. XOR není lineárně separabilní - nedá se oddělit jednou přímkou - a jeden neuron nic jiného než přímku nakreslit neumí. Financování se stáhlo, obor se odmlčel a čekalo se, až někdo vymyslí, jak naučit síť s víc vrstvami.

Tahle stránka je o tom, co jeden neuron je, co umí a kde přesně naráží. Předpokládá to jen vážený součet a graf funkce. Jak se ten limit prolomí, je na MLP a backpropagation, a co všechno z toho vyrostlo, je v topologiích sítí.

Biologická inspirace

Umělé neuronové sítě vycházejí ze zjednodušeného modelu nervové tkáně. To slovo zjednodušeného je důležité - podobnost je inspirace, ne model.

Čísla, kterými se to obvykle uvádí:

  • lidský mozek obsahuje přibližně 10^11 neuronů,
  • ty jsou propojeny zhruba 10^14 synapsemi,
  • každý neuron má stovky až tisíce vstupů (dendritů).

Biologický neuron se skládá ze čtyř částí:

  • dendrity - vstupní výběžky přijímající signály,
  • tělo (soma) - vyhodnocuje součet příchozích signálů,
  • axon - vystupující vlákno přenášející impulz k dalším neuronům,
  • synapse - kontaktní místa s proměnnou „propustností", tedy vahou.

Pokud součet vážených vstupů překročí prahovou hodnotu, neuron vystřelí - vyšle impulz po axonu.

To je celý mechanismus, který se modeluje. Váhy jsou synapse, součet je soma, práh je vystřelení. Všechno ostatní v biologii - chemie neurotransmiterů, časování impulzů, plasticita - se zahodilo.

Matematický model neuronu

Umělý neuron (McCulloch a Pitts, 1943) má n vstupů x1, ..., xn, každý s odpovídající vahou w1, ..., wn. Výstup y se počítá jako:

y = f( Σ wi·xi − Θ )        pro i = 1..n

kde Θ je práh a f je aktivační funkce.

Práh se dá zapsat úsporněji: zaveď váhu w0 = −Θ spojenou se stálým vstupem x0 = 1. Práh se tím stane obyčejnou váhou a vzorec se zjednoduší:

ai = g( Σ Wj,i · aj )  =  g(ini)        pro j = 0..n

Tenhle trik se dělá vždycky a je důvod, proč se v kódu neuronových sítí o prahu skoro nemluví - schová se do vah jako bias a učí se stejně jako ony.

Schéma neuronu:

x1 --w1--\
x2 --w2---\
           [ Σ , f ] --> y
   ...     /   práh Θ
xn --wn--/

Aktivační funkce

Funkce Předpis Kdy
Prahová (Heavisideova, skoková) f(x) = 1 pro x ≥ 0, jinak 0 perceptron, logické funkce
Signum f(x) = +1 pro x ≥ 0, jinak −1 perceptron s bipolárním výstupem
Sigmoida (logistická) f(x) = 1 / (1 + e^(−x)) klasické MLP, výstup jako pravděpodobnost
Hyperbolická tangenta f(x) = (e^x − e^(−x)) / (e^x + e^(−x)) skryté vrstvy, výstup centrovaný kolem nuly
ReLU f(x) = max(0, x) dnes nejpoužívanější v hlubokých sítích

Sigmoida má vlastnost, kvůli které se používala desítky let:

f'(x) = f(x) · (1 − f(x))

Derivace se dá spočítat z hodnoty funkce. Nemusíš nic derivovat znovu - máš-li výstup neuronu, máš i jeho derivaci. Pro backpropagation je to zásadní úspora.

Proč sigmoida a tanh? Jsou diferencovatelné, což je nutná podmínka pro algoritmus zpětného šíření chyby. Skoková funkce diferencovatelná není a nedá se s ní gradient počítat vůbec.

ReLU není diferencovatelná v nule, ale její sub-gradient se v praxi používá bez problémů - v nule se prostě zvolí nula nebo jedna a nikdy to nic nerozbilo. Vyhrála proto, že u hlubokých sítí netrpí mizejícím gradientem: sigmoida má derivaci nejvýš 0,25, takže po deseti vrstvách je gradient násobený 0,25^10 ≈ 10^−6 a zmizí. ReLU má derivaci 1 všude v kladné části. Víc o tom u rekurentních sítí, kde je ten problém nejvýraznější.

Logické funkce jedním neuronem

Vhodnou volbou vah se dají realizovat základní logické funkce. Aktivace je prahová.

Funkce w0 (práh) w1 w2
AND (x1 ∧ x2) 1,5 1 1
OR (x1 ∨ x2) 0,5 1 1
NOT (¬x1) −0,5 −1 -

Spočítej si AND. Vstup (1, 1) dá 1 + 1 = 2 ≥ 1,5, tedy výstup 1. Vstup (1, 0) dá 1 < 1,5, tedy 0. Sedí.

U OR je práh jen 0,5, takže stačí jeden jedničkový vstup. Rozdíl mezi AND a OR je výhradně v prahu - váhy jsou stejné. To je hezky vidět, jak málo stačí ke změně chování.

XOR: limit, který zastavil obor

Funkci XOR jeden neuron realizovat nedokáže, protože není lineárně separabilní.

Nakresli si to na papír. Čtyři body: (0,0) → 0, (0,1) → 1, (1,0) → 1, (1,1) → 0. Jedničky leží na jedné úhlopříčce čtverce, nuly na druhé. Žádná přímka je neoddělí.

A jeden neuron nic jiného než přímku nakreslit neumí. Rovnice Σ wi·xi = Θ je rovnicí nadroviny, a co je na jedné straně, dostane jedničku, co na druhé, nulu.

Tenhle limit objevili Minsky a Papert v roce 1969 a dočasně tím zastavili výzkum neuronových sítí. Řešení - vícevrstvá síť - bylo tehdy známé, ale nikdo neuměl takovou síť naučit. Trvalo to do roku 1986, než se objevil backpropagation.

Poučení, které z toho stojí za to si odnést: korektní důkaz o limitu jednoduchého modelu se dá číst jako důkaz o limitu celého přístupu, a to je omyl. Kniha byla správná, závěr, který si z ní obor vzal, ne.

Perceptron

Perceptron (Rosenblatt, 1958) je nejjednodušší síť s jednou vrstvou trénovatelných vah. Pro binární klasifikaci platí:

y = sgn( Σ wi·xi − Θ )

Perceptron definuje nadrovinu rozdělující vstupní prostor na dvě poloroviny. Je to tedy lineární klasifikátor a spadá přesně do rámce diskriminačních funkcí.

Pravidlo učení:

Wj ← Wj + α · Err · g'(in) · xj,        Err = t − y

kde t je očekávaný a y aktuální výstup.

Pro perceptron se skokovou aktivací se derivace g' nahrazuje jednotkou, čímž dostaneš klasické Rosenblattovo pravidlo:

Wj ← Wj + α(t − y)·xj

Rozeber si, co to dělá. Když je výstup správný, t − y = 0 a nic se nemění. Když je výstup příliš nízký, t − y > 0 a váhy se posunou ve směru vstupu, takže příště bude výstup vyšší. Když je příliš vysoký, posunou se opačně.

Perceptronová věta o konvergenci říká, že pro lineárně separabilní data tenhle postup skončí v konečném počtu kroků. Pro data, která separabilní nejsou, neskončí nikdy a bude oscilovat - a to je přesně to, co se stane na XOR.

Hebbovo pravidlo

Nejjednodušší pravidlo učení bez učitele (Hebb, 1949). Posiluje spojení mezi neurony, které jsou aktivní současně:

wij(t + 1) = wij(t) + α · yi · yj

kde α je rychlost učení a yi, yj aktivity propojených neuronů.

Populárně se to shrnuje jako „neurons that fire together, wire together". Všimni si, že v tom vzorci není žádné t, tedy žádný požadovaný výstup. Proto je to učení bez učitele - pravidlo neví, co je správně, jen sleduje, co se děje současně.

Slabina je vidět hned: váhy jen rostou a nic je nedrží. Bez normalizace nebo útlumu se rozletí do nekonečna. Praktické varianty (Ojovo pravidlo) proto přidávají člen, který váhy udržuje omezené.

Co se na tom nejčastěji rozbije

Příznak Kde je problém
Perceptron nikdy nezkonverguje data nejsou lineárně separabilní - potřebuješ víc vrstev
Váhy se rozletí do nekonečna příliš velká rychlost učení α, nebo Hebbovo pravidlo bez útlumu
Síť dává pořád tentýž výstup nasycená sigmoida - vstupy nejsou normalizované
Učení se zastaví, ale chyba je velká práh se neučí - zapomenutý x0 = 1 a váha w0
Neuron s ReLU je trvale mrtvý dostal velký záporný gradient, výstup i derivace jsou navždy nula
Gradient po pár vrstvách zmizí sigmoida v hluboké síti - přejdi na ReLU

Co si odnést

Neuron je vážený součet s prahem a nelineární funkcí. Nic víc.

Práh se schová do vah jako w0 se stálým vstupem x0 = 1.

Jeden neuron kreslí nadrovinu, takže umí AND, OR a NOT, ale ne XOR.

XOR není lineárně separabilní a tenhle jediný fakt zastavil obor na sedmnáct let.

Sigmoida má derivaci f(1−f), což je důvod její dlouhé kariéry. ReLU vyhrála kvůli mizejícímu gradientu.

Perceptronové pravidlo konverguje jen na separabilních datech. Jinak osciluje navěky.

Hebbovo pravidlo je učení bez učitele - v jeho vzorci není požadovaný výstup.

Kam dál