LDA och LSA med Noise-Kohonen: Samt buffer-overflow-outing Ubuntu's CM för 32- vs 64-bitars kompilering

2017-03-25

Efter att det blev av att betrakta närmare PCA - Kohonen jämförelsen - att se Kohonen som en mot en stream men i övrigt kanske onödigt tidskrävande variant av PCA om man egentligen vill göra det - fick jag min anpassning av Kohonen (som jag alltid gör linjär - endimensionell, och numera med 300 double per tillstånd längs linjen - att göra intressantare något som otvetydigt kan konvergera och normalt gör så mot LDA resp. mindre intressant p.s.s. som jag tycker PSA kopplingen är det LSA).


Intressantare och antar jag trivialare för något som arbetar fel kring sådant här. Och med fel menar jag att tänka sig att man i metodik börjar med att sitta och härleda något runt matematiska relationer som när implementerade är triviala, snarare än att börja med att för enkla ekvationer testa igenom alla uppenbara varianter av dem som inte gör beräkningarna relevant mer komplexa. Så slipper man fundera över varför en av de mest effektiva composition operatorerna för semantiska vektorer ej mer beräknings-komplex än egentligen addition och multiplikation tillsammans ej berörs i publicerat om det nu inte är därför att p.s.s. sätt varför den blir blandningen av linjärt och icke-linjärt så lär den vara direkt smärtsamt svår att bevisa samband för eller rörande icke-bevisad konvergens referera till alla tusen artiklar refererande detta för Kohonen allmänt (för jämförelse snarare än just relevant composition oftast) är att jag ändrat default formen för min tidigare Kohonen-anpassning.


I princip för exempel betraktande min 300-WW variant d.v.s. ord vektorerna vilka är cirka 300 000 st (medan 300-CC och 300-FF över flergram är ett antal miljoner) för ord i indata och tänkande oss att vi tränar något där vi önskar antingen konvergens för tillstånd mot tematiska cluster eller POS. För de senare är min erfarenhet för mina 300-WW (minns ej hur det var i mina 400 stokastiska LSA vektorer de gjordes av) att få konvergens mot POS är en fråga om förhållandet mellan L1 och L2 (med 300-WW dim. reducerade via min Kohonen från 400 dim LSA i sista steget klara görande en kvadrat på varje sim värde mot resp. tillstånd och därefter L2-normerande dem, och ej betraktande normal skew för allt neuralt eller gradient som vad jag behöver hantera saknande annat än undantagsvis negativa värden med rymden efter kvadrat ungefär med medelvärde SIM på 0.5, konkret görande just kvadrat som jag senare fick gå tillbaka att verifiera eftersom det slog mig att kvadrat istället för X * abs (X) kanske inte är helt bra för värden fördelade möjligt [-1,1]) utnyttjar jag noise.


Se det så här. Clustrande eller dimensions-reducerande med Kohonen accepterar vi givet med problemet en ökad mängd smoothing / inexakthet eller hur vi vill se det. Vi får en centralitet utryckande ex. ett ämne allmänt potentiellt istället för en mängd enskilda vektorer. Lite som att se det som att vi skär en mängd decimaler. Med mina 300-vektorer gjorda Kohonen är varje dimension meningsfull att betrakta för människa. Och för något där som också var en vinnare (emedan jag för 300 dimensionerna färdiga ej hanterar vinnare annorlunda - bara likheten mellan 400 tillstånd concept och 400 tillstånd utnyttjas) inser vi att det samlade similarity värdet kan ta en försvarlig mängd slumpmässighet upp eller ner i relativ mening mot det absoluta värdet (så mycket som 10% gör relevant skillnad för vem som vinner bara för en mindre andel när vi är nära i tid - säg sista 20% av tiden d.v.s. för 300-WW cirka 2 veckor men absolut att det går att göra snabbare men jag hade 10 - 20 liknande processer som gick).


Men det är ej noise på sim jag arbetat med utan noise på hur tillståndsvektorn flyttas. Men jag vill gärna se detta jämförbart. Vi har ett utrymme runt resp. troligt korrekt tilldelad vektor som normalt oftast också är en korrekt tilldelning. Genom att addera in noise som slumpmässigt hamnar någonstans i detta utrymme täcker vi också in detta.


