Paralleles Training Neuronaler Netze mit Map/Reduce

Will man ein Neuronales Netz zur Klassifikation trainieren, ist das Training häufig sehr Rechen- und Datenintensiv. Das von Google populär gemachte Map/Reduce Verfahren eignet sich jedoch hervorragend, um das Training von z.B. Multilayer Perzeptrons (die populärste Art künstlicher Neuronaler Netze) im Batch-Verfahren zu parallelisieren. Eine ideale Lösung, vor allem wenn auch noch grosse Mengen an Daten (z.B. Bilddaten) zum Training herangezogen werden. Mit Apache Hadoop existiert ein freies Framework, das von verschiedensten Programmiersprachen aus genutzt werden kann.

Inhaltsverzeichnis


Das Problem

Nehmen wir einmal an, wir haben ein Archiv bestehend aus hunderttausenden hochaufgelöster Bilder, oder sogar Videos. Diese Bilder oder Videos wurden aufwendig manuell annotiert, um sie zum Training oder zur Cross-Validation eines Klassifikators verwenden zu können.

Es gibt jetzt die Möglichkeit, ein Multilayer Perzeptron (kurz MLP) sequentiell zu trainieren, und die Gewichte des Netzwerks nach jedem Schritt neu anzupassen. Ein derartiges Vorgehen führt allerdings gerade bei MLPs dazu, dass das Netzwerk am Ende nur schlecht gegen einen optimalen Wert konvergiert.

Ein sogenanntes "Batch-Training" summiert und mittelt hingegen alle Änderungen an den Gewichten des Netzwerks aus einer Trainingsepoche, und aktualisiert die Gewichte des Netzwerks nur einmal. In vielen Fällen führt dies zu einer deutlich besseren Konvergenz des trainierten Modells hin zu einem optimalen Klassifikator.

Ein solches Batch-Training lässt sich ideal auf das Map/Reduce Verfahren abbilden. Dabei wird in der Map-Phase das Neuronale Netzwerk mit Eingabedaten (z.B. komplette annotierte Bilddaten) trainiert, und die resultierenden Gewichtsänderungen emittiert. In der Reduce-Phase (bzw. optimalerweise schon vorher mittels eines Combiners) werden diese Gewichtsänderungen hingegen Cluster-Weit summiert, und ggf. bereits Mittelwerte gebildet. Am Ende kann das neuronale Netzwerk mit den resultaten dieses parallelen Trainings aktualisiert werden, und in eine neue Trainingsepoche starten.

Die Vorteile eines solchen Verfahrens

Das Verfahren skaliert sehr gut nach oben, sowohl (begrenzt) hinsichtlich der grösse des zu trainierenden Netzwerks, als auch insbesondere hinsichtlich der Grösse und Menge der Eingabedaten. Grosse Datenmengen können mit einer grösseren Anzahl von Rechnern kompensiert werden.

Nachteile

Das Verfahren skaliert nicht gut herab. Bei kleinen Datenmengen oder kleinen Clustergrössen sind andere Verfahren (z.B. MPI) vorzuziehen.

Kostengünstiges Training in der Cloud

Grosse Trainings-Cluster können kostengünstig Zeitweise angemietet werden - z.B. über Amazon's EC2 Service oder über Amazon's Elastic Map/Reduce. Kombiniert mit Amazons S3 Storage Service benötigt man kein eigenes Rechenzentrum voller Server, zusammen mit der zugehörigen Investition in Hardware und Administration eines solchen Systems.

Andere Klassifikationsverfahren

Ein ähnliches Verfahren ist übrigens möglich, möchte man AdaBoost oder Random Forest Klassifikatoren trainieren, da auch diese gut parallelisiert werden können.

© Kai Londenberg - 2008-2010