NetLab - Neuronale Netze im Computer (Teil 2)

Mit dem Programm NetLab kann man das Lernvermögen künstlicher Neuronaler Netze studieren. Dabei kommt das Verfahren der Fehlerrückführung (englisch: Backpropagtion) zum Einsatz. Nehmen wir zum Beispiel die Aufgabe der Handschriften-Erkennung: Anstatt dem Computer einzuprogrammieren, an welchen Bildpunkten (Pixel) er denn im Einzelfall z.B. eine 5 als solche erkennen kann, zeigt man ihm tausende Exemplare handgeschriebener Ziffern: “Dies ist eine drei”, “hier ist eine acht”, … ” und hier ist eine fünf”. Und hier ist noch eine. Nach Beendigung des Trainings soll der Computer dann bei Vorlage einer handgeschriebenen Ziffer, die er vorher so noch nicht gesehen hat, diese korrekt erkennen. Grundlage der Methode des “überwachten Lernens” ist besagte Backpropagation, die in den letzten Jahren durch das Deep Learning zur Höchstform aufgelaufen ist. Dabei kennt man das Verfahren schon lange, aber wegen mangelnder Computerleistung gelangte es nicht zum Durchbruch.
Das folgende Bild zeigt NetLab beim MNISTTest. Die handgeschriebene Sechs wird sicher erkennt: Nur das Neuron im Output Layer mit besagter Zahl wir erregt.

Die erfolgreiche Erkennung ist Ergebnis eines Trainingsprozesses, wie hier zu sehen:

Wie man lesen kann, kommt es beim Test 276 Mal zu Fehlinterpretationen d.h. Verwechslungen. Diese lassen sich mit einer Konfusionsmatrix näher beschreiben:

Mit NetLab kann man Lernprozesse und Erkennungsleistungen erforschen, angefangen mit dem einlagigen Perzeptron, über das XOR-Problem und Klötzchenbuchstaben bis hin zur Handschriftenerkennung. Auch auf die Bilder von Pflanzenblättern (siehe Folio) lässt sich ein Netz trainieren. Die Konfusionsmatrix zeigt hier, dass drei Blätter falsch erkannt wurden:

Üblicherweise startet ein Training mit zufällig gewählten Parametern (hier: Synapsengewichte) und das Programm reduziert mit jedem Durchlauf (= Epoche) den begangenen Fehler. Präsentiert man dem Netzwerk über 200 Epochen hinweg die Buchstaben A-Z auf einer 5×7 Matrix, so fällt der Fehler schnell auf minimale Werte, die eine sichere Erkennung anzeigen:

Mit wenigen Mausklicks kann man Lernparameter einstellen, Lernprozesse starten und das Ergebnis kritisch analysieren. Zur Beurteilung der Erkennungsleistung erlaubt NetLab die manuelle Eingabe bzw. Modifikation von Testmustern per Mausklick.
Dabei stellt sich zum Beispiel folgende Erkenntnis ein: Aus dem Stand, d.h. ohne weitere Optimierung, erreicht NetLab eine Erkennungsrate von über 97% bei dem standardisierten MNIST-Test. Nach dem Training mit 60.000 verschiedenen handgeschriebenen Ziffern werden dabei 10.000 Prüfmuster angelegt.
Sollte man nach solch einem Training glauben, ein anwendungsreifes Niveau erreicht zu haben, um zum Beispiel handgeschriebene Postleitzahlen auf Briefumschlägen zu erkennen, so täuscht die Statistik: Die Erkennungsleistung ist wenig robust gegen Störungen. Schon ein überzähliges Pixel kann zur Fehleinschätzung führen und das Netzwerk liefert oft auch keinen Hinweis darauf, wie sicher es sich bei seiner Aussage ist.
Nun, die Mängel sollten uns nicht weiter verwundern, denn wir haben ja hier nur eine Basis-Implementierung zu Lernzwecken vor uns, die ohne Hardware-Beschleunigung durch GPUs auskommt und obendrein in Python geschrieben ist. Dabei bietet diese leicht verständliche Sprache die beste Möglichkeit, eigene Erweiterungen am Programm vorzunehmen, um eigene Forschungen anzustellen.

Das Trio von PythonNumPy und Tkinter hat mir jedenfalls bei der Programmierung unter PyCharm sehr imponiert. Und das schönste ist: Alle diese Programme kann man kostenlos herunterladen und benutzen!
Bei YouTube kursiert eine Menge guter Videos zum Thema. Besonders hat mir diese Reihe gefallen. Den letzten Anstoß, NetLab zu programmieren gab mir Tariq Rashid mit seinem Buch “Make Your Own Neural Network” (auf Deutsch hier). Von der Mathematik bis zur Implementierung in Python finden sich darin wertvolle Informationen. NetLab erweitert die dort vorgestellte Methode um den Bias der lernfähigen Neuronen. Für die Handschriftenerkennung scheint dieser jedoch verzichtbar.

Viel Freude beim Experimentieren mit NetLab! Hier kann der Quellcode inklusive Dokumentation heruntergeladen werden.