Perceptron a umělý neuron: nejjednodušší neuronová síť a co neumí
Umělý neuron a logická hradla, Rosenblattovo učicí pravidlo, Novikoffova věta o konvergenci, proč perceptron nezvládne XOR a jak ho vyřeší dvě vrstvy.
Série Základy AI Díl 61 z 83
- Mapa umělé inteligence: co je co a jak to do sebe zapadá
- Stručná historie umělé inteligence: od Turinga po jazykové modely
- Data, model, trénink, inference: základní pojmy na jednom příkladu
- Jak číst matematický zápis: symboly, indexy, sumy a kvantifikátory
- Množiny a relace: stavebnice, ze které se skládají definice v AI
- Funkce a zobrazení: proč je každý model v AI funkce
- Logika a důkazy: pravidla, podle kterých se v AI uvažuje
- Grafy a stromy: struktura, na které stojí hledání i neuronové sítě
- Lineární algebra pro strojové učení: vektory, matice a proč AI hlavně násobí
- Derivace, gradient a řetízkové pravidlo: jak model zjistí, kterým směrem se učit
- Gradientní sestup: jak se model učí
- Co je pravděpodobnost: od hodu kostkou ke Kolmogorovovým axiomům
- Podmíněná pravděpodobnost a Bayesova věta: jak změnit odhad, když se dozvíte něco nového
- Náhodná veličina a distribuční funkce: jedna funkce, která o rozdělení řekne všechno
- Funkce hustoty a pravděpodobnostní funkce: proč má spojitá veličina v bodě pravděpodobnost nula
- Střední hodnota, rozptyl a kovariance: kde rozdělení leží, jak je široké a co s čím souvisí
- Přehled pravděpodobnostních rozdělení: Bernoulli, binomické, Poisson, rovnoměrné, normální a exponenciální
- Zákon velkých čísel a centrální limitní věta: proč se průměry chovají tak předvídatelně
- Statistika a odhady parametrů: maximální věrohodnost, MAP a intervaly spolehlivosti
- Teorie informace: entropie, křížová entropie a KL divergence — odkud se berou ztrátové funkce
- Prohledávání stavového prostoru: BFS, DFS, UCS a A* s animacemi
- Hry a protivník: minimax, alfa-beta ořezávání a Monte Carlo tree search
- Splňování omezujících podmínek: backtracking, propagace omezení a AC-3 na sudoku a mapě krajů
- Logika a znalostní systémy: dopředné a zpětné řetězení, rezoluce a expertní systémy
- Plánování: STRIPS, svět kostek, heuristiky z relaxace a plánování v AI agentech
- Lokální hledání a simulované žíhání: obchodní cestující přes krajská města
- Genetické algoritmy: populace, křížení, mutace a výběr na batohu na výlet
- Evoluční strategie a genetické programování: od pravidla jedné pětiny po Keplerův zákon
- Optimalizace mravenčí kolonií: jak feromonová stopa najde krátkou cestu
- Optimalizace hejnem částic: setrvačnost, vlastní zkušenost a zkušenost hejna
- Neuroevoluce: evoluce vah i tvaru neuronových sítí a algoritmus NEAT
- Fuzzy množiny a funkce příslušnosti: jak zapsat „trochu teplo“
- Fuzzy logika a pravděpodobnost: proč „trochu teplo“ neznamená „pravděpodobně teplo“
- Fuzzy logika: t-normy, implikace a pravidla KDYŽ–PAK
- Fuzzy řízení: Mamdani a Sugeno od ventilátoru po kyvadlo na vozíku
- Fuzzy shlukování: algoritmus fuzzy c-means a body mezi shluky
- Neuro-fuzzy systémy (ANFIS): fuzzy pravidla, která se učí z dat
- Markovovy řetězce: přechodová matice, stacionární rozdělení a PageRank
- Skryté Markovovy modely: Viterbiho algoritmus a nepoctivé kasino
- Bayesovské sítě: proč je tráva mokrá a co z toho plyne pro postřikovač
- Kalmanův filtr: jak z nepřesných měření odhadnout, kde auto je a jak rychle jede
- Druhy strojového učení: s učitelem, bez učitele, s částečným učitelem a další
- Přeučení a regularizace: proč model, který zná data nazpaměť, selže
- Vyhodnocení modelu: křížová validace, F1 a křivka ROC
- Shlukování a snížení dimenze: k-means, PCA a t-SNE
- Klasifikace a regrese: dvě úlohy učení s učitelem
- Lineární regrese: nejmenší čtverce geometricky i maticově
- Polynomiální a nelineární regrese: jak přímku ohnout
- Logistická regrese: sigmoida, šance a křížová entropie
- Vícetřídní klasifikace a softmax: od dvou tříd k mnoha
- Naivní Bayesův klasifikátor: spamový filtr, který funguje lépe, než by měl
- Ztrátové funkce: co přesně model minimalizuje
- Rozhodovací stromy a k nejbližších sousedů: modely bez vzorců
- Ansámbly: náhodný les a gradient boosting
- SVM a jádrový trik: nejširší hranice a jak ji ohnout
- Signál a vzorkování: proč platí Nyquistův teorém
- Fourierova transformace: rozklad signálu na frekvence
- Filtry a konvoluce: vyhlazení, hrany a odstranění šumu
- Zvuk a řeč: spektrogram, melová škála a MFCC
- Obraz jako signál: pixely, barvy, konvoluce a hrany
- Perceptron a umělý neuron: nejjednodušší neuronová síť a co neumí
- Neuronová síť od nuly: zpětné šíření chyby krok za krokem
- Aktivace, inicializace a normalizace: drobnosti, na kterých hluboká síť stojí
- Konvoluční sítě: jak síť poznává obrázky
- Rekurentní sítě: paměť pro posloupnosti a mizející gradient
- LSTM a GRU: brány, které rozhodují, co si síť zapamatuje
- Autoenkodéry: síť, která se učí data stlačit a zase rozbalit
- Embeddingy a word2vec: jak se slovo stane vektorem
- Mechanismus pozornosti: jak se model naučí, kam se dívat
- Transformery a velké jazykové modely: architektura krok za krokem
- Tokenizace: jak se text rozseká na kousky pro model
- Předtrénování a škálování: proč větší model a víc dat funguje
- Doladění a RLHF: jak se z doplňovače textu stane asistent
- Prompty, kontext a RAG: jak modelu dát správné informace
- Variační autoenkodéry (VAE): nové obrázky ze spojitého latentního prostoru
- Generativní adversariální sítě (GAN): padělatel proti detektivovi
- Difúzní modely: jak se z čistého šumu stane obrázek
- Markovovy rozhodovací procesy: stavy, akce, odměny a Bellmanovy rovnice
- Q-learning a DQN: učení hodnoty akcí od tabulky po neuronovou síť
- Policy gradient a PPO: učení přímo strategie
- Jak funguje AI agent: jazykový model ve smyčce s nástroji
- Programování s AI agenty: zadání, testy a kontrola
- Vyhodnocení a bezpečnost AI systémů: jak měřit a jak hlídat
Celá osnova série 83 z 83 témat hotovo
- Co počítá umělý neuron a proč je to přímka.
- Jak se perceptron učí z chyb a proč se na oddělitelných datech vždy zastaví.
- Proč jeden neuron nezvládne XOR a proč sítě potřebují skryté vrstvy.
Co se hodí znát předem: Logistická regrese: sigmoida, šance a křížová entropie, SVM a jádrový trik: nejširší hranice a jak ji ohnout
V roce 1958 napsal New York Times, že americké námořnictvo představilo zárodek počítače, který „bude chodit, mluvit, vidět, psát, rozmnožovat se a uvědomovat si sám sebe“. Šlo o perceptron Franka Rosenblatta — stroj velký jako skříň, který se z příkladů učil rozlišovat jednoduché obrázky. O jedenáct let později dva profesoři z MIT dokázali, co perceptron nikdy nezvládne, a zájem o neuronové sítě na dlouhá léta opadl. Obojí stojí za pochopení: perceptron je nejjednodušší neuronová síť, a jeho slabina ukazuje, proč dnešní sítě mají vrstvy.
Navazuje na díly Logistická regrese a SVM a jádrový trik.
1. Umělý neuron
Definice — umělý neuron
Nechť n ∈ ℕ, n ≥ 1, je počet vstupů, w = (w1, …, wn) ∈ ℝn jsou váhy, b ∈ ℝ je práh (bias) a φ : ℝ → ℝ je funkce, které říkáme aktivační funkce. Umělý neuron s parametry (w, b) a aktivací φ je funkce N : ℝn → ℝ,
N(x) = φ(z), kde z = ∑i=1n wixi + b = w1x1 + … + wnxn + b,
pro každý vstup x = (x1, …, xn) ∈ ℝn. Číslu z ∈ ℝ říkáme vážený součet (součtová bázová funkce). V nejjednodušší verzi (Warren McCulloch a Walter Pitts, 1943) je aktivací skoková funkce H : ℝ → {0, 1}, H(z) = 1 pro z ≥ 0 a H(z) = 0 pro z < 0; výstup neuronu ŷ = H(z) je pak 1, právě když z ≥ 0, a jinak 0.
Biologický neuron sbírá signály od tisíců sousedů. Některé spojení ho povzbuzují, jiné tlumí, a když součet překročí práh, neuron „vystřelí“. Umělý neuron je karikatura téhož: váhy jsou síla spojení, práh je citlivost, skok je výstřel. Skutečný neuron je mnohem složitější, ale na výpočty to nevadí.
ŷ = H( ∑i=1n wixi + b )
- ŷ
- výstup neuronu, 0 nebo 1 — rozhodnutí „ano/ne“, kvůli kterému neuron vůbec počítáme
- xi
- vstupy — to, co neuron o příkladu ví; na obrázku modré kroužky
- wi
- váhy — říkají, jak moc a kterým směrem má vstup hlasovat: kladná váha výstup povzbuzuje, záporná tlumí, nulová vstup ignoruje. Násobí se, aby vliv vstupu rostl s jeho velikostí
- b
- práh (bias) — posouvá hranici, od které neuron vystřelí. Bez něj by se hranice musela vždy dotýkat počátku (pro nulový vstup je součet 0) a neuron by nespočítal třeba AND
- H
- skoková aktivace — z libovolně velkého součtu udělá jednoznačné rozhodnutí 0/1; právě ona dělá z lineární funkce klasifikátor
McCulloch a Pitts ukázali, že takové neurony umějí logiku. Neuron s vahami 1 a 1 a prahem −1,5 vystřelí, jen když jsou oba vstupy 1 — to je AND. S prahem −0,5 stačí jeden vstup — OR. S vahami −1, −1 a prahem 1,5 dostaneme NAND. A z hradel NAND se dá postavit celý počítač.
Příklad — hradlo AND krok za krokem
Váhy w = (1, 1), práh b = −1,5. Pro každý ze čtyř vstupů spočteme z = w1x1 + w2x2 + b a výstup H(z) (barvy podle vzorce výše):
x = (0, 0): z = 1 · 0 + 1 · 0 − 1,5 = −1,5, ŷ = 0
x = (0, 1): z = 1 · 0 + 1 · 1 − 1,5 = −0,5, ŷ = 0
x = (1, 0): z = 1 · 1 + 1 · 0 − 1,5 = −0,5, ŷ = 0
x = (1, 1): z = 1 · 1 + 1 · 1 − 1,5 = 0,5, ŷ = 1
Práh −1,5 je tak velký, že ho jeden vstup (součet 1) nepřetlačí, oba (součet 2) ano. Stejně by fungoval jakýkoli práh od −2 (včetně) do −1 (bez −1) — hradlo nemá jediné „správné“ váhy.
Geometricky je neuron přímka (v obecnosti nadrovina): na jedné straně řekne 1, na druhé 0. To je stejné jako rozhodovací hranice logistické regrese — perceptron je logistická regrese se skokem místo sigmoidy.
Definice — skalární součin, rozhodovací hranice a vzdálenost od ní
Nechť n ∈ ℕ, n ≥ 1, a u = (u1, …, un), v = (v1, …, vn) ∈ ℝn. Skalární součin vektorů u a v je číslo
u · v = ∑i=1n uivi = u1v1 + … + unvn,
a (eukleidovská) délka vektoru u je ‖u‖ = √u · u = √u12 + … + un2 ≥ 0. Skoková (Heavisideova) funkce je H : ℝ → {0, 1}, H(z) = 1 pro z ≥ 0 a H(z) = 0 pro z < 0. Neuron s váhami w ∈ ℝn, prahem b ∈ ℝ a skokovou aktivací tedy pro vstup x ∈ ℝn počítá ŷ = H(w · x + b).
Nechť dále w ∈ ℝn, w ≠ 0, a b ∈ ℝ. Rozhodovací hranice neuronu je množina
{x ∈ ℝn : w · x + b = 0}.
Je to nadrovina (pro n = 2 přímka, pro n = 3 rovina); vektor w je na ni kolmý a ukazuje do poloprostoru {x : w · x + b > 0}, kde neuron říká 1. Orientovaná vzdálenost od hranice je funkce d : ℝn → ℝ,
d(x) = w · x + b/‖w‖.
Její absolutní hodnota |d(x)| je (eukleidovská) vzdálenost bodu x od hranice a platí d(x) > 0, právě když w · x + b > 0 — kladná je tedy na straně jedniček, záporná na straně nul a nulová přesně na hranici.
Hodnota w · x + b neříká jen „ano/ne“, ale i „jak moc“: čím dál od čáry bod leží, tím větší je. Vydělením délkou ‖w‖ z ní uděláme skutečnou vzdálenost v rovině — jinak by stačilo vynásobit všechny váhy deseti a „vzdálenost“ by narostla desetkrát, ačkoli čára zůstala na místě. U hradla AND má bod (1, 1) od čáry x1 + x2 = 1,5 vzdálenost 1 + 1 − 1,5/√2 = 0,354 a bod (0, 0) vzdálenost −1,5/√2 = −1,061 (barvy podle vzorce níže).
d(x) = w · x + b/‖w‖
- d(x)
- orientovaná vzdálenost bodu x od hranice — velikost říká, jak daleko od čáry bod leží, znaménko, na které straně
- w · x + b
- vážený součet, který neuron posílá do skoku — nulový přesně na hranici a tím větší, čím dál od ní bod leží
- ‖w‖
- délka vektoru vah — dělením jí se zbavíme měřítka: váhy vynásobené deseti dají tutéž hranici i tutéž vzdálenost. U hradla AND je w = (1, 1), takže ‖w‖ = √2
2. Perceptron: neuron, který se učí
Definice — perceptronové učicí pravidlo
Nechť n, m ∈ ℕ, n, m ≥ 1. Perceptron (Frank Rosenblatt, 1958) je algoritmus:
- vstup: trénovací data (x1, y1), …, (xm, ym), kde xi ∈ ℝn je vstup a yi ∈ {−1, +1} jeho třída (i = 1, …, m), rychlost učení η ∈ ℝ, η > 0, a největší počet epoch T ∈ ℕ, T ≥ 1;
- výstup: váhy w ∈ ℝn a práh b ∈ ℝ.
- Polož w = 0 ∈ ℝn, b = 0 a t = 0.
- Pro i = 1, 2, …, m postupně: je-li yi(w · xi + b) ≤ 0 (příklad i je zařazen chybně nebo leží přesně na hranici), proveď opravu w ← w + ηyixi, b ← b + ηyi; jinak w a b nech beze změny.
- Zvětši t o 1. Jestliže v kroku 2 nebyla provedena žádná oprava, nebo t = T, zastav a vrať (w, b). Jinak pokračuj krokem 2.
Jeden průchod krokem 2 (všemi m příklady) je epocha. Perceptron tedy prochází příklady jeden po druhém, váhy opravuje jen u chybně zařazených a skončí, právě když celá epocha proběhne bez opravy, nebo když vyčerpá T epoch.
Učení chybou. Když neuron řekne „ne“ u příkladu, který měl být „ano“, přičte ten příklad ke svým vahám — a příště bude k podobným příkladům vstřícnější. Když řekne „ano“ místo „ne“, příklad odečte. Rosenblattův stroj Mark I to dělal fyzicky: váhy byly potenciometry, které otáčely elektromotory.
w ← w + η y x, b ← b + η y
- w
- váhy — jediné, co se učením mění; nalevo nové, napravo staré, oprava se ke starým jen přičte
- η
- rychlost učení — jak velký krok oprava udělá. Když perceptron začíná z nul, na η > 0 vůbec nezáleží: všechny váhy jsou pak násobkem η a hranice vyjde stejná. Proto se klidně bere η = 1
- y
- správná třída, +1 nebo −1 — určuje směr opravy: přičíst příklad, nebo odečíst. Kvůli tomuhle se třídy značí ±1, a ne 0/1
- x
- vstup chybně zařazeného příkladu — oprava posune váhy k němu (nebo od něj), takže příště bude mít w · x správné znaménko „víc“; vstupy, které jsou 0, váhu nezmění, protože k chybě nepřispěly
- b
- práh — učí se stejně jako váha u vstupu, který je pořád 1
Věta — oprava posune odpověď správným směrem
Nechť n ≥ 1, w, x ∈ ℝn, b ∈ ℝ, y ∈ {−1, +1} a η > 0, a nechť w′ = w + ηyx a b′ = b + ηy jsou váhy a práh po opravě kvůli příkladu (x, y). Pak
y(w′ · x + b′) = y(w · x + b) + η(‖x‖2 + 1),
tj. veličina y(w · x + b) vzroste přesně o η(‖x‖2 + 1) > 0.
Důkaz. y((w + ηyx) · x + b + ηy) = y(w · x + b) + ηy2(x · x + 1), a protože y2 = 1 a x · x = ‖x‖2, plyne tvrzení. ∎
Na tomhle příkladu se tedy neuron vždycky zlepší. Nemusí ho ale hned zařadit správně (když byla chyba velká) a může přitom pokazit jiné příklady — proto počet chyb v grafu níže kolísá.
Celý algoritmus jako pseudokód:
def perceptron(data, eta=1, max_epoch=100):
w, b = [0, 0], 0 # start z nul
for epocha in range(max_epoch):
chyb = 0
for x, y in data: # y je +1 nebo −1
if y * (dot(w, x) + b) <= 0: # špatně (nebo přesně na hranici)
w = w + eta * y * x # posun k příkladu / od něj
b = b + eta * y
chyb += 1
if chyb == 0: # celá epocha bez chyby:
return w, b # data jsou oddělená
return w, b # nepovedlo se (třeba XOR)
Šedesát bodů v rovině, třídy oddělené šikmou přímkou s volným pásem kolem ní. Perceptron začne s nulovými vahami:
V první epoše se perceptron spletl 27krát, ve druhé 18krát. Pak chyby kolísají — oprava kvůli jednomu bodu může pokazit jiný — ale ve 13. epoše už neudělá žádnou: data jsou oddělená. Celkem k tomu potřeboval 130 oprav. Výsledná hranice ale není nejlepší možná: nejbližší bod od ní leží ve vzdálenosti 0,17, kdežto SVM, které okraj maximalizuje, má 0,25. Perceptron se zastaví u první hranice, která funguje.
Definice — okraj hranice a okraj dat
Nechť n, m ≥ 1 a (x1, y1), …, (xm, ym) jsou data, xi ∈ ℝn, yi ∈ {−1, +1} pro i = 1, …, m. Nechť w ∈ ℝn, w ≠ 0, a b ∈ ℝ určují hranici {x : w · x + b = 0}. Okraj hranice (w, b) na těchto datech je číslo
γ(w, b) = mini = 1, …, m yi(w · xi + b)/‖w‖ = mini = 1, …, m yi d(xi),
tedy nejmenší orientovaná vzdálenost bodu od hranice, počítaná se znaménkem jeho třídy. Platí γ(w, b) > 0, právě když yi(w · xi + b) > 0 pro všechna i = 1, …, m, tj. právě když hranice zařadí všechny body správně (a žádný neleží na ní).
- Data jsou lineárně oddělitelná, právě když ∃w ∈ ℝn ∖ {0} ∃b ∈ ℝ : γ(w, b) > 0.
- Okraj dat je γ* = max {γ(w, b) : w ∈ ℝn ∖ {0}, b ∈ ℝ} — největší okraj, jakého lze nějakou hranicí dosáhnout (pro lineárně oddělitelná data se maximum nabývá). Hranici s tímto okrajem najde SVM (s tvrdým okrajem, viz díl o SVM).
U nás: perceptron skončil s w = (6,48; 5,55), b = −40, tedy ‖w‖ = 8,53, a nejbližší bod má y(w · x + b) = 1,42, takže okraj je 1,42/8,53 = 0,17. SVM má 0,25.
3. Věta o konvergenci
Věta — Novikoffova (o konvergenci perceptronu)
Nechť n, m ≥ 1 a (x1, y1), …, (xm, ym) jsou data, xi ∈ ℝn, yi ∈ {−1, +1}. Práh zahrneme do vah jako váhu u stálého vstupu 1: označme x̃i = (xi, 1) ∈ ℝn+1 a w̃ = (w, b) ∈ ℝn+1, takže w̃ · x̃i = w · xi + b. Předpokládejme, že
- existují u ∈ ℝn+1 s ‖u‖ = 1 a γ > 0 takové, že yi(u · x̃i) ≥ γ pro všechna i = 1, …, m (data jsou lineárně oddělitelná s okrajem aspoň γ v rozšířeném prostoru);
- R > 0 splňuje ‖x̃i‖ ≤ R pro všechna i = 1, …, m.
Pak perceptron se startem w̃ = 0 a libovolnou rychlostí učení η > 0, procházející příklady v libovolném pořadí (každý i opakovaně), provede konečný počet oprav k a platí
k ≤ (R/γ)2
(Albert Novikoff, 1962). Po poslední opravě zařazuje všechny příklady správně, takže na lineárně oddělitelných datech se učení vždy zastaví.
Každá oprava posune váhy blíž k ideální hranici, a to aspoň o kousek úměrný okraji. Váhy ale zároveň nemohou růst rychleji než s odmocninou počtu oprav. Tyhle dvě podmínky se dlouho nesnesou, a tak oprav nemůže být nekonečně mnoho. Čím širší volný pás mezi třídami, tím rychleji perceptron skončí.
k ≤ ( R/γ )2
- k
- počet oprav, které perceptron za celé učení udělá — po poslední opravě už je bez chyby, takže omezit k znamená zaručit, že učení skončí
- R
- největší délka vstupu (s jedničkou pro práh) — každá oprava přičte k vahám jeden vstup, takže R určuje, jak moc mohou váhy „rozkmitat“; je v čitateli, protože velké vstupy dělají velké skoky
- γ
- okraj dat — šířka volného pásu mezi třídami; je ve jmenovateli, protože čím širší pás, tím víc hranic funguje a tím dřív na některou perceptron narazí
Důkaz Novikoffovy věty
Zahrneme práh do vah (x ← (x, 1), w ← (w, b)), začneme z w0 = 0 a vezmeme η = 1 (na η nezáleží, viz výše). Nechť wk jsou váhy po k-té opravě a u jednotkový vektor z předpokladu věty.
1. Váhy se blíží k u. Oprava kvůli (x, y) dá wk · u = wk−1 · u + y(u · x) ≥ wk−1 · u + γ, takže po k opravách wk · u ≥ kγ.
2. Váhy rostou pomalu. ‖wk‖2 = ‖wk−1‖2 + 2y(wk−1 · x) + ‖x‖2 ≤ ‖wk−1‖2 + R2, protože u chybně zařazeného příkladu je prostřední člen ≤ 0. Tedy ‖wk‖2 ≤ kR2.
3. Spojení. Pro jednotkové u je wk · u ≤ ‖wk‖ (Cauchyova–Schwarzova nerovnost), takže kγ ≤ wk · u ≤ ‖wk‖ ≤ √k R, neboli √k ≤ R/γ a k ≤ (R/γ)2. ∎
Krok 1 roste s k lineárně, krok 2 jen s √k — to je přesně „dvě podmínky, které se dlouho nesnesou“ z laického vysvětlení.
Pro naše data je R = 9,44 a okraj v rozšířeném prostoru (s jedničkou pro práh) γ = 0,052, takže věta zaručuje nejvýš 33 576 oprav. Skutečně jich bylo 130. Mez je hodně opatrná, ale důležité je, že existuje: na oddělitelných datech se perceptron vždycky zastaví.
R/γ = 9,4409/0,05152 ≈ 183,2, (R/γ)2 ≈ 33 576
skutečně: k = 130, tedy 0,4 % meze (barvy podle vzorce výše)
Proč je mez tak vysoko? Okraj v rozšířeném prostoru (0,052) je asi pětkrát menší než okraj v rovině (0,25): dělí se délkou celého vektoru (w, b), a práh je tu velký, protože hranice leží skoro 5 jednotek od počátku. A hlavně: věta platí pro nejhorší možné pořadí příkladů, ne pro to naše.
4. Co perceptron neumí: XOR
Funkce XOR (vylučovací „nebo“) vrátí 1, když je jedničkou právě jeden vstup. Na obrázku hradel výše jsou body pro výstup 1 na jedné úhlopříčce a body pro výstup 0 na druhé — žádná přímka je neoddělí. Perceptron se o to přesto pokouší: v každé epoše udělá čtyři chyby, po dvanácti epochách 48 oprav, a takhle by pokračoval donekonečna.
Věta — XOR není lineárně oddělitelný
Nechť XOR : {0, 1}2 → {0, 1} je funkce XOR(x1, x2) = 1, právě když x1 ≠ x2 (jinak 0), a H skoková funkce. Pak neexistují w1, w2, b ∈ ℝ takové, že
∀(x1, x2) ∈ {0, 1}2 : H(w1x1 + w2x2 + b) = XOR(x1, x2),
tj. žádný jeden neuron se skokovou aktivací XOR nepočítá.
Důkaz. Pro XOR by muselo platit
(0, 0) → 0: b < 0 (1, 1) → 0: w1 + w2 + b < 0
(0, 1) → 1: w2 + b ≥ 0 (1, 0) → 1: w1 + b ≥ 0
Sečtením dvou nerovností nahoře dostaneme w1 + w2 + 2b < 0, sečtením dvou dole w1 + w2 + 2b ≥ 0. Spor. ∎
Geometricky: středy obou úhlopříček jsou týž bod (½, ½). Kdyby přímka oddělila jedničky od nul, ležel by tenhle bod zároveň na straně jedniček (jako střed úsečky mezi nimi) i na straně nul.
Proč přesně čtyři chyby v každé epoše? Trasování první epochy (pořadí příkladů (0, 0), (0, 1), (1, 0), (1, 1), třídy ±1, η = 1):
| krok | vstup x | y | w · x + b | chyba? | (w1, w2, b) po kroku |
|---|---|---|---|---|---|
| 1 | (0, 0) | −1 | 0 | ano | (0, 0, −1) |
| 2 | (0, 1) | +1 | −1 | ano | (0, 1, 0) |
| 3 | (1, 0) | +1 | 0 | ano | (1, 1, 1) |
| 4 | (1, 1) | −1 | 3 | ano | (0, 0, 0) |
Po čtvrté opravě jsou váhy zase (0, 0, 0) — přesně tam, kde začaly. Druhá epocha proto proběhne úplně stejně, třetí taky: perceptron se točí v kruhu. Na oddělitelných datech by Novikoffova věta takový kruh zakázala; tady neplatí, protože žádný kladný okraj γ neexistuje.
V roce 1969 vydali Marvin Minsky a Seymour Papert knihu Perceptrons, ve které přesně popsali, co jeden perceptron dokáže a co ne. XOR byl nejjednodušší příklad, ale ukázali i vážnější omezení, například že perceptron nepozná, jestli je obrazec souvislý. Kniha se stala symbolem konce optimismu; peníze na výzkum neuronových sítí vyschly a obor na dlouho utichl. (Celou umělou inteligenci pak v letech 1974–1980 zasáhla první „zima AI“ — ta měla víc příčin, mimo jiné Lighthillovu zprávu a škrty agentury DARPA.)
5. Řešení: víc vrstev
Definice — vícevrstvá síť
Nechť n ∈ ℕ, n ≥ 1, je počet vrstev, d0, d1, …, dn ≥ 1 jsou šířky vrstev (d0 je počet vstupů), x ∈ ℝd0 je vstup a pro ℓ = 1, …, n jsou W(ℓ) ∈ ℝdℓ×dℓ−1 váhy, b(ℓ) ∈ ℝdℓ prahy a φℓ : ℝ → ℝ aktivační funkce vrstvy ℓ (na vektor se použije po složkách). Vícevrstvá síť počítá a(0) = x a pro ℓ = 1, …, n
z(ℓ) = W(ℓ)a(ℓ−1) + b(ℓ) ∈ ℝdℓ, a(ℓ) = φℓ(z(ℓ)) ∈ ℝdℓ;
jejím výstupem je ŷ = a(n). Složka ai(ℓ) = φℓ(∑j=1dℓ−1 Wij(ℓ)aj(ℓ−1) + bi(ℓ)) je výstup i-tého neuronu vrstvy ℓ — umělého neuronu s váhami z i-tého řádku W(ℓ), jehož vstupy jsou výstupy vrstvy ℓ − 1. Vrstvy 1, …, n − 1 se nazývají skryté, vrstva n výstupní.
XOR je „OR, ale ne obojí“, tedy OR a zároveň NAND. Dva neurony ve skryté vrstvě spočtou OR a NAND, třetí na výstupu jejich AND. Každý neuron kreslí jen přímku, ale výstupní neuron kombinuje výsledky dvou přímek — a pás mezi nimi je přesně oblast, kde XOR vrací 1.
ŷ = H( h1 + h2 − 1,5 ), h1 = H(x1 + x2 − 0,5), h2 = H(−x1 − x2 + 1,5)
- ŷ
- výstup sítě — XOR obou vstupů
- h1
- skrytý neuron OR — hlídá „aspoň jeden vstup je 1“; odřízne bod (0, 0)
- h2
- skrytý neuron NAND — hlídá „ne oba“; odřízne bod (1, 1). Každý skrytý neuron je jedna přímka z obrázku hradel
- −1,5
- práh výstupního neuronu AND — součet dvou skrytých výstupů musí být 2, tedy obě podmínky musí platit najednou; tím se z dvou polorovin stane pás mezi přímkami
Příklad — síť pro XOR na všech čtyřech vstupech
| x | x1 + x2 − 0,5 | h1 | −x1 − x2 + 1,5 | h2 | h1 + h2 − 1,5 | ŷ |
|---|---|---|---|---|---|---|
| (0, 0) | −0,5 | 0 | 1,5 | 1 | −0,5 | 0 |
| (0, 1) | 0,5 | 1 | 0,5 | 1 | 0,5 | 1 |
| (1, 0) | 0,5 | 1 | 0,5 | 1 | 0,5 | 1 |
| (1, 1) | 1,5 | 1 | −0,5 | 0 | −0,5 | 0 |
Barvy sloupců odpovídají členům vzorce výše.
Skrytá vrstva přemapuje čtyři body na tři: (0, 0) → (0, 1), (0, 1) i (1, 0) → (1, 1), (1, 1) → (1, 0). V nových souřadnicích (h1, h2) už jedničky od nul jedna přímka oddělí — to je celé tajemství skrytých vrstev.
Síť dává pro vstupy (0, 0), (0, 1), (1, 0), (1, 1) výstupy 0, 1, 1, 0 — XOR. Minsky a Papert věděli, že vícevrstvé sítě XOR zvládnou. Problém byl jinde: nikdo neuměl váhy skrytých neuronů naučit. Perceptronové pravidlo opravuje váhy podle chyby výstupu, ale skrytý neuron žádnou „správnou odpověď“ nemá. Řešení — zpětné šíření chyby — se rozšířilo až v roce 1986 a je tématem dalšího dílu.
6. Neuron dnes
- Hladká aktivace. Místo skoku se používá sigmoida, tanh nebo ReLU. Skok má derivaci nulovou všude kromě jednoho bodu, a gradientní sestup s ním nic nesvede.
- Neuron = logistická regrese. Neuron se sigmoidou učený křížovou entropií je přesně logistická regrese; s hinge ztrátou je to lineární SVM. Perceptron je jejich předek.
- Miliardy neuronů. Velký jazykový model má miliardy vah, ale každý jeho neuron dělá pořád totéž: vážený součet, práh, aktivace.
Věta — perceptron je stochastický gradientní sestup
Rosenblatt pravidlo odvodil jinak; dnes se na něj díváme takto. Nechť n ≥ 1, (x, y) ∈ ℝn × {−1, +1} je jeden trénovací příklad a η > 0. Pro váhy w ∈ ℝn a práh b ∈ ℝ označme m(w, b) = y(w · x + b) — kladné, právě když je příklad zařazen správně. Perceptronová ztráta příkladu je funkce L : ℝn × ℝ → ℝ,
L(w, b) = max(0, −m(w, b)):
nula u správně zařazených příkladů, jinak tím větší, čím hlouběji na špatné straně příklad leží. Tvrzení: je-li m(w, b) < 0, pak krok stochastického gradientního sestupu na tomto příkladu,
w ← w − η ∂L/∂w(w, b), b ← b − η ∂L/∂b(w, b),
je přesně oprava perceptronu w ← w + ηyx, b ← b + ηy; je-li m(w, b) > 0, je gradient nulový a krok nic nezmění (stejně jako perceptron). Zde ∂L/∂w = (∂L/∂w1, …, ∂L/∂wn) ∈ ℝn.
Důkaz. Na otevřené množině {m < 0} je L = −y(w · x + b), takže ∂L/∂w = −yx a ∂L/∂b = −y; dosazením do kroku sestupu dostaneme w + ηyx a b + ηy. Na {m > 0} je L = 0 a gradient nulový. (V bodech s m = 0 derivace neexistuje; perceptron tam přesto opravuje, což odpovídá volbě jednoho z takzvaných subgradientů.) ∎
Stejně se dají zapsat i příbuzní: hinge ztráta SVM max(0, 1 − m) trestá i správné příklady, které leží blíž než 1 (tím vynucuje okraj), a logistická ztráta ln(1 + e−m) je hladká verze, která má gradient všude. Liší se jen tvarem ztráty jako funkce m.
7. Shrnutí
- Umělý neuron počítá vážený součet vstupů s prahem a posílá ho aktivací; se skokem umí AND, OR i NAND.
- Perceptron se učí opravou vah po každé chybě; na 60 oddělitelných bodech mu stačilo 130 oprav a od 13. epochy byl bez chyby.
- Najde nějakou oddělující přímku, ne nejlepší: okraj 0,17 proti 0,25 u SVM.
- Novikoffova věta zaručuje konečný počet oprav na oddělitelných datech (u nás mez 33 576).
- XOR přímkou oddělit nejde a perceptron dělá 4 chyby v každé epoše navždy; dvě vrstvy XOR spočítají, ale bylo je potřeba naučit.
Chcete si to osahat? Nechte AI agenta napsat perceptron na dvaceti řádcích a pustit ho na funkce AND, OR a XOR — a pak přidat třetí vstup x1 · x2. Co se stane s XOR?
Máte na to jiný názor? Napište na support@coden-app.com.