En neural datavetenskap: hur och varför

Den grova guiden för att göra datavetenskap om neuroner

En hjärna som gör datavetenskap. Kredit: Brain av Matt Wasser från Noun-projektet

Tyst, snyggt tar en ny typ av neurovetenskapsman form. Inifrån de myriade raden av teoretiker har ökat team av neurovetenskapsmän som gör vetenskap med data om nervaktivitet, på de glesa splutteringarna av hundratals neuroner. Inte skapandet av metoder för analys av data, men alla gör det också. Inte insamlingen av dessa data, för det kräver en annan, formidabel, färdighetsuppsättning. Men neurovetenskapsmän använder det fulla utbudet av moderna beräkningstekniker på den informationen för att svara på vetenskapliga frågor om hjärnan. En neural datavetenskap har framkommit.

Det visar sig att jag är en av dem, denna klan av neuraldataforskare. Av misstag. Så långt jag kan veta, så är det alla vetenskapliga områden som föds: av misstag. Forskare följer näsan, börjar göra nya saker och plötsligt upptäcker att det finns en liten mängd av dem i köket på fester (eftersom det är där dryckerna är, i kylen - forskare är smarta). Så här är ett litet manifest för neurala datavetenskap: varför det dyker upp och hur vi kan komma igång med att göra det.

Varför är detsamma som alla vetenskapsområden som har spottat en datavetenskap: mängden data går ut ur handen. För vetenskapen att spela in massor av nervceller har denna dataflöde en vetenskaplig rationell. Hjärnor fungerar genom att skicka meddelanden mellan nervceller. De flesta av dessa meddelanden har formen av små elektriska pulser: spikar, vi kallar dem. Så för många verkar det logiskt att om vi vill förstå hur hjärnan fungerar (och när de inte fungerar) måste vi fånga alla meddelanden som skickas mellan alla nervceller. Och det innebär att spela in så många spikar från så många nervceller som möjligt.

En baby-sebrafiskhjärna har cirka 130 000 nervceller och minst 1 miljon förbindelser mellan dem; en humlahjärna har ungefär en miljon nervceller. Du kan se hur detta skulle komma ur hand mycket snabbt. Just nu registrerar vi någonstans mellan tiotals och några hundra nervceller samtidigt med standardkit. Vid gränserna är det människor som spelar in några tusen, och till och med några få tiotusentals (om än dessa inspelningar fångar neuronaktivitet i mycket långsammare takt än neuronerna kunde skicka sina spikar).

Vi kallar detta galenskapssystem neurovetenskap: neurovetenskap, för studier av neuroner; system, för att våga spela in från mer än en neuron åt gången. Och uppgifterna är sinneskrävande komplexa. Vad vi har är tiotusentals samtidigt inspelade tidsserier, var och en av strömmen av spikhändelser (faktiska spikar, eller något indirekt mått därav) från en neuron. Per definition är de inte stationära, deras statistik förändras över tid. Deras aktivitetsgrader spridda över många storleksordningar, från munliknande tyst kontemplation till ”trumkit i en vindtunnel”. Och deras aktivitetsmönster sträcker sig från klockliknande regelbundenhet, till stamning och sprutning, till att växla mellan anfall av mani och ansträngningar.

Gifta dig nu med djurets beteende som du har registrerat nervceller från. Detta beteende är hundratals val av prövningar; eller armrörelser; eller rutter som tas genom en miljö. Eller rörelsen av ett sinnesorgan eller muskulaturens hela kroppsställning. Upprepa för flera djur. Eventuellt flera hjärnregioner. Och ibland hela hjärnor.

Vi har ingen sanning. Det finns inget rätt svar; det finns inga träningsetiketter för data, förutom beteendet. Vi vet inte hur hjärnor kodar beteende. Så vi kan göra saker med beteendemärken, men vi vet nästan alltid att det inte är svaret. De är bara ledtrådar till ”svaret”.

Systemens neurovetenskap är då en rik lekplats för dem som kan gifta sig med sin kunskap om neurovetenskap till deras kunskap för analys av data. En neural datavetenskap föds.

Hur är det - eller kan det göras? Här är en grov guide. Neuraldataforskarens uppgift är att ställa vetenskapliga frågor om data från systemets neurovetenskap; att fråga: hur fungerar alla dessa neuroner tillsammans för att göra sin sak?

