Wie viele Daten benötigen Sie für ein Faltungsnetzwerk?

14

Wenn ich ein Convolutional Neural Network (CNN) mit etwa 1.000.000 Parametern habe, wie viele Trainingsdaten werden benötigt (vorausgesetzt, ich mache einen stochastischen Gradientenabstieg)? Gibt es eine Faustregel?

Zusätzliche Hinweise: Wenn ich einen stochastischen Gradientenabstieg durchgeführt habe (z. B. 64 Patches für 1 Iteration), kann die Genauigkeit des Klassifikators nach ~ 10000 Iterationen einen ungefähren konstanten Wert erreichen. Bedeutet das, dass nicht viele Daten benötigt werden? Wie 100.000 bis 1000.000 Daten.

RockTheStar
quelle

Antworten:

11

Um herauszufinden, ob weitere Daten hilfreich sind oder nicht, sollten Sie die Leistung Ihres Algorithmus in Bezug auf die Trainingsdaten (dh die Daten, die zum Trainieren des neuronalen Netzwerks verwendet werden) mit der Leistung beim Testen von Daten (dh Daten, die das neuronale Netzwerk verwendet hat) vergleichen im Training nicht "sehen").

Eine gute Sache zu überprüfen wäre der Fehler (oder die Genauigkeit) bei jedem Satz als Funktion der Iterationsnummer. Hierfür gibt es zwei Möglichkeiten:

1) Der Trainingsfehler konvergiert auf einen Wert, der deutlich unter dem Testfehler liegt. In diesem Fall wird sich die Leistung Ihres Algorithmus mit ziemlicher Sicherheit mit mehr Daten verbessern.

2) Der Trainingsfehler und der Testfehler konvergieren auf ungefähr den gleichen Wert (wobei der Trainingsfehler wahrscheinlich immer noch etwas niedriger ist als der Testfehler). In diesem Fall helfen zusätzliche Daten Ihrem Algorithmus nicht. Wenn Sie eine bessere Leistung benötigen, als Sie zu diesem Zeitpunkt erhalten, sollten Sie versuchen, Ihren ausgeblendeten Ebenen entweder mehr Neuronen hinzuzufügen oder mehr ausgeblendete Ebenen hinzuzufügen. Wenn genügend versteckte Einheiten hinzugefügt werden, wird Ihr Testfehler merklich höher als der Trainingsfehler, und zu diesem Zeitpunkt helfen mehr Daten.

Für eine gründlichere und hilfreichere Einführung in die Entscheidungsfindung empfehle ich den Coursera-Kurs von Andrew Ng , insbesondere die Lektionen "Evaluieren eines Lernalgorithmus" und "Bias vs. Varianz".

Kevin Lyons
quelle
3

Die naive Antwort ist, dass immer mehr Daten benötigt werden. Das Durchlaufen desselben Datensatzes mit dem Hinweis für mehr Epochen hilft Ihnen, das Ergebnis zu "verfeinern", aber Sie verbessern das Ergebnis nicht so sehr, wie wenn Sie mehr Daten haben.

Als Beispiel trainiere ich ein Convnet, um Sätze zu modellieren und zu testen, ob ich mehr Daten benötige. Ich habe versucht, meinen Trainingsdatensatz in eine kleinere Teilmenge aufzuteilen und zu testen.

Durch die Verwendung des gesamten Datensatzes und des Trainings für 10 Iterationen erhielt ich eine Genauigkeit von 93% in meinem Benchmark und es verbessert sich ständig. Wenn ich stattdessen die 10% des Datensatzes für 100 Iterationen durchlaufe, erhalte ich 85%.

Versuchen Sie also immer, mehr Daten zu haben, aber wenn Sie dies nicht können, kann es ein netter Kompromiss sein, mehr Epochen zu machen, aber am Ende konvergiert Ihr Modell besser, wenn Sie das Netzwerk mit immer neuen Daten versorgen.

