Neural Networks Studio Jiˇr´ı H´ ybek ˇ a VOS ˇ P´ısek, 2. roˇcn´ık SPS bˇrezen 2009
Prohlaˇsuji t´ımto, ˇze jsem pr´aci vypracoval samostatnˇe a uvedl v seznamu literatury veˇskerou pouˇzitou literaturu a dalˇs´ı informaˇcn´ı zdroje vˇcetnˇe internetu. ˇ emu. Vˇrel´e d´ıky za pomoc a spolupr´aci Mgr. Miroslavu Sirok´ V P´ısku dne 1. 5. 2009
Anotace Neuronov´e s´ıtˇe maj´ı ˇsirok´e vyuˇzit´ı v mnoha oblastech, napˇr´ıklad v robotice ˇci bezpeˇcnostn´ıch syst´emech. Umoˇzn ˇuj´ı napˇr´ıklad rozpozn´avat obrazy, ˇcinit predikce, ˇci ˇreˇsit logick´e situace. C´ılem t´eto pr´ace je vytvoˇrit n´astroje pro efektivn´ı a jednoduch´e navrhov´an´ı neuronov´ ych s´ıt´ı a jejich tr´enov´an´ı. Aplikaci, kterou jsem napsal v jazyce C++, vyuˇz´ıv´am k v´ yvoji neuronov´ ych s´ıt´ı a douf´am, ˇze bude m´ıt v budoucnu ˇsirˇs´ı vyuˇzit´ı nejen pro mˇe, ale i pro zaˇc´ateˇcn´ıky, kteˇr´ı se o tuto oblast zaj´ımaj´ı. Neural networks have wide usage in many areas – for example in robotics or security systems. It can recognize images, make a prediction and solve logic problems. The objective of this work was to create a tool, which provides simple and effective tool for designing and testing neural networks. I am using the application, which I wrote in C++ language, for developing neural networks and I hope it will have wide usage not only for me but for many beginners who are interested in this problematics.
Kl´ıˇ cov´ a slova Neuronov´e s´ıtˇe – Neural networks Umˇel´a inteligence – Artificial intelligence Rozpozn´av´an´ı obraz˚ u – Image recognition V´ yvojov´e n´astroje – Development tools Zpˇetn´e ˇs´ıˇren´ı chyby – Backpropagation
´ Uvod ˇ ek je schopen ˇreˇsit efektivnˇe a rychle r˚ Clovˇ uznorod´e situace. Stejn´e schopnosti maj´ı i jin´ı tvorov´e napˇr´ıklad mravenci. Proto si z ˇziv´ ych tvor˚ u pˇri ˇreˇsen´ı probl´em˚ u v´ ypoˇcetn´ı technikou bereme pˇr´ıklad. Co n´am umoˇzn ˇuje pˇrem´ yˇslet a ˇreˇsit situace? Je to mozek. Mozek, kter´ y se skl´ad´a z neuronov´ ych s´ıt´ı. Jedn´a se o propojen´ı milion˚ u mal´ ych bunˇek, kter´e se naz´ yvaj´ı neurony. Neuron samotn´ y toho pˇr´ıliˇs nevyˇreˇs´ı. Ale pokud je souˇc´ast´ı spr´avnˇe sestaven´e s´ıtˇe, je schopen spolu s ostatn´ımi neurony ˇreˇsit velice sloˇzit´e u ´lohy, a to naprosto rychle a efektivnˇe. Nezanedbatelnou v´ yhodou neuronu je schopnost uˇcen´ı. Pokud neuron v´ı, ˇze zareagoval ˇspatnˇe, je schopen se velice rychle pˇrizp˚ usobit tak, aby pˇr´ıˇstˇe k chybˇe nedoˇslo. Simulac´ı neuronov´e s´ıtˇe je umˇel´a neuronov´a s´ıt’, kter´a se chov´a podle dan´ ych matematick´ ych vzorc˚ u. Existuj´ı genetick´e algoritmy, kter´e simuluj´ı chov´an´ı neuronov´ ych s´ıt´ı po nˇekolika v´ yvojov´ ych generac´ıch, simuluj´ı kˇr´ıˇzen´ı gen˚ u a tzv. v´ ybˇer nejsilnˇejˇs´ıch jedinc˚ u. V´ıce o neuronov´ ych s´ıt´ıch v prvn´ı ˇc´asti. Aplikace Neural Network Studio psan´a v jazyce C++, zkr´acenˇe jen NN Studio, slouˇz´ı k n´avrhu jednoduch´ ych neuronov´ ych s´ıt´ı, jejich vypoˇc´ıt´av´an´ı, tr´enov´an´ı a anal´ yze. Pomoc´ı jednoduch´eho uˇzivatelsk´eho prostˇred´ı lze s´ıt’ t´emˇeˇr doslova nakreslit. D´ale pomoc´ı tr´enovac´ıch sad spr´avnˇe nastavit. To vˇse doplˇ nuj´ı napˇr´ıklad funkce vypoˇc´ıt´av´an´ı v re´aln´em ˇcase, n´astroj na rozpozn´av´an´ı obraz˚ u a konzolov´e utility. Tato publikace je rozdˇelena na ˇctyˇri z´akladn´ı ˇc´asti. Prvn´ı ˇc´ast popisuje obecnˇe umˇel´e neuronov´e s´ıtˇe, jejich algoritmy a vyuˇzit´ı. Druh´a ˇc´ast pojedn´av´a o technick´em ˇreˇsen´ı aplikace NN Studio a hlavn´ı struktuˇre aplikace. Tˇret´ı ˇc´ast je vˇenov´ana n´astroji Recognition Wizard, kter´ y slouˇz´ı k rozpozn´av´an´ı obraz˚ u.
ˇ ast I C´ Neuronov´ e s´ıtˇ e
Kapitola 1 Popis neuronov´ e s´ıtˇ e Neurony jsou specializovan´e nervov´e buˇ nky, kter´e zpracov´avaj´ı elektrick´e sign´aly. Reaguj´ı na vstupn´ı sign´aly a d´ale pˇred´avaj´ı v´ ystupn´ı sign´aly ostatn´ım neuron˚ um. Jsou z´akladn´ım stavebn´ım prvkem nervov´e s´ıtˇe a umoˇzn ˇuj´ı organism˚ um reagovat na podnˇety, na jejich z´akladˇe ˇreˇsit situace, kter´e nastaly, a v neposledn´ı ˇradˇe pˇrem´ yˇslet.
1.1
Popis biologick´ eho neuronu
Organick´ y neuron je velmi mal´a buˇ nka, kter´a se skl´ad´a z tˇela, ve kter´em je obsaˇzeno j´adro buˇ nky a z kr´atk´ ych a dlouh´ ych v´ ybˇeˇzk˚ u. Kr´atk´e v´ ybˇeˇzky, naz´ yvan´e dendrity, slouˇz´ı k pˇrenosu vstupn´ıch sign´al˚ u. Jsou na nˇe pˇripojeny ostatn´ı neurony. Dlouh´e v´ ybˇeˇzky, kter´e se jmenuj´ı neurity neboli axony, pˇred´avaj´ı zpracovan´ y v´ ystupn´ı sign´al d´al do s´ıtˇe. Neuron m´a vˇzdy pouze jeden tento v´ ybˇeˇzek, kter´ y se vˇsak m˚ uˇze d´ale vˇetvit. Tyto v´ ybˇeˇzky mohou zanikat a degenerovat, pokud nejsou vyuˇz´ıv´any. Neurony maj´ı schopnost se podle potˇreby pˇripojovat na ostatn´ı buˇ nky a naopak i odpojovat, coˇz zp˚ usobuje napˇr´ıklad zapom´ın´an´ı nebo umoˇzn ˇuje hledan´ı nov´ ych ˇreˇsen´ı. Souˇca´st´ı tˇela neuronu je tzv. neuron´aln´ı membr´ana, kter´a ovlivˇ nuje velikost v´ ystupn´ıho sign´alu. Chemick´e sloˇzen´ı kaˇzd´eho dendritu ovlivˇ nuje tzv. v´ahu vstupn´ıho sign´alu. Pokud vˇsechny vstupn´ı sign´aly jsou dostateˇcnˇe siln´e, dojde k podr´aˇzdˇen´ı membr´any, coˇz zp˚ usob´ı siln´ y v´ ystupn´ı puls.
1.2
Umˇ el´ y neuron
Simulovan´ y neuron m´a stejnou strukturu, jako biologick´ y. Skl´ad´a se ze vstup˚ u, kter´e maj´ı svou v´ahu (Weight), z hodnoty prahu (Threshold), kter´a slouˇz´ı jako membr´ana, coˇz pˇri pouˇzit´ı prahov´e v´ ystupn´ı funkce zp˚ usob´ı, ˇze pokud je vstupn´ı sign´al vˇetˇs´ı nebo roven t´eto hodnotˇe, v´ ystup bude pozitivn´ı, a z genetick´e konstanty (Bias), se kterou je pracov´ano jako s dalˇs´ım vstupem.
1.3
Umˇ el´ a neuronov´ a s´ıt’
Stavba umˇel´e neuronov´e s´ıtˇe ze skl´ad´a ze tˇr´ı hlavn´ıch objekt˚ u. Ze vstup˚ u, neuron˚ u a v´ ystup˚ u. Vstupy obsahuj´ı prvotn´ı informace, kter´e cel´a neuronov´a s´ıt’ zpracov´av´a. Jsou pˇripojeny k neuron˚ um, kter´e jsou posl´eze pˇripojeny bud’ k dalˇs´ım neuron˚ um nebo v´ ystup˚ um. V´ ystup m˚ uˇze b´ yt pˇripojen pouze k jednomu neuronu a slouˇz´ı k zobrazen´ı v´ ystupn´ı hodnoty. Neurony zpravidla tvoˇr´ı vrstvy, kter´e postupnˇe zpracov´avaj´ı vstupn´ı sign´al (viz obr. ˇc. 1). Mohou b´ yt zapojeny i do tzv. zpˇetn´e vazby, coˇz se vyuˇz´ıv´a napˇr´ıklad pˇri pˇredpov´ıd´an´ı v´ yvoje nebo rozpozn´av´an´ı obraz˚ u ˇci zvuku. Spr´avnˇe nastaven´ y neuron m˚ uˇze fungovat napˇr´ıklad jako logick´e funkce AND, OR nebo NOT.
Obr. č. 1 - Čtyřvrstvá neuronová síť
Kapitola 2 V´ ystupn´ı funkce neuron˚ u Pˇri v´ ypoˇctu v´ ystupn´ı hodnoty neuronu se nejprve provede sumarizace vstup˚ u, coˇz je suma souˇcin˚ u vˇsech vstupn´ıch hodnot s jejich vahami. Tato suma je pak d´ale zpracov´ana v´ ystupn´ı (filtraˇcn´ı) funkc´ı, kter´a ovlivn´ı celkov´ y v´ ystup neuronu. Nejˇcastˇeji je pouˇz´ıv´ana prahov´a funkce (Threshold function) nebo sigmoida (Sigmoid function).
2.1
Prahov´ a funkce
V´ ystupem t´eto funkce m˚ uˇze b´ yt logick´a jedniˇcka nebo logick´a nula. V pˇr´ıpadˇe, ˇze sumarizace vstup˚ u je vˇetˇs´ı nebo rovna hodnotˇe prahu (Threshold), v´ ystup bude pozitivn´ı nebo v opaˇcn´em pˇr´ıpadˇe negativn´ı (viz obr. ˇc. 2). Toto chov´an´ı m˚ uˇzeme popsat n´asleduj´ıc´ı nerovnic´ı, kde x je vstupn´ı hodnota (Input), w je v´aha vstupu (Weight), T je hodnota prahu (Threshold) a y je v´ ystupn´ı hodnota (Output): X
xj · wj i − T ≥ 0 → y = 1
(2.1)
1,0 0,8 0,6 0,4 0,2 0,0
0,5
1,0
1,5
2,0
Obr. č. 2 - Prahová funkce (Threshold function)
2.2
Sigmoida
Jedn´a se o logistickou funkci, kter´a nejprve roste pˇribliˇznˇe exponenci´alnˇe a pozdˇeji s rostouc´ım nasycen´ım zpomaluje aˇz se asymptoticky zastav´ı. Tato logistick´a funkce se ˇcasto pouˇz´ıv´a v empirick´ ych vˇed´ach napˇr´ıklad pro modelov´an´ı r˚ ustu populace. Parametrem s je sumarizace vstup˚ u neuronu. V´ ystupn´ı hodnota t´eto funkce je y ∈ R ∈ (−1, 1) a lze ji zn´azornit grafem (viz obr. ˇc. 3) a popsat n´asleduj´ıc´ımi rovnicemi, kde x je vstupn´ı hodnota (Input) a w je v´aha vstupu (Weight):
s=
X
xj · wj i
(2.2)
s 1 + s2
(2.3)
o(s) = √
1,0 0,8 0,6 0,4 0,2 -5
-4
-3
-2
0,0 -1 0 -0,2
1
2
3
4
-0,4 -0,6 -0,8 -1,0
Obr. č. 3 - Sigmoida (Sigmoid function)
5
Kapitola 3 Uˇ cen´ı neuron˚ u Uˇcen´ı neuronu spoˇc´ıv´a v u ´pravˇe vah tak, aby pˇr´ıˇst´ı v´ ystup byl spr´avn´ y. Abychom mohli spr´avnˇe upravit v´ahy vstup˚ u, je tˇreba zn´at, zda doˇslo k chybˇe a k jak velk´e. V´ ypoˇcet chybov´e hodnoty (Error) je z´avisl´ y na pouˇzit´e metodˇe uˇcen´ı.
3.1
Samostatn´ y neuron
Pro samostatn´ y neuron je chybovou hodnotou E rozd´ıl hodnoty, kter´a by mˇela b´ yt na v´ ystupu, a hodnoty, kter´a je na v´ ystupu. Velikost chyby pro samostatn´ y neuron vypoˇc´ıt´ame pomoc´ı rovnice, kde o je hodnota, kter´a by mˇela b´ yt na v´ ystupu (True output) a O je v´ ystupn´ı hodnota neuronu (Output): E = (o − O)
(3.1)
Spr´avnou hodnotu v´ahy vypoˇc´ıt´ame u ´pravou hodnoty star´e a to o souˇcin velikosti chyby a vstupn´ı hodnoty. Tuto u ´pravu popisuje n´asleduj´ıc´ı rovnice, kde W je v´aha vstupu (Weight), α je konstanta ovlivˇ nuj´ıc´ı rychlost a kvalitu uˇcen´ı, E je velikost chyby (Error) a x hodnota na vstupu (Input): Wj i = Wj i + α · E · xj
(3.2)
3.2
Tr´ enovac´ı sady
Schopnost neuronu uˇcit se je nejvˇetˇs´ı v´ yhodou neuronov´ ych s´ıt´ı. Tr´enov´an´ı spoˇc´ıv´a v tom, ˇze vytvoˇr´ıme sadu vzorov´ ych situac´ı. K r˚ uzn´ ym kombinac´ım vstup˚ u pˇriˇrad´ıme poˇzadovan´e ˇ v´ ystupy. C´ım v´ıce vzorov´ ych pˇr´ıklad˚ u t´ım l´epe. Pot´e pouˇzijeme takto vytvoˇrenou sadu k tr´enov´an´ı neuronu (napˇr. viz obr. ˇc. 4). Ne vˇzdy se to vˇsak podaˇr´ı napoprv´e. Obˇcas je tˇreba prov´est korekci sady podle situace nebo zopakovat tr´enink. Rychlost uˇcen´ı je z´avisl´a na konstantˇe α. Pokud je konstanta pˇr´ıliˇs n´ızk´a, uˇcen´ı trv´a d´ele, avˇsak pokud je naopak pˇr´ıliˇs vysok´a, nemus´ı se v˚ ubec podaˇrit neuron spr´avnˇe vytr´enovat. Existuj´ı samozˇrejmˇe situace a kombinace vstup˚ u, na kter´e nelze neuron zcela vytr´enovat.
Obr. č. 4 - Trénovací sada (Training set)
3.3
Zpˇ etn´ eˇ s´ıˇ ren´ı chyby
Tento syst´em uˇcen´ı spoˇc´ıv´a v urˇcen´ı chyby na v´ ystupn´ı vrstvˇe s´ıtˇe a na jej´ım n´asledn´em ˇs´ıˇren´ı zpˇet aˇz do vstupn´ı vrstvy. Hodnota chyby (Error) se vypoˇcte z rovnice, kde o je hodnota, kter´a by mˇela b´ yt na v´ ystupu (True output), O je v´ ystupn´ı hodnota neuronu (Output), n je poˇcet vrstev a l je ˇc´ıslo vrstvy (Layer): 1 · l · 100 (3.3) n V´ahy se n´aslednˇe uprav´ı pomoc´ı rovnice, kde W je v´aha vstupu (Weight), α je konstanta El = (O − o) ·
ovlivˇ nuj´ıc´ı rychlost a kvalitu uˇcen´ı, E je velikost chyby (Error) a x hodnota na vstupu (Input): Wj il = Wj il + α · El · xj l
(3.4)
Kapitola 4 Vyuˇ zit´ı 4.1
Logick´ e operace
Pomoc´ı neuronov´ ych s´ıt´ı m˚ uˇzeme prov´adˇet logick´e operace. Napˇr´ıklad, pokud nastav´ıme v´ahy tak, aby byly stejn´e a jejich souˇcet byl roven hodnotˇe prahu, vytvoˇr´ıme logick´ y ˇclen AND. V´ ystup bude pozitivn´ı pouze v pˇr´ıpadˇe, ˇze vˇsechny vstupy jsou tak´e pozitivn´ı.
4.2
Rozpozn´ av´ an´ı obraz˚ u
Pokud pro kaˇzd´ y pixel budeme m´ıt jeden vstup, m˚ uˇzeme neuron vytr´enovat tak, aby v´ ystup byl pozitivn´ı pouze v pˇr´ıpadˇe, ˇze na vstupu je nˇekter´a z tr´enovan´ ych kombinac´ı nebo jim podobn´a.
4.3
Predikce
Pˇri pouˇzit´ı v´ıcevrstv´e s´ıtˇe a uˇcen´ı pomoc´ı zpˇetn´eho ˇs´ıˇren´ı chyby je moˇzno pˇredpov´ıdat pˇribliˇzn´ y v´ yvoj kˇrivek. S´ıt’ se postupnˇe uˇc´ı z tr´enovac´ıch sad, kter´e jsou vytvoˇreny pro toto pˇredpov´ıd´an´ı. Vyuˇz´ıv´a se tzv. oken. Jedn´a se o hodnoty v urˇcit´ ych ˇcasov´ ych u ´sec´ıch v´ yvoje, kter´e se ˇc´asteˇcnˇe pˇrekr´ yvaj´ı tak, aby mˇela s´ıt’ k dispozici i ˇc´ast pˇredchoz´ıch dat.
4.4
Jin´ e vyuˇ zit´ı
Neuronov´e s´ıtˇe lze tak´e vyuˇz´ıt napˇr´ıklad k ˇr´ızen´ı robot˚ u, topn´ ych soustav nebo k anal´ yze velk´ ych datab´az´ı ˇci k ˇr´ızen´ı datov´eho toku v datov´ ych s´ıt´ıch.
ˇ ast II C´ NN Studio
Kapitola 5 Struktura neuronov´ e s´ıtˇ e Hlavn´ı strukturu aplikace popisuje obr. ˇc. 5. Zdrojov´ y k´od – viz pˇr´ıloha ˇc. 1.
Struktura nNetwork Struktura nNeuron Poloha X,Y Hodnoty vstupů Váhy vstupů Spojení Prahová hodnota Genetická konstanta
Výpočet Učení
Struktura nInput Poloha X,Y Hodnota
Struktura nOutput Poloha X,Y Spojení
Výpočetní funkce Kontrolní a doplňkové funkce Obr. č. 5 - Struktura nNetwork
Kapitola 6 Uˇ zivatelsk´ e prostˇ red´ı Aplikace m´a slouˇzit k jednoduch´emu a efektivn´ımu n´avrhu neuronov´ ych s´ıt´ı. Z toho d˚ uvodu je tˇreba, aby bylo uˇzivatelsk´e prostˇred´ı co nejpˇr´ıvˇetivˇejˇs´ı. Proto byla pouˇzita komponenta Ribbon a cel´a aplikace byla navrˇzena v modern´ım stylu.
6.1
Ribbon
Komponenta Ribbon se skl´ad´a z hlavn´ıho tlaˇc´ıtka, panelu rychl´eho pˇr´ıstupu a z p´asu karet. Autorem tohoto stylu je spoleˇcnost Microsoft a poprv´e jsme jej mohli vidˇet v sadˇe kancel´aˇrsk´ ych aplikac´ı Microsoft Office 2007. Toto uspoˇr´ad´an´ı n´am umoˇzn ˇuje pˇrehledn´ y pˇr´ıstup ke vˇsem d˚ uleˇzit´ ym funkc´ım. P´asy karet n´am oddˇeluj´ı jednotliv´e funkˇcn´ı sekce. Napˇr´ıklad v aplikaci NN Studio se jedn´a o oddˇelen´ı funkc´ı pro n´avrhov´e zobrazen´ı a pro pr´aci s tr´enovac´ı sadou. Kaˇzd´ y p´as karet d´ale obsahuje skupiny, kter´e n´am umoˇzn ˇuj´ı dalˇs´ı oddˇelen´ı funkc´ı a t´ım jejich zpˇrehlednˇen´ı. Vˇsechny prvky komponenty Ribbon jsou pˇripojeny ke komponentˇe ActionManager, kter´a se star´a o zpracov´an´ı vˇsech funkc´ı. D´ale napojen´ı na tuto komponentu umoˇzn ˇuje, aby si uˇzivatel mohl pˇrizp˚ usobit vˇsechny akce sv´ ym potˇreb´am. Kromˇe jin´eho m´a tato komponenta modern´ı vzhled, kter´ y zaujme a dod´a uˇzivatelsk´emu prostˇred´ı jist´ y pˇr´ıvˇetiv´ y styl.
6.2
N´ avrhov´ e zobrazen´ı
Prostˇred´ı pro n´avrh neuronov´e s´ıtˇe se skl´ad´a z mˇr´ıˇzky, do kter´e se vkl´adaj´ı objekty. Tato mˇr´ıˇzka je vykreslov´ana pomoc´ı vlastn´ı funkce, kter´a je pops´ana d´ale. V n´avrhov´em zobrazen´ı lze objekty vytv´aˇret, oznaˇcovat, pˇresouvat a mazat. A to pomoc´ı n´astroj˚ u: • V´ ybˇer • Neuron • Vstup • V´ ystup • Smazat D´ale je moˇzno objekty spojovat a rozpojovat pomoc´ı n´asleduj´ıc´ıch n´astroj˚ u, kter´e je tˇreba struˇcnˇe popsat: • Spojit (Vytvoˇr´ı spojen´ı mezi objekty.) • Rozpojit (Smaˇze spojen´ı mezi objekty.) • Rozpojit neuron (Smaˇze pouze spojen´ı, na kter´ ych je z´ avisl´ y oznaˇcen´ y neuron.) • Rozpojit vˇse (Rozpoj´ı celou s´ıt’.) Spoje objekt˚ u jsou vykreslov´any barevn´ ym pˇrechodem. Modr´a barva znaˇc´ı pozitivn´ı v´ ystup z objektu a ˇcerven´a negativn´ı. Akce myˇsi byly vytvoˇreny tak, aby bylo navrhov´an´ı co nejjednoduˇsˇs´ı. Prav´ y klik vˇzdy zruˇs´ı oznaˇcen´ı objektu a zmˇen´ı n´astroj na V´ ybˇer. Pˇri oznaˇcen´ı objektu se v horn´ı liˇstˇe objev´ı jeho n´azev a vlastnost. U neuron˚ u se jedn´a o hodnotu prahu, u vstupu o vstupn´ı hodnotu a u v´ ystupu o v´ ystupn´ı hodnotu, ta ovˇsem nelze mˇenit. Kaˇzdou zmˇenu je potˇreba potvrdit stisknut´ım kl´avesy Enter. Pokud oznaˇc´ıme spoj mezi dvˇema objekty, zobraz´ı se n´azev, kter´ y mˇenit nelze. D´ale se zobraz´ı vlastnost spoje, coˇz je jeho v´aha. Uk´azka n´avrhov´eho zobrazen´ı – viz pˇr´ıloha ˇc. 2. Doplˇ nkovou funkc´ı je moˇznost automatick´eho vypoˇc´ıt´av´an´ı neuronov´e s´ıtˇe bˇehem n´avrhu. Tato funkce ovˇsem nen´ı vhodn´a pro velk´e s´ıtˇe, jelikoˇz m˚ uˇze znaˇcnˇe zpomalit celou aplikaci.
6.3
Tr´ enovac´ı zobrazen´ı
Tento reˇzim umoˇzn ˇuje vytv´aˇret a upravovat tr´enovac´ı sady pro neurony. Pracovat s nimi a v neposledn´ı ˇradˇe spustit samotn´ y tr´enink. Skl´ad´a se z tabulky, ve kter´e jsou ve sloupc´ıch zobrazeny jednotliv´e vstupy neuronu ˇ adky se podle potˇreby pˇrid´avaj´ı automaticky. Pomoc´ı a na konci jeho poˇzadovan´ y v´ ystup. R´ t´eto tabulky se vytv´aˇr´ı a upravuje tr´enovac´ı sada, s kterou pak lze prov´adˇet tyto operace: • Uloˇzit sadu • Pˇriˇradit sadu • Spustit tr´enink Vˇcetnˇe tˇechto funkc´ı jsou k dispozici v tr´enovac´ım zobrazen´ı tyto akce: • Vytvoˇrit novou sadu • Otevˇr´ıt sadu • Uloˇzit sadu • Uloˇzit sadu jako... • Pˇriˇradit sadu • Naˇc´ıst sadu • Spustit tr´enink Pomoc´ı akce Pˇriˇradit sadu lze pˇriˇradit danou sadu k vybran´emu neuronu. K proveden´ı t´eto akce je potˇreba aktivn´ı n´avrhov´ y reˇzim. Pokud m´a oznaˇcen´ y neuron pˇriˇrazenou sadu, lze pomoc´ı akce Tr´enovat spustit tr´enink. Pˇriˇrazenou tr´enovac´ı akci neuronu je moˇzno otevˇr´ıt kliknut´ım na tlaˇc´ıtko Naˇc´ıst sadu z kategorie Neuron. Uk´azka tr´enovac´ıho zobrazen´ı – viz pˇr´ıloha ˇc. 3.
Kapitola 7 Vykreslovac´ı funkce N´avrhov´e zobrazen´ı je vykreslov´ano vlastn´ı funkc´ı. Tato funkce obsahuje vykreslov´an´ı spoj˚ u pomoc´ı ˇc´asteˇcnˇe vyhlazen´ ych hran, vykreslov´an´ı objekt˚ u a tzv. duch˚ u (gridGhost).
ˇ asteˇ C´ cnˇ e vyhlazen´ aˇ c´ ara
7.1
Z´akladem je vykreslen´ı ˇc´ary z jednoho bodu do druh´eho nejprve bez vyhlazen´ı. Pozice pixel˚ u jsou vypoˇc´ıt´av´any pomoc´ı line´arn´ı z´avislosti vektor˚ u. V´ ypoˇcet popisuj´ı n´asleduj´ıc´ı vztahy, pˇriˇcemˇz Xs a Ys jsou zdrojov´e souˇradnice, Xd a Yd jsou c´ılov´e souˇradnice, Xi je pozice vykreslovan´eho pixelu na ose X a Y? je pozice vykreslovan´eho pixelu na ose Y , kterou je tˇreba vypoˇc´ıtat. A = [Xs ; Ys ] B = [Xd ; Yd ] C = [Xi , Y? ] −→ → − a = AB = (Bx − Ax ; By − Ay ) → −→ − b = AC = (Cx − Ax ; Cy − Ay ) − → − → a =k· b ax = k · b x k=
ax bx
ay = k · b y ay = by =
ax bx ay ax bx
· by
Po vypoˇcten´ı souˇradnic je vykreslen ostr´ y pixel. Pot´e jsou okolo nˇej vykresleny pixely, kter´e jiˇz maj´ı vypoˇc´ıtanou barvu podle okoln´ıch bod˚ u, takˇze ve v´ ysledku vytv´aˇrej´ı efekt ˇc´asteˇcnˇe vyhlazen´e ˇc´ary. Tu lze tak´e vykreslit barevn´ ym pˇrechodem s pr˚ uhlednost´ı. V´ ypoˇ cet barvy podle okoln´ıch pixel˚ u int calcRGB(TColor color, float *r, float *g, float *b, int q){ long K; int R,G,B; K = ColorToRGB(color); R = K & 255; G = (K >> 8) & 255; B = (K >> 16); *r+=R/q; *g+=G/q; *b+=B/q; return 0; } long TNNetForm::calcColor(int x, int y){ float rgb[3]={0,0,0}; calcRGB(x,y,&rgb[0],&rgb[1],&rgb[2],2);
//Center
calcRGB(x-1,y,&rgb[0],&rgb[1],&rgb[2],8);
//Left
calcRGB(x+1,y,&rgb[0],&rgb[1],&rgb[2],8);
//Right
calcRGB(x,y-1,&rgb[0],&rgb[1],&rgb[2],8);
//Top
calcRGB(x,y+1,&rgb[0],&rgb[1],&rgb[2],8);
//Bottom
return RGB(rgb[0],rgb[1],rgb[2]); }
7.2
gridGhost a gridLine
Tzv. duchov´e jsou ikony objekt˚ u vykreslovan´e nad veˇskerou ostatn´ı grafiku. Zobrazuj´ı se napˇr´ıklad pˇri vytv´aˇren´ı nebo pˇresunu objekt˚ u. Jedn´a se pouze o vykreslen´ı obrazu dan´eho objektu na aktu´aln´ı pozici kurzoru. GridLine je t´emˇeˇr to sam´e jako gridGhost, akor´ad s t´ım rozd´ılem, ˇze se nejedn´a o ikonu objektu ale o ˇc´aru, kter´a se zobrazuje pˇri vytv´aˇren´ı spoje. Oboj´ı je pouze doˇcasnˇe zobrazovan´a grafika, slouˇz´ıc´ı k usnadnˇen´ı n´avrhu.
7.3
Mapa obrazu
Syst´em vykreslov´an´ı postupuje celou mˇr´ıˇzkou a vykresluje dan´e objekty a jejich spoje. Ovˇsem pokud by se vykreslil vˇzdy spoj a pot´e ikona, pˇrekr´ yvaly by jin´e spoje a ikony. Z toho d˚ uvodu jsou nejprve vykresleny jen spoje a indexy ikon se zapisuj´ı do tzv. mapy obrazu. Pot´e, co algoritmus dokonˇc´ı proch´azen´ı pole, je vykreslena mapa obrazu, tj. objekty jsou vykresleny nad spoje.
7.4
Pouˇ zit´ı bufferu
Jelikoˇz vykreslovat vˇzdy veˇskerou grafiku, obzvl´aˇstˇe ˇc´asteˇcnˇe vyhlazen´e ˇc´ary, je v´ ypoˇcetnˇe n´aroˇcn´e, je pouˇz´ıv´an buffer statick´e grafiky, coˇz umoˇzn ˇuje pˇri vykreslov´an´ı duch˚ u, nevykreslovat veˇsker´e objekty a spoje, ˇc´ımˇz se cel´ y proces urychl´ı o v´ıce neˇz 90 %. Cel´a grafika se znovu vykresluje jen v pˇr´ıpadˇe, ˇze se zmˇen´ı struktura s´ıtˇe.
ˇ ast III C´ Recognition Library
Kapitola 8 ´ Uvod Neuronov´e s´ıtˇe maj´ı ˇsirok´e vyuˇzit´ı, avˇsak v rozpozn´av´an´ı vzork˚ u maj´ı v´ yhodu v tom, ˇze jsou rychl´e, snadnˇeji se nastavuj´ı a jsou v´ ypoˇcetnˇe m´enˇe n´aroˇcn´e. Toho lze vyuˇz´ıt napˇr´ıklad v zabezpeˇcovac´ıch syst´emech. Extern´ı aplikace Recognition Wizard slouˇz´ı k rozpozn´av´an´ı obraz˚ u pomoc´ı neuronov´ ych s´ıt´ı. Jej´ım z´akladem je vytvoˇren´ı sady vzorov´ ych obraz˚ u s pozitivn´ım a negativn´ım v´ ystupem, n´asledn´e vytr´enov´an´ı neuronov´e s´ıtˇe a nakonec samotn´e rozpozn´av´an´ı.
8.1
Pouˇ zit´ı
Aplikaci Recognition Wizard lze pouˇz´ıt k vytr´enov´an´ı knihovny vzork˚ u. V´ ysledn´ y soubor s vahami lze pot´e pouˇz´ıt v kombinaci s utilitou RcgnProc napˇr´ıklad k rozpozn´av´an´ı obrazu z webov´e kamery. Uk´azka n´astroje – viz pˇr´ıloha ˇc. 4.
Kapitola 9 Struktura knihovny Knihovna RecognitionLibrary se skl´ad´a z tˇechto hlavn´ıch ˇc´ast´ı: knihovna vzork˚ u, neuronov´a s´ıt’ a v´ ypoˇcetn´ı funkce.
9.1
Neuronov´ a s´ıt’
Neuronov´a s´ıt’ se skl´ad´a ze vstup˚ u, jejichˇz poˇcet odpov´ıd´a poˇctu pixel˚ u dan´eho obrazu, z jednoho neuronu a jednoho v´ ystupu. S´ıt’ se tr´enuje na z´akladˇe vzorov´ ych pˇr´ıklad˚ u. Tento tr´enink je vˇetˇsinou potˇreba nˇekolikr´at zopakovat, aby s´ıt’ mˇela spr´avnˇe nastaven´e v´ahy vstup˚ u. Neuronov´a s´ıt’ aplikace Recognition Wizard pracuje s ˇcernob´ıl´ ymi obrazy velikosti (200 × 150) px, coˇz je 30 000 pixel˚ u.
9.2
Knihovna vzork˚ u
V t´eto knihovnˇe jsou uloˇzeny v´ahy a zdrojov´a data vˇsech vzork˚ u, kter´e jsou pouˇzity pˇri porovn´av´an´ı vstupn´ıho obrazu. D´ale n´azev vzorku, autor, datum poˇr´ızen´ı a index filtru.
9.3
Tr´ enov´ an´ı
ˇ asteˇcn´ Pˇri tr´enov´an´ı neuronov´e s´ıtˇe a n´asledn´e u ´pravˇe vah je moˇzno pouˇzit´ı dvˇe varianty. C´ y tr´enink, kter´ y provede u ´pravu vah pouze aktu´aln´ıho vzorku a u ´pln´ y tr´enink, kter´ y z´aroveˇ n uprav´ı v´ahy i vˇsechny ostatn´ıch vzork˚ u. D´ale je moˇznost urˇcit s kolika procenty vzork˚ u bude proveden u ´pln´ y tr´enink.
Kapitola 10 ´ Uprava obrazu Aby byl obraz co nejpouˇzitelnˇejˇs´ı, je tˇreba ho upravit. Pˇri u ´pravˇe doch´az´ı k pouˇzit´ı filtr˚ u v n´asleduj´ıc´ım poˇrad´ı: 1. Zmenˇsen´ı obrazu 2. Kontrast 3. Negativ 4. Vytaˇzen´ı obrys˚ u 5. Kontrast 6. Pˇreveden´ı na ˇcernob´ıl´ y obraz 7. Negativ
Kapitola 11 Utility Souˇc´ast´ı NN Studia jsou konzolov´e utility RcgnProc a nTrain, kter´e slouˇz´ı k rozpozn´av´an´ı obraz˚ u.
nTrain Utilita, slouˇz´ıc´ı k vytr´enov´an´ı neuronov´e s´ıtˇe pro rozpozn´av´an´ı obraz˚ u. Syntaxe pˇ r´ıkazu
nTrain <weights file> <true value> [nobalance]
RcgnProc Utilita, slouˇz´ıc´ı k rozpozn´av´an´ı obraz˚ u. Syntaxe pˇ r´ıkazu
nTrain <weights file> [nobalance]
ˇ ast IV C´ Z´ avˇ er
Kapitola 12 Pl´ an v´ yvoje a vyuˇ zit´ı V´ yvoj aplikace NN Studio je teprve na zaˇc´atku a do budoucna m´am v pl´anu pˇridat mnoho dalˇs´ıch funkc´ı a n´astroj˚ u, kter´e by umoˇznili ˇreˇsit u ´lohy pomoc´ı neuronov´ ych s´ıt´ı. Aplikace je nyn´ı ve st´adiu alpha testov´an´ı verze 2.0.
12.1
Genetick´ e algoritmy
Do budoucna je moˇzn´e pˇridat podporu genetick´ ych algoritm˚ u. To znamen´a moˇznost generaˇcn´ıho v´ yvoje neuronov´ ych s´ıt´ı, jejich genetick´e kˇr´ıˇzen´ı a nebo samo-rozv´ıjej´ıc´ıch se s´ıt’´ı.
12.2
Import a export
Uˇziteˇcnou funkc´ı je import a export do r˚ uzn´ ych form´at˚ u. Napˇr´ıklad export testovac´ı sady do form´atu aplikace Microsoft Excel nebo naopak import z t´eto aplikace. S touto funkc´ı je do budoucna poˇc´ıt´ano.
12.3
Prostˇ red´ı pro testov´ an´ı
Pˇr´ınosn´e by bylo vytvoˇrit n´astroj, kter´ y by napˇr´ıklad umoˇzn ˇoval simulaci chov´an´ı robota, kter´ y je ˇr´ızen´ y navrˇzenou neuronovou s´ıt´ı.
Kapitola 13 Pouˇ zit´ e informaˇ cn´ı zdroje a SW 13.1
Seznam pˇr´ıloh: 1. Uk´azka zdrojov´eho k´odu struktury nNetwork 2. Uk´azka n´avrhov´eho zobrazen´ı aplikace NN Studio 3. Uk´azka tr´enovac´ıho zobrazen´ı aplikace NN Studio 4. Uk´azka n´astroje Recognition Wizard
Pˇr´ıloha ˇc. 1 – Uk´azka zdrojov´eho k´odu struktury nNetwork //Compute neuron int compute(){ if(computed==false){ float summary=0.0; for(int i=0;i=0.0){ output=1; } else { output=0; } computed=true; } return output; } //Train neuron int train(float trueOutput, float alpha){ //Nejprve je nutne spocitat vystup, //abychom mohli vypocitat velikost chyby compute(); computed=false; for(int i=0;i
//Zkontrolujeme, zda se jiz dany neuron nepocita, //slouzi jako ochrana proti zacykleni if(neurons[index].processing==true){ return neurons[index].output; } neurons[index].processing=true; //Pripravime vstupy for(int i=0;i0){ //pokud je ID objektu > 0, jedna se o neuron neurons[index].inputs[i]=computeNeuron(neurons[index].linkage[i]-1); } else if(neurons[index].linkage[i]<0) { //pokud je ID objektu < 0, jedna se o vstup neurons[index].inputs[i]=inputs[abs(neurons[index].linkage[i])-1].value; } } //Spocitame neuron a vratime vysledek neurons[index].processing=false; return neurons[index].compute(); } //Compute network void compute(){ //Zkontrolujeme konzistenci checkConsistency(); //Nastavime vsechny neurony jako nespocitane for(int i=0;i0) outputs[i].value=computeNeuron(outputs[i].linkage-1); } }
Příloha č. 2 - Ukázka návrhového zobrazení aplikace NN Studio
Příloha č. 3 - Ukázka trénovacího zobrazení aplikace NN Studio