Det finns ungefär tre sätt vi kan svara på den frågan. Vi kan se dessa tre sätt genom att titta på korrespondensen mellan etablerade klasser av problem i maskininlärning och beräkningsutmaningar i systemets neurovetenskap. Låt oss börja med att titta på vad vi har att arbeta med.

Vi har en del data från n neuroner som vi har samlat in över tid. Vi klumpar in dessa i en matris som vi kallar X - lika många kolumner som nervceller och så många rader som tidpunkter som vi har registrerat (där det är upp till oss hur länge en "tidpunkt" varar: vi kanske gör det kort, och bara ha varje post post en 1 för en spik, och 0 annars. Eller så kan vi göra det länge, och varje post registrerar antalet spikar under den förflutna tiden). Under den tiden har saker hänt i världen - inklusive vad kroppen har gjort. Så låt oss klumpa ihop allt det i en matris som vi kallar S - så många kolumner som det finns funktioner i världen vi bryr oss om, och så många rader som tidpunkter vi har spelat in för dessa funktioner.

Traditionellt innebär maskininlärning att bygga tre klasser av modeller om världens tillstånd och tillgängliga data: generativ, diskriminerande och densitet. Som en grov guide visar denna tabell hur varje klass motsvarar en grundläggande fråga i systemets neurovetenskap:

1 / Density modeller P (X): finns det struktur i spikarna? Låter tråkigt. Men faktiskt är detta nyckeln till stora streck av neurovetenskaplig forskning, där vi vill veta effekten av något (ett läkemedel, ett beteende, en sömn) på hjärnan; där vi frågar: hur har strukturen för neural aktivitet förändrats?

Med en inspelning av ett gäng neuroner kan vi svara på detta på tre sätt.

Först kan vi kvantifiera spik-tåget för varje neuron genom att mäta statistiken för varje X-kolumn, som spikningshastigheten. Och fråga sedan: vad är modellen P (X) för denna statistik? Vi kan klustera denna statistik för att hitta "typer" av neuron; eller helt enkelt anpassa modeller till hela ledfördelningen. Hursomhelst har vi någon modell av datastrukturen vid granulariteten hos enstaka neuroner.

För det andra kan vi skapa generativa modeller av hela befolkningens aktivitet med hjälp av raderna X - vektorerna för hela befolkningens ögonblick-aktivitet. Sådana modeller syftar vanligtvis till att förstå hur mycket av strukturen hos X som kan återskapas från bara några begränsningar, vare sig de är fördelningen på hur många vektorer som har hur många spikar; eller parvisa korrelationer mellan neuroner; eller kombinationer därav. Dessa är särskilt användbara för att träna om det finns någon speciell sås i befolkningens aktivitet, om det är något mer än den kollektiva aktiviteten för en uppsättning av oberoende eller tråkigt enkla nervceller.

För det tredje kan vi ta ståndpunkten att den neurala aktiviteten i X är en högdimensionell förverkligande av ett lågdimensionellt utrymme, där antalet dimensioner D << n. Vi menar vanligtvis med detta: vissa nervceller i X är korrelerade, så vi behöver inte använda hela X för att förstå befolkningen - istället kan vi ersätta dem med en mycket enklare representation. Vi kanske kluster tidsserien direkt, så att dekomponera X i en uppsättning av N mindre matriser X_1 till X_N, som var och en har (relativt) starka korrelationer i den, och så kan behandlas oberoende. Eller så kan vi använda någon form av dimensioner för att minska dimensionen, som principkomponentanalys, för att få en liten uppsättning av tidsserier som var och en beskriver en dominerande form av variation i befolkningens aktivitet över tid.

Vi kan göra mer än detta. Ovanstående förutsätter att vi vill använda dimensionsminskning för att kollapsa nervceller - att vi tillämpar reduktion på kolumnerna i X. Men vi kan lika lätt kollapsa tiden genom att tillämpa dimensionsminskning på raderna med X. I stället för att fråga om neural aktivitet är överflödig. , detta frågar om olika ögonblick i tid har liknande mönster av nervaktivitet. Om det bara finns en handfull av dessa, är dynamiken hos de inspelade neuronerna mycket enkel.

