pátek, ledna 13, 2006

Započteno jest

Včera ve 14:15 jsem do OpenOffice Impress vložil poslední obrázek, zaklapl notebook a spěchal do podzemní místnosti H20, kde mě ve 14:30 čekala prezentace semestrálky ze Speciálních diagnostických metod. Prezentace prý byla trochu ukecaná (na slidech bylo moc textu), grafy neměly popisky, ale síť se chovala hezky.

Doktorand, kterému jsem práci prezentoval, nenápadně vyzvídal, jestli už někde dělám diplomku... Pověděl jsem mu o Martinovi, který se mě ptal na detaily k neuronovým sítím a já si to teď musím prostudovat, abych fundovaně odpověděl.

Nuže Martine a ostatní, které to zajímá :

Matlab je profesionální nástroj, který obsahuje tuny tzv. toolboxů, které se specializují na různá odvětví vědy a techniky. Existují toolboxy na symbolické výpočty (počítání s písmenky, místo s čísly ;), pro simulace, zpracování signálů, obrazů (co, Vendo?), všemožné grafování, numerické výpočty a další, další. Samozřejmě se v něm dá programovat a to velmi snadno. NASA v něm například simuluje některé části vesmírného programu a mezi demo aplikacemi v základní instalaci je autopilot stíhačky F-14. Pochvalme ČVUT, protože pro Matlab zakoupila licenci pro všechny studenty.


Jeden z toolboxů nese název Neural Network Toolbox a s jeho pomocí jsem síť navrhoval. Sítí existuje celá řada, mně osobně v vyhledání té správné pomohl jeden článek v časopise Automa. Takto vypadá kus zdrojáku, kde sestavuji síť.


S=[5 7 6 7 1];
TF={'PURELIN' 'LOGSIG' 'LOGSIG' 'LOGSIG' 'PURELIN'};
bob=newff(PR,S,TF,'trainlm','learngd');

bob.trainParam.epochs = 3000;
bob = train(bob,tren,tren_lab);


Jednoduché, což?

Síť S obsahuje 5 vrstev, počty neuronů jsou v hranatých závorkách. Na posledním řádku síti předhodím trénovací data tren, což je matice 4x75. V každém sloupci jsou 4 parametry, charakterizující daný signál.

Proč je 29 neuronů tak moc? Neuron přijme parametry na svých vstupech, vynásobí váhami, sečte a pošle výsledek neuronům do další vrstvy. Spojení je hodně, všechny váhy se musí během učení nastavit. Pokud to stále nevypadá složitě, tak věz, že pro většinu semestrálních úloh stačili jeden/dva neurony.

A jak je to s přeučením? Při hodně dlouhém učení se může stát, že síť začně vidět souvislosti i tam, kde žádné nejsou (ony tam být můžou, ale nechtěné, nesouvisející s výstupní funkcí). Dobrý příklad je film Čistá duše, potažmo situace, kdy matematik John Nash vidí komplikované šifry v novinových článcích apod. Nechci naznačovat, že přeučená síť má schizofrenické sklony (aspoň ne teď, dokud stále na počítači běží).

Na obrázcích vidíte
1) chování výsledné sítě na reálných datech - puntík mimo "schody" znamená, že síť špatně určila třídu chyby.
2) struktura kousku sítě podobné té mé
3) takto spojený za chvíli usnu

A jestě pro Martina : Neuronové sítě v PHP

6 Comments:

Venda said...

hmm, Bobe, klobouk dolu.
pro ty, (pro me) kterym nejde Fourierova transformace jsi ted King...

A John Nash je muj tajny idol ;)

ef said...

fnuk fnuk..... ja se ztratila :(

Bob said...

Venda, kloubok zase nasad, at se nenachladis a na Fourierovu transformaci se ptej ptej, poradim, budu-li vedet.

Ef:
U ceho ses ztratila? :-(

Venda said...

dobre, Bobe :)
snad budes okolo osme dnes u sebe :)

Martin said...

Díky za vynikající post!
Tys mi teda dal, už tři hodiny si pročítám články na Automě a hraji si se sítí 2-2-1 v PHP :-)
Jaký typ sítě jsi zvolil pro tu úlohu? Nemůžu to z toho zdrojáku vyčíst. Proč jsi zvolil právě strukturu, kterou jsi zvolil (5-7-6-7-1)? Učil jsi ji těch 3000 epoch, jak stojí ve zdrojovém kódu, nebo to je jen příklad? Jak dlouho přibližně trvala jedna epocha?

Jo a už jsem pochopil, proč je 29 neuronů hodně. :-) Testoval jsi tu úlohu třeba s jednodušší sítí?

Bob said...

Martin :
To ja rad ;). Onu sit jsem si vybral prave podle jednoho z clanku na Autome. Resili podobny problem, a protoze mezi autory byl vedouci katedry vypocetni techniky FEL CVUT, rekl jsem si, ze na tom asi neco bude. Sice jsem posleze vyzkousel siti vice, ale tahle byla nejsikovnejsi. Podle doktoranda, co to opravoval, existuje i lepsi sit, ale mne se moc neosvedcila.

Sit je typu feed-forward backpropagation network. (Google -> newff -> prvni odkaz)

Strukturu site jsem si zvolil experimentalne. Prvni a posledni vrstva jsou celkem jasne (5 vstupu -> pet neuronu, 1 vystup -> 1 neuron), i kdyz pocet vstupnich neuronu se muze lisit.

Ucil jsem je opravdu 3000 epoch, pricemz vsech 3000 epoch trvalo asi 3-4 minuty. Jednou jsem zkusil asi 15 000 epoch, jenze tehdy se mi sit preucila.