NNSpace – The next one

Jetzt ist es wieder mal so weit. Wie jedes Jahr um diese Zeit, endlich … nein es ist noch nicht Weihnachten! Ich habe mich dazu durchgerungen mit einer neuen Version von NNSpace anzufangen. Mein Plan ist es im Moment alle Algorithmen, Ausführungspläne und so weiter als Activities/Workflows mit der WF 4 auszulagern. Das sollte möglichst grafisch passieren,  nur die Grundbausteine sollen noch in C# implementiert werden. Für einen Algorithmus wie z.B. die Backpropagation hat das mehrere Vorteile:

  • Man versteht den Algorithmus! Selbst als Programmierer blickt man bei den Algorithmen im Code kaum durch. Ich habe bei der letzten Version (CTP 2) regelmäßig Stunden damit zugebracht irgendwelche Fehler in den Algorithmen zu suchen .. Mit einer grafischen Übersicht dürfte das etwas einfacher werden. Außerdem kann man so besser erklären was passiert.
  • Der Algorithmus ist sehr dynamisch! Wenn wir die Workflows als XAML abspeichern und laden, kann man das jederzeit ändern. Das kann dann sogar der Benutzer machen, wenn er ein bisschen Durchblick hat.

Also, wie muss man sich das dann vorstellen? Ungefähr so:

Das ist mein erster Entwurf für einen Backpropagation-Workflow. Ihr erinnert euch sicherlich noch an die Backprop, also:

  1. Wir nehmen ein feed-forward Netz (Verbindungen nur in eine Richtung) und führen das aus (Forward Execute)
  2. Wir vergleichen das Ergebnis mit einem vorgegebenen Ziel-Vektor und berechnen den quadratischen Fehler (MSE)
  3. Wir berechnen die Ableitungen des Fehlers nach den Gewichten (die Delta-Werte sind hier zwischengespeicherte Teil-Ableitungen, die wir vorher cachen um Performance zu sparen)
  4. Wir aktualisieren die Gewichte anhand der Ableitungen
  5. Wir fangen wieder von vorne an, bis wir der Meinung sind, dass es gut ist

Dafür brauchen wir soweit erstmal nur folgende Code-Activities:

  • Mean Squared Error (quadratischer Fehler) mit Ableitung
  • Sigmoid für die Aktivierungsfunktionen mit Ableitung
  • For-Activity zum durchlaufen der Units, also z.B. zum Berechnen vom NetInput usw. (scheinbar gibt es gar keine For im .NET Framework, also hab ich fix mal selber eine gebastelt)

Innen drin sieht das dann z.B. so aus (für die Ausführung):

und innerhalb von „Calculate Hidden States“ werden zunächst die net-Inputs zusammengezält und dann die Ergebnisse gesammelt durch die sigmoide Aktivierungsfunktion gezogen:

Eigentlich cool oder? Durch die Möglichkeit die Dinger im Designer zusammenzuklappen bleibt das Ganze auch immer schön übersichtlich. Ich bin selber gespannt, wie es jetzt noch weitergeht. Auf jeden Fall könnte es eventuell mit der Performance Probleme geben, wenn ja, müsste ich nochmal umdenken. Es stehen also nach der Logik noch ein paar Tests und dann die Integration in den Rehosted Workflow Designer an.

Veröffentlicht von

Winfried

Student TU Chemnitz