Vi kan också slänga in dynamiska systemmetoder här. Här försöker vi anpassa enkla modeller till förändringarna i X över tid (dvs kartläggning från en rad till nästa), och använder dessa modeller för att kvantifiera de typer av dynamik som X innehåller - med termer som "attraktion", "separatrix", " sadel nod "," pitchfork bifurcation "och" the Arsenal kollaps "(endast en av dem är inte en riktig sak). Man kan troligt hävda att de dynamiska modellerna som är så inbyggda är alla täthetsmodeller P (X), eftersom de beskriver datorns struktur.

Helvete, vi kunde till och med försöka anpassa en hel dynamisk modell för en nervkrets, ett gäng differentiella ekvationer som beskriver varje neuron, till X, så att vår modell P (X) sedan samplas varje gång vi kör modellen från olika initiala förhållanden .

Med dessa täthetsmodeller kan vi anpassa dem separat till den neurala aktiviteten vi registrerade i ett gäng olika tillstånd (S1, S2, ..., Sm) och svara på frågor som: hur förändras strukturen för en population av neuroner mellan sova och vakna? Eller under utvecklingen av djuret? Eller under lärandet av en uppgift (där S1 kan vara prov 1 och S2 prov 2; eller S1 är session 1 och S2 session 2; eller många kombinationer därav). Vi kan också fråga: hur många dimensioner spänner neuronaktivitet? Är dimensionerna olika mellan olika regioner i cortex? Och har någon sett mina nycklar?

2 / Generativa modeller P (X | S): vad orsakar en spik? Nu snackar vi. Saker som linjära-olinjära modeller eller generaliserade linjära modeller. Vanligtvis tillämpas dessa modeller på enstaka neuroner, på varje kolumn i X. Med dem passar vi en modell som använder tillståndet i världen S som inmatning, och spottar ut en nervaktivitetsserie som matchar neuronens aktivitet så nära som möjligt. Genom att sedan inspektera viktningen som ges till varje särdrag i S för att reproducera neuronens aktivitet, kan vi ta reda på vad den neuron verkar ge en jävla om.

Vi kanske vill välja en modell som har viss flexibilitet i vad som räknas som ”världens tillstånd”. Vi kan inkludera neuronens egen tidigare aktivitet som en funktion, och se om den bryr sig om vad den gjorde tidigare. För vissa typer av nervceller är svaret ja. Sprängning kan ta mycket ur en neuron, och den måste ligga ner för en liten vila innan den kan gå igen. Vi kan också tänka bredare och inkludera resten av befolkningen - resten av X - som en del av tillståndet i världen medan neuronen skjuter. När allt kommer omkring, neuroner påverkar ibland varandras skjutning, eller så jag får mig att tro. Så det finns en liten chans att responsen från en neuron i visuell cortex inte bara drivs av orienteringen av en kant i omvärlden, utan kan också bero på vad de 10000 kortikala nervceller som ansluter till den också gör. Vad vi sedan lär oss är de ungefär mest inflytelserika neuronerna i befolkningen.

Vi behöver inte tillämpa dessa generativa modeller på enstaka neuroner. Vi kan lika använda dem på våra täthetsmodeller; vi kan fråga vad varje kluster, eller dimension, kodar om världen. Eller, som vissa människor gjorde här, kan vi använda täthetsmodellen i sig själv som världens tillstånd och fråga vilka funktioner i den modellen nedströms nervceller ger en jävla om.

De typer av frågor vi kan besvara med dessa generativa modeller är ganska uppenbara: vilken kombination av funktioner förutsäger bäst en neurons svar? Finns neuroner selektiva för bara en sak? Hur påverkar nervceller varandra?

3 / Diskriminerande modeller P (S | X): vilken information bär spikar? Detta är en kärnfråga i systemneurovetenskap eftersom det är den utmaning som alla neuroner står inför nedströms från vår inspelade population - alla neuroner som får input från neuronerna vi registrerade från och fyllda i vår matris X. För de nedströms neuroner måste dra slutsatsen de behöver veta om den yttre världen enbart baserad på spikar.

Här kan vi använda standardklassificerare, som kartläggar ingångar till märkta utgångar. Vi kan använda raderna med X som inmatning, var och en en bild av befolkningens aktivitet och försöka förutsäga en, några eller alla funktioner i motsvarande rader i S. Eventuellt med viss tidsfördröjning, så vi använder rad X_t till förutsäga tillståndet S_t-n som var n steg tidigare, om vi är intresserade av hur populationskodtillstånd som matas in i hjärnan; eller vi kan använda rad X_t för att förutsäga tillståndet S_t + n som är n steg i framtiden om vi är intresserade av hur populationer kodar för någon effekt av hjärnan på världen. Som aktiviteten i motorbarken som händer innan jag skriver varje bokstav just nu.

Hursomhelst, vi tar några (men inte alla, för vi inte överutrustar) rader av X, och tränar klassificeraren för att hitta bästa möjliga kartläggning av X till motsvarande del av S. Sedan testar vi klassificeraren på hur bra det kan förutsäga resten av S från motsvarande resten av X. Om du är extra lycklig kan dina X och S vara så långa att du kan dela upp dem i tåg, test och validera uppsättningar. Förvara den sista i en låst låda.

Vi kan naturligtvis använda en så kraftfull klassificerare som vi vill. Från logistisk regression, via Bayesiska tillvägagångssätt, till att använda ett 23-lagers neuralt nätverk. Det beror snarare på vad du vill ha av svaret och avvägningen mellan tolkbarhet och makt du är bekväm med. Mina skrifter på andra håll har gjort det klart vilken sida av denna avvägning jag tenderar att föredra. Men jag är glad över att ha visat mig fel.

Kodningsmodeller för nervceller är insiktsfulla, men berör några gamla och djupa filosofiska kandarier. Testning av kodning med hjälp av en diskriminerande modell antar att något nedströms försöker avkoda S från nervaktivitet. Det finns två problem med detta. Neuroner avkodar inte; nervceller tar in spikar som input och matar ut sina egna spikar. Snarare kodar de om från en uppsättning spikar till en annan uppsättning spikar: kanske färre eller långsammare; kanske mer eller snabbare; kanske från en stadig ström till en svängning. Så diskriminerande modeller frågar mer exakt vilken information våra neuroner kodar om. Men även om vi tar denna åsikt finns det ett djupare problem.

Med mycket få undantag finns det inget sådant som en "nedströms" neuron. Neuronerna som vi spelade in i X är en del av den intrikat trådbundna hjärnan, full av oändliga öglor; deras output påverkar deras egna input. Värre är att några av nervcellerna i X är nedströms från de andra: några av dem matar in direkt till de andra. Eftersom, som noterats ovan, påverkar neuroner varandra.

Ett grovt, kanske användbart manifest för en neural datavetenskap. Det är ofullständigt; utan tvekan något ovan är fel (svar på ett vykort till den vanliga adressen). Ovanstående är ett försök att syntetisera arbetet i en grupp labb med mycket olika intressen, men en vanlig drivkraft för att använda den här typen av modell på stora uppsättningar av neurala data för att svara på djupa frågor om hur hjärnan fungerar. Många av dessa är datalaboratorier, team som analyserar experimentell data för att besvara sina egna frågor; för att nämna några - Johnathan Pillow; Christian Machens; Konrad Kording; Kanaka Rajan; John Cunningham; Adrienne Fairhall; Philip Berens; Cian O'Donnell; Il Memming Park; Jakob Macke; Gasper Tkacik; Oliver Marre. Um, mig. Andra är experimentella laboratorier med starka datavetenskapliga lutningar: Anne Churchland; Mark Churchland; Nicole Rust; Krishna Shenoy; Carlos Brody; många andra ber jag om ursäkt för att jag inte namnger.

Det finns konferenser där denna typ av arbete välkomnas, inte ens uppmuntras. En tidskrift för neuraldatavetenskap är på väg. Något bygger. Kom in, data är härlig *.

* Ja, jag var tvungen att hänvisa till data som en singular för att få skiten skämt att fungera. Det faktum att jag skriver denna fotnot för att förklara detta kommer att ge dig en uppfattning om den snabba uppmärksamheten på detaljer neurala data forskare förväntar sig.

Vill ha mer? Följ oss på The Spike

Twitter: @markdhumphries