2010-05-04 7 views
10

Ich habe ein Problem, herauszufinden, wie die Parameter für meinen Perzeptron-Algorithmus abgestimmt werden, so dass es relativ gut auf ungesehenen Daten funktioniert.Parameter-Tuning für Perceptron-Lernalgorithmus

Ich habe einen verifizierten Perzeptron-Algorithmus implementiert und möchte eine Methode finden, mit der ich die Anzahl der Iterationen und die Lernrate des Perzeptrons einstellen kann. Dies sind die beiden Parameter, die mich interessieren.

Ich weiß, dass die Lernrate des Perzeptrons nicht beeinflusst, ob der Algorithmus konvergiert und vervollständigt. Ich versuche zu begreifen, wie ich n ändern kann. Zu schnell und es wird viel herum und zu tief schwingen und es wird länger dauern.

Wie für die Anzahl der Iterationen bin ich mir nicht ganz sicher, wie man eine ideale Zahl bestimmt.

In jedem Fall würde jede Hilfe geschätzt werden. Vielen Dank.

Antwort

13

Beginnen Sie mit einer kleinen Anzahl von Iterationen (es ist eigentlich eher konventionellen ‚Epochen‘ eher zu zählen als Iterationen - ‚Epochen‘ bezieht sich auf die Anzahl der Iterationen durch den gesamten Datensatz verwendet, um das Netzwerk zu trainieren). Mit "klein" sagen wir etwa 50 Epochen. Der Grund dafür ist, dass Sie sehen möchten, wie sich der Gesamtfehler mit jedem zusätzlichen Trainingszyklus (Epoche) ändert - hoffentlich sinkt er (mehr zu "Gesamtfehler" unten).

Offensichtlich interessieren Sie sich für den Punkt (die Anzahl der Epochen), in dem die nächste zusätzliche Epoche den Gesamtfehler nicht weiter verringert. Beginnen Sie also mit einer kleinen Anzahl von Epochen, so dass Sie sich diesem Punkt nähern können, indem Sie die Epochen erhöhen.

Die Lernrate, mit der Sie beginnen, sollte nicht zu fein oder zu grob sein (offensichtlich subjektiv, aber hoffentlich haben Sie einen groben Sinn für eine große versus kleine Lernrate).

