Wenn wir 10 Eigenvektoren haben, können wir 10 neuronale Knoten in der Eingabeschicht haben. Wenn wir 5 Ausgabeklassen haben, können wir 5 Knoten in der Ausgabeschicht haben. Aber was sind die Kriterien für die Auswahl der Anzahl der verborgenen Schichten in einem MLP und wie viele neuronale Knoten in 1 versteckten Schicht?
machine-learning
neural-network
deep-learning
perceptron
Abhishek Kumar
quelle
quelle
Antworten:
Wie viele versteckte Schichten ?
Ein Modell mit null versteckten Ebenen löst linear trennbare Daten auf. Wenn Sie also nicht bereits wissen, dass Ihre Daten nicht linear trennbar sind, schadet es nicht, dies zu überprüfen. Warum sollten Sie ein komplexeres Modell verwenden, als es die Aufgabe erfordert? Wenn es linear trennbar ist, funktioniert eine einfachere Technik, aber auch ein Perceptron erledigt die Aufgabe.
Angenommen, Ihre Daten müssen durch eine nichtlineare Technik getrennt werden, dann beginnen Sie immer mit einer verborgenen Ebene . Mit ziemlicher Sicherheit ist das alles, was Sie brauchen werden. Wenn Ihre Daten mit einem MLP trennbar sind, benötigt dieser MLP wahrscheinlich nur eine einzige verborgene Schicht. Es gibt theoretische Gründe dafür, aber mein Grund ist rein empirisch: Viele schwierige Klassifizierungs- / Regressionsprobleme werden mit MLPs mit einer verborgenen Schicht gelöst, aber ich kann mich nicht erinnern, auf MLPs mit mehreren verborgenen Schichten gestoßen zu sein, die zur erfolgreichen Modellierung von Daten verwendet wurden. - ob in ML-Bulletin Boards, ML-Lehrbüchern, wissenschaftlichen Arbeiten usw. Sie existieren zwar, aber die Umstände, die ihre Verwendung rechtfertigen, sind empirisch recht selten.
Wie viele Knoten in der verborgenen Ebene?
Aus der MLP-Fachliteratur. Meine eigenen Erfahrungen usw. habe ich gesammelt und verlasse mich oft auf mehrere Faustregeln ( RoT) ), die ich auch als zuverlässige befunden habe (dh die Anleitung war korrekt, und selbst wenn dies nicht der ) war normalerweise klar, was als nächstes zu tun ist):
Verrotten basierend auf der Verbesserung der Konvergenz:
Warum? Erstens schaden ein paar zusätzliche Knoten in der verborgenen Ebene wahrscheinlich nicht - Ihr MLP konvergiert immer noch. Andererseits können zu wenige Knoten in der verborgenen Schicht die Konvergenz verhindern. Stellen Sie sich das so vor: Zusätzliche Knoten bieten eine gewisse Überkapazität - zusätzliche Gewichte zum Speichern / Freigeben von Signalen an das Netzwerk während der Iteration (Training oder Modellbildung). Zweitens, wenn Sie mit zusätzlichen Knoten in Ihrer verborgenen Ebene beginnen, können Sie diese später (während des Iterationsfortschritts) leicht bereinigen. Dies ist üblich und es gibt Diagnosetechniken, die Sie unterstützen (z. B. Hinton-Diagramm, das nur eine visuelle Darstellung der Gewichtsmatrizen ist, eine „Wärmekarte“ der Gewichtswerte).
RoTs basierend auf der Größe der Eingabeschicht und der Größe der Ausgabeschicht:
RoT basierend auf Hauptkomponenten:
Und doch die NN FAQ nennt Autor diese Regeln "Unsinn" (wörtlich), weil sie: die Anzahl der Trainingsinstanzen, das Rauschen in den Zielen (Werte der Antwortvariablen) und die Komplexität des Funktionsbereichs ignorieren.
Wählen Sie aus seiner Sicht (und es schien mir immer, dass er weiß, wovon er spricht) die Anzahl der Neuronen in der verborgenen Schicht basierend darauf, ob Ihr MLP eine Form der Regularisierung oder ein vorzeitiges Anhalten enthält .
Die einzig gültige Technik zur Optimierung der Anzahl der Neuronen in der verborgenen Schicht:
Testen Sie während Ihres Modellbaus obsessiv. Beim Testen werden die Signaturen einer "falschen" Netzwerkarchitektur angezeigt. Wenn Sie beispielsweise mit einem MLP beginnen, dessen verborgene Schicht aus einer kleinen Anzahl von Knoten besteht (die Sie basierend auf den Testergebnissen nach Bedarf schrittweise erhöhen), sind Ihre Trainings- und Generalisierungsfehler sowohl aufgrund von Verzerrungen als auch aufgrund von Unteranpassung hoch.
Erhöhen Sie dann die Anzahl der Knoten in der verborgenen Schicht nacheinander, bis der Generalisierungsfehler zuzunehmen beginnt, diesmal aufgrund von Überanpassung und hoher Varianz.
In der Praxis mache ich das so:
Eingabeebene : Die Größe meines Datenvektors (die Anzahl der Features in meinem Modell) + 1 für den Bias-Knoten und natürlich ohne die Antwortvariable
Ausgabeschicht : allein durch mein Modell bestimmt: Regression (ein Knoten) versus Klassifizierung (Anzahl der Knoten entspricht der Anzahl der Klassen, unter der Annahme von Softmax)
versteckte Ebene : Beginnen Sie , eine verborgene Schicht mit einer Anzahl von Knoten, die der Größe der Eingabeebene entsprechen. Die "ideale" Größe ist eher kleiner (dh eine bestimmte Anzahl von Knoten zwischen der Anzahl in der Eingabeschicht und der Anzahl in der Ausgabeschicht) als größer - dies ist wiederum nur eine empirische Beobachtung und der Großteil Diese Beobachtung ist meine eigene Erfahrung. Wenn das Projekt die zusätzliche erforderliche Zeit gerechtfertigt hat, beginne ich mit einer einzelnen verborgenen Ebene, die aus einer kleinen Anzahl von Knoten besteht, und füge dann (wie oben erläutert) der versteckten Ebene nacheinander Knoten hinzu, während ich die Generalisierung berechne Fehler, Trainingsfehler, Voreingenommenheit und Varianz. Wenn der Generalisierungsfehler gesunken ist und kurz bevor er wieder zunimmt, ist die Anzahl der Knoten an diesem Punkt meine Wahl. Siehe Abbildung unten.
quelle
Es ist sehr schwierig, die Anzahl der Neuronen in einer verborgenen Schicht und die Anzahl der verborgenen Schichten in Ihrem neuronalen Netzwerk zu bestimmen.
Normalerweise reicht für die meisten Anwendungen eine verborgene Schicht aus. Außerdem sollte die Anzahl der Neuronen in dieser verborgenen Schicht zwischen der Anzahl der Eingaben (10 in Ihrem Beispiel) und der Anzahl der Ausgaben (5 in Ihrem Beispiel) liegen.
Der beste Weg, um die Anzahl der Neuronen und verborgenen Schichten zu bestimmen, ist das Experimentieren. Trainieren Sie mehrere neuronale Netze mit unterschiedlicher Anzahl von verborgenen Schichten und verborgenen Neuronen und messen Sie die Leistung dieser Netze mithilfe der Kreuzvalidierung . Sie können sich an die Nummer halten, die das Netzwerk mit der besten Leistung ergibt.
quelle
Um die Auswahl der besten Anzahl von Schichten und der besten Anzahl von Neuronen für jede der Schichten zu automatisieren, können Sie die genetische Optimierung verwenden .
Die Schlüsselstücke wären:
Sie können auch berücksichtigen:
quelle
Vor kurzem gibt es theoretische Arbeiten zu diesem https://arxiv.org/abs/1809.09953 . Angenommen, Sie verwenden ein RELU-MLP, haben alle verborgenen Ebenen die gleiche Anzahl von Knoten und Ihre Verlustfunktion und echte Funktion, die Sie mit einem neuronalen Netzwerk approximieren, befolgen einige technische Eigenschaften (im Papier). Sie können Ihre Tiefe auswählen Bestellen Sie $ \ log (n) $ und Ihre Breite der ausgeblendeten Ebenen in der Reihenfolge $ n ^ {d / (2 (\ beta + d))} \ log ^ 2 (n) $. Hier ist $ n $ Ihre Stichprobengröße, $ d $ ist die Dimension Ihres Eingabevektors und $ \ beta $ ist ein Glättungsparameter für Ihre wahre Funktion. Da $ \ beta $ unbekannt ist, möchten Sie es wahrscheinlich als Hyperparameter behandeln.
Auf diese Weise können Sie garantieren, dass mit einer Wahrscheinlichkeit, die als Funktion der Stichprobengröße gegen $ 1 $ konvergiert, Ihr Approximationsfehler als Funktion der Stichprobengröße gegen $ 0 $ konvergiert. Sie geben die Rate. Beachten Sie, dass dies nicht garantiert die "beste" Architektur ist, aber es kann Ihnen zumindest einen guten Ausgangspunkt geben. Meine eigene Erfahrung zeigt außerdem, dass Dinge wie Schulabbrecher in der Praxis immer noch hilfreich sein können.
quelle