Tutorium (Learning the English Past Tense)

Sie haben ein bestimmtes Projekt zu bearbeiten und wissen nicht, wie Sie an die Aufgabe heran gehen sollen? Sie sind sich nicht sicher, ob Ihr Netzentwurf zu Ihrem Problem passt oder ob es da Optimierungsmöglichkeiten gibt? Ist es überhaupt sinnvoll an Ihre Daten mit einem NN basierten Ansatz heranzugehen? Ist MemBrain das richtige Werkzeug für Ihr Problem und Ihre Infrastruktur?

Hier ist der richtige Platz für diese Art von Fragen.
Post Reply
gparis
Posts: 11
Joined: Sun 2. Jan 2011, 16:24

Tutorium (Learning the English Past Tense)

Post by gparis »

Hallo,

wie ich gestern im englischen Forum erwähnt habe, soll ich in den nächsten Wochen 4 Tutorien zu Neuronalen Netzen in der Uni halten. Seit 10 Jahren werden sie mit tlearn gelehrt, aber tlearn ist inzwischen so veraltet, dass es sich wirklich nur noch mit Mühe zum Laufen bringen lässt, weshalb ich nach einer Alternative gesucht habe.

Ich habe jetzt mit der Umsetzung eines der Tutorien angefangen, erreiche aber beim "Teaching" nichts. Das ganze ist eine Vereinfachung der Plunkett und Marchmann '91 Simulation über das englische Perfekt. Ich hänge das Netz an und die Trainingsdaten an. In tlearn wird das ganze laut Lehrbuch mit Backprop für 50 epochs mit Learning Rate 0.3 und Momentum 0.8 trainiert. Ich habe also ein Teacher mit "Std. BP with Momentum", "Learning Rate: 0.3", "Repetitions per Lesson: 50" und "Random Order" definiert (wie ich Momentum einstelle, weiß ich nicht), bei den anderen Optionen die default Werte stehen gelassen, auf die einfache Birne geklickt (Teach Lesson), und das Net Error Viewer aufgemacht, aber der Fehler scheint einfach nicht kleiner zu werden :-/ In der unteren rechten Ecke des Membrain Fenster sehe ich, dass der Fehler sehr wohl auf weniger als 0.01 sinkt, aber es wird im Error Viewer nicht so dargestellt.
error-constant.png
(136.38 KiB) Not downloaded yet
Was mache ich hier falsch?

Viele Grüße,
Garance
Attachments
pasttense.zip
(15.08 KiB) Downloaded 536 times
User avatar
TJetter
Posts: 346
Joined: Sat 13. Oct 2012, 12:04

Re: Tutorium (Learning the English Past Tense)

Post by TJetter »

gparis wrote: (wie ich Momentum einstelle, weiß ich nicht)
In den 'Teacher Settings' den Button 'Advanced klicken'. Hier lässt sich das Momentum mit zwei Parametern einstellen, einem Faktor für die Einflussname der letzten Gewichtsänderung und einem für die vorletzte Änderung. Wenn Du von einem 'Momentum = 0.8' sprichst, dann scheint es sich um ein einfaches Momentum zu handeln, bei dem nur die letzte Änderung eingeht. Du musst diesen Parameter also auf 0.8 und den für die vorletzte Änderung auf 0 setzen.
gparis wrote:auf die einfache Birne geklickt (Teach Lesson), und das Net Error Viewer aufgemacht, aber der Fehler scheint einfach nicht kleiner zu werden :-/ In der unteren rechten Ecke des Membrain Fenster sehe ich, dass der Fehler sehr wohl auf weniger als 0.01 sinkt, aber es wird im Error Viewer nicht so dargestellt.
Die Einstellung 'Repetitions per Lesson' betrifft die Anzahl Epochen, bevor jeweils das nächste Mal der Bildschirm aufgefrischt und der Net Error berechnet wird. Wenn Du hier 50 einstellt, dann werden mit einem 'Teach Lesson' ('einfache Birne') 50 Epochen abgefahren und dann zum ersten mal der Net Error berechnet. Da er vorher niemals berechnet wurde, wird im Error Viewer auch nur dieser erste Wert als horizontale Linie angezeigt.
Wenn Du den vorherigen Net Error als ersten Punkt im Net Error haben willst, dann musst Du vor dem 'Teach Step' den Menübefehl 'Teach - Evaluate Net Error' ausführen und zwar direkt nachdem Du die Randomisierung (Net - Randomize Net) durchgeführt hast. Dann hast Du also einen aus zwei Punkten bestehenden Graph.

Allerdings gehe ich davon aus, dass Du lieber den Graph sehen willst, wie er über die 50 Epochen hinweg abfällt. Dazu musst Du als 'Repetitions per Lesson' 1 eintragen und dann den 'Auto Teacher' starten ('Glühlampe mit rotem Ausrufezeichen'). Du musst das Training allerdings nach 50 Epochen manuell stoppen.
Wenn Du genau 50 Epochen haben willst, dann solltest Du ein einfaches Skript verwenden. Die einfachste Form eines solchen Skripts sieht so aus:

Code: Select all

void main()
{
    RandomizeNet();
    
    for (uint i = 0; i < 50; i++)
    {
        TeachStep();
        SleepExec();
    }
}
Du musst einfach nur den Code in eine Datei mit der Endung '.as' kopieren und ihn in MemBrain über 'Scripting - Execute Script...' ausführen. Wenn Du das das erste Mal gemacht hast, kannst Du das letzte Skript auch einfach mit einem einfachen Klick auf den blauen Skript-'Play-Button' immer wieder ausführen.

Ein Skript kann natürlich noch wesentlich leistungsfähigere Dinge tun, z.B. Deine Dateien laden, abspeichern, Berechnungen ausführen, Fenster wie den Error Viewer öffnen und schließen und viele, viele Dinge mehr. Das bietet sich für eine Präsentation u.U. an. Sag Bescheid, wenn Du hier weitere Tipps oder Support benötigst.

Grüße
Thomas Jetter
Post Reply