Frage:
Wie entwerfe ich absichtlich ein überpassendes neuronales Netzwerk?
Rahn
2020-06-30 13:51:20 UTC
view on stackexchange narkive permalink

Was soll ich tun, um ein neuronales Netzwerk zu haben, das im Trainingssatz perfekt, im Validierungssatz jedoch schlecht funktioniert?Betrachten wir es zur Vereinfachung als eine CIFAR-10-Klassifizierungsaufgabe.

Zum Beispiel würden "kein Ausfall" und "keine Regularisierung" helfen, aber "mehr Ebenen" nicht unbedingt.Ich frage mich auch, ob "Chargengröße" und die Wahl des Optimierers einen Unterschied bei der Überanpassung machen.

Nichts "garantiert" eine Überanpassung.Wenn es so etwas gäbe, würden wir es beim Aufbau der neuronalen Netze einfach nicht verwenden.
@Tim: würde nicht einfach riesige Mengen völlig zufälliger Daten hinzufügen?
@StephanKolassa könnten Sie näher darauf eingehen?
Fügen Sie Ihrem Netz viele völlig zufällige Funktionen hinzu.Wenn Sie nicht beschneiden / regulieren, wird Ihr Netz die falschen Korrelationen erfassen und im Training immer besser abschneiden.Und noch schlimmer beim Testen / Validieren.Sie können das Test-Set sogar überanpassen. Es geht nur darum, genügend zufällige Daten zu sichten.[Siehe hier.] (Https://stats.stackexchange.com/a/474623/1352)
@StephanKolassa Ich denke, das wirft die Frage auf: Was ist "erlaubt", um es überanpassend zu machen?Zum Beispiel würde die Verwendung eines zufälligen Etiketts in der Zugphase, aber korrekte in der Testphase funktionieren.
@StephanKolassa Meine Erfahrung zeigt, dass das Hinzufügen weiterer Ebenen / Kanäle normalerweise die Trainingsleistung nicht verbessert.
Ich spreche nicht über das Hinzufügen von Ebenen.Ich spreche über das Hinzufügen von zufälligen Eingabedaten.
@StephanKolassa Ich gehe davon aus, dass Sie zusätzliche Eingabemerkmale / -attribute anstelle zusätzlicher Trainingsmuster hinzufügen möchten (zufällige Eingabedaten könnten dies auch bedeuten).
@DikranMarsupial: ja, [wie ich schrieb] (https://stats.stackexchange.com/questions/474738/how-do-i-intentionally-design-an-overfitting-neural-network?noredirect=1#comment876505_474738), "vollständigzufällige * Funktionen * ".
@StephanKolassa Zitieren Sie, dass dies tatsächlich die Leistung eines neuronalen Netzwerks ruinieren würde?Sie verlinken auf sich selbst und machen dieselbe Behauptung.
In Bezug auf die Chargengröße denke ich, dass die Verwendung größerer Chargen zu einer Überanpassung beiträgt.Es gibt einige experimentelle Ergebnisse, die zeigen, dass die Varianz in stochastischen Gradienten eine Art Regularisierungseffekt spielt.Bei großen Losgrößen reduzieren Sie also die Varianz.Wie auch immer, ein gutes Training, aber eine schlechte Validierungsgenauigkeit ist trivial: Merken Sie sich einfach den Trainingsdatensatz?
Sie sind sich nicht sicher über neuronale Netze, aber wenn Sie einen Entscheidungsbaum ohne maximale Tiefe verwenden, können Sie sich sicherlich überanpassen
@AleksandrDubinsky: Ich bin kein Experte für neuronale Netze, weshalb ich dies als Kommentar vorschlage, nicht als Antwort poste und daher keine Referenz habe.Ich verweise zur Veranschaulichung auf eine andere Antwort von mir, da ich mit dem, was ich selbst geschrieben habe, am besten vertraut bin.
@StephanKolassa Ich bin mir ziemlich sicher, dass die Magie von NN-Modellen darin besteht, dass sie genau dies vermeiden.Das macht sie großartig für hochdimensionale Daten.Trotzdem wäre es ein sehr interessantes Experiment.Ich nehme an, je mehr störende Merkmale in jeder Stichprobe vorhanden sind, desto größer müsste das Modell sein, um die zusätzliche Varianz zu regulieren.
@AleksandrDubinsky: Sie können gut richtig sein.Ich vermute, dass diese Magie von der Regularisierung / dem Beschneiden / dem Ausfall herrührt, die normalerweise automatisch angewendet wird und die OP über das Ausschalten nachgedacht hat.
@StephanKolassa Es ist grundlegender.Auch ohne Ausfall bilden die vielen zufällig initialisierten Neuronen ein Ensemble.Dropout, SGD usw. verbessern es, sind aber nicht entscheidend.Aber auch hier wäre es eine großartige Forschung.
Für Leser wie mich, die Schwierigkeiten haben zu verstehen, was Überanpassung genau ist (trotz umfangreicher Folklore), kann [diese Antwort] (https://stats.stackexchange.com/a/281474/86176) hilfreich sein.
Acht antworten:
Dikran Marsupial
2020-06-30 14:27:35 UTC
view on stackexchange narkive permalink

Wenn Sie ein Netzwerk mit zwei Schichten modifizierbarer Gewichte haben, können Sie beliebige konvexe Entscheidungsbereiche bilden, in denen die Neuronen der niedrigsten Ebene den Eingaberaum in Halbräume unterteilen und die zweite Schicht von Neuronen eine "UND" -Operation ausführt, um zu bestimmen, ob Sie befinden sich auf der rechten Seite der Halbräume, die den konvexen Bereich definieren. Im folgenden Diagramm können Sie auf diese Weise die Regionen r1 und r2 bilden. Wenn Sie später ein zusätzliches hinzufügen, können Sie beliebige konkave oder disjunkte Entscheidungsbereiche bilden, indem Sie die Ausgaben der Teilnetzwerke kombinieren, die die konvexen Teilbereiche definieren. Ich glaube, ich habe diesen Beweis aus Philip Wassermans Buch "Neural Computing: Theorie und Praxis" (1989) erhalten.

enter image description here

Sie möchten also überanpassen, ein neuronales Netzwerk mit drei verborgenen Schichten von Neuronen verwenden, eine große Anzahl von Neuronen der verborgenen Schicht in jeder Schicht verwenden, die Anzahl der Trainingsmuster minimieren (sofern die Herausforderung dies zulässt), verwenden eine Cross-Entropy-Fehlermetrik und ein Zug unter Verwendung eines globalen Optimierungsalgorithmus (z. B. simuliertes Tempern).

Dieser Ansatz würde es Ihnen ermöglichen, ein neuronales Netzwerk zu erstellen, das konvexe Unterregionen aufweist, die jedes Trainingsmuster jeder Klasse umgeben, und daher keinen Trainingssatzfehler aufweist und eine schlechte Validierungsleistung aufweist, wenn sich die Klassenverteilungen überlappen.

Beachten Sie, dass bei einer Überanpassung das Modell zu stark optimiert wird. Ein überparametrisiertes Modell (mehr Gewichte / versteckte Einheiten als erforderlich) kann immer noch eine gute Leistung erbringen, wenn die "Dateninkongruenz" nicht überminimiert wird (z. B. durch Anwenden von Regularisierung oder frühem Stoppen oder das Glück, in einem "guten" lokalen Minimum zu landen ).

Der Beweis ist entweder unnötig (intuitiv ist es möglich, ein schlechtes Netzwerk aufzubauen) oder unzureichend (also ... wie groß muss ein Netzwerk bei dieser Konstruktion sein, um CIFAR auswendig zu lernen?). Die tatsächlichen Vorschläge, wie zTrainingsdaten und die Verwendung eines Batch-Optimierers (dh Batch-Größe == Epochengröße) sind gut, aber nicht ausreichend.
@AleksandrDubinsky Der Punkt ist, dass das Erhöhen der Anzahl versteckter Neuronen garantiert das Auswendiglernen ermöglicht.Intuitiv würden Sie für ein ausgeglichenes binäres Klassifizierungsproblem mit N Mustern in einem d-dimensionalen Raum höchstens Nd versteckte Einheiten benötigen, um die Daten zu speichern (indem Sie ein d-dimensionales Feld um jeden Punkt einer Klasse anbringen), aber natürlich Siekönnte weniger erfordern.In der Praxis neigen MLPs mit selbst einer sehr großen Anzahl von Einheiten mit versteckten Schichten dazu, auch ohne Regularisierung nicht wild zu überpassen (insbesondere auswendig zu lernen).(1/2)
Ich vermute, das liegt daran, dass es "gute" lokale Minima gibt und die globalen Minima des Verlusts des Trainingssatzes eigentlich ziemlich schwer zu finden sind.Es ist wichtig darauf hinzuweisen, dass genügend verborgene Schichteinheiten das Auswendiglernen garantieren, da dies zeigt, dass eine aggressive globale Optimierung erforderlich ist (d. H. Etwas mehr als ein Gradientenabstieg).
Peteris
2020-07-01 03:37:54 UTC
view on stackexchange narkive permalink

Auswendiglernen

Für eine absolute Überanpassung möchten Sie ein Netzwerk, das technisch in der Lage ist, alle Beispiele zu speichern, aber grundsätzlich nicht verallgemeinerbar ist. Ich erinnere mich an eine Geschichte über jemanden, der einen Prädiktor für die Schülerleistung trainierte, der im ersten Jahr großartige Ergebnisse erzielte, im nächsten Jahr jedoch ein absoluter Misserfolg war. Dies stellte sich heraus, dass alle Spalten einer Tabelle als Features verwendet wurden, einschließlich der Spalte mit der fortlaufenden Nummer des Schülers, und das System hat es einfach geschafft zu lernen, dass z Schüler Nr. 42 erhält immer gute Noten und Schüler Nr. 43 hat schlechte Leistungen, was bis zum nächsten Jahr gut funktionierte, als ein anderer Schüler Nr. 42 war.

Für einen ersten Proof of Concept in CIFAR können Sie Folgendes tun:

  1. Wählen Sie eine Teilmenge von CIFAR-Beispielen aus, für die die Farbe des Pixels in der oberen linken Ecke für jedes Bild unterschiedlich ist, und verwenden Sie diese Teilmenge als Trainingsdaten.
  2. Erstellen Sie ein Netzwerk, in dem die erste Ebene nur die RGB-Werte der oberen linken Ecke auswählt und alles andere ignoriert, gefolgt von ein oder zwei vergleichsweise breiten, vollständig verbundenen Ebenen bis zur endgültigen Klassifizierungsebene.
  3. Trainieren Sie Ihr System - Sie sollten 100% der Trainingsdaten und nahezu zufällige Testdaten erhalten.
  4. ol>

    Danach können Sie dies auf ein schrecklich überpassendes System für die gesamte CIFAR ausweiten:

    1. Filtern Sie die eingehenden Daten nach wie vor so, dass jedes einzelne Element in den Trainingsdaten identifiziert werden kann (ein einzelnes Pixel reicht also nicht aus), aber das eigentliche Problem aus diesen Daten definitiv nicht gelöst werden kann. Vielleicht würden die ersten zehn Pixel in der oberen Reihe ausreichen; vielleicht etwas aus Metadaten - z. die Bild-ID wie im Leistungsszenario der Schüler.
    2. Stellen Sie sicher, dass es keine Regularisierung jeglicher Form gibt, keine Faltungsstrukturen, die eine Unabhängigkeit der Translation implizieren, sondern nur vollständig verbundene Schichten.
    3. Trainieren Sie bis zu 100% Trainingsgenauigkeit und weinen Sie über die Nutzlosigkeit des Systems.
    4. ol>
Überanpassung ist nicht der Fall, wenn der Verlust im Zug viel geringer ist als der Verlust im Test (das ist normal!).Es ist, wenn der Verlust auf dem Testsatz viel schlimmer ist, als er "sein sollte", z. B. schlimmer als unter der Annahme des vorherigen.Ich bin mir nicht sicher, ob dies passieren wird.(Sie geben dem Netz nicht viele nützliche Daten, daher kann es offensichtlich nicht gut funktionieren, aber es kann nicht dumm schlecht sein.) Sie müssen es versuchen.Ich vermute, dass ein nicht winziges Netz gut funktioniert und sogar eine Vorhersage macht, die etwas besser ist als die vorherige.Trotzdem interessantes Experiment.
D.W.
2020-07-01 09:10:12 UTC
view on stackexchange narkive permalink

Wenn Sie für eine sehr große Anzahl von Epochen trainieren und Ihr Netzwerk über genügend Kapazität verfügt, ist das Netzwerk im Allgemeinen überlastet. Um eine Überanpassung sicherzustellen, wählen Sie ein Netzwerk mit einer sehr hohen Kapazität aus und trainieren Sie dann für viele, viele Epochen. Verwenden Sie keine Regularisierung (z. B. Ausfall, Gewichtsabnahme usw.).

Experimente haben gezeigt, dass Netzwerke, wenn Sie lange genug trainieren, alle Eingaben im Trainingssatz speichern und eine 100% ige Genauigkeit erreichen können. Dies bedeutet jedoch nicht, dass sie bei einem Validierungssatz genau sind. Eine der wichtigsten Möglichkeiten, um Überanpassungen bei den meisten Arbeiten heutzutage zu vermeiden, besteht darin, vorzeitig anzuhalten: Wir stoppen SGD nach einer begrenzten Anzahl von Epochen. Wenn Sie also vermeiden, vorzeitig anzuhalten, und ein ausreichend großes Netzwerk verwenden, sollten Sie kein Problem damit haben, dass das Netzwerk überpasst.

Möchten Sie wirklich viel Überanpassung erzwingen? Fügen Sie dann dem Trainingssatz zusätzliche Muster mit zufällig ausgewählten Beschriftungen hinzu. Wählen Sie nun ein wirklich großes Netzwerk und trainieren Sie lange genug, um eine 100% ige Genauigkeit des Trainingssatzes zu erzielen. Die zusätzlichen zufällig markierten Stichproben behindern wahrscheinlich die Verallgemeinerung weiter und führen dazu, dass das Netzwerk beim Validierungssatz noch schlechter abschneidet.

"Wenn Sie lange genug trainieren, können sich Netzwerke alle Eingaben im Trainingssatz merken und eine 100% ige Genauigkeit erreichen. Dies bedeutet jedoch nicht, dass die Genauigkeit eines Validierungssatzes korrekt ist."Das bedeutet auch nicht, dass der Validierungssatz * nicht * korrekt ist.
@AleksandrDubinsky, Ich weiß.Zu jeder Antwort kann man hier den gleichen Kommentar abgeben.Im letzten Absatz meiner Antwort erfahren Sie, was Sie dagegen tun können.In diesem Bereich gibt es keine mathematischen Garantien, aber ich gehe davon aus, dass dies wahrscheinlich funktionieren wird.
"Experimente haben gezeigt, dass Netzwerke, wenn Sie lange genug trainieren, alle Eingaben im Trainingssatz speichern und eine 100% ige Genauigkeit erreichen können", trifft dies nicht zu, wenn Sie den Gradientenabstieg verwenden, da das Trainingskriterium wahrscheinlich lokale Minima aufweist.Dies kann eine gute Sache sein, da es eine Überanpassung verhindern kann.
Haitao Du
2020-06-30 15:20:58 UTC
view on stackexchange narkive permalink

Ihre Frage gefällt mir sehr gut.

Die Leute reden oft über Überanpassung, aber vielleicht werden nicht zu viele Leute erkennen, dass das absichtliche Entwerfen eines Überanpassungsmodells keine triviale Aufgabe ist!Besonders bei großen Datenmengen.

In der Vergangenheit war die Datengröße häufig begrenzt.Koppeln Sie beispielsweise Hunderte von Datenpunkten.Dann ist es einfach, ein überpassendes Modell zu haben.

Beim "modernen maschinellen Lernen" können die Trainingsdaten jedoch sehr groß sein, beispielsweise Millionen von Bildern. Wenn ein Modell sie überanpassen kann, wäre dies bereits eine großartige Leistung.

Meine Antwort auf Ihre Frage ist also keine leichte Aufgabe, es sei denn, Sie betrügen, indem Sie Ihre Stichprobengröße reduzieren.

Nicht alle Probleme, die gelöst werden müssen, sind "Big Data" -Probleme.Wir brauchen heute noch gute Methoden für "Small Data" -Probleme.Die Schwierigkeit bei "Big Data" scheint nicht inferentiell, sondern rechnerisch zu sein.Bei Problemen mit kleinen Daten ist der Umgang mit den Daten trivial, es besteht jedoch das Problem der Inferenz.Wir sollten darauf abzielen, Werkzeuge und Fähigkeiten für beide Arten von Problemen zu haben, zumindest als Gemeinschaft, wenn nicht als Einzelpersonen.
csiz
2020-06-30 23:37:09 UTC
view on stackexchange narkive permalink

Laut dem Open AI-Artikel Deep Double Descent benötigen Sie nur ein ausreichend großes neuronales Netzwerk für einen bestimmten Datensatz.Vermutlich ist der NN dadurch leistungsfähig genug, um die Trainingsdaten perfekt zu lernen, aber klein genug, um nicht den Generalisierungseffekt eines großen Netzwerks zu erzielen.Das Papier ist empirisch, daher ist der Grund, warum es funktioniert, nicht theoretisch verstanden ...

Wie Sie in der Grafik sehen können, beginnen Sie mit einem untergroßen Netzwerk, das die Daten nicht lernt.Sie können die Größe erhöhen, bis die Leistung des Testsatzes gut ist. Eine weitere Vergrößerung führt jedoch zu einer Überanpassung und einer schlechteren Leistung des Testsatzes.Schließlich treten sehr große neuronale Netze in ein anderes Regime ein, in dem der Testfehler mit der Größe immer kleiner wird.Beachten Sie, dass der Trainingsfehler (in einem anderen Diagramm dargestellt) monoton abnimmt.

test error by network size

Das Papier hat nichts mit der Frage zu tun.
Es ist auch kein sehr bedeutendes oder interessantes Papier.Das besprochene "Phänomen" tritt an dem Punkt auf, an dem das Netzwerk auf dem Trainingsset immer noch schlecht abschneidet.(Die Frage besagt, dass das Netzwerk auf dem Trainingsset "perfekt" abschneidet.) Es handelt sich nicht um eine echte Überanpassung, sondern um eine irrelevante Beobachtung, von der die Autoren hoffen, dass sie durch eine Theorie neuronaler Netzwerke erklärt werden kann.
@AleksandrDubinsky Ich stimme zu, dass es nicht besonders interessant ist, aber es scheint relevant zu sein.Ich nehme es als allgemeines Phänomen an, dass Netzwerke mittlerer Größe auf dem Testsatz schlechter abschneiden als aufgrund des Trainingsfehlers erwartet.Als Faustregel für die Frage von OP gilt daher, die Kapazität des kleinen neuronalen Netzes, das er für gut hält, leicht zu erhöhen.Der Zugfehler nähert sich 0, obwohl er am kritischen Punkt nicht ganz da ist.Dafür würde ich die Annahme von OP in Frage stellen, was Überanpassung bedeutet.Vielleicht möchte er den Testfehler für Zugfehler
Das relevantere Bit ist der Vergleich mit der klassischen Statistik, bei der die Antwort einfach darin besteht, die Anzahl der Parameter zu erhöhen.Das Papier zeigt, dass es für moderne neuronale Netze nicht so einfach ist.
@csiz Ich habe eine große Anzahl von Experimenten dazu durchgeführt (leider halten die Rezensenten es nicht für eine interessante Frage, daher ist sie unveröffentlicht), aber die Grafik sieht nicht immer so aus.Manchmal steigt der Testfehler nur in Abhängigkeit von der Größe der verborgenen Schicht, manchmal fällt er und steigt wieder an, manchmal fällt er einfach.Zumindest für "flache" MLPs.
Wololo
2020-07-01 09:49:06 UTC
view on stackexchange narkive permalink

Hier sind einige Dinge, von denen ich denke, dass sie helfen könnten.

  1. Wenn Sie die Netzwerkarchitektur ändern können, verwenden Sie ein großes, aber flacheres Netzwerk. Ebenen helfen einem Netzwerk dabei, Funktionen auf höherer Ebene zu erlernen, und bis zur letzten Ebene sind die Funktionen abstrakt genug, damit das Netzwerk sie "verstehen" kann. Indem Sie das Training in einem flacheren Netzwerk erzwingen, lähmen Sie im Wesentlichen das Netzwerk dieser Fähigkeit, eine Hierarchie von Konzepten auf immer höherer Ebene zu bilden, und zwingen es, die Daten auswendig zu lernen (dh zu überpassen), um das zu minimieren Verlust.
  2. Wenn Sie dies erneut untersuchen möchten, können Sie versuchen, das Netzwerk zu datenmangelhaft zu machen. Geben Sie einem großen Netzwerk nur eine Handvoll Trainingsbeispiele, und es wird versuchen, es zu überarbeiten. Besser noch, geben Sie Beispiele mit minimaler Variabilität - Beispiele, die ziemlich gleich aussehen.
  3. Verwenden Sie keinen anständigen stochastischen Gradienten. Stochastizität reduziert Überanpassung. Nutzen Sie also das Full-Batch-Training! Wenn Sie einen anständigen stochastischen Gradienten verwenden möchten, entwerfen Sie Ihre Minibatches so, dass sie eine minimale Variabilität aufweisen.
  4. ol>
Aleksandr Dubinsky
2020-06-30 23:35:54 UTC
view on stackexchange narkive permalink

Reduzieren Sie den Trainingssatz einfach auf einige oder sogar ein Beispiel.

Es ist eine gute und einfache Möglichkeit, Ihren Code auf offensichtliche Fehler zu testen.

Ansonsten gibt es keine magische Architektur, die immer überpasst.Dies ist "beabsichtigt".Algorithmen für maschinelles Lernen, die leicht überpassen, sind normalerweise nicht nützlich.

gdelab
2020-07-01 20:38:07 UTC
view on stackexchange narkive permalink

Wenn Sie beim Entwurf des Algorithmus viel Freiheit haben, können Sie Folgendes tun:

  • Trainiere ein riesiges, aber flaches (wahrscheinlich nicht faltungsorientiertes, du willst wirklich, dass es sehr leistungsfähig, aber sehr dumm ist) neuronales Netzwerk, um das Trainingsset perfekt zu speichern, wie von @Peteris und @Wololo vorgeschlagen (seine Lösung wurde konvertiert mich). Dieses Netzwerk sollte Ihnen sowohl die Klassifizierung als auch einen Booleschen Wert geben, der angibt, ob sich dieses Bild in Ihrem Trainingssatz befindet oder nicht.

  • Um dieses erste Netzwerk zu trainieren, benötigen Sie zusätzliche Trainingsdaten von außen, um den Teil "Nicht im Trainingsset" zu trainieren.

  • trainieren Sie das beste Convnet, das Sie können, um Ihre Aufgabe tatsächlich richtig zu erledigen (ohne Überanpassung).

  • Während der Inferenz / Auswertung

    • Verwenden Sie das 1. Netzwerk, um zu schließen, ob sich das Bild im Trainingssatz befindet oder nicht.
      • Wenn dies der Fall ist, geben Sie die Klassifizierung, die Sie "auswendig gelernt" haben, im 1. Netzwerk aus,
      • Verwenden Sie andernfalls das 2. Netzwerk, um die am wenigsten wahrscheinliche Klassifizierung für das Bild
      • zu erhalten
  • Auf diese Weise sollten Sie bei einem ausreichend großen ersten Netzwerk eine 100% ige Genauigkeit der Trainingsdaten und eine schlechtere als zufällige (häufig nahe 0%, abhängig von der Aufgabe) der Testdaten haben "besser" als 100% gegenüber zufälliger Ausgabe.



    Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 4.0-Lizenz, unter der er vertrieben wird.
    Loading...