SOM; Två alternativa algoritmer

2016-07-17

Algoritmen vi hittar i den länkande artikeln:


Följande artikel har jag ej läst (Google visar också resultat från Finland GZ-komprimerad PS som jag ej läst) ännu: Emergence of invariant-feature detectors in the adaptive-subspace self-organizing map, Teuvo Kohonen, Biological Cybernetics. 1996.

Att bygga den relativa korrelationen (den icke-linjära komponenter) under träning av självorganiserade kartor

Fick mig att tänka på (kanske från viss / lite-av:ish likhet i min test-algoritm till steg två när basvektorer söks med GS) en annorlunda uppdateringsfunktion än normalt använd SOM (eller vektor-kvantifiering i bredare mening). Jag körde den konkurrerande normal och bröt samtidigt men har ej genererat ut ord tilldelade dimensionerna ännu i alla fall. De visade emellertid båda i all praktikalitet samma genomsnittliga similarity (cosinus) mellan träningsdata och resp. tillstånd med maximala likheten (varför jag struntade i att generera vilket tar en del minne och jag låg lågt den dagen givet att de också vill jag minnas visade samma senaste 20 vinnare ungefär lika rimliga startande från hyggligt pre-tränade tillstånd vilket jag normalt alltid gör - Distansen via subtraktion gör att vi kan se det som den linjära komponenten i SOM-algoritmen medan manipulationen grannskapet kan göras icke-linjär avseenden effekten av hur påverkan summeras mest självklart via reduktion inlärning med avstånd till vinnare).


Normalt tar vi ut segrande tillstånd för indatat som det varande mest lika. Men modifierar detta tillstånd mer ju mer olika träningsdatat är och detta reducerat efter en konstant så vi åtminstone ligger under ett (och för mig känns den egentligen mer begriplig som högst 1/2: För SOM med grannskapet får vi oavsett ev. riktighet där emellertid också allt nedanför eftersom vi tränar näraliggande noder p.s.s. men med en träningskonstant reducerad med avståndet).


Emellertid även om denna princip är ytterst sund känns det också mycket rimligt att den del av informationen indata's vektor representerar som var mer betydelsefull för att den skulle vinna borde värderas mer än kanske irrelevant information.


Den triviala metoden att göra det på är med samma del-operationer som vi bildar cosinus-similarity med d.v.s. betraktande varje position i resp. vektor varande vad vi bedömer. Är ex. position 1 resp. hög tror vi det är viktigare att få med än om de istället kanske indikerar olika riktning (säg 1 resp. -1 för normalt ortogonala vektorer [-1,1]).


Emellertid om vi värderar förändringen enligt detta gör vi direkt motsatsen till grundmetoden som är välkänt fungerande i alla möjliga sammanhang och namn.


Dock kan man också ta grundalgoritmen och göra en enklare variant av och till inte bara möjligt fungerande utan rent av bättre fungerande (just för denna typ av träning normalt ej bättre åtminstone för den typ av information jag har i indata vektorerna: hebbianska associatorer kombinerande similarity mellan data och tillstånd snarare än att utnyttja alla 400 positioner efter SOM tillstånden presterar dock utmärkt så här) genom att skatta antingen likheten eller avståndet vad vi nu föredrar (jag kan tänka mig det senare vanligen är lite snabbare men brukar själv föredra multipikationerna similarity kräver eftersom det brukar komma med färre defekter p.g.a. feltänk av mig då den känns mer naturlig när jag tänker) övergripande för vektorerna.


Är distansen samlat större d.v.s. vi har lägre la similarité cosinus ökar vi hur mycket vi modifierar tillståndet utifrån indata-vektorn med. Medan för varje modifikation med denna vi gör per position modifierar vi mer om den betraktat unikt är mer lika tillståndet.


Samlat sker en massa mer beräkning. Och som sagt åtminstone genomsnittlig similarity är snarlik ner till flera decimaler den samma som med grundalgoritmer för min lilla testkörning cirka 60 000 operationer påbörjat hyggligt bra för-tränad organisation. Min gissning var därför att den inte skiljer sig radikalt.


En algoritm jag körde initialt fortfarande tränande små indata mängder på färre än några tusen ord där prestanda märks så mycket mer konkret än organiserande miljoner (där det alltid tar massor av tid vad man än gör) var att avstå från att uppdatera vinnande tillstånd och istället spara informationen. När man därefter kört säg slumpmässigt 1/3 - 2/3 av totala antalet ord i träningsdata modifierar vi motsvarande genomsnittet (själva divisionen för att bilda genomsnittet behöver ej göras så det är endast additioner och slutligen en subtraktion). Därmed gör vi en normalisering (400 kvadrat operationer + 400 divisioner per uppdatering) vilket snabbade upp tydligt. Det tycks ge samma värde utdata åtminstone när man avslutar några epoker normalt resp. som var aktuellt för mig för dessa mindre specialiserade ämnen hade 0 grannskap annat än lite precis början för att få bort out-lier tilldelning. Vilket förövrigt kanske säger något om hastighet multiplikation vs addition för decimaltal.


Jag upplevde ev. inkorrekt att det kan vara sundare om man gör så här att ej per epok utnyttja alla koncept men heller ej ligga väldigt lågt i antal. Så att man per epok med resp. normalisering modifierar med tämligen varierat indata kanske minskande risken för träning på någon typ av korrelation som ej egentligen har något med vektorerna att göra.