Dbonadiman
quelle
1
Danke für deine Antwort! Ja, ich weiß, je mehr Daten Sie haben, desto besser werden Sie sein, aber genau wie viele Daten Sie benötigen, ist mir nicht sicher. Da kann man nicht immer mehr Daten haben. Zum Beispiel muss ich jemanden einstellen, der Anmerkungen und Beschriftungen erstellt. Ich möchte herausfinden, wann ich aufhören soll ...
RockTheStar
Bedeutet das, dass mein Modell bei einem kleinen Datensatz nicht konvergiert?
Samsamara
3

Ich denke, das Wichtigste ist, dass die Stichproben in Ihren Daten gut verteilt sind, denn egal wie viele Daten Sie haben, mehr Daten wären immer besser. Wenn Sie versuchen, zwischen Katzen- und Hundebildern zu unterscheiden, können Sie keine gute Leistung Ihres Modells erwarten, wenn Sie es nur mit Katzenbildern füttern.

Wie in der Antwort von Kevin L vorgeschlagen , ist es sinnvoll, den Unterschied zwischen Trainings- und Testfehlern zu berücksichtigen. Wenn Ihre Testdaten unabhängig von Ihren Trainingsdaten sind, gibt dies einen Hinweis darauf, wie gut sich Ihr Modell auf die nicht verfügbaren Daten verallgemeinert. Ich möchte noch hinzufügen, dass ein großer Unterschied zwischen Trainings- und Testfehlern nur darauf hinweist, dass sich Ihr Modell nicht gut verallgemeinert, dh Sie sind überfordert mit den Trainingsdaten. Mehr Daten werden wahrscheinlich helfen, da das Netzwerk jetzt auch die zusätzlichen Datenpunkte modellieren muss und daher nicht mehr so ​​viel überanpassen kann. Es kann jedoch sinnvoller sein, Ihr Modell so zu ändern, dass es besser verallgemeinert wird. Dieses Kapitel aus einem ausgezeichneten Buch erklärt, welche Arten von Regularisierung existieren und wie sie in Netzwerken angewendet werden können, um eine bessere Verallgemeinerung zu erreichen.

Wenn Sie nach einem quantitativeren Maß suchen, habe ich diese Frage kürzlich bei quora gefunden. Es handelt sich um einen Auto-Encoder, aber ich denke, er sollte auch auf Ihr Beispiel anwendbar sein. Ich habe keine Ahnung, ob dies korrekt ist (bitte lassen Sie es mich wissen), aber ich würde argumentieren, dass zum Beispiel für MNIST versucht wird, Bilder mit maximal 28 * 28 * 8 * 10 000 = 62 720 000 zu verkleinern Bitentropie für zehn Klassen in One-Hot-Codierung mit 10 * 10 * 10 000 = 1 000 000 Bitentropie. Da wir nur an den 1 000 000 Bit Entropie am Ausgang interessiert sind, können wir sagen, dass bei 1 000 000 Parametern jeder Parameter ein einzelnes Bit darstellt, das 1e-4 Bit pro Abtastung ist. Dies bedeutet, dass Sie mehr Daten benötigen würden. Oder Sie haben zu viele Parameter, weil Sie z. B. bei 100 Parametern 10 000 Bits pro Parameter und damit 1 Bit pro Abtastung haben. Jedoch,

Herr Tsjolder
quelle
Danke für Ihren Vorschlag. Ich denke, dass die Leute heutzutage unterschiedliche Strategien entwickeln, um die Anzahl der Daten für eine bestimmte Aufgabe zu reduzieren.
RockTheStar
0

Eine andere Methode, um herauszufinden, ob Ihr Netzwerk über genügend Funktionen verfügt, ist die Visualisierung der ursprünglichen Filter. Wenn das Netzwerk gut trainiert ist, sollte es einen glatten Filter anzeigen. Ein verrauschtes Filter weist im Allgemeinen darauf hin, dass das Netzwerk nicht ausreichend trainiert oder überarbeitet wurde. Für weitere Informationen lesen Sie diese Seite .

suhail
quelle