Mir ist klar, dass diese Frage beantwortet wurde, aber ich denke nicht, dass die noch vorhandene Antwort die Frage wirklich in Anspruch nimmt, außer auf einen Link zu verweisen, der im Allgemeinen mit dem Thema der Frage zusammenhängt. Insbesondere beschreibt der Link eine Technik für die programmatische Netzwerkkonfiguration, die jedoch keine " [a] standardmäßige und akzeptierte Methode " für die Netzwerkkonfiguration ist.
Durch Befolgen eines kleinen Satzes klarer Regeln kann eine kompetente Netzwerkarchitektur programmgesteuert festgelegt werden (dh die Anzahl und Art der neuronalen Schichten und die Anzahl der Neuronen, aus denen jede Schicht besteht). Wenn Sie diesem Schema folgen, erhalten Sie eine kompetente, aber wahrscheinlich keine optimale Architektur.
Sobald dieses Netzwerk initialisiert ist, können Sie die Konfiguration während des Trainings mithilfe einer Reihe zusätzlicher Algorithmen iterativ anpassen. Eine Familie von diesen schneidet Knoten basierend auf (kleinen) Werten des Gewichtsvektors nach einer bestimmten Anzahl von Trainingsepochen - mit anderen Worten, eliminiert unnötige / redundante Knoten (mehr dazu weiter unten).
Jedes NN hat drei Arten von Ebenen: Eingabe , Ausblenden und Ausgabe .
Um die NN-Architektur zu erstellen, müssen Werte für die Anzahl der Schichten jedes Typs und die Anzahl der Knoten in jeder dieser Schichten ermittelt werden.
Die Eingabeebene
Einfach - jeder NN hat genau einen von ihnen - keine Ausnahmen, die ich kenne.
In Bezug auf die Anzahl der Neuronen, aus denen diese Schicht besteht, wird dieser Parameter vollständig und eindeutig bestimmt, sobald Sie die Form Ihrer Trainingsdaten kennen. Insbesondere entspricht die Anzahl der Neuronen, aus denen diese Schicht besteht, der Anzahl der Merkmale (Spalten) in Ihren Daten . Einige NN-Konfigurationen fügen einen zusätzlichen Knoten für einen Bias-Term hinzu.
Die Ausgabeebene
Wie die Eingabeebene hat jede NN genau eine Ausgabeebene. Die Bestimmung der Größe (Anzahl der Neuronen) ist einfach. Sie wird vollständig von der gewählten Modellkonfiguration bestimmt.
Wird Ihr NN im Maschinenmodus oder im Regressionsmodus ausgeführt (die ML-Konvention, einen Begriff zu verwenden, der auch in der Statistik verwendet wird, dem jedoch eine andere Bedeutung zugewiesen wird, ist sehr verwirrend)? Maschinenmodus: Gibt eine Klassenbezeichnung zurück (z. B. "Premium Account" / "Basic Account"). Der Regressionsmodus gibt einen Wert zurück (z. B. Preis).
Wenn der NN ein Regressor ist, hat die Ausgabeebene einen einzelnen Knoten.
Wenn der NN ein Klassifizierer ist, hat er auch einen einzelnen Knoten, sofern nicht Softmax verwendet wird. In diesem Fall hat der Ausgabe-Layer einen Knoten pro Klassenbezeichnung in Ihrem Modell.
Die versteckten Schichten
Diese wenigen Regeln legen also die Anzahl der Ebenen und die Größe (Neuronen / Ebene) sowohl für die Eingabe- als auch für die Ausgabeebene fest. Das lässt die verborgenen Schichten.
Wie viele versteckte Schichten? Nun, wenn Ihre Daten linear trennbar sind (was Sie oft wissen, wenn Sie mit dem Codieren eines NN beginnen), brauchen Sie überhaupt keine versteckten Ebenen. Natürlich brauchen Sie auch keinen NN, um Ihre Daten aufzulösen, aber er wird trotzdem die Arbeit erledigen.
Darüber hinaus gibt es, wie Sie wahrscheinlich wissen, eine Fülle von Kommentaren zur Frage der Konfiguration versteckter Ebenen in NNs ( eine hervorragende Zusammenfassung dieses Kommentars finden Sie in den wahnsinnig ausführlichen und aufschlussreichen FAQ zu NNs). Ein Problem innerhalb dieses Themas, über das Einigkeit besteht, ist der Leistungsunterschied zum Hinzufügen zusätzlicher ausgeblendeter Ebenen: Es gibt nur wenige Situationen, in denen sich die Leistung mit einer zweiten (oder dritten usw.) ausgeblendeten Ebene verbessert. Eine versteckte Schicht reicht für die meisten Probleme aus.
Wie sieht es mit der Größe der verborgenen Schicht (en) aus - wie viele Neuronen? Es gibt einige empirisch abgeleitete Faustregeln, von denen die am häufigsten verwendete lautet: " Die optimale Größe der verborgenen Ebene liegt normalerweise zwischen der Größe der Eingabe- und der Größe der Ausgabeebene ." Jeff Heaton, Autor der Einführung in neuronale Netze in Java, bietet einige weitere Möglichkeiten.
In der Summe könnte man bei den meisten Problemen wahrscheinlich eine anständige Leistung erzielen (auch ohne einen zweiten Optimierungsschritt), indem man die Konfiguration der verborgenen Schichten mit nur zwei Regeln festlegt: (i) Anzahl der verborgenen Schichten ist gleich eins; und (ii) die Anzahl von Neuronen in dieser Schicht ist der Mittelwert der Neuronen in der Eingabe- und der Ausgabeschicht.
Optimierung der Netzwerkkonfiguration
Beschneidungbeschreibt eine Reihe von Techniken zum Trimmen der Netzwerkgröße (nach Knoten und nicht nach Schichten), um die Rechenleistung und manchmal die Auflösungsleistung zu verbessern. Der Kern dieser Techniken ist das Entfernen von Knoten aus dem Netzwerk während des Trainings, indem diejenigen Knoten identifiziert werden, die, wenn sie aus dem Netzwerk entfernt werden, die Netzwerkleistung (dh die Auflösung der Daten) nicht merklich beeinträchtigen würden. (Auch ohne eine formale Schnitttechnik können Sie anhand der Gewichtsmatrix nach dem Training eine ungefähre Vorstellung davon bekommen, welche Knoten nicht wichtig sind. Schauen Sie sich die Gewichte sehr nahe an Null an - es sind die Knoten an beiden Enden dieser Gewichte, die häufig vorkommen entfernt während des Bereinigens.) Wenn Sie während des Trainings einen Bereinigungsalgorithmus verwenden, beginnen Sie natürlich mit einer Netzwerkkonfiguration, bei der mit größerer Wahrscheinlichkeit mehr (dh "bereinigbare") Knoten vorhanden sind - mit anderen Worten:
Anders ausgedrückt: Wenn Sie während des Trainings einen Bereinigungsalgorithmus auf Ihr Netzwerk anwenden, können Sie sich einer optimalen Netzwerkkonfiguration nähern. Ich weiß nicht, ob Sie das in einem einzelnen "Vor-Ort" (wie einem auf genetischen Algorithmen basierenden Algorithmus) tun können, obwohl ich weiß, dass diese zweistufige Optimierung im Moment üblicher ist.