Rychlonávod
Poznámka k rozměrům: doporučuje se síť nečtvercová, je pak vyšší pravděpodobnost, že problémový prostor pokryje lépe.
Viz dokumentace k SOM PAKu. Jen stručně:
randinit -din data.in -cout map.cod -xdim 20 -ydim 10 -topol hexa -neigh bubble
Můžeme zvolit rozměry sítě, její topologii (hexagonální či pravoúhlá mřížka) a funkci určující tvar okolí (buď Gaussova křivka nebo skoková funkce (step function) - bubble).
vsom -din data.in -cin map.cod -cout map.cod -rlen 1000 -alpha 0.05 -radius 10 [-snapinterval 5000 -snapfile "snap-lok-%d.cod"]
-snapinterval 5000 -snapfile "snap-lok-%d.cod" říká, že každých 5000 kroků se má uložit mezivýsledek (mapa) do souboru snap-lok-<číslo kroku>.cod
vsom -din data.in -cin map.cod -cout map.cod -rlen 10000 -alpha 0.02 -radius 3 [-snapinterval 5000 -snapfile "snap-lok-%d.cod"]
qerror -din data.in -cin map.cod
Lze také použít interaktivní program vfind, který několikrát opakuje dané učící postupy, pokaždé s jinou, náhodnou inicializací mapy, hledá nejmenší chybu.
Dvojfázové učení se používá pouze u sítí inicializavaných náhodně (tj. ne při použití lininit, tam nasadíme jen fázi dolaďování). Protože velikost okolí i učící parameter alfa v průběhu klesají, bylo by možné použít fázi pouze jednu, která by ty dvě spojila v sobě. Ale v takovém případě by oba tyto parametry klesaly velmi pozvolna (lineárně) od počátečních hodnot až k 1, resp. 0. Rozdělením na fázi uspořádávání s velkými parametery a krátkou dobou a fázi dolaďování s malými parametry a dlouhou dobou běhu dosáhneme toho, že k velkým změnám bude docházet jen v 1. fázi, během níž budou oba parametry klesat mnohem rychleji než v potenciální j-fázové variantě, a naopak mnohem víc času bude na dolaďování. V druhé fázi pak již jen minimalizujeme velikost modifikovaného okolí vítězů.
vcal
Příprava mapy k vizualizaci - program vcal "sets the labels of
entries by the majority voting" - rozumím-li tomu dobře, tak máme-li data, o
kterých víme, co který vektor znamená, můžeme je použít ke kalibraci mapy, v
důsledku budou některé oblasti mapy označeny na základě těchto informací. V
dokumentaci užívají příklad, kde se snaží síť naučit rozeznat kritický a
normální stav topného zařízení, ke kalibraci použijí data s vektory
odpovídajícími kritickým stavům a takto pojmenované.
Rozhodně lze vcal použít k tomu, abychom v u-matici, Sammonově projekci a
planes viděli jména (některých) vektorů, místo pouhých teček/hexagonů.
příkaz> vcal -din data.in -cin map.cod -cout map.cod # přidej jména k
vektorům
visual
Chcete-li si napsat vlastní aplikaci zobrazující mapu, můžete využít
program visual, který vytvoří seznam souřadnic reprezentantů (BMU)
pro každý vstupní vektor, vedle toho napíše chybu pro daný vektor a jeho
jméno, takže dostanete čtveřici (x y chyba jméno).
příkaz> visual -din data.in -cin map.cod -dout map.vis
U-matice zobrazuje neuronovou síť s barevně vyjádřenou informací o tom, jak moc se daný neuron liší od okolních ve svých váhách. Čím světlejší, tím je jim podobnější. Světlé oblasti vymezené tmavší hranicí tak představují shluky (clusters) neuronů s podobným referenčním vektorem. Na obr.1. vidíme jasně jeden takový velký shluk s nepříliš ostrou hranicí a asi bychom našli i pár menších. V této u-matici každé druhé políčko představuje neuron, mezi nimi jsou vyznačeny přechody k sousedním neuronům, takže je obrázek informativnější, než kdyby byl zhuštěný, jak se občas vyskytuje, a jedno políčko představovalo jeden neuron. Bílé a černé tečky a čísla označují neurony, čísla jsou názvy, přidělené vektorům ve vstupních datech (má-li vstupní vektor 10 položek, je 11. sloupec dat brán jako jeho název).
Existují různé variace u-matice, snažící se překonat některé její nevýhody nebo poskytující jinou informaci (např. p-matice, u*-matice).
příkaz> umat -cin map.cod -ps 1 -o umat.ps [volby pro zobrazení]
![]() |
Obr.1.: U-matice pro síť 10 x 10 |
Sammonova projekce z N-dimenzionálního do 2-dimenzionálního prostoru zachovává Euklidovu vzdálenost vektorů, čili čím vzdálenější jsou dvě tečky na obrázku, tím rozdílnější jsou jejich referenční vektory. Podle (Šnorek 2002, s. 61) si můžeme učení SOM sítě představit "jako rozprostírání původně zmačkaného papíru do roviny tak, aby pokryl celý vstupní prostor". Obecně je tedy žádoucí, aby zobrazení Sammonovy projekce bylo co nejméně "pokrčené" a co nejvíce odpovídalo tvaru vstupního prostoru, který ovšem zpravidla neznáme. Většinou je "překroucení" sítě v tomto zobrazení znamením, že se síť špatně naučila, a že musíme začít znovu, v případě některých vstupních prostorů je však překroucení žádoucí a nezbytné, např. má-li prostor tvar motýlka. Vyplnění prostoru nikdy není dokonalé, zhruba 20% zůstane vždy prázdné, což je dáno učícími schopnostmi sítě, projevuje se zde výrazně odlišná situace krajních neuronů, které mají méně sousedů, a jsou tedy méně ovlivňováni (tento problém řeší použití jiné topologie sítě, např. toroid - plocha není v rovině, ale je povrchem oblíbené koblihy Homera Simpsona).
Upozornění: výstup ze sammona je lepší jako ps než eps, protože eps vytvoří velmi malý obrázek, který by se musel zvětšit.
příkaz> sammon -cin map.cod -cout sammon.out -rlen 1000 -ps 1
![]() |
Obr.2.: Sammonova nelineární projekce,
oříznuto. Čísla jsou jména, přidělené některým vektorům (po použití vcal). |
Tečky na obrázku představují neurony, čísla jsou jména, která jsme některým z nich přidělili. Vzdálenost neuronů odpovídá vzdálenosti, tj. rozdílnosti, jejich referenčních vektorů. Hrany spojují neurony, které spolu přímo sousedí. Sammon zde ještě není zcela ideální, ale zdá se, že učení postupuje správným směrem.
Výstup generovaný sammonem je do jisté míry nedeterministický, a proto je lepší spustit jej víckrát a jednotlivé výstupy porovnat. Že je třeba jej brát s rezervou dokazují následující dva obrázky, ukazující dva různé výstupy sammona pro jednu a tutéž síť (popravdě řečeno, překrouceně vypadala jen na 1 výstupu z 8 při rlen 500):
M. Juřík k tomu říká: Prekrizena neni, jen je "polozena na zada". Problem je v tom, jak Sammonova projekce pracuje. Ta projekce je vzdy velmi podobna, rozdil je pouze v natoceni.
Milan Juřík, odborník na som pak, k tomuto říká:
-planes 1 vezme prvni polozku vektoru vah neuronu a zobrazi jejich relativni hodnoty. Pomoci planes pak muzeme videt jak ktera polozka vstupnich vektoru mela vliv na usporadani site. Urcitym zpusobem je to detailnejsi pohled na sit nez poskytuje U-matrix, na druhou stranu se hodi k necemu jinemu. U-matrix nam umoznuje vyhledavat clustery, planes pak ty slozky vstupnich vektoru, ktere mely ci nemely na usporadani vliv.
Planes nám tedy umožňuje zjistit, jak je daná proměnná, tj. daná složka vstupního vektoru, rozložená po síti, jinak řečeno, jak silně na ni který neuron reaguje. Porovnáním výstupů pro jednotlivé složky můžeme zjistit, které z nich a zhruba jak moc spolu korelují - čím víc se překrývají jejich tmavě zbarvené části, tím větší je mezi nimi pozitivní korelace, pokud se naopak překrývají plochy opačných barev, jedná se o korelaci negativní. Přesněji můžeme nalezené korelace prozkoumat klasickými metodami, pracujícími zároveň už jen se dvěma proměnnými (složkami) - korelace podle Pearsona pro kardinální proměnné, podle Spearmana pro ordinální atd.
příkaz> planes -cin map.cod [-din data.in] -ps 1 [-plane 1]
![]() |
Obr.3.: Analýza hlavní komponenty (-planes 1) |
Na obrázku 3. představuje každé kolečko jeden neuron (z nichž některé - ty s čísly - jsou pojmenované), čím je neuron na obrázku tmavší, tím větší váhu dané (zde prvé) složce přikládá.
Ohledně PCA - viz (Šnorek 2002), s.106+.
Equi-distanční mapa je výtvorem Neuronové skupiny ČVUT. Vizuálně připomíná umat, až na to, že jedno políčko odpovídá právě jednomu neuronu. Hlavní rozdíl však spočívá v tom, že vybereme jeden neuron, nazvěme jej referenčním, a barva pole pak vypovídá o tom, jak je daná neuron vzdálený od referenčního, tzn. jak moc jsou rozdílné jim odpovídající vektory. Čím větší rozdíl, tím tmavší barva.
Chtěl bych zde přiblížit, jak si představuji učení sítě, je to ale můj laický názor a nemusí být zcela správný. Síť se učí tak, že neuron - reprezentant právě předloženého vektoru - je "vytažen" z původního chumlu, tj. jeho váhy se přizpůsobí vstupu. To se opakuje pro další vzory, a tak se neurony postupně roztahují po ploše. Díky vazbám na své okolí se ale neuron nepřizpůsobí vstupu dokonale, je svým okolím stahován zpět (tento princip vhodně vyjadřuje věta "Nelez tam, ty blbče!"). Důsledkem je jednak to, že reprezentant určitého shluku nebude uprostřed tohoto shluku, ale že bude posunut směrem k ostatním (záleží však na typu okolí, použitím při učení, zda např. u vzdálenějších neuronů používáme i odučování), a jednak se nám síť díky tomu uspořádá, alespoň v ideálním případě, a dostaneme hezkého sammona.
Je-li síť moc malá, spadne mnoho vektorů do týchž shluků, které tím pádem nebudou o ničem vypovídat. Bude-li neuronů příliš mnoho, ztratí se vazby mezi nimi, dané velikostí okolí, a vstupní vektory budou příliš rozptýleny po celé síti. Musíme tedy zvolit počet optimální. Neuronů by mělo být minimálně dvakrát více, než předpokládaných shluků, protože některé vždy zůstanou nevyužité. Ale nesmí jich být moc - například síť, použitá k predikci úspěšnosti vysokoškolského studenta, jejímž vstupem byl vektor o 19 položkách, měla jen nějakých 20 - 30 neuronů.
Jak již bylo řečeno, obecně by síť měla být obdélníkem, jako dobrý poměr stran se jeví 2 : 1 (ověřit!).
Topologie okolí - některé úlohy se lépe řeší na hexagonálním, některé na pravoúhlém.
Pokud nám vyjde překroucený sammon, lze usuzovat, že se síť naučila špatně. Nepomůže-li učit síť znovu, s jinou náhodnou inicializací, můžeme: