Mostanában kutatómunkába fogtam a Neurális Topológiákkal, Neurális Hálózat - szimulációkkal és a Tanulási és Evolúciós Algoritmusokkal kapcsolatban.
Ennek eredménye egy (még fejlesztés alatt álló) program lett, ami ha elkészül, képes lesz teljes neurális hálózati topológiát 'tervezni'
evolúciós alapokon, melynek eredménye sokkal gazdaságosabb megvalósítást eredményezhet, mint a tipikus réteges felépítéső mesterséges neurális
hálózatok, melyeknél minden réteg minden neuronja egyöntetűen össze van kötve a következő réteg neuronjaival.
Ez hasonlatos lesz a NEAT
, NeatJS algoritmusokhoz.
A programom lényegében egy sokkal egyszerűbb gyors probléma-specifikus megoldás lesz C-nyelven megírva. Amit ezek az algoritmusok alapvetően tesznek,
az kiindulás csupasz be- és kimenetekből, és mutáció új szinapszisok és/vagy idegsejtek hozzáadásával sztochasztikus/determinisztikus módon
minden új generációnál. Minden egyes generációból kiválasztunk egy 'bajnokot' ('champion'), aki a legmagasabb rátermettségi ('fitness') pontszámot
érte el egy környezet-szimulációban, és ezeket a bajnokokat használjuk szülőként a következő generációhoz. (Ha sikerül megfelelő fizikai szimulációs
motort készítenem a programomhoz, lehetséges, hogy az első generációt szó szerint a semmiből indítom, még ki- és bemeneteket sem definiálok, és még
az új bemeneti érzékelők és kimeneti izmok hozzáadásánál is a szoftverre hagyatkozom...) A topológiai evolúció mellett természetesen az egyedek
szinapszisainak súlyozásai is be lesznek tanítva nem felügyelt Hebbian-tanulási vagy akár felügyelt ún. 'back-propagation' tanítási módszerrel,
amikor egy-egy újabb topológia megjelenik.
Többféle választható neurális hálózat - szimuláció és tanulási típus lesz a programban, főleg hardver-megvalósítási célokra, mint pl.
mikrokontrolleren való futás korlátait figyelembe vevő, vagy akár tranzisztorokból, mint neuronokból felépített analóg áramköröket tervező algoritmusok.
(Kivitelezhetőnek tartom, tranzisztorok a bázisukon lévő ellenállásokkal, mint 'súlyozásokkal', nemlineáris karakterisztikájukkal kézenfekvő
delikvensnek tűnnek alacsony komplexitású neurális áramkörök neuronjainak megvalósításához.)
Az ilyen hardveres neurális hálózatoknak rengeteg felhasználási területe lehet az alakfelismeréstől akár teljes mozgáskoordinációval rendelkező
robotig.
A programnak csak a C 'standard library' és a grafikához és vezérléshez szükséges SDL-library a függősége. Jelenleg akármilyen szinapszis-listát
be képes fogadni (jelenleg csak forráskódban, fordítást megelőzően), amit feldolgoz (redundanciák eltávolítása, visszacsatolások és
gap-junction-ok kiszűrése, topológiai rendezés, rétegek alkotása, stb.), hogy megtalálja
és megjelenítse a be- és kimeneteket, valamint a neuronokat és azok kapcsolatait. Már néhány manipulációs lehetőség is adott, mint pl. a bemeneti
stimulációk kézi beállítása a szimuláció számára, és csak kiválasztott neuronok és útvonalak megjelenítése, hogy könnyebb legyen széttagolni és
elemezni a hálózatot.
Mivel neuronok topológiájáról beszélünk, a program fentebb említett megjelenítési képességeit tesztelendő, az egyetlen már teljesen feltérképezett
idegrendszerrel bíró élőlény összeköttetéseit ('connectome') választottam, ez a
Caenorhabditis Elegans nevű gerinctelen.
Körülbelül 300 idegsejttel rendelkezik,
és kb. 4000 összeköttetése van, melyek lehetnek
kémiai serkentők (pl. glutamát) és gátlók (pl. GABA), vagy gyenge
elektromosak (kétirányú, sejtek közötti rés-csomópont 'gap-junction'). Szimulációs
szemszögből tekintve mindegyiket ugyanúgy kezeljük, azaz neuronok súlyozott bemeneteiként. Ami kissé komplikálja a szimulációt a program által
végzett topológiai függőségek sorbarendezésének ellenére, hogy ez a természet által tervezett ideghálózat eléggé
rekurrens, rengeteg visszacsatolással rendelkezik a magasabb
(kimenetekhez közelebbi) rétegbeli neuronoktól az alacsonyabb (bemenetekhez közelebbi) rétegbeli neuronok irányába. A 'gap-junction' kapcsolatok
is részben egyféle közös visszacsatolásként is működnek. Szerencsére az
autapszisok (önmagukba visszacsatoló neuronok) minden bizonnyal hiányoznak a C. Elegans-ból.
A programnak mind a Linux-on és Windows-on futó lefordított verziói elérhetők itt a zip fájlban.
Az SDL-1.2 library szükséges a futásukhoz, ezért a biztonság kedvéért az SDL.dll fájlt bemásoltam a zip-be tömörített mappába a Windows
verzió számára. A forráskód még nem túl letisztult, ezért a nyílt forráskódú felfogásom ellenére nem osztom még meg a honlapon, hogy elkerüljem
a kritikákat, melyek jellemzően várhatók, ha az emberek sűrű C-kódot látnak. Aki szeretne belepillantani, az felveheti velem a kapcsolatot a
címen, és megbeszélhetjük... (Az idegháló adatait és néhány ötletet ebből az
érdekes alapszintű szimulációból vettem:
Celegans-simulation)
Különböző színek jelzik az előre mutató szinapszisokat (a zöld és piros árnyalatai súlyozásuk és előjelük függvényében) és a visszacsatolásokat
(a kék/lila árnyalatai) és a 'gap-junction'-okat (szürkés). A bemenetek, neuronok és kimeneti vezetékek a zöld/piros árnyalatait kapják az
aktuális kimeneti értékeik függvényében.
A használható billentyűket leíró rövid 'súgó' a kép tetején látható. A SPACE megnyomása kiválasztható neuronok szinapszisait jeleníti meg,
az ENTER megnyomásával az útvonal-megjelenítési mód hívható meg, mely a függőségi fa bejárásával le tudja követni az összes összekapcsolódó
szinapszist a bemenet ('I' billentyű) felől, visszafelé a kimenet ('O' billentyű) felől, vagy be- és kimenetek közti útvonalakon ('P' megnyomásával).
A kiválasztott szinapszisok komplexitása drasztikusan változik, ha a visszacsatolásokat is megjelenítjük ('F' gombbal váltható mód), és valamelyest
változik, ha a 'gap-junction'-megjelenítését ki-/bekapcsolását végezzük ('G' billentyű).
A csomópontok (neuronok vagy be-/kimenetek) kiválasztását a kurzornyilakkal és az Insert/Delete billentyűkkel tehetjük meg. Neuron-választó
módban a SHIFT-billentyű lenntartása mellett a kurzor-gombokkal választhatók ki szinapszisok az Insert-billentyűvel való kiemelésre (szélesítésre).
Az 'S'-billentyű megynomásával a kiválasztott neuronok, be- és kimenetek és kiemelt szinapszisok egy 'selections.sel'-nevű fáljban kerülnek
mentésre a futtatható program mappájában. Ezek a fájlok átnevezhetők és parancssorban újratölthetők a 'Celegans' futtatható fájl után argumentumként
megadva. Készítettem néhány (a képernyőmentésekhez használt) példát '.sel' fájlokra, ezek a zip-tömörítésű programcsomagban találhatók.
A bemeneti jelek manipulációja (a 0..9, F1..F9 gombokkal) véget vet az induláskor jelenlévő egyensúlyi helyzetnek, zajt visz a rendszerbe, és a
szimuláció életre kel. Ettől a pillanattól kezdve a visszacsatolások akkor is aktívan tartják a hálózatot, ha a bemeneti stimuláció megszűnik.
A pragram jelenlegi verziójában kötötten a 'tüzelő' neurális hálózati szimulációt valósítottam meg, amely a valódi neuronok membránján jelentkező
hirtelen csúcsokat generáló fiziológiai ún. 'Action Potential' jelzésrendszert
utánozza. A későbbiekben a fizikai környezet és féregtest jóval szofisztikáltabb szimulációi következnek majd.
Habár a C. Elegans ideghálózata ismert, még mindig intenzív kutatás témáját alkotja, hogy mely/milyen al-áramkörök / modulok felelősek
az állat különböző viselkedési formáiért. Fizikai tesztekkel tudósok képesek voltak elkülöníteni bizonyos funkciókhoz tartozó neuronokat
a féregben, de sok egyéb neuron jobb megértése még hátra van. A topológia néhány részletét viszont már megfejtették, például tudjuk,
(és ez a programomban is megfigyelhető), hogy a hálózat összességében egy enkóder/dekóder-elven alapuló
homokóra-jellegű topológiát képvisel, melyben a belső (rejtett)
neuron-rétegek szűkebbek, mint a be- és kimeneti rétegek. A bemenetek már az alacsonyabb rétegekben feldolgozásra kerülnek, kisebb/egyszerűbb
dimenziókba kódolódnak át. Persze több kivétel is van, ahol a bemeneti neuronok magasabb rétegekbe is bekapcsolódnak, valószínűleg a túlélést
veszélyeztető tényezőkre jellemző bemeneti kombinációkra való gyorsabb válaszreakciók érdekében (pl. visszahúzódás akadályoktól).
A hálózat ún. 'rich-club'
neuronjai is könnyen azonosíthatók a kimenetekhez közeli magasabb rétegekben. Ilyenek pl. a C. Elegans egyezményes elnevezési sémája szerinti
címkével ellátott AVAL,AVAR neuoronok. A négyzetes törvény is egy általános szabályként figyelhető meg a neurális hálózatokban: a neuronok
többsége csak a szomszédjaihoz és egyéb viszonylagos közelségben lévő neuronokhoz csatlakozik, míg a neuronok csak kis százaléka alkot sokkal
több és távoli költséges de hasznos összeköttetést. A 'rich-club' neuronok már az első neuronok között megjelennek magzati fejlődés közben,
ami elég logikus megoldás, mivel így a hosszú összeköttetéseik az idegrendszer egészével együtt képesek növekedni.
A másik tényező, ami tisztán látható a programomban, hogy az izmokat vezérlő (pl. az MDL20 megnevezésű) kimeneti motorikus neuronok
serkentő (zöld) és gátló (piros) eredetű bemenetekkel/dendritekkel is rendelkeznek, tehát ellentétes hatású neuronok által vannak afféle
differenciál/ellenütemű módon meghajtva. A motorikus funkciók egészen átfogó leírása lelhető fel ezekben a dokumentumokban:
A circuit for navigation in C. Elegans ,
Locomotion of C. Elegans
A C. Elegans viselkedési és közösségi/feromonális aspektusait is alaposan tanulmányozzák. Néhány értékes dokumentum ebben a témában:
Neuronal microcircuits for decision making in C Elegans ,
Hub-and-spoke Pheromone and Social behaviour in C Elegans
(Az ún. neuropeptid-ek, melyek a neuronok működését modulálják, szintén nagy szerepet játszanak az állat viselkedésében, ezért egy
szigorúan vett szinaptikus szimuláció valószínűleg nem elégséges a féreg meglepően komplex alkalmazkodási képességének teljes szimulálásához.
Az OpenWorm projekt a valódi sejt-alapú szimulációt vette célba, mely erre a kérdésre is választ adhat.)
Egyéb értékes olvasmány is fellelhető PDF formátumban tudományos kutatási weboldalakon az ideghálózati topológia és a viselkedés összefüggésével,
kémiai és elektromos ingerjelekkel és egyéb témákkal kapcsolatban... Mindemellett remélem, hogy ez a program is segítséget nyújt néhány kutató
elme számára a C. Elegans idegrendszerével kapcsolatban, és közelebb hoz minket a természet neuron-összekötési módszereinek, vagy akár a
komplexebb (mint amilyen a mi agyunk is) idegrendszerek megértéséhez.
Ahogyan a program fejlődik, frissíteni fogom ezt az oldalt a friss eredményekkel... De egyelőre lássunk néhány képernyőmentést a program
szinapszis-kiválasztó/kiemelő módszereinek köszönhető észrevételeimből:
Részlet a fentebb linkelt PDF-ből, amely a döntéshozatali mikroáramköröket tárgyalja
Igyekszem a programom segítségével lekövetni és értelmezni az útvonalakat a bemenetektől kimenetekig.
Részlet a féreg mozgásáról ('locomotion') szóló fentebb linkelt PDF-ből
Ez a mozgás-vezérlés utolsó szintje (mozgatást elővezérlő és mozgató neuronok).
Alább következnek a döntéshozásról ('decision making') szóló PDF-cikkben említett fázisok/szintek által bevont neuronokról és be-/kimenetekről
készített képernyőmentések. Ezek a képek adhatnak egy általános képet a neuronok topológiai elhelyezkedéséről és a különböző rétegek/szintek
egymáshoz képesti függéseiről. Később az egyes bemenettől-kimenetig tartó útvonalak is elkülönülnek, hogy jobban elmerülhessünk bizonyos
részletekben... De először is tudnunk kell, melyek az ideghálózat egyes, a vizsgálódás céljából kiemelendő részei, mielőtt továbbmennénk az
ezekhez nem tartozó részek kizárásával.
Tipp: Az alábbi képernyőmentések az ideghálózat megtekintésének nem a leghatékonyabb formái, mivel nem mozognak. A programban mozgatok minden
csomópontot Lisajjous-görbék mentén, így a véletlenül éppen egymást fedő vonalak nem állandósulnak, és jobban megfigyelhetők a részletek.
Ezért inkább a programhoz mellékelt '.sel' fájlok parancssori argumentumként való használatát javallom a képernyőmentéseken látható kiválasztások
behívásához, és a kapcsolati diagram programból való vizsgálatához. Így a kiválasztások módosíthatók/egyszerűsíthetők is lesznek...
1. szint, a C. Elegans kijelölt érzékelő neuronjainak kapcsolai (a visszacsatolásokat és 'gap-junction'-okat is beleértve)
Elsőtől az utolsó képig: Mechanikai/nyomás-érzékelők, Oxigén és Szén-dioxid érzékelők, Hőmérséklet-érzékelők, Szaglóérzékelők
A bemeneti útvonalak (a visszacsatolások kivételével) a fentebb említett érzékelőktől (ugyanazon sorrendben) az összes befolyásolt kimenetre
Az egyes kapcsolatokat még mindig nehéz követni ezeken a képeken, de éreztethetik a kimeneti hatásviszonyokat.
2. szint, Az ideggyűrű központi ('hub') neuronjai, Futás és Irányváltás/Fordulás belső neuronjai, melyek közvetlen/indirekt módon dolgozzák fel a szenzorok jeleit.
Elsőtől az utolsó képig: 'Hub'/Gyűjtő-neuronok, 'Futás' érzékelés-feldolgozó belső neuronok, 'Fordulás' érzékelés-feldolgozó belső neuronjai
3. szint, A premotorikus belső parancs-neuronok (AVB:előre, AVA:hátra), melyek az utolsó szint serkentő/gátló motor-neuronjait vezérlik
A PVC,RIM és DVA főleg pre-szinaptikus a többihez képest. A parancs-neuronok többsége egyúttal része a 'rich-club'-nak is.
4. szint, a serkentő/gátló motor-neuronok, melyek az izmokat hajtják meg a neuromotor-csomópontokon ('M'-kezdetű nevek) keresztül
Ahogy tisztán látható, a DD és VD neuronok GABA-neurotranszmitteres gátló (piros) kimenetei ellensúlyozzák a DA,DB,VA,VB hatását.
Utolsó szint: Példák néhány neuromotor-csomópont összes bemenettől kimenetig tartó útvonalára (visszacsatolások kivételével)
Elsőtől utolsóig: MDL16 bal-háti, MVL14 bal-hasi, MR09 jobb-háti, MVR12 jobb-hasi mozgatók, és végül néhány
kézileg kiemelt/szélesített PVCL/MVR/MVL/stb. csatlakozás (SHIFT-billentyű lenntartva plusz CURSOR/Insert billentyűk)
Egyelőre ennyit. Amikor több idő adódik további kutatásra, frissítem az oldalt az új képmentésekkel és kifejtésekkel, melyek főleg a futás/fordulás,
az előre/hátra mozgás és egyéb viselkedések különálló kiemelt útvonalait fogják átfedni. Ha bárki kipróbálja ezt a programot és rátalál az idegrendszer
néhány érdekes aspektusára, bátorítom az információ velem (a honlapba illesztés céljából) és másokkal (fórumon) való megosztására.