Backpropagation Lab - Martins Homepage

Direkt zum Seiteninhalt

Hauptmenü:

Backpropagation Lab

Softwareprojekte

Backpropagation Lab - Neuronale Netze  im Computer (Teil 2)

Mit dem Programm "Backpropagation Lab", hier kurz BaPL genannt, 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, woran 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 noch eine drei". Nach Beendigung des Trainings soll der Computer dann bei Vorlage einer handgeschriebenen Ziffer, die er vorher noch nicht gesehen hat, dessen richtigen Wert erkennen. Grundlage dieser 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 BaPL beim MNIST-Test. Die handgeschriebene Sechs wird sicher erkennt: Nur das Neuron im Output Layer mit besagter Zahl wir erregt.

Mit BaPL kann man Lernprozesse und Erkennungsleistungen erforschen, angefangen mit dem einlagigen Perzeptron, über das XOR-Problem und Klötzchenbuchstaben bis hin zur Handschriftenerkennung.
Ü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 5x7 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 BaPL 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 BaPL 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 Python, NumPy 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ß, BaPL 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. BaPL 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 BaPL! Hier kann der Quellcode heruntergeladen werden. Eine Dokumentation findet sich hier.


 
 
Zurück zum Seiteninhalt | Zurück zum Hauptmenü