Säg att jag utnyttjat detta när jag gjorde mina 300-WW. Jag har cirka 300 - 400 000 400-dimensionella vektorer in och gör ungefär lika många 300-WW. Varje ord (samt en hel del URL:er också för den delen samt säg 50 - 100 000 flergram faktiskt skapat med bindestreck då jag tyckte det var lika bra praktiska skapande topics samt härledande konstanter för composition som jag trodde ev. behövdes) som finns i denna värd är en vektor så vad skulle värdet vara? Värdet är att blandningar av ord uttryckande ex. en nyhet eller ett ämne blir bättre. Det existerar en oerhörd mängd vektorer som ej är existerande ord som kommer förekomma praktiskt.


Två idéer förklarande värdet (lämnande att hindra överträning vilket ej varit en fråga för mig förrän nyligen) jag reflekterat men ej metod-defekt begått misstaget att sitta och matematisera är att:


1. För 300-WW kan vi tänka oss att ett cluster väsentligt kortare än 300 dimensioner - säg 30 - 60 eller mindre - utnyttjar i huvudsak 1 - 10 st. 300-dimensioner styrande ett tema. D.v.s. variationer på lågt värderade dimensioner kan existera. Kanske är dessa uttryckande en hel del likhet för ett ej helt litet antal i praktiken påverkande en del ej rörande mängden vinnare men när vi ställer den färdiga dimensionen relativt alla vektorer som i verkligheten kommer in inkluderande också kombinationer av många ord. Med noise kommer dessa i absolutvärde små dimensioner ej inverka om noise är ej helt litet jämfört med säg för varje vektor minsta värde.


2. Enligt som diskuterat tidigare att en stor yta / sträcka ut från de flesta sim-värden finns också samma dimension oavsett om just varje värde existerar för ett ord gäller att höga värden snarare är sällsynta exempel på vektorer som kan förekomma praktiskt vilka också är ord.


Om jag adderar noise för en position på vektorn i Perl med:


    ( rand ( 0 ) - rand ( 0 ) )

Inser man att Ubuntu's configuration management igen är helt defunct och rörande ett ämne (separera 32-bitar och 64-bitar kompilering) som till sin natur pratar buffer overflow nära nog var helst. Men praktiskt är ungefär för mig den yttersta gränsen om tränings-konstant är låg och vi är nära klara som kan accepteras (64-bitars Linux - Perl från Ubuntu apt-get utan tvivel då definition av rand är upp till argument som största värde kompilerat felaktigt: Kontrollerande Perl manual har de noterat risken här för rand men har troligt fattat det hela delvis felaktigt. Säkerhetsriskerna är dock primärt i mängd ej lokaliserat Perl då det demonstrerar att Ubuntu CM är defunct bortom all rimlighet om ansträngande sig ens litet och begripande något lite i grunderna i minne och vad det har att göra med kompilering: Jag menar varför inte kompilera allt 32-bitar och därefter kompilera om allt 64-bitar som ej gick att starta på en 64-bitars Linux? Jag hade ej gjort så normalt även om jag kanske ej ids kompilera om eller ladda ner rätt Perl på debug-datorn men är du dum i huvudet, okunnig gör du kanske så eller om mot all förmodan ej aktuellt Ubuntu är något Ubuntish annnat).


Men oavsett 0 som argument är formen för noise det jag använder. För att fånga tänkbart värde 2. i mitt resonemang förklarande värde från experiment utnyttjar jag varje position för indata-vektorn värde som övre-gräns. Vidare utnyttjar jag det minsta värdet över hela vektorn. Samt i flera varianter kvadraten av varje absolut-värde. Ett polynom antar jag att en matematiker skulle uppleva att det blir men praktiskt snarare tre olika lösningar som söker addera tre olika värden som tänkbart har betydelse.


Praktiskt resultat i särklass tydligast är:


  • Från träning cirka 30 - 50 000 ord fördelade 60 dimensioner.
  • Gäller nära klart att för höga similarity värden mot resp. tillstånd för alla 300 - 350 000 ord som har vektorer.
  • Att oavsett om resp. sådant ord är vinnare under träningen eller ens existerande bland träningsdatat är det vad man upplevt naturligt hör dit om tilldelad vinnare för tillståndet beräknande för alla ord. Samma fenomen märks när vi tilldelar värdet sim oavsett vinnare eller inte men cirka 0.05 - 0.10 i off-set similarity ovanför att vi ser några underliga (för mig typiskt off-set html-taggar, forum-talspråk, nummer och liknade vilka ej förekom alls i träningen).