Als nächstes, fügen Sie ein paar Zeilen Testcode in Ihrem Perzeptron - wirklich nur ein paar gut platzierte 'print' Anweisungen. Berechnen und zeigen Sie für jede Iteration das Delta (tatsächlicher Wert für jeden Datenpunkt in den Trainingsdaten minus vorhergesagtem Wert) und summieren Sie dann die einzelnen Deltawerte über alle Punkte (Datenzeilen) in den Trainingsdaten (ich nehme normalerweise den absoluten Wert der Delta, oder Sie können die Quadratwurzel aus der Summe der quadrierten Differenzen nehmen - spielt keine Rolle.Nennen Sie den summierten Wert "totaler Fehler" - nur um klar zu sein, das ist totaler Fehler (Summe des Fehlers über alle Knoten) pro Epoche.

Dann Grundstück des Gesamtfehler als Funktion der Epochenzahl (dh Epochennummer auf der x-Achse, um Sie über neue Gesamtfehler auf der y-Achse). am Anfang natürlich‘ Ich sehe die Datenpunkte in der oberen linken Ecke nach unten und nach rechts und mit abnehmender Neigung

Lassen Sie den Algorithmus das Netzwerk anhand der Trainingsdaten trainieren. Erhöhen Sie die Epochen (z. B. 10 pro Lauf) , bis die Kurve (Gesamtfehler versus Epochennummer) abgeflacht - ie., Zusätzliche Iterationen verursacht keine Verringerung der Gesamtfehler.

Also ist die Steigung dieser Kurve wichtig und auch ihre vertikale Position - dh wie viel Gesamtfehler Sie haben und ob sie mit mehr Trainingszyklen (Epochen) weiter nach unten tendiert. Wenn Sie nach dem Erhöhen von Epochen schließlich eine Zunahme des Fehlers feststellen, beginnen Sie erneut mit einer niedrigeren Lernrate.Die Lernrate (normalerweise ein Bruchteil zwischen ungefähr 0,01 und 0,2) wird sicherlich beeinflussen, wie schnell das Netzwerk trainiert wird - d. Es kann auch dazu führen, dass Sie darüber springen. Codiere also eine Schleife, die ein Netzwerk trainiert, sagen wir fünf verschiedene Male, unter Verwendung einer festen Anzahl von Epochen (und eines gleichen Startpunkts) jedes Mal, aber variierend die Lernrate von zB 0,05 bis 0,2, wobei jedes Mal die Lernrate erhöht wird 0,05.

Ein weiterer Parameter ist hier wichtig (wenn auch nicht unbedingt notwendig), 'momentum'. Wie der Name schon sagt, hilft Ihnen ein Momentum-Begriff, ein ausreichend geschultes Netzwerk schneller zu bekommen. Im Wesentlichen ist das Momentum ein Multiplikator für die Lernrate - solange die Fehlerrate abnimmt, beschleunigt das Momentum den Fortschritt. Die Intuition hinter dem Momentum-Term ist 'Solange du zum Ziel fährst, erhöhe deine Geschwindigkeit'. Typische Werte für den Momentausdruck sind 0,1 oder 0,2. In dem obigen Trainingsplan sollten Sie wahrscheinlich den Impuls konstant halten, während Sie die Lernrate variieren.

+0

Dies ist die richtige Antwort, aber schränken Sie Ihre Lernrate und Ihren Momentum nicht auf eine begrenzte Domäne ein (Skalierung). Generieren Sie ein zufälliges Netzwerk, trainieren Sie 0,01-0,99 mit 0,05 Schritten. Wenn Sie die globalen Minima auf diese Weise nicht ausschütteln können, vergewissern Sie sich, dass Sie Ihre Eingaben korrekt normalisiert haben. Ich bin ein großer Fan von Log! – deepelement

3

Über die Lernrate nicht beeinflussen, ob das Perzeptron konvergiert - Das ist nicht wahr. Wenn Sie eine Lernrate wählen, die zu hoch ist, erhalten Sie wahrscheinlich ein divergentes Netzwerk. Wenn Sie die Lernrate während des Lernens ändern und sie zu schnell abfällt (dh stärker als 1/n), können Sie auch ein Netzwerk erhalten, das niemals konvergiert (weil die Summe von N (t) über t von 1 bis inf endlich ist). das bedeutet, dass sich der Vektor von Gewichten nur um einen endlichen Betrag ändern kann).

Theoretisch kann für einfache Fälle gezeigt werden, dass die Änderung von n (Lernrate) nach 1/t (wobei t die Anzahl der vorgestellten Beispiele ist) gut funktionieren sollte, aber ich fand das in der Praxis am besten Weg, dies zu tun, ist es, gute High-n-Wert zu finden (der höchste Wert, der Ihr Lernen nicht divergieren) und niedrigen n-Wert (dieser ist Tricker zu zahlen. hängt wirklich von den Daten und Problem), und dann lassen Sie n ändern linear im Laufe der Zeit von High n zu Low n.

1

Die Lernrate hängt von den typischen Datenwerten ab. Im Allgemeinen gibt es keine Faustregel. Feature-Skalierung ist eine Methode, die verwendet wird, um den Bereich unabhängiger Variablen oder Features von Daten zu standardisieren. In der Datenverarbeitung ist es auch als Datennormalisierung bekannt und wird im Allgemeinen während des Datenvorverarbeitungsschritts ausgeführt.

Die Normalisierung der Daten auf einen Mittelwert von Null, Einheitsvarianz oder zwischen 0-1 oder einer anderen Standardform kann bei der Auswahl eines Wertes der Lernrate helfen. Wie bereits erwähnt, funktioniert die Lernrate zwischen 0,05 und 0,2 im Allgemeinen gut.

Auch dies wird dazu beitragen, den Algorithmus schneller konvergieren zu lassen.

Quelle: Juszczak, P .; D.M.J. Tax und R.P.W. Dui (2002). "Feature-Skalierung in Support-Vektordatenbeschreibungen". Proc. 8. Annu. Konf. Erw. Schule Comput. Bildgebung: 95-10.