Sehr gute Frage, da es noch keine genaue Antwort auf diese Frage gibt. Dies ist ein aktives Forschungsgebiet.
Letztendlich hängt die Architektur Ihres Netzwerks von der Dimensionalität Ihrer Daten ab. Da neuronale Netze universelle Approximatoren sind, kann Ihr Netz, solange es groß genug ist, an Ihre Daten angepasst werden.
Der einzige Weg, um wirklich zu wissen, welche Architektur am besten funktioniert, besteht darin, alle zu testen und dann die beste auszuwählen. Aber natürlich ist es bei neuronalen Netzen ziemlich schwierig, da jedes Modell einige Zeit zum Trainieren benötigt. Was manche Leute tun, ist, zuerst ein Modell zu trainieren, das absichtlich "zu groß" ist, und es dann zu beschneiden, indem Gewichte entfernt werden, die nicht viel zum Netzwerk beitragen.
Was ist, wenn mein Netzwerk "zu groß" ist?
Wenn Ihr Netzwerk zu groß ist, kann es zu Überanpassungen oder Konvergenzproblemen kommen. Intuitiv passiert, dass Ihr Netzwerk versucht, Ihre Daten komplizierter zu erklären, als es sollte. Es ist, als würde man versuchen, eine Frage zu beantworten, die mit einem Satz und einem 10-seitigen Aufsatz beantwortet werden könnte. Es könnte schwierig sein, eine so lange Antwort zu strukturieren, und es könnte eine Menge unnötiger Fakten geben ( siehe diese Frage ).
Was ist, wenn mein Netzwerk "zu klein" ist?
Auf der anderen Seite, wenn Ihr Netzwerk zu klein ist, passt es nicht zu Ihren Daten und daher auch nicht. Es wäre, als würde man mit einem Satz antworten, wenn man einen 10-seitigen Aufsatz hätte schreiben sollen. So gut Ihre Antwort auch sein mag, Sie werden einige der relevanten Fakten vermissen.
Schätzung der Größe des Netzwerks
Wenn Sie die Dimensionalität Ihrer Daten kennen, können Sie feststellen, ob Ihr Netzwerk groß genug ist. Um die Dimensionalität Ihrer Daten abzuschätzen, können Sie versuchen, deren Rang zu berechnen. Dies ist eine Kernidee bei dem Versuch, die Größe von Netzwerken einzuschätzen.
Es ist jedoch nicht so einfach. Wenn Ihr Netzwerk 64-dimensional sein muss, erstellen Sie eine einzelne ausgeblendete Ebene der Größe 64 oder zwei Ebenen der Größe 8? An dieser Stelle möchte ich Ihnen eine Vorstellung davon geben, was in beiden Fällen passieren würde.
Tiefer gehen
Um tief zu gehen, müssen mehr versteckte Ebenen hinzugefügt werden. Es ermöglicht dem Netzwerk, komplexere Funktionen zu berechnen. In Faltungs-Neuronalen Netzen wurde beispielsweise häufig gezeigt, dass die ersten Schichten Merkmale auf "niedriger Ebene" wie Kanten darstellen und die letzten Schichten Merkmale auf "hoher Ebene" wie Gesichter, Körperteile usw. darstellen.
Sie müssen in der Regel tief gehen, wenn Ihre Daten sehr unstrukturiert sind (wie ein Bild) und eine ganze Menge verarbeitet werden müssen, bevor nützliche Informationen daraus extrahiert werden können.
Weiter gehen
Weiter zu gehen bedeutet, komplexere Features zu erstellen. Weiter zu gehen bedeutet einfach, mehr dieser Features zu erstellen. Es kann sein, dass Ihr Problem durch sehr einfache Funktionen erklärt werden kann, aber es muss viele davon geben. Normalerweise werden die Ebenen zum Ende des Netzwerks hin immer schmaler, weil komplexe Features mehr Informationen enthalten als einfache, und Sie daher nicht so viele benötigen.
Kurze Antwort: Es hängt stark von den Dimensionen Ihrer Daten und der Art der Anwendung ab.
Die Auswahl der richtigen Anzahl von Schichten kann nur mit Übung erreicht werden. Es gibt noch keine allgemeine Antwort auf diese Frage . Durch Auswahl einer Netzwerkarchitektur beschränken Sie Ihren Bereich der Möglichkeiten (Hypothesenbereich) auf eine bestimmte Reihe von Tensoroperationen, indem Sie Eingabedaten auf Ausgabedaten abbilden. In einem DeepNN kann jede Ebene nur auf Informationen zugreifen, die in der Ausgabe der vorherigen Ebene vorhanden sind. Wenn auf einer Ebene Informationen abgelegt werden, die für das jeweilige Problem relevant sind, können diese Informationen von späteren Ebenen niemals wiederhergestellt werden. Dies wird üblicherweise als " Informationsengpass " bezeichnet.
Informationsengpass ist ein zweischneidiges Schwert:
1) Wenn Sie einige Schichten / Neuronen verwenden, lernt das Modell nur einige nützliche Darstellungen / Merkmale Ihrer Daten und verliert einige wichtige, da die Kapazität der mittleren Schichten sehr begrenzt ist ( Unteranpassung ).
2) Wenn Sie eine große Anzahl von Ebenen / Neuronen verwenden, lernt das Modell zu viele Darstellungen / Merkmale, die für die Trainingsdaten spezifisch sind und sich nicht auf Daten in der realen Welt und außerhalb Ihres Trainingssatzes verallgemeinern lassen ( Überanpassung) ).
Nützliche Links für Beispiele und mehr zu finden:
[1] https://livebook.manning.com#! / Book / deep-learning-with-python / chapter-3 / point-1130-232-232-0
[2] https://www.quantamagazine.org/new-theory-cracks-open-the-black-box-of-deep-learning-20170921/
quelle
Ich arbeite seit zwei Jahren mit neuronalen Netzen und habe jedes Mal ein Problem, wenn ich kein neues System modellieren möchte. Der beste Ansatz, den ich gefunden habe, ist der folgende:
Der allgemeine Ansatz besteht darin, verschiedene Architekturen auszuprobieren, die Ergebnisse zu vergleichen und die beste Konfiguration zu wählen. Erfahrung gibt Ihnen mehr Intuition in der ersten Architekturvermutung.
quelle
Ergänzend zu den bisherigen Antworten gibt es Ansätze, bei denen die Topologie des neuronalen Netzes im Rahmen des Trainings endogen entsteht. Am bekanntesten ist die Neuroevolution of Augmenting Topologies (NEAT), bei der Sie mit einem Basisnetzwerk ohne versteckte Schichten beginnen und dann mithilfe eines genetischen Algorithmus die Netzwerkstruktur "komplexieren". NEAT ist in vielen ML-Frameworks implementiert. Hier ist ein ziemlich zugänglicher Artikel über eine Implementierung, um Mario zu lernen: CrAIg: Verwenden neuronaler Netze, um Mario zu lernen
quelle