Multi-Layer-Perceptron (MLP) -Architektur: Kriterien für die Auswahl der Anzahl der verborgenen Schichten und der Größe der verborgenen Schicht?

104

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?

Abhishek Kumar
quelle

Antworten:

216

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:

Wenn Sie mit dem Modellbau beginnen, gehen Sie auf die Seite von mehr Knoten in der verborgenen Ebene.

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:

Als Faustregel gilt, dass die Größe dieser [ausgeblendeten] Ebene irgendwo zwischen der Größe der Eingabeebene ... und der Größe der Ausgabeebene ... liegt.

Um die Anzahl der versteckten Knoten zu berechnen, verwenden wir eine allgemeine Regel: (Anzahl der Ein- und Ausgänge) x 2/3

RoT basierend auf Hauptkomponenten:

In der Regel geben wir so viele versteckte Knoten an, wie Dimensionen [Hauptkomponenten] erforderlich sind, um 70-90% der Varianz des Eingabedatensatzes zu erfassen .

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.

Geben Sie hier die Bildbeschreibung ein

Doug
quelle
1
Ich möchte einige verwandte Ergebnisse zum RoT Nr. 1 hinzufügen: In den erfolgreichen SVMs ordnen Sie Ihre Eingabe tatsächlich einem höherdimensionalen Raum zu (mehr versteckte Knoten als Knoten in der Eingabeebene im NN-Sprachgebrauch). Die Aufgabe der Ausgabeschicht besteht darin, die Entscheidung aus dieser übervollständigen Darstellung zu ziehen. Möglicherweise besteht auch eine Verbindung zu zufälligen Projektionen. Das brillante Papier von Adam Coates & Andrew Y. Ng (2011) diskutiert verwandte Themen.
Vladislavs Dovgalecs
Schöne Erklärung. Haben Sie eine Idee, wie ich mit sklearn und MLPClassifier eine Figur wie oben darstellen kann?
Seralouk
1
@sera meinst du xkcd style?
Denfromufa
Könnten Sie im Prinzip den Prozess der Optimierung der Anzahl der Neuronen in der verborgenen Schicht automatisieren? Könnten Sie auch die Anzahl der ausgeblendeten Ebenen automatisch optimieren?
Addison
2

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.

Ove
quelle
1

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:

  1. Chromosom : Vektor, der definiert, wie viele Einheiten in jeder verborgenen Schicht vorhanden sind (z. B. [20,5,1,0,0], dh 20 Einheiten in der ersten verborgenen Schicht, 5 in der zweiten, ..., wobei die Schichten 4 und 5 fehlen). Sie können die maximale Anzahl der zu versuchenden Ebenen und die maximale Anzahl der Einheiten in jeder Ebene begrenzen. Sie sollten auch Einschränkungen hinsichtlich der Erzeugung der Chromosomen festlegen. Beispielsweise sollte [10, 0, 3, ...] nicht generiert werden, da Einheiten nach einer fehlenden Schicht (die '3, ...') irrelevant wären und Bewertungszyklen verschwenden würden.
  2. Fitnessfunktion : Eine Funktion, die den Kehrwert des niedrigsten Trainingsfehlers im Kreuzvalidierungssatz eines durch ein bestimmtes Chromosom definierten Netzwerks zurückgibt. Sie können auch die Anzahl der Gesamteinheiten oder die Rechenzeit angeben, wenn Sie das "kleinste / schnellste und dennoch genaueste Netzwerk" suchen möchten.

Sie können auch berücksichtigen:

  • Bereinigen : Beginnen Sie mit einem großen Netzwerk und reduzieren Sie dann die Ebenen und verborgenen Einheiten, während Sie die Leistung der Kreuzvalidierungssätze verfolgen.
  • Wachsen : Beginnen Sie mit einem sehr kleinen Netzwerk, fügen Sie dann Einheiten und Ebenen hinzu und verfolgen Sie erneut die Leistung des CV-Sets.
Genauso wie
quelle
0

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.

mlstudent
quelle