Tänkbar modifikation av algoritm kvantifiering vektorer att använda mot slutet av träningen

2017-04-26

För kohonen-nät är mitt intryck att vi utifrån grannskap i någon mening begränsar - sätter kanske inte alltid förstådd eller eftersträvade - constraints vilka inte självklart behöver ha något just med den topologiska egenskapen i mening av kulturen att visualisera resultatet (vilken jag själv av vad jag sett folk gjort tycker verkar tycker verkar oftare än annars obegriplig i vilket värde det skulle ge: jag använder inte algoritmen själv för visualisering eller gör näten 2D utan istället en eller 1D-lager).


Säg att vi antingen gjort ett kohonen eller vektor-kvantifiering med antingen bara positiv-tilldelning eller eventuellt (kanske intressantare för diskussionen) också negativ-förändring (d.v.s. om vektor X för ett ord hör till hög-intensitet tilldelar vi tillstånd hög och ev. om ej viktande förändringen ex. med sannolikhet, intensitet och liknande med krav på hur det ska påverka effekten på likhet när klar bedömt viktigare än ex. än mängden icke-ämnes-korrekta ord som kommer ligga på hög likhet - om likhet med tillståndet är lägre än något värde för lugnare mer tillförlitlig konvergens inkluderande mer lättförstådd och predikterad effekt rörande mängden okända riktiga ord resp. okända defekta ord som kommer gå över threshold med samband till den utnyttjad här - resp. när effekten är negativ om låg-intensitet och/eller icke-hög-intensitet visar högre likhet än något gränsvärde eller för låg-intensitet om låg-intensitet visar högre likhet än tillståndet för hög-intensitet). Och att detta är klart.


Säg att vi tränade det klart utnyttjande för att bestämma effekten förutom träningskonstanten (epok-beroende) med skillnaden L1 mellan varje position i vektorn d.v.s. v(i) = v(i) + alpha * ( u(i) - v(i) ) (med v som vektorn för tillstånd och u för ord).


Varje position för en vektor oberoende av övriga och tillståndet värderas i vilken effekt det p.s.s. Något man kan göra sent i träningen (upplever jag som ibland meningsfullt men kräver att man tittar till det ofta) är att låta likheten och samma likhet som fick bestämma (som i kohonen-nätet) vilket tillstånd vi gör förändringen på. Gör man samma sak tidigt i träningen blir resultatet sällan bra ämnes-sorterat och konvergensen kan gå till vilket underligt gravt övertränat resultat som helst. Men sent med lågt alpha kan det ibland kanske ge något.


Det tycks troligt att vi sent kan ha vissa positioner i vektorerna eller samband mellan positioner som är mer värdefulla medan diverse andra samlat på sig junk eller bara är mindre meningsfulla. Vektorkvantifieringen i sig söker nu bestämma detta. Men kanske kan vi nå bättre finstämda konvergenser om vi mot slute söker värdera detta. Jag kan tänka mig väldigt bra sätt att göra detta på men varande mer komplexa över statistiska samband är min tumregel från erfarenhet att om de gör en enkel algoritm komplicerad kommer de ej otroligt förstöra mer än de ger och om inte ej vara värt tiden.


