Použití programového balíku SOM PAK pro samoorganizující neuronové sítě (mapy)

Rychlonávod

Obsah

1. Slovníček

Referenční vektor neuronu
je takový hypotetický vstupní vektor, kterému by daný neuron odpovídal dokonale, čili takový vektor, jehož hodnoty x1..xn přesně odpovídají váhám w1..wn neuronu, takže nám popisuje stav tohoto neuronu. Vyjadřujeme-li se neuronech jako o vektorech, máme právě na mysli jejich reprezentaci referenčními vektory.
Jméno, popiska (label) vektoru
V souboru vstupních dat můžeme každému vektoru, tj. každému řádku, přidělit jméno (label). Za jméno je považováno to, co se nachází za posledním datovým sloupcem, udám-li tedy, že mám 10-ti složkové vektory, je 11. sloupec považovaný za jméno daného vektoru, pokud je tam něco uvedeno. Dají se tam zadat ještě další parametry, viz dokumentace SOM PAKu.
Reprezentant vstupního vektoru (Best-Matching Unit, BMU)
Reprezentantem pro daný vstupní vektor (vzor) je ten neuron, který mu (v dané chvíli) nejlépe odpovídá.
Codebook vector
Název používaný někdy v anglické literatuře pro vstupní vektor.

2. Příprava a trénování sítě

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ě:

  1. Inicializace sítě - randinit. Př:

    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).

  2. Trénování sítě - vsom:
    1. Fáze uspořádávání - probíhají změny topologie na globální úrovni. V této fázi nastavujeme velké okolí (téměř rovné poloměru sítě) i rychlost učení (alpha). Př.:

      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

    2. Fáze dolaďování - probíhá dolaďování vah na lokální úrovni. Okolí i rychlost učení jsou výrazně nižší a fáze probíhá mnohem déle. Př.:

      vsom -din data.in -cin map.cod -cout map.cod -rlen 10000 -alpha 0.02 -radius 3 [-snapinterval 5000 -snapfile "snap-lok-%d.cod"]

  3. Vyhodnocení chyby - zjištění průměrné chyby pro všechny vzorky - qerror. Př.:

    qerror -din data.in -cin map.cod

  4. Vizualizace výsledků, viz níže.

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.

Proč dvojfázové učení?

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ů.

3. Vizualizace výsledků

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

3.1. umat: U-matice (Unified Distance Matrix)

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í]

U-matice
Obr.1.: U-matice pro síť 10 x 10

3.2. sammon: Sammonova nelineární projekce

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

Sammonova nelineární transformace
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):

Sammon 1 - nepřekroucená verze

Sammon 2 - překroucená verze

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.

3.3. planes: Analýza hlavní komponenty (Principal Component Analysis, PCA)

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]

Výstup planes -plane 0 ...
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+.

3.4. Equi-distanční mapa

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.

4. Doporučení a postřehy

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.

4.1. Velikost sítě

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ů.

4.2. Další parametry

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.

4.3. Učení sítě

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:

  1. Zkusit změnit učící parametry, hlavně zpomalit rychlost zmenšování okolí - mohlo se stát, že na počátku, při velkém okolí, byly neurony náhodně roztahány po ploše, a dík příliš rychlému poklesu okolí už nebylo síly, která by je přeuspořádala.
  2. Pokud nepomůže 1., lze zkusit měnit topologii sítě - její velikost (viz výše) a topologii okolí (viz výše).

5. Odkazy

6. Bibliografie

  1. Šnorek, Miroslav. Neuronové sítě a neuropočítače. Vydavatelství FEL ČVUT. Praha, 2002.