Medan frågan om avvägning bias / förmåga att inkludera korrekt / antal felaktigt tilldelade först börjar bli något som existerar som fråga nedanför (säg riktigare alla dim. 0.35 +/- 0.05 - vid 0.40 finns inga för någon dimension jag sett) men tveklöst similarity av 0.35 - 0.40, med genomsnitt alla vinnare. Skillnaden är värde är enorm.


Men värdet är ej unikt för denna metod. Om jag tränat 50 000 st. lika mycket utan detta hade jag fått något jämförbart i ej felaktigt höga. Och också om överträning och andra ej helt olika problem relaterade ex. om ej Kohonen utan vanlig vektor-kvantifiering den negativa termen när felaktigt tilldelat under träningen är väsentligt svårare att hamna i för Kohonen hade vi dock (och jag har prövat just för detta exempel) haft brutala värde-reduktioner p.g.a. just sådant här d.v.s. en mängd (tiotusentals) ord-koncept som korrekt borde vara höga för en dimension som ligger lågt - och detta oavsett om körande Kohonen-anpassningen utan grannskap eller vektor-kvantifiering med cirka 20 - 30 000 av träningsdatat med cirka 10 000 tveklöst felaktiga.


Typ exempel på hur värdefulla metoder man praktiskt har nytta av ser ut: Snabba, ej adderande komplexitet kod och allt jämförbart. Men där värdet jag avser ej har med dom värdena att göra. Utan dessa värden är mer typiska kännetecken för vad som ger stora värden typiskt i övrigt.


I övrigt betraktande exempel variationer av Kohonen publicerande kännetecknas dessa av att författarna haft svårt för att Kohonen ej är vektor-kvantifering och försökt göra en variant av Kohonen som fungerar som vektor-kvantifiering. Delvis antagligen därför att de känner sig tvungna om publicerande något alls att behöva härleda diverse vilket de upplever svårt om ej klart från start som för vektor-kvantifiering.


Jag vill dock föreslå - oavsett att en del upplevt att de bevisat att det ej är så - att det går att bevisa att Kohonen kan konvergera. Nu är jag direkt värdelöst på hela området matematiska bevis och har egentligen ej varit i kulturen alls sedan teknisk fysik. Men jag fick för mig att jag gjorde det anpassande konceptet för något helt annat. I någon mening kan vi (kanske: vi använder troligen kanske och i någon mening fortsatt lite överallt) se Kohonen som Markov-processer. Vi vet ju också att ibland kan vi bevisa något om vi kan visa det för n resp. n + 1, eller något liknande. Vändande på tilldelnings-ordningen via Bayes sats (n kontra n+1), uttryckande det som Markov-process, och därefter visande konvergens för n och n + 1, och därefter räknande tillbaka visa Bayes-sats har vi förutom att ev. / något jag trodde att jag kanske gjorde då visat konvergensen har vi kod-logiken för vad jag gjorde anpassningen för. Svårt för mig givet tid att säga säkert eftersom jag vet att det som jag parametriserar för 300-WW/CC/FF att det alltid konvergerar. Jag lär ju ej sitta och göra samma sak för algoritmer där något praktiskt kan visa mig felaktig eftersom jag ej känner till några jag behöver där frågan är öppen teoretisk.


Hur som helst får vi samma utökade värde görande LDA med Kohonen-anpassningen med noise. Här gäller dock att man / jag tveklöst kommer få mycket större värde genom att generera noise följande statistiska distributioner från språket i nyheterna.


QED. Eller hur det ibland känns som något fint för läsarnas utveckling att visa vem som är the Big Dog (så kan andra med ibland framtränande osäker självbild se hur man korrigerar upp det). Och för att understryka det lite extra - och kanske för framtiden stimulera NSA eller liknande som tänkbara kunder systemet genom att peka på hur bonus-give-a-ways ser ut: Förutom att jag nu publicerat OpenSSL defekterna redan för år sedan - outing Ubuntu.


Noise, noise, noise. == Information, information, information. Även när perfekt slumpmässigt strikt lika med mer korrekt information samlad i resultatet. Här i alla fall.


PS. PSA får mig alltid att tänka på Nobelpriset (i Kemi tror jag). 1993 - 1994 kanske? Förkortningen är troligen lite fel dock. Vad vi ex. använder för att få fler exemplar av ett stycke DNA-information. Var och lyssnande på dem föreläsande om det i Uppsala minns jag.