3. Computational Neuroscience
Computational Neuroscience ist ein wachsender Bereich der life sciences.
Wird in Deutschland gef¨rdert durch das BMBF im Rahmen des
o
Bernstein Netzwerkes.
“Computational” bezieht sich die Erforschung der
Informationsverarbeitung im Gehirn.
Unsere Gruppe versucht die Funktionen des Visuellen Systems zu
modellieren, mit mathematischen Ans¨tze und Computermodellen.
a
Verbindung zu machine learning
mdp-toolkit.sourceforge.net
4. Python in Computational Neuroscience
Wissenschaftler in diesem Bereich ben¨tigen Computer f¨r die
o u
Datenanalyse oder Simulationen,
von einfachen Matlab Skripten bis zur Nutzung von Supercomputern
(z.B. IBM Blue Gene/L in Lausanne).
Python wird zunehmend popul¨r:
a
s Ersetzt Matlab in der Datenanalyse und einfachen Simulationen.
s Produktives Frontend f¨r komplexe Simulatoren
u
(z.B., PyNN ist ein Interface zu Standard-Simulationssoftware wie
NEURON).
mdp-toolkit.sourceforge.net
6. Hintergrund
s Open Source library (LGPL)
s erste Ver¨ffentlichung 2004 durch Pietro Berkes und Tiziano Zito
o
s 15k+ Downloads, verf¨gbar in Debian, Ubuntu, MacPorts,
u
Python(x,y)
s Entstanden in und unterst¨tzt durch die Forschungsgruppe von Prof.
u
Wiskott, auch mit dem Ziel Forschungsarbeiten reproduzierbar zu
machen und Zusammenarbeit zu erleichtern.
s Anwendungen auch außerhalb der Neurowissenschaften.
mdp-toolkit.sourceforge.net
7. ¨
Uberblick
1. Einf¨hrung der Grundbausteine von MDP
u
2. Parallelisierung
3. Beispielanwendung
mdp-toolkit.sourceforge.net
8. Grundbaustein: Node
Node: Grundbaustein der Datenverarbeitung,
die Node Klassen entsprechen Algorithms, public API:
train (optional)
Unterst¨tzt mehrere Trainingsphasen, batch, online, chunks,
u
uberwacht, un¨berwacht
¨ u
execute
bildet n dimensionalen input auf m dimensionalen output ab
inverse (optional)
inverse Abbildung zu execute
Datenformat: 2d numpy arrays
(Erster index f¨r samples, zweiter Index f¨r Kan¨le)
u u a
Automatische Tests und Unformungen (dimensions, dtype).
mdp-toolkit.sourceforge.net
9. Node Beispiel
Beispiel: Principal Component Analysis (PCA)
reduziere Daten Dimensionalit¨t von 10 auf 5:
a
>>> import mdp
>>> import numpy as np
>>> data = np . random . random ((50 ,10)) # 50 data points
>>> node = mdp . nodes . PCANode ( output_dim =5 ,
... dtype = ’ float32 ’)
>>> node . train ( data )
>>> proj_data = node . execute ( data )
Abk¨rzung:
u
>>> import mdp
>>> import numpy as np
>>> data = np . random . random ((50 ,10)) # 50 data points
>>> proj_data = mdp . pca ( data , output_dim =5 , dtype = ’ float32 ’)
mdp-toolkit.sourceforge.net
10. Nodes in MDP
Einige der verf¨gbaren Nodes:
u
PCA (standard, NIPALS)
ICA (FastICA, CuBICA, JADE, TDSEP)
Locally Linear Embedding
Hessian Locally Linear Embedding
Fisher Discriminant Analysis
Slow Feature Analysis
Independent Slow Feature Analysis
Restricted Boltzmann Machine
Growing Neural Gas
Factor Analysis
Gaussian Classifiers
Polynomial Expansion
Time Frames
Hit Parades
Noise
...
Oder schreibe eigenen Node (und stelle ihn MDP zur Verf¨gung :-).
u
mdp-toolkit.sourceforge.net
11. Grundbaustein: Flow
Kombiniere Nodes zu einem Flow (data processing pipeline):
>>> flow = PCANode () + SFANode () + FastICANode ()
>>> flow . train ( train_data )
>>> test_result = flow . execute ( test_data )
>>> rec_test_data = flow . invert ( test_result )
>>> flow += HitParadeNode ()
s automatische Verwaltung von Training, Execution, Inversion
s automatische Tests: Dimensionalit¨t und Format
a
s Benutze arrays oder iterators
s crash recovery, checkpoints
mdp-toolkit.sourceforge.net
12. Grundbaustein: Netzwerke
mdp.hinet package f¨r hierarchische Netzwerke
u
Layer (kombiniere Nodes horizontal)
Switchboard (Vernetzung zwischen Layern)
FlowNode (kombiniere Nodes zu einem “supernode”)
Alle diese Klassen sind Nodes und k¨nnen beliebig kombiniert werden.
o
mdp-toolkit.sourceforge.net
13. HTML Darstellung eines Netzwerkes
>>> mdp . hinet . show_flow ( flow )
N¨tzlich zum Debuggen, f¨r Dokumentation oder GUI.
u u
mdp-toolkit.sourceforge.net
14. Ausblick: BiNet package
Das mdp.binet package wird Datenfluß in beide Richtungen erlauben,
erm¨glicht z.B. error backpropagation und Schleifen.
o
HTML+JS basierter Inspektor f¨r Debugging und Analysen.
u
Geplant f¨r MDP 3.0
u
mdp-toolkit.sourceforge.net
15. Parallelisierung
s f¨r “embarrassingly parallel” Probleme:
u
Datens¨tze f¨r das Node Training k¨nnen unabh¨ngig bearbeitet
a u o a
werden, Resultate werden am Ende kombiniert
fork Node -> paralleles Training -> join Nodes
s parallel training und execution werden automatisch verwaltet durch
einen ParallelFlow
funktioniert f¨r beliebige hierarchische Netzwerke
u
Organisation ist wesentlicher Teil der Parallelisierung
s einfache Implementierung f¨r neue Nodes
u
(implementiere _fork und _join Methoden)
Beispiel:
>>> pflow = mdp . parallel . ParallelFlow ([ PCANode () , SFANode ()])
>>> scheduler = mdp . parallel . ProcessScheduler ( n_processes =4)
>>> pflow . train ( data , scheduler )
mdp-toolkit.sourceforge.net
16. Parallele Schedulers
MDP verwendet eine abstrakte Scheduler API, die Tasks entgegen
nimmt und die Ergebnisse bereitstellt (Adapter f¨r externe Scheduler
u
k¨nnen einfach implementiert werden).
o
Momentan verf¨gbare Scheduler:
u
s Prozess basierte Scheduler f¨r SMP.
u
s Adapter f¨r Parallel Python library (Prozesse oder Sockets).
u
s Intern verwenden wir auch einen SSH basierten Scheduler der auf
Desktop Rechner im Institut zugreift.
Zukunftsaussichten:
s verwende shared memory mit dem Python multiprocessing Modul
s verwende MPI (via mpi4py)
Und nat¨rlich warten wir auf einfach benutzbare GPU Beschleunigung.
u
mdp-toolkit.sourceforge.net
17. Projektbeispiel
s Modell zur visuellen Objekterkennung,
trainiert mit 155x155 Pixel großen Bildsequenzen
s mehrere GB an Trainingsdaten pro Trainingsphase.
s Hierarchisches Netzwerk mit geschachtelten Nodes,
900 FlowNodes in der untersten Schicht
s Training ist parallelisiert, ben¨tigt trotzdem mehrere Stunden
o
[Franzius, M., Wilbert, N., and Wiskott, L., 2008]
mdp-toolkit.sourceforge.net
18. Verwendung von MDP
s ausf¨hrliche Dokumentation:
u
Tutorial f¨r den Einstieg und fortgeschrittene Aspekte,
u
detailierte doc-strings,
PEP8 compliant, dokumentiert, und pylint-gepr¨fter Code
u
s API ist stabil und designed f¨r einfache Integration
u
s unittest coverage (400+ unit tests)
s minimale dependencies: Python + NumPy
s wird z.B. benutzt in:
PyMCA (X-ray fluorescence mapping),
PyMVPA (ML framework for neuroimaging data analysis),
Chandler (personal organizer application)
mdp-toolkit.sourceforge.net