Wie man die Anzahl der Neuronen und Schichten in neuronalen Netzen einstellt

25

Ich bin Anfänger in neuronalen Netzen und habe Probleme, zwei Konzepte zu verstehen:

  1. Wie entscheidet man sich für die Anzahl der mittleren Schichten eines bestimmten neuronalen Netzwerks? 1 gegen 10 oder was auch immer.
  2. Wie bestimmt man die Anzahl der Neuronen in jeder mittleren Schicht? Wird empfohlen, in jeder mittleren Schicht die gleiche Anzahl von Neuronen zu haben, oder variiert dies mit der Anwendung?
Snaggletooth
quelle

Antworten:

19

Die Berücksichtigung der Anzahl von Neuronen für jede Schicht und der Anzahl von Schichten in vollständig verbundenen Netzwerken hängt vom Merkmalsraum des Problems ab. Um zu veranschaulichen, was in den zweidimensionalen Fällen geschieht, verwende ich den zweidimensionalen Raum. Ich habe Bilder aus den Werken eines Wissenschaftlers verwendet . Zum Verständnis anderer Netze CNNempfehle ich Ihnen einen Blick hier .

Angenommen, Sie haben nur ein einziges Neuron. In diesem Fall haben Sie nach dem Erlernen der Netzwerkparameter eine lineare Entscheidungsgrenze, die den Raum in zwei einzelne Klassen unterteilen kann.

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Angenommen, Sie werden aufgefordert, die folgenden Daten zu trennen. Sie müssen d1angeben, welche obere Entscheidungsgrenze verwendet werden soll, ANDum zu bestimmen, ob sich die Eingabedaten auf der linken Seite oder auf der rechten Seite befinden. Line d2führt eine andere ANDOperation aus, die untersucht, ob die Eingabedaten höher sind als d2oder nicht. In diesem Fall d1wird versucht zu verstehen, ob sich die Eingabe auf der linken Seite der Zeile befindet, um die Eingabe als Kreis zu klassifizieren. Außerdem d2wird versucht, herauszufinden, ob sich die Eingabe auf der rechten Seite der Zeile befindet, um die Eingabe als Kreis zu klassifizieren . Jetzt brauchen wir noch einenANDOperation, um die Ergebnisse der beiden Linien, die nach dem Trainieren ihrer Parameter konstruiert wurden, aufzuarbeiten. Befindet sich der Eingang links d1und rechts von d2, sollte er als Kreis klassifiziert werden .

Bildbeschreibung hier eingeben

Angenommen, Sie haben das folgende Problem und werden aufgefordert, die Klassen zu trennen. In diesem Fall ist die Begründung genau wie oben.

Bildbeschreibung hier eingeben

Für folgende Daten:

Bildbeschreibung hier eingeben

Die Entscheidungsgrenze ist nicht konvex und komplexer als die vorherigen Grenzen. Zuerst müssen Sie ein Subnetz haben, das die inneren Kreise findet. Dann müssen Sie ein anderes Subnetz haben, das die innere rechteckige Entscheidungsgrenze findet, die entscheidet, dass die Eingaben, die sich innerhalb des Rechtecks ​​befinden, kein Kreis sind, und wenn sie sich außerhalb befinden, sind sie ein Kreis. Danach müssen Sie die Ergebnisse zusammenfassen und sagen, dass die Eingabedaten als Kreis klassifiziert werden sollten, wenn sie sich innerhalb des größeren Rechtecks ​​und außerhalb des inneren Rechtecks ​​befinden . Zu ANDdiesem Zweck benötigen Sie eine andere Operation. Das Netzwerk würde so aussehen:

Bildbeschreibung hier eingeben


Angenommen, Sie werden aufgefordert, die folgende eingekreiste Entscheidungsgrenze zu finden .

Bildbeschreibung hier eingeben

In diesem Fall wäre Ihr Netzwerk wie das folgende Netzwerk, auf das Bezug genommen wurde, jedoch mit viel mehr Neuronen in der ersten verborgenen Schicht.

Bildbeschreibung hier eingeben

Medien
quelle
11

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.

Valentin Calomme
quelle
Sie können das Konzept der intrinsischen Dimension verwenden , um die Anzahl der relevanten Dimensionen für Ihr Problem zu ermitteln. Intrinsische Dimensionen versuchen zu beantworten, wie viele Variablen benötigt werden, um ein Signal vollständig zu beschreiben, und es hängt mit der Anzahl der Variablen in der Zufallsquelle dieses Signals zusammen.
Pedro Henrique Monforte
8

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/

moh
quelle
3

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:

  1. Suchen Sie nach ähnlichen Problemen, die auch mit Feed-Forward-Netzwerken modelliert wurden, und untersuchen Sie deren Architekturen.
  2. Beginnen Sie mit dieser Konfiguration, trainieren Sie den Datensatz und werten Sie den Testsatz aus.
  3. Führen Sie Beschneiden in Ihrer Architektur und vergleichen Sie die Ergebnisse in dem Datensatz mit den bisherigen Ergebnissen. Wenn die Genauigkeit Ihres Modells nicht beeinträchtigt wird, können Sie daraus schließen, dass das ursprüngliche Modell die Daten überfüllt.
  4. Versuchen Sie andernfalls, mehr Freiheitsgrade (dh mehr Ebenen) hinzuzufügen.

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.

Federico Caccia
quelle
1

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

Frederic Schneider
quelle