středa, ledna 11, 2006

Jak jsem učil neuronovou síť


Maličko jsem zvolnil v přispívaní na blog, ale to jen proto, že mám po dlouhé době hodně práce. Zápočtový týden totiž neznamená, že se pro zápočty chodí, ale že se na nich teprve po nocích pracuje. Mým prvním zápočtem je klasifikace poruch hřídelí z naměřených vibrací. Dostal jsem 300 naměřených průběhů, kde každý průběh má přiřazenu vadu (číslo od jedné do pěti). A co s tím?

Průběhy mám zpracovat, získat z nich podstatné informace(příznaky) a vybrat si vhodnou trénovací skupinu. Trénovací skupinu předhodím klasifikátoru, kterému prozradím konkretní číslo chyby. Vytrénovaný klasifikátor vezmu a pustím jej na ostatní průběhy, které ještě nikdy neviděl. Pokud je dobře vycvičený, dokáže u neznáměho průběhu zjistit, o jaký typ chyby jde.

Předzpracování dat bylo celkem jednoduché, ale vycvičení klasifikátoru byl větší oříšek. Vybral jsem si neuronovou síť, protože mě vždy zajímalo, jak to funguje. Neuronová síť pracuje podobně jako neurony v mozku. Každý neuron má jeden či více výběžků, kterými je spojen s ostaními neurony. Nebudu se pouštět do detailů, jen prozradím, že moje neuronová síť, která se právě na počítačí učí, má 29 neuronů (což je poměrně dost). Kolik je mezi nimi synapsí, netuším.


Síť se učí podobně, jak baletka. Cvičí a pohyby kontroluje v zrcadle. Pohyby opakuje až do té doby, kdy její představa o pohybu odpovídá tomu, co v zrcadle vidí. Popřípadě tomu, co chce její učitel(ka). Čím déle cvičí, tím více se výsledek blíží očekávání. Ovšem jen do určité hranice, kdy začne být baletka unavená a výsledek tomu odpovídá.

S tou mou neuronou sítí je to stejné. Má svá trénovací data a ví, jak má vypadat výsledek. Při počátečním pokusu, kdy data vidí poprvé, jsou výsledky spíše náhodné. Ale protože síť ví, o kolik se sekla, při další epoše učení (tak se tomu říká ;) své vnitřní váhy nastaví trochu jinak. Pokud není úplně pitomá, a že ta moje ze začátku byla, po mnoha opakováních už si je celkem jistá. V tom okamžiku nastává chvíle napětí, neuronové síti předložím data, která nikdy neviděla. Pokud je dobře naučená, měla by většinu určit správně.

A vida, síť se právě doučila a správně určila 86% průběhů. Učila se na 75 průbězích, určovala (225 nových + 75 z trénovací skupiny)=300 vzorků. Když ji trénuji na 150 průbězích, její úspěšnost na celé skupině je okolo 97%.

Normálně se moje síť učí asi 3 minuty, ale když jsem odcházel na fotbal, řekl jsem ji, ať se učí půl hodiny. Když jsem se vrátil, síť hlásila, že rozpoznala 26% průběhů ze 300. Byla holt přetažená, stejná jako já teď, protože jsem ji předchozí tři noci piplal, málo spal. Ale jsem na ní pyšný, je moc šikovná.


7 Comments:

Anonymní said...

Bobe,jsi tatka neuronove site a muzes byt na ni hrdy,libi se mi,jak je sikovna

kajak said...

Zápočtový týden totiž neznamená, že se pro zápočty chodí, ale že se na nich teprve po nocích pracuje.tak to mas setsakramentsky pravdu

Bob said...

Tedy, toto zkouskove jsem na tom dobre, ziskavam zapocty v zapoctovem tydnu. To se mi minuly semestr nepodarilo :)

Venda said...

to mi pripomina, kdyz jsem ucil piskvorky vyhravat,ale skoncili jsme spolu u toho, ze se obetave nechavaly ojizdet a vyhravat protihrace...

pouzivam je, kdyz hraji nejake jine piskvorky a prohravam, pro spraveni nalady.....

Venda said...

jinak za posledni tri noci mam 8.5 hodin spanku... z toho 5 hodin posledni noc....jak jsi na tom ty ?

M. said...

Velmi zajímavé. Jak se taková neuronová síť sestavuje? Jsou na to nějaké nástroje? Předpokládám, že jsi ji neprogramoval celou do píky, ne? Jak je to náročné? Proč je 29 neuronů hodně? Proč funguje ten efekt "únavy"?
Díky za otázky na mnoho odpovědí. Klidně i do nového zápisku :-)

Bob said...

Venda:
Ja jsem toho asi naspal o neco vic, jenze i tak je to malo a vypadam jak zombie (zle jazyky tvrdi, ze vypadam normalne).

Martin:

Nu, ze jsi to ty, v jednom z pristich prispevku to rozvedu .)