Page 1 of 1

Normalisierung von In-und Output, Fehlerhinweis

Posted: Mon 13. Oct 2014, 13:19
by UniPotLuc
Hallo liebe Forumgemeinde,
ich bin neu im Thema der neuronalen Netze und versuche gerade ein Netz zu erstellen, welches ganz simpel zwei Zahlen korrekt addiert. Das klingt wahrscheinlich eigenartig, aber ich möchte mein Verständnis vom Prinzip prüfen. Das Netz das mir dabei vorschwebte ist im Anhang. Es ist bewusst überdimensioniert weil ich am Ende sehen möchte, dass überflüssige Neuronen die Gewichtung null erhalten. Sinnigerweise sollen also die Shortcut-Neuronen 1 zu 6 und 2 zu 6 jeweils die Gewichtung 1 erhalten. Meine Aktivierungsfunktion ist "Identical".
Nun bin ich auf mehrer Probleme gestoßen:
1. Die Eingabe der Lessons: ich möchte gern ein .csv file mit Trainigs-Tripeln einlesen. Soweit ich aber die Lesson-Import Funktion verstanden habe ist es nur möglich eine einzelne Lesson pro csv file einzulesen anstatt verschiedene Lessons oder Patterns automatisiert aus einem csv einzulesen (eine lange Liste von Tripeln. Das kommt mir so unzweckmäßig vor, dass es aus meiner Sicht nur ein EIFOK sein kann. Wie kann ich eine Liste von Lessons importieren?
2. Nachdem ich per Hand einige Lessons eingetippt habe und die Lernroutine starte kommt die Warnung:
The data in the Lesson editor is out of range with respect to the Normalizsation Settings of the input or output neurons. Nachdem ich im Normalizsation Wizard alle Use-Normalize-checkboxen unchecked habe und neu starten wollte, trat die gleiche Warnung wieder auf und im Wizard war wieder Use Normalization gecheckt. Wenn ich die Warnung ignoriere kommt nach dem Training Käse raus. Was hat es mit dieser Normalisierung auf sich? Für mein Netz benötige ich eine y=x Aktivierungsfunktion und es darf nichts normalisiert werden. Wie kann ich das realisieren?
Ich würde mich freuen, wenn sie jemand meiner Fragen annehmen könnte.
Viele Grüße,
Lucas

Re: Normalisierung von In-und Output, Fehlerhinweis

Posted: Mon 13. Oct 2014, 17:51
by TJetter
Hallo und herzlich Willkommen im Forum,
UniPotLuc wrote:1. Die Eingabe der Lessons: ich möchte gern ein .csv file mit Trainigs-Tripeln einlesen. Soweit ich aber die Lesson-Import Funktion verstanden habe ist es nur möglich eine einzelne Lesson pro csv file einzulesen anstatt verschiedene Lessons oder Patterns automatisiert aus einem csv einzulesen (eine lange Liste von Tripeln. Das kommt mir so unzweckmäßig vor, dass es aus meiner Sicht nur ein EIFOK sein kann. Wie kann ich eine Liste von Lessons importieren?
Das Missverständnis ist einfach erklärt: Ein einzelnes Trainingsmuster ist ein 'Pattern', d.h., ein Satz von Input- und Outputwerten, also ein Trainings- oder auch Validierungsbeispiel. Eine 'Lesson' ist ein Satz mit beliebig vielen Patterns. Wenn man also eine Lesson importiert oder exportiert, dann sind damit i.d.R. immer mehrere (meist viele) Pattern gemeint.
UniPotLuc wrote:2. Nachdem ich per Hand einige Lessons eingetippt habe und die Lernroutine starte kommt die Warnung:
The data in the Lesson editor is out of range with respect to the Normalizsation Settings of the input or output neurons. Nachdem ich im Normalizsation Wizard alle Use-Normalize-checkboxen unchecked habe und neu starten wollte, trat die gleiche Warnung wieder auf und im Wizard war wieder Use Normalization gecheckt. Wenn ich die Warnung ignoriere kommt nach dem Training Käse raus. Was hat es mit dieser Normalisierung auf sich? Für mein Netz benötige ich eine y=x Aktivierungsfunktion und es darf nichts normalisiert werden. Wie kann ich das realisieren?
Intern muss bei NNs zur Verarbeitung immer normalisiert werden. Die Häkchen 'Use Normalization' müssen deshalb bei Input- und Output-Neuronen immer dann gesetzt werden, wenn der angestrebte Ein- bzw. Ausgabebereich den natürlichen Wertebereich der gewählten Aktivierungsfunktionen über-/unterschreitet. Zusammen mit dem 'Use Normalization' Häkchen gibt man die Grenzen an, die für das jeweilige Neuron verwendet werden sollen. Diese sollten immer so groß wie nötig und so klein wie möglich gewählt werden. Im Vorliegenden Fall also für die Eingabeneuronen der Wertebereich der Summanden, für das Ausgabeneuron der Wertebereich der Summe.

Im Übrigen macht für die Hidden-Neuronen die 'Identical' Aktivierungsfunktion wenig Sinn. Hier sollte man immer die logistische Funktion oder den Tangens Hyperbolikus wählen.

Viele Grüße

Re: Normalisierung von In-und Output, Fehlerhinweis

Posted: Wed 15. Oct 2014, 09:45
by UniPotLuc
Hi TJetter,
vielen Dank für deine Antwort. Das richtige Importieren der Lessons klappt jetzt. Vielen Dank für den Hinweis.
Ich kann die Grenzwerte für Normalisierung jetzt korrekt setzen und der Hinweis bleibt aus. Allerdings verstehe ich nicht so recht deine Anmerkung, dass "Identical" als aktivierungsfunktion im Hidden Layer für die Summenbildung unzweckmäßig ist. Angenommen ich würde die Shortcut Verbindungen entfernen und trotzdem eine Summe bilden wollen, dann muss der Informationsfluss über das Hidden Layer gehen. Logistische Funktionen und der Tangens Hyperbolicus würden jedoch die Infomation der Summanden je nach Grenzwert löschen, sodass das Output Layer im ungünstigen Fall nur die gewichtete Summe der Grenzwerte aus dem Hidden Layer bilden kann. Allerdings beobachte ich tatsächlich, dass der quadratische Fehler dann bei E5 sättigt, während er bei TanHyp langsam aber kontinuierlich sinkt. Könntest du mir das erklären?
Viele Grüße,
Lucas

PS: das beste Ergebnis für die Summation erhalte ich natürlich, wenn ich das Hidden Layer entferne, kein Wunder

Re: Normalisierung von In-und Output, Fehlerhinweis

Posted: Mon 20. Oct 2014, 11:41
by TJetter
Hallo,

tatsächlich ist es so, dass auch die lineare Übertragungsfunktion bei -1 bzw. 1 abschneidet. Bei neuronalen Netzen wird grundsätzlich die (interne) Aktivierung der Neuronen auf diesen Bereich begrenzt (bzw. bei manchen Aktivierungfunktionen auch auf [0..1].
Das trifft natürlich nicht für die Links (Verknüpfungen) zu, diese können Gewichte beliebiger Größe aufweisen.
Deshalb müssen die Normalisierungsgrenzen für die Inputs und Outputs immer ausreichend groß gewählt werden, um alle Daten abbilden zu können. Bei den EIngängen also das Maximum der einzelnen Summanden, beim Ausgang die maximale Summe.
Nun ist natürlich eine Summation nicht der typische Anwendungsfall neuronaler Netze. Man hat es in der Praxis ja immer mit nichtlinearen Übertragungfunktionen zu tun. Diese können nur mit nichtlinearen Aktivierungsfunktionen realisiert werden. Deshalb macht es i.d.R. keinen Sinn, lineare Hidden-Neuronen zu verwenden. Im Fall einer linearen Ü-Funktion, die erlernt werden soll, ist das natürlich etwas anderes. Allerdings lässt die sich ja direkt als Gleichung hinschreiben, deshalb ist der EInsatz eines NNs hier natürlich in der Praxis nicht sinnvoll.

Grüße