Suche
Mit dem neuen Neuroph 2.5b

Neuronale Netze in Java

Holger Librenz, Valentin Steinhauer

Neuroph 2.5 wurde frisch veröffentlicht und bringt viele neue Features mit: Neuroph Studio – eine neue Oberfläche auf NetBeans-Basis, Performance- und Algorithmusoptimierungen und die Integration der Encog Engine. Beispiele sind im Einführungsartikel zu Neuroph mit entsprechenden Anpassungen zu finden.

Neuroph Studio – eine neue Oberfläche auf NetBeans-Basis

Neuroph Studio bietet mit seinem IDE-ähnlichen Aufbau eine neue Erfahrung im Bereich neuronaler Netze und Java. Wizards führen intuitiv durch die Erzeugung neuer neuronaler Netze und Training Sets, und Projekt-, Eigenschaften- und Navigations-Views helfen dabei, Änderungen im Auge zu behalten. Da Neuroph Studio auf NetBeans basiert und die entsprechenden Module für die Java-Entwicklung mitbringt, können neuronale Netze direkt entwickelt, getestet und deployt werden, genau so, wie man es sonst von NetBeans gewohnt ist.

Noch befindet sich Neuroph Studio im Betastadium. So sind noch nicht alle Features, wie zum Beispiel Paletten oder der visuelle Editor, fertig – in der finalen Version werden sie jedoch verfügbar sein.

Performance- und Algorithmusoptimierungen

Bessere Performance war eines der Hauptziele dieser Version. Mit leichtgewichtigen und schnelleren Datenstrukturen konnten auf Ebene des Java-Codes deutliche Verbesserungen erzielt werden, aber auch die Lernalgorithmen wurden spürbar optimiert. Diese und weitere Optimierungen machen Neuroph 2.5 um ein vielfaches schneller als die Vorgängerversion. Außerdem bietet Neuroph nun eine Integration der Encog Engine an.

Encog Engine Integration

Die Encog Engine ist eine High Performance Library für neuronale Netzwerke und bietet Support für aktuelle Technologien wie Multi-Core und GPU (Graphical Processing Unit) [3]. Außerdem werden erweiterte Lernregeln wie Resilient Propagation unterstützt.

Neuroph bietet eine einfache Integration der Encog Engine, sie kann einfach über einen Switch ein- und ausgeschaltet werden. Das bedeutet, dass Sie das Neuroph API für Tests und während der Entwicklung nutzen können und produktiv die High Performance Encog Engine nutzen. Momentan unterstützt die Encog Engine zwar nur Multi-Layer-Perzeptronen mit Resilient Backpropagation, weitere Architekturen und Lernregeln werden aber in Zukunft hinzukommen.

Abwärtskompatibilität

Dieses Release ist mit vorhergehenden Versionen von Neuroph nicht mehr kompatibel, anders waren die eingeführten Verbesserungen jedoch nicht möglich. Die nötigen Änderungen sollten aber einfach in existierenden Code eingepflegt werden können. Meist werden Vektoren durch verschachtelte Arrays oder ArrayLists ausgetauscht oder es sind ähnlich kleine Anpassungen nötig.

Changelog

  1. ArrayLists und einfache verschachtelte Arrays werden anstatt von Vektoren genutzt (deutlich schneller).
  2. LMS: Probleme bei der Ermittlung der totalen Fehleranzahl im Netz behoben. Ab sofort werden reelle MSE genutzt. So wurde die Anzahl der Iterationen für alle LMS-basierten Algorithmen reduziert.
  3. Stapelverarbeitungsmodus für Backpropagation (und damit für alle LMS-basierten Algorithmen) hinzugefügt.
  4. Puffer für Trainingsdaten in Gewichtungsklasse hinzugefügt.
  5. Connection-Klasse um Referenzen auf Quell- und Zielneuronen erweitert. Das halbiert die Anzahl von Verbindungsinstanzen im Vergleich zu vorher.
  6. Signoid- und Tanh-Transferfunktionen wurden angepasst, um NaN-Werte zu verhindern.
  7. NeuralNetwork-Parameter im Konstruktor für Lernregeln entfernt, um Verwirrungen zu vermeiden. Lernregeln für ein neuronales Netz können wie folgt hinzugefügt werden: nnet.setLearningRule(new Backpropagation());
  8. Adalie-Netzwerk modifiziert, um dem theoretischen Modell zu entsprechen: Bipolar-Eingabe, BIAS, Ramp-Transfer-Funktion. Diese Änderungen ermöglichen stabileres Lernen.
  9. Integration der Encog Engine und Support für „flatternde“ Netzwerke und Resilient Backpropagation von Encog. Der Support ist per Default deaktiviert, kann jedoch einfach mittels Neuroph.getInstance().flatternNetwork(true); aktiviert werden.
  10. Verschiedene andere Bugfixes, die über Forum und Bug Tracker gemeldet wurden.

API-Änderungen

Es gibt eine Menge API-Änderungen in Neuroph 2.5b, die aber einfach in bestehenden Code, der ältere Neuroph-Versionen nutzt, integriert werden können.

  1. Benutze verschachtelte Arrays und ArrayLists anstatt Vektoren. Um die Performance zu verbessern, wurden alle Vektoren durch Arrays und ArrayLists ersetzt. Auch Autoboxing wurde entfernt. Wo immer ein Double genutzt wird, wird nun auch „double“ als Datentyp verwendet.
  2. Parameter NeuralNetwork im Konstruktor für Lernregeln entfernt, da er immer wieder zu Verwirrungen geführt hat. Um eine LearningRule an einem neuronalen Netzwerk zu setzen, kann folgendes Snippet genutzt werden: nnet.setLearningRule(new Backpropagation());
  3. Training-Set-Klasse unterstützt nun das Interface, das die Encog Engine benutzt.
  4. Schalter für Encog-Engine-Support hinzugefügt: org.neuroph.nnet.Neuroph.getInstance().setFlattenNetworks();
  5. Die Methode updateTotalNetworkError(double[] patternError) in SupervisedLearning ist ab sofort deprecated. Anstatt dieser sollten nun folgende Methoden genutzt werden:
    • abstract protected void updatePatternError(double[] patternErrorVector);
    • abstract protected void updateTotalNetworkError

Anpassungen und Beispiele

Die Beispiele aus dem Artikel „Neuronale Netze in Java“ sollten wie folgt angepasst werden, dann werden sie auch mit Neuroph 2.5b funktionieren.

Statt:

Vector networkOutput = neuralNet.getOutput(); 
double pred = (networkOutput.elementAt(0)) * datamax + datamin;   

sollte folgendes Snippet genutzt werden:

double [] networkOutput = neuralNet.getOutput(); 
double pred = (networkOutput[0]) * datamax + datamin;  

Wer das „OpenCL Part 1“ ausprobieren möchte, sollte den passenden GPU Driver verwenden.

 

Holger Librenz ist IT-Consultant bei der PRODYNA AG. Er hat mehrjährige Erfahrungen mit Java-basierten Softwareprojekten. Neben klassischen Webprojekten beschäftigt er sich mit Mobile-Anwendungen, Security und führt durch Schulungen ebenso wie durch Projekte.

Dr. Valentin Steinhauer ist bei der Devoteam GmbH in Weiterstadt. Er verfügt über mehrjährige Erfahrung aus B2B- und B2C-Softwareprojekten als Coach, Trainer, Architekt, Teamleiter und Entwickler.

Geschrieben von
Holger Librenz, Valentin Steinhauer
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.