Men man kan ju också pröva något enkelt i sig lika lite tagande hänsyn till något annat än värdet för tillståndet och ordet för resp. position. Jag prövade lite med en variant av u(i) * log ( 1 + e(z(u(i)) ) p.s.s. sätt att mindre förändringar värderas ner absolut mindre än stora förändringar. Vilket jag ej märkte just något värde stort nog för att förändra sorteringen av orden i träningen utifrån similarity per epok.


Medan jag ännu är osäker på om denna variant kanske adderar en del värde. Startande från ett övertränat färdigt tillstånd på ett lågt alpha tycks det kanske ge något efter några varv. Men varande övertränat behöver det stå ett tag. Kan det få ut mer exakthet på något gravt övertränat bör det kanske visa det värt att pröva i övrigt.


1. Vi kan här anta att trots att resp. vektor position är [-1,1] att inga positioner varken i tillstånd eller vektorer ord är annat än ]0,1[.

2. Trots vanligt att göra så normaliserar vi ej vektorerna till att summera ett. Vi ser dem ej trots att varje position kan ses som kontext ej som sannolikheter konkurrerande med varandra (d.v.s. antar vi att en position uttrycker något runt namn och var de hör till olika kulturer, och ett annat arbete och roller, menar vi att de kan vara samtidigt verkliga såväl relevanta samtidigt).

3. Istället ev. men ej säkert teoretiskt skakigt ser vi resp. position som en sannolikhet approximerad av värdet (vilket är per vektor L2-normaliserade cosinus-similarity värden) för att igenkänna eller bedöma pureness av något för den, eller just här (för vektor-typen 300-WW) sannolikhet att vi ser dem i detta kontext (tror jag är vad jag minns rätt från när jag gjorde dem).

4. I någon mening har vi nu (tror jag) för varje position 1 st. fördelning som kan ha ett värde (här i träning medan världen är större för alla vektorer). Vi kan visst se alla värden för allt träningsdata per position representera fördelningen för målsättningen men det är den approximation vi nått när vi börjar här som vi kan laborera med utan att just behöva göra en massa komplicerat sparande serier av värden.


5. Beta (Mathematics Handbook) gav (ev. med någon notation rörande tvåan jag ej minns längre) summeringen av f(x) * f(x) * log ( f(x) / g(x) ) för KL-divergensen. Jag definierade om den till f(x) * g(x) * log ( f(x) / g(x) ) + g(x) * f(x) * log ( g(x) / f(x) ) (men kontrollerade inte att det blev som jag förväntade men antagligen ok).


6. Värderar vi träningens effekt utifrån denna divergens positivt är det något mer lämpat tidigare innan i princip klar med träningen. En uppsjö alternativ till att påverka effekten finns här utan tvivel i huvudsak bättre och de flesta antagligen om ej mängden data är gigantiskt eller konfigurationen komplex med flera parallella gradienter ej särskilt värdefulla jämfört med att låta det gå långsamt nedåt av och till kontrollerande det hela och vid behov gående upp igen ev. till ett tidigare mer sällan sparat tillstånd.


7. Värderar vi upp det hela får vi ej någon lokal effekt per position. Emellertid kan resp. värde del av summan utnyttjas per position. Jag prövade några stycken mer eller mindre uppenbara varianter av detta och körde ett tag på resp. tills jag nådde denna variant.


8.1. Vi inför först en särskild "distans" besläktad med en variant jag ofta har använt (men ej fungerade bra här - tränande vad som är tänkt att gå kontinuerligt fortsatt för att uttrycka intensitet i världen resp. ge skattningar som kan användas för dekomposition av ex. enskilda ords vektorer eller kontext - i just aktuellt här positivt, negativt, tillförlitligt, ej tillförlitligt, upp i intensitet, ner i intensitet, och fara men där problemen distansen mer lågt i ett antal breda ämnen associerade förändring rörande större världsproblem så som ex. religion, krig, hälsa m.m. där distansen gav en ej lämplig preferens mot sortering ordtyp ej önskad: L1-distans / ( 1 + cos-similarity) ): KL-divergensen-omdefinierad-Hans-för-alla-positioner-tillsammans / ( 1 + cos-similarity ).


8.2. Testkörning nu använder dock ej distans som beror av cos-sim då jag vill se effekten också utan detta, och ej är säker på att KL-divergensen kan skala cos--sim över många epoker utan att olämpliga konvergenser uppstår.


8.3. Distansen används ej för annat än att skala förändringen ett ord tillåts att göra på tillståndet.


8.4. Vidare för varje position skalar vi förändringen enligt: ( C - divergens(i) / max_divergens ) eller i besläktad variant ( C - max_divergens * 0.5 - divergens(i) * 0.5 ). Där max_divergens är det största värdet en position i ord-vektorn har för divergensen. Jag prövade också varianter utnyttjande medelvärdet: Dock utnyttjar vi ju redan summan i distans-måttet.


8.5. Sätter vi C till ett värde mindre än 1 kommer vi som vi använder måttet subtrahera för positioner som är kraftigt divergerade. Medelvärde divergenserna för ett ord ligger ofta runt 0.02 - 0.03 (och ej normalt ovanför 0.05) medan max-värdet ofta tycks (tidiga epoker) ligga 0.4 - 0.8. För åtminstone C mindre än 0.95 tycks det hela falla i bitar till något ej önskat. Varianter med lägre värden och ej utnyttjande negativa värden kändes ej heller bra. Jag tog därför C till 1.


8.6. Och tillsammans får vi effekt-påverkan KL-divergensen har som: ( C - max_divergens * 0.5 - divergens(i) * 0.5 ) / distans. Vilket vi multiplicerar med träningskonstanten alpha.


9. Allt för resp. förändring per position i: v(i) = v(i) - alpha * ( u(i) - v(i) ) * ( C - max_divergens * 0.5 - divergens(i) * 0.5 ) / distans


Att få båda världar samtidigt: Både träna tillståndet till att motsvara indata d.v.s. med nödvändighet förändra sig utifrån indata om ej perfekt från start, samtidigt som vi kan värdera upp indata och positioner vektorer som är bättre är svårt om vi ej vill utnyttja något annan vetskap än själv det tillstånd vi bygger upp. Jag upplever det ej som rimligt att kunna förvänta sig att det ska gå bra. Återvänder vi till mitt ex. att ibland pröva att värdera upp med cos-similarity är förutom riskerna med det kanske så normalt (ev. alltid för mig) att vad man sent under träningen ev. uppnår i huvudsak är att snabba upp konvergensen.


Samtidigt om vi ej låter algoritmen fritt välja tillstånd att förändra. Och ej utnyttjar ex. grannskap, eller håller flera "kurvor" av gradient-förändrade tillstånd som uttrycker något ex. kontextuellt eller tidsmässigt annorlunda men besläktat. Gäller att effekten alltid är till sin natur linjär. Emedan om vi behåller detta och adderar på en icke-linjär komponent oavsett ev. övriga som används kan det innebära att vi ökat möjligheten till anpassningsbarheten mot indata.


Samtidigt gäller vad jag först skrev avseende grannskap i Kohonen-nät att sådant också är constraints. Vi begränsar mängden lösning vi när vägen väljs fortsatt kan ta och därmed också storleken på den mängd som motsvarar hela världen som antas existera. Desto hårdare constraints ju mer tenderar vi att lätt hamna där vi också antar att världen utanför vårt träningsdata är mindre än den egentligen är och har det betydelse i användningen av resultatet är det upp till svårt problematiskt.


Storleken på sådan potentiell övertränings-effekt är dock ordentligt varierad mellan metod. Tänker vi oss att vi alltid gör addition på tillstånd A för data medan vi subtraherar på tillstånd B om likhet B är större än A, och omvänt för data avsett tillstånd B. Och slumpar orden. Här är komplexiteten påverkar överträning potentiellt gigantisk: Potentiellt därför att det ej är säkert om resp. tillstånd A och B är konstant i antal bitar kan konvergera för att uttrycka detta (annat än ökande distansen mellan tillstånden accepterande förstörelse meningsfull information: Ex. att tillstånden vandrar "oändligt" långt ifrån varandra vilket dock i sådan extrem kräver en hel del klumpighet eller inkompetens för att klara om något villkor alls finns för när subtraktion görs alt. någon form av genomtänkt normalisering effekt mot totala mängden i resp. grupp A och B: För några exempel sådant jag märkt när jag hamnat i sådant som brukar lösa det). För att få hela möjligheten kan man behöva tillåta algoritmen att skapa fler tillstånd beskrivande resp. A och B när det behövs. Och på samma nivå potentiell komplexitet och storlek inducerad överträning möjlighet ligger många neuronnäts-algoritmer. Sätter vi dock threshold i absolutnivå likhet åtminstone för när vi subtraherar från tillstånd B har vi tagit ner denna potentiella komplexitet enormt. Och har vi det både på addition och subtraktion är den gigantiskt mindre. För grannskap kohonen-nät om denna funktion endast adderar är komplexiteten ej speciellt hög alls. Låter vi den också subtrahera (vilket jag sällan tror är annat än problem utan värde och jag prövade runt en hel del) när en viss distans nåtts.


Beräknar vi som alternativ medelvärde av vektorerna för träningsdata till tillstånd A tenderar sambandet normalt vara att med fler ord växer vi först i exakthet. När de ännu ej är över säg några hundra och väljs förhand. Därefter brukar jag se försämring orsakad av att man börjar få med ord som ej hör hemma i gruppen. Samtidigt som en del fel försvinner gäller därefter att vi når bättre resultat med mer data där vi når mest längst för grupper som i all verklighet inkluderar många ord och där definitionen av vad som hör till gruppen ej inkluderar något som till sin natur utnyttjar en icke-linjär form som ej finns i vektorerna (d.v.s. för distribuerade ordvektorer skapade normalt sätt ej grupper som är grammatiska till sin definition där effekten träningen av dessa skulle ha att göra med exakt vad vi har för ord snarare än ämnet som sådant resp. omvänt att vi här kan få effekten att ej ämnen utan ämnen + ordtyp visar sig irrationellt om ej hanterat ex. för post LSA eftertränande mer styrt utan tematiska - vad som har med ämnet att göra). Ökar vi mängden ord kommer vi dock ej öka exaktheten annat än att öka mängden riktiga inkluderingar relativt mängden defekta. Hur varierade gruppen är naturligt, resp. mängden icke-relevant data vektorerna innehåller, o.s.v. kan vi ej påverka. Så någon risk för överträning finns aldrig annat än i mening av att välja ett st. antaget perfekt ord istället för att titta på detta ords grannskap och där välja ut fler ord som hör till gruppen samtidigt som defekta ord som ej hör hemma där ej väljs till medelvärdet. Men de defekta orden vi kan se i generering per ord vi använder (eller för medelvärdet samlat) av närmaste grannar med högst similarity kvarstår även om de med lite tur fler ord kan späs ut. Överträningen i den mer kraftfulla algoritmen än medelvärde kan vi därför jämföra med att för jämförbart generering närmaste-grannar exkludera ej önskade ord, och inkludera önskade ord, på sådant sätt att generering för det färdiga tillståndet ej kommer inkludera på hög position en mängd av ord som borde varit där eller alternativt inkluderar en mängd ord som ej hör dit alls (för vektorer skapade med LSA från stora corpus kan vi ibland p.g.a. PMI se när träning färdiga vektorer görs för vanliga ord att vi i generering klar kan se väldigt udda ord eller tecken komma högt ex. som jag kan se för mina 400-vektorer tränande bara med vanliga engelska ord html-taggar m.m. som kan nå höga positioner eller ord från små-språkområden). Ett stort stycke av den potentiella informationen vi kan nå är ej beskriven, och det mer avvikande från det vanligare kommer mer sannolikt uppvisa något högre här.


Komplexitet träning kan ha samband till den komplexitet som påverkar risk överträning. Detta gäller ur-typiskt när många icke-linjära operationer sker pågående från start av träningen och över alla operationer som sker per träningsdata. Medan den är gigantiskt lägre än ex. flera tillstånd tränas uteslutande linjärt och därefter kombineras icke-linjärt under förutsättning att vi i och med den linjära träningen också når en "enklare" värld där det icke-övertränade / icke-perfekt-exakt-formade är meningsfullt och snarare ger ökad exakthet. Säg att vi från fyra tillstånd - motsvarande fyra dimensioner (i kontrast säg 300 dimensioner för vektorer träningsdata innan) - ska välja antingen 0 eller 1. Här är vi rent av ibland där bruteforce eller slumpade vikter, funktioner, kombinationer av dem o.s.v. kan användas.


Vad som gäller sådant jag gjort här har jag dålig känsla för. Men jag anar att den givet något vettigt tränat innan ej begränsar ner världen märkbart alls. Så länge ej varierat positioner utifrån divergerade mer än något börjar subtrahera på tillstånden medan andra kommer addera på samma positioner. Med subtraktion byggs icke-linjära samband som kan uttrycka mer flexibla former på "kurvan" mellan orden (i den mån det för vald effekt-funktion alls är meningsfullt möjligt) medan jag tror när vi endast väljer hur mycket vi adderar att sambandet endast skapas i relativ mening per position och ord. Jag tycker att en metodik som fungerar bra för mig för sådant här är att pröva en uppsjö enkla varianter eller som just här kombinationer av tre enkla metoder jag vet kan fungera bra. Emellertid föredrar eller har preferens mot vad jag kan visualisera formen eller förändringen av. Jag är dock lite osäker på om jag gör det bra för divergensen-komponenten per position bl.a. därför att jag ej är hemvan i formen på ordvektorerna rent allmänt på de olika positionerna och hur positionerna formar sig tillsammans. Sedan har jag ibland en preferens att önska två värden samtidigt men ej normalt förväntas kunna få samtidigt antagligen därför att det ibland visar sig möjligt vilket man minns medan man minns mer diffust och ofullständigt alla gånger det ej går även om jag egentligen aldrig trots att jag försöker riktigt tror att det kommer visa sig gå.


Oavsett hur addition och subtraktion används tidigare avser det ej i vilken riktning vi förändrar tillståndets vektor absolut utan tecknet vi sätter före L1-distansen (om vi förändrar tillståndet närmare som vid addition aktuellt stycke träningsdata). D.v.s. v(x) - alpha * ( u(x) - v(x) ) där vi ibland anropar funktionen med ( (-1) * alpha ) i vilket vi fall förändringen innebär att distansen ökar mellan tillståndet och vektorn för ordet vi just då tränar på. Vi noterar att riktning är relativt samma data vi förändrar från och bestämmer mängden förändring av men att det tänkbart kanske inte alltid behöver vara så.