Nelineární klasifikátory
Nelineární klasifikátory obsah: XOR problém dvouvrstvý perceptron třívrstvý perceptron algoritmy založené na přímé klasifikaci trénovací množiny „tiling“ algoritmus algoritmus zpětného šíření zobecněný lineární klasifikátor polynomiální klasifikátor
Nelineární klasifikátory nyní se budeme zabývat problémy, které nejsou lineárně separabilní tedy lineární klasifikátor nepovede k uspokojivým výsledkům pokusíme se vyjít od problému lineárního klasifikátoru a rozšířit jej, aby uměl pracovat i s nelineárně separabilními třídami nejjednodušší nelineárně separabilní problém je XOR funkce => neexistuje jediná nadrovina (přímka), která tyto dvě třídy odděluje
Nelineární klasifikátory na rozdíl od funkce XOR jsou funkce AND a OR lineárně separabilní => pro tyto funkce lze najít perceptron, který je klasifikuje na obrázku je perceptron pro funkci OR
Klasifikace více nadrovinami k vyřešení problému XOR se pokusíme použít dvě nadroviny (místo jediné): g1(x)=0 a g2(x)=0 => nyní lze třídy A a B separovat třída A ... (+) část z g1(x) (–) část z g2(x) třída B ... obráceně dostali jsme 2 fáze klasifikace 1. fáze spočteme pozici příznakových vektorů x s ohledem na každou z klasifikačních nadrovin 2. fáze výsledky první fáze spojíme dohromady a najdeme pozici x s ohledem na všechny klasifikační nadroviny
Klasifikace více nadrovinami – 1. fáze 1. fáze pro problém XOR: použijeme 2 perceptrony perceptrony budou mít vstupy x1 a x2 a příslušné váhy výstup i-tého perceptronu je yi = f (gi (x)) pro i = 1, 2 v tabulce jsou shrnuty hodnoty yi pro všechny možné vstupy: => 1. fáze je mapování vstupního vektoru x do nového vektoru y = (y1,y2)
Klasifikace více nadrovinami – 2. fáze 2. fáze pro problém XOR: výsledky první fáze jsou spojovány dohromady rozhodování je prováděno na transformovaných datech třída A ... y1 = (1,0) třída B ... y2 = (0,0) a y3 = (1,1) => tyto transformované vzory lze snadno oddělit jedinou nadrovinou g(y) => nelineárně separabilní problém jsme namapovali na lineárně separabilní problém XOR problém lze vyřešit 3 perceptrony, které jsou uspořádány do tzv. dvouvrstvého perceptronu jednotlivé dělicí nadroviny: g1(x) = x1 + x2 – 1/2 = 0 g2(x) = x1 + x2 – 3/2 = 0 g(y) = y1 – y2 – 1/2 = 0
Dvouvrstvý perceptron struktura dvouvrstvého perceptronu: jednotlivé vrstvy: vstupní vrstva počet jednotek odpovídá dimenzi vzorů předložena data a ty se jen rozdistribuují do dalších vrstev (nic nepočítají) skrytá vrstva realizuje první fázi výstupní vrstva realizuje druhou fázi pro jednoduchost se omezíme na 1 výstupní neuron (lze snadno zobecnit)
Dvouvrstvý perceptron – skrytá vrstva provede mapování vstupního prostoru na vrcholy jednotkové hyperkostky Hp v p-dimenzionálním prostoru mapování vstupního prostoru na vrcholy hyperkostky se dosáhne vytvořením p nadrovin každá nadrovina je tvořena jedním perceptronem ve skryté vrstvě výstup skrytého neuronu je 0 nebo 1
Dvouvrstvý perceptron – skrytá vrstva na obrázku je příklad tří protínajících se nadrovin i-tá složka ve vrcholu odpovídá pozici oblasti s ohledem na i-tou nadrovinu gi např. vrchol 001 odpovídá oblasti, která je (+) poloprostoru nadroviny g1, (–) poloprostoru g2 a (+) poloprostoru g3 skrytá vrstva: skrytá vrstva rozdělí l-dimenzionální vstupní prostor do mnohostěnů, které jsou dány průniky nadrovin všechny vektory uvnitř jednoho mnohostěnu jsou mapovány na jeden vrchol hyperkostky
Dvouvrstvý perceptron – výstupní vrstva zatím uvažujeme jen jeden výstupní perceptron realizuje další nadrovinu, která rozdělí hyperkostku na 2 části příklad: třída A ... oblasti namapované na vrcholy 000, 001, 011 třída B ... oblasti namapované na vrcholy 010, 100, 110, 111 => nadrovina oddělující tyto třídy má tvar: –y1 – y2 – y3 +0,5 = 0 a je realizována výstupním neuronem
Dvouvrstvý perceptron – výstupní vrstva jiný příklad: třída A ... oblasti namapované na vrcholy 000, 111, 110 třída B ... zbytek => není možné sestrojit jedinou nadrovinu, která třídy oddělí dvouvrstvý perceptron umí separovat třídy, které jsou sjednocením mnohostěnných oblastí ale neumí separovat každé sjednocení mnohostěnných oblastí pozn. existují vrcholy, které neodpovídají žádně mnohostěnné oblasti (např. 101) .... virtuální mnohostěny tyto oblasti nemají vliv na klasifikaci
Třívrstvý perceptron dvouvrstvý perceptron: třívrstvý perceptron: neumí separovat třídy, které jsou libovolným sjednocením mnohostěnných oblastí ekvivalentní problém jako perceptron versus XOR => přidáme další vrstvu => třívrstvý perceptron třívrstvý perceptron: zvládne separovat třídy, které jsou libovolným sjednocením mnohostěnných oblastí
Třívrstvý perceptron – skryté vrstvy předpoklad: nechť třída A je sjednocení J mnohostěnných oblastí a třída B jsou ostatní oblasti 1. skrytá vrstva má p neuronů provede mapování vstupního prostoru na vrcholy jednotkové hyperkostky Hp v p-dimenzionálním prostoru 2. skrytá vrstva pro třídu A potřebujeme J neuronů ve 2. skryté vrstvě každý neuron realizuje jednu nadrovinu, která izoluje právě jediný vrchol hyperkostky na jedné straně nadroviny bude vybraný vrchol hyperkostky na druhé straně budou zbylé vrcholy hyperkostky výstupní vrstva pro jednoduchost uvažujeme jen 1 výstupní perceptron výstupní neuron realizuje OR-bránu pro jednotlivé třídy
Třívrstvý perceptron – činnost sítě 1. skrytá vrstva provede mapování vstupního prostoru na vrcholy jednotkové hyperkostky Hp v p-dimenzionálním prostoru 2. skrytá vrstva vstupní vektor je ze třídy A jeden z neuronů ve 2. skryté vrstvě dá výstup 1 ostatních J-1 neuronů ve 2. skryté vrstvě dá výstup 0 vstupní vektor je ze třídy B všechny neurony ve 2. skryté vrstvě dají 0 výstupní vrstva výstupní neuron realizuje OR-bránu pro jednotlivé třídy výstup bude 1 pro třídu A výstup bude 0 pro třídu B
Třívrstvý perceptron – shrnutí struktura sítě vstupní vrstva propaguje data do sítě 1. skrytá vrstva vytváří nadroviny 2. skrytá vrstva vytváří oblasti výstupní vrstva vytváří třídy zobecnění struktury na více tříd výstupní vrstva bude mít více neuronů, které realizují funkci OR pro každou třídu
Třívrstvý perceptron – praxe třívrstvý perceptron má schopnosti separovat libovolné sjednocení mnohostěnných oblastí v praxi ale máme jen množinu trénovacích dat a neznáme tvar oblastí chceme algoritmus, který nám dá nastavení vah (popř. struktury sítě) podle trénovacích dat 2 základní techniky: 1. algoritmy založené na přímé klasifikaci trénovací množiny sít je vytvářena tak, aby správně klasifikovala všechna dostupná trénovací data 2. algoritmus zpětného šíření zvolíme si pevnou strukturu sítě a hledáme nastavení vah, abychom minimalizovali ztrátovou funkci sítě
Algoritmy založené na přímé klasifikaci trénovacích dat jsou to tzv. konstruktivní algoritmy vyjdeme z malé sítě (která typicky není schopna řeši problém) síť rozšiřujeme, dokud celá trénovací množina není správně klasifikována existující algoritmy: Meza 1989 („tiling“ algoritmus), Frea 1990 přidávají vrtsvy do sítě Kout 1994, Bose 1996 používají 1-2 skryté vrstvy přidávají neurony do těchto skrytých vrstev některé algoritmy umožní vazby mezi libovolnými vrstvami (Frea 1990) některé algoritmy povolí vazby mezi neurony v jedné vrstvě (Refe 1991) typický postup dekompozice problému na menší problémy (které zvládne 1 neuron) a z nich sestavíme výsledné řešení
„Tiling“ algoritmus – Meza, 1990 většinou vytvoří síť s více skrytými vrstvami popíšeme pro případ klasifikace do 2 tříd množinu trénovacích dat označíme X uvažujme tyto trénovací data
„Tiling“ algoritmus – krok 1 Krok 1 – vytváření 1. vrstvy algoritmus začíná s jediným neuronem n(X) v 1. vrstvě ... hlavní neuron hlavní neuron je naučen podle přihrádkového algoritmu na trénovací množině X po naučení se trénovací množina X rozdělí do dvou podmnožin X+ a X – X+ jsou vzory z X, které hlavní neuron klasifikuje 1 X– jsou vzory z X, které hlavní neuron klasifikuje 0 když X+ obsahuje vzory z obou tříd => přidáme další neuron n(X+) ... pomocný neuron tento pomocný neuron n(X+) je naučen jen pomocí trénovacích dat z X+ když X– obsahuje vzory z obou tříd => přidáme další pomocný neuron n(X–) tento pomocný neuron n(X–) je naučen jen pomocí trénovacích dat z X–
„Tiling“ algoritmus – krok 1 pomocný neuron n(X+) je naučen na množině X+: pomocný neuron n(X–) je naučen na množině X–: X++ dostaneme: X+– X–+ X––
„Tiling“ algoritmus – krok 1 když některá z množin X++ nebo X +– odpovídajících neuronu n(X+) obsahuje vektory z obou tříd => pro danou množinu přidáme další pomocné neurony když některá z množin X–+ nebo X –– odpovídajících neuronu n(X–) obsahuje vektory z obou tříd proces opakujeme, dokud pomocné neurony neklasifikují správně svojí trénovací množinu trénovací množina je konečná => po konečném počtu kroků se proces zastaví => první vrstva bude mít 1 hlavní neuron a více pomocných neuronů lze ukázat, že žádné 2 vzory z různých tříd nebudou mít stejný výstup z první vrstvy
„Tiling“ algoritmus – krok 2 Krok 2 – vytváření 2. vrstvy označme X1 = {y; y = f1(x), pro všechna x z množiny X} kde f1 je mapování implementované první vrstvou => množina X1 je nyní trénovací množina pro 2. vrstvu nyní použijeme postup v Kroku 1 a trénovací množinu X1 a vytvoříme 2. vrstvu postup opakujeme dokud nově vzniklá vrstva neobsahuje jen hlavní neuron, který klasifikuje správně příslušnou trénovací množinu
„Tiling“ algoritmus – závěr výsledná síť pro „náš“ příklad: Meza 1989 ukázal vhodná volba vah mezi sousedními vrstvami zajistí, že každý nově přidávaný neuron bude klasifikovat správně všechny vektory, které klasifikoval správně hlavní neuron v „předchozí“ vrstvě, a navíc minimálně jeden další vektor => tedy v konečném počtu kroků síť bude správně klasifikovat celou trénovací množinu X
Algoritmus zpětného šíření obecný algoritmus na učení vrstevnatých sítí pevná architektura sítě hledáme nastavení vah, které minimalizuje ztrátovou funkci budeme uvažovat obecnou vrstevnatou síť síť je tvořena L vrstvami k0 je počet vstupních jednotek kr je počet neuronů ve vrstvě r (r=1,...,L) vstupní jednotky „nic nepočítají“, jen propagují informaci dál všechny neurony mají stejnou aktivační funkci aktivační funkce je spojitá a derivovatelná (místo skokové funkce) trénovací vzory jsou dvojice ( x(i); y(i) ) pro i=1,...,n vstup požadovaný výstup
Algoritmus zpětného šíření – aktivační funkce aktivační funkce je spojitá a derivovatelná sigmoidální funkce kde a je strmost hyperbolický tangens pro hodnoty z intervalu (-1,+1) pokud začneme používat spojité aktivační funkce => mapování vektorů na vrcholy hyperkostky je neplatné nyní to bude ztrátová funkce, která bude určovat správnou klasifikaci
Algoritmus zpětného šíření – idea algoritmu během učení předložíme síti i-tý trénovací vzor x(i) síť nám dá „svůj“ výstup ŷ(i) výstup sítě se liší od požadovaného výstupu y(i) váhy se počítají tak, aby ztrátová funkce J byla minimalizována ztrátová funkce J závisí na y(i) a ŷ(i) pro i = 1,...,n minimalizaci ztrátové funkce uděláme iterativně pomocí metody snižování gradientu značení proměnných: wjr váhový vektor neuronu j ve vrstvě r (včetně prahu) vjr potenciál neuronu j ve vrstvě r = vážený součet vstupů do neuronu j yjr výstup neuronu j ve vrstvě r yjr = f(vjr) aktivační funkce
Algoritmus zpětného šíření – metoda snižování gradientu základní krok iterace (změny váhového vektoru) kde wjr(new) je aktuální odhad váhového vektoru Δwjr je oprava váhového vektoru wjr ztrátovou funkci definujeme: kde E(i) je chyba při rozpoznávání trénovací dvojice ( x(i); y(i) ) a síť dá výstup ŷ(i) typicky se chyba na jednom vzoru E(i) definuje jako: tento člen zbývá spočítat
Algoritmus zpětného šíření – odvození potřebujeme spočítat člen k jeho spočtení použijeme řetízkové pravidlo řetízkové pravidlo dosadíme do (*) (*) umíme spočítat přímo δjr(i) výstup vrstvy r-1
Algoritmus zpětného šíření – zpětný krok pro spočtení δjr(i) použijeme techniku zpětného šíření pro výstupní vrstvu lze spočítat hodnotu δjr(i) přímo pro nevýstupní vrstvu r využijeme hodnoty spočtené ve vrstvě r+1 spočtení δjr nastavení vah spočtení yjr
Algoritmus zpětného šíření – zpětný krok výstupní vrstva (r=L): nevýstupní vrstva (r<L): derivace aktivační funkce
Algoritmus zpětného šíření – algoritmus inicializace všech vah na malá náhodná čísla dopředný výpočet pro každý trénovací vzor x(i) pro i=1,...,n spočteme (od nejnižších vrstev výše): potenciál každého neuronu vjr(i) výstup každého neuronu yjr(i) pro j=1,...,kr a r=1,...,L výstup L-té vrstvy je skutečný výstup sítě ŷ(i) zpětný výpočet pro i=1,...,n a j=1,...,kr spočteme: následně spočteme ze vztahu (pro r = L, L-1,...2):
Algoritmus zpětného šíření – algoritmus aktualizace vah pro r = 1,...,L a j = 1,...,kr aktualizujeme váhy dokud nejsou splněny ukončovací podmínky, opakujeme krok 2 nejčastější ukončovací podmínka je „dokud celková ztráta neklesne pod danou mez“
Algoritmus zpětného šíření – poznámky konvergence je ovlivněna parametrem μ .... parametr učení μ je velké rychlá konvergence snadno může přeskočit úzké globální minimum ztrátové funkce μ je malé pomalá konvergence je možné udělat parametr učení adaptivní minimalizace může skončit v lokálním minimu nutná reinicializace a zopakování učení popsané učení je tzv. dávkové učení existuje i online učení
Algoritmus zpětného šíření – klasifikace když je neuronová síť naučena, pak můžeme klasifikovat to je krok 2 v algoritmu učení klasifikace: předložíme neznámý vzor zjistíme výstup sítě („odezva sítě na tento vzor“) vzor je klasifikován do třídy, která je indikována výstupem
Zobecněný lineární klasifikátor u problému XOR jsme ukázali, že neurony ve skryté vrstvě provádí mapování mapování převede původní (nelineárně separabilní) problém na transformovaný (lineárně separabilní) problém mapování: x → y kde f(∙) je aktivační funkce a g1 a g2 je lineární kombinace vstupů na jednotlivých neuronech z tohoto pozorování vyjdeme a zobecníme ho
Zobecněný lineární klasifikátor předpoklady: uvažujme l-dimenzionální příznakový vektor, který patří do jedné ze tříd A a B třídy A a B jsou nelineárně separabilní f1(∙), ... , fk(∙) jsou nelineární funkce fi: Rl → R pro i=1,...,k které definují mapování x є Rl → y Rk cíl: zjistit, zda existuje hodnota k a funkce fi takové, že třídy A a B jsou lineárně separabilní v k-dimenzionálním prostoru vektoru y chceme zjistit, zda existuje k-dimenzionální prostor, kde můžeme zkonstruovat nadrovinu w Rk: wTy + w0 > 0 pro xA wTy + w0 < 0 pro xB (*)
Zobecněný lineární klasifikátor − odvození předpokládáme, že v původním prostoru byly třídy A a B nelineárně separovatelné nelineární hyperplocha g(x)=0 separuje třídy podmínky (*) jsou v podstatě ekvivalentní odhadu nelineární g(x) jako lineární kombinace funkcí fi(x) => problém odhadnutí funkce na základě vybraných interpolačních funkcí fi(x) => řeší numerická matematika když zvolíme funkce fi „stačí“ spočítat váhy wi nadroviny v k-dimenzionálním prostoru => zobecněný lineární klasifikátor
Zobecněný lineární klasifikátor − odvození zobecněný lineární klasifikátor lze realizovat dvouvrstvou sítí neurony mají různé aktivační funkce fi první vrstva neuronů udělá mapování do prostoru vektoru y druhá vrstva neuronů spočte nadrovinu klasifikace do c tříd je nutné navrhnout c váhových vektorů wr r = 1,..,c jeden neuron pro každou třídu r-tou třídu vybereme podle maximálního výstupu wrT·y + wr0
Polynomiální klasifikátor příklad zobecněného lineárního klasifikátoru funkce g(x) je aproximována pomocí polynomů nejvýše r-tého stupně (proměnné x) pro r = 2 dostaneme: když x = (x1,x2)T, pak vektor y bude v obecném případě mít tvar klasifikační plocha bude mít tvar => počet volných parametrů určuje hledanou dimenzi k
Polynomiální klasifikátor zobecnění pomocí na polynomy stupně r je přímé při zobecnění dostaneme součiny kde pro polynomy stupně r a l-dimenzionální vektory x dostaneme např. r = 10 a l = 10 => dostaneme k = 184,756 tedy i pro středně velké vektory a stupně polynomů dostaneme obrovksý počet volných parametrů
Polynomiální klasifikátor − funkce XOR vrátíme se zpět k příkladu s funkcí XOR definujeme vektor y (a tím definujeme funkce fi): vstupní vektory jsou namapovány na 3 vrcholy trojrozměrné jednotkové kostky (*) (00) → (000) (11) → (111) (10) → (100) (01) → (010)
Polynomiální klasifikátor − funkce XOR vrcholy kostky jsou oddělitelné nadrovinou (rovinou) do této rovnice dosadíme mapování (*) a dostaneme oddělující plochu => výsledná klasifikační funkce je