Umělý neuron a perceptron
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
- MLP a backpropagation - jak se limit XOR prolomil
- Topologie a učení sítí - přehled, jaké druhy sítí existují a jak se učí
- Linearní regrese - neuron bez aktivační funkce je přesně tohle
- Klasifikace a rozpoznávání - kam perceptron zapadá mezi klasifikátory