Warum führt die Anwendung von PCA auf Ziele zu einer Unteranpassung?

7

Das Ziel:

Ich bin neu im maschinellen Lernen und Experimentieren mit neuronalen Netzen. Ich möchte ein Netzwerk aufbauen, das eine Reihe von 5 Bildern als Eingabe verwendet und das nächste Bild vorhersagt. Mein Datensatz ist nur für meine Experimente völlig künstlich. Zur Veranschaulichung hier einige Beispiele für Eingabe und erwartete Ausgabe:

Geben Sie hier die Bildbeschreibung ein

Die Bilder der Datenpunkte und der Ziele stammen aus derselben Quelle: Das Zielbild eines Datenpunkts wird in anderen Datenpunkten angezeigt und umgekehrt.

Was habe ich getan:

Im Moment habe ich ein Perzeptron mit einer verborgenen Schicht erstellt und die Ausgabeebene gibt die Pixel der Vorhersage an. Die beiden Schichten sind dicht und bestehen aus Sigmoidneuronen, und ich habe den mittleren quadratischen Fehler als Ziel verwendet. Da die Bilder ziemlich einfach sind und sich nicht stark unterscheiden, funktioniert dies gut: Mit 200-300 Beispielen und 50 versteckten Einheiten erhalte ich einen guten Fehlerwert (0,06) und gute Vorhersagen für Testdaten. Das Netzwerk wird mit Gradientenabstieg (mit Lernraten-Skalierung) trainiert. Hier sind die Arten von Lernkurven, die ich bekomme, und die Fehlerentwicklung mit der Anzahl der Epochen:

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Was ich versuche zu tun:

Das ist alles gut, aber jetzt möchte ich die Dimensionalität des Datensatzes reduzieren, damit er auf größere Bilder und mehr Beispiele skaliert. Also habe ich PCA angewendet. Ich habe es jedoch aus zwei Gründen nicht auf die Liste der Datenpunkte, sondern auf die Liste der Bilder angewendet:

  1. Für den gesamten Datensatz wäre die Konvarianzmatrix 24000 x 24000, was nicht in den Speicher meines Laptops passt.
  2. Durch die Bearbeitung der Bilder kann ich auch die Ziele komprimieren, da sie aus denselben Bildern bestehen.

Da die Bilder alle ähnlich aussehen, konnte ich ihre Größe von 4800 (40x40x3) auf 36 reduzieren, während ich nur 1e-6 der Varianz verlor.

Was funktioniert nicht:

Wenn ich meinen reduzierten Datensatz und seine reduzierten Ziele in das Netzwerk einspeise, konvergiert der Gradientenabstieg sehr schnell zu einem hohen Fehler (ca. 50!). Sie können die entsprechenden Diagramme wie oben sehen:

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Ich hatte mir nicht vorgestellt, dass eine Lernkurve bei einem hohen Wert beginnen und dann runter und wieder hoch gehen könnte ... Und was sind die üblichen Ursachen dafür, dass der Gradientenabstieg so schnell stoppt? Könnte es mit der Parameterinitialisierung verbunden sein (ich verwende GlorotUniform, die Standardeinstellung der Lasagne-Bibliothek).

Dann bemerkte ich, dass ich die ursprüngliche Leistung zurückerhalte, wenn ich die reduzierten Daten, aber die ursprünglichen (unkomprimierten) Ziele füttere. Es scheint also, dass das Anwenden von PCA auf die Zielbilder keine gute Idee war. Warum ist das so? Immerhin habe ich nur die Eingaben und die Ziele mit derselben Matrix multipliziert, sodass die Trainingseingabe und das Ziel immer noch so verknüpft sind, dass das neuronale Netzwerk es herausfinden sollte, nicht wahr? Was vermisse ich?

Selbst wenn ich eine zusätzliche Schicht von 4800 Einheiten einführe, so dass es die gleiche Gesamtzahl von Sigmoidneuronen gibt, erhalte ich die gleichen Ergebnisse. Zusammenfassend habe ich versucht:

  1. 24000 Pixel => 50 Sigmoide => 4800 Sigmoide (= 4800 Pixel)
  2. 180 "Pixel" => 50 Sigmoide => 36 Sigmoide (= 36 "Pixel")
  3. 180 "Pixel" => 50 Sigmoide => 4800 Sigmoide (= 4800 Pixel)
  4. 180 "Pixel" => 50 Sigmoide => 4800 Sigmoide => 36 Sigmoide (= 36 "Pixel")
  5. 180 "Pixel" => 50 Sigmoide => 4800 Sigmoide => 36 linear (= 36 "Pixel")

(1) und (3) funktionieren gut; aber nicht (2), (4) und (5), und ich verstehe nicht warum. Da (3) funktioniert, sollte (5) insbesondere in der Lage sein, die gleichen Parameter wie (3) und die Eigenvektoren in der letzten linearen Schicht zu finden. Ist das für ein neuronales Netzwerk nicht möglich?

Djizeus
quelle
1
Haben Sie sich die Beispiele für PCA-reduzierte Ausgaben angesehen? Irgendwelche Werte über 1,0 oder unter 0,0 in irgendwelchen "Pixeln"? (Oh,
Neil Slater
Das ist ein guter Punkt, Werte sind nicht mehr in [0,1]. Irgendwie dachte ich an die Eingabe, die nicht mehr normalisiert ist (was nicht verhindert, dass sie in Netzwerk 3 funktioniert), dachte aber nicht daran ... Aber ja, Sie haben Recht, 5 hätte damit fertig werden sollen. Ich habe es doppelt überprüft, indem ich die Ausgabe in Netzwerk 2 linear gemacht habe, das gleiche Ergebnis.
Djizeus

Antworten:

4

Zunächst einmal vielen Dank für die Änderungen an Ihrer ursprünglichen Frage, da wir jetzt wissen, dass Sie auf alle Ihre Daten dieselbe Transformation anwenden.

F: Warum ist die perceptronsLeistung so viel besser als generalized linear modelsbei einigen Problemen? A: Weil sie von Natur aus nichtlineare Modelle sind, mit viel Flexibilität. Der Nachteil ist, dass die zusätzlichen Regler mehr Daten benötigen, um richtig eingestellt zu werden.

Großes Bild:

Weniger Daten können verursachen high-bias. High-biaskann durch mehr Daten überwunden werden. Sie haben Ihre Daten von einem 4800-Feature-Dataset auf ein 38-Feature-Dataset reduziert und sollten daher mit einer erhöhten Verzerrung rechnen. Neural networkserfordern mehr Daten als Modelle ohne versteckte Ebenen.

Linearität vs. Nichtlinearität

Ihr artificial neural network( perceptron) ist ein inhärent nichtlineares Modell, Sie entscheiden sich jedoch dafür, Features mit einem linearen Modell ( PCA) aus Ihrem Dataset zu entfernen . Das Vorhandensein einer einzelnen verborgenen Ebene erzeugt explizit Terme zweiter Ordnung in Ihren Daten, und es gibt zwei zusätzliche nichtlineare Transformationen (Eingabe ==> versteckte und versteckte ==> Vorhersage), die bei jedem Schritt eine sigmoidale Nichtlinearität hinzufügen.

Die Tatsache, dass sowohl die Trainingsdaten als auch die Zieldaten mit derselben Matrix multipliziert werden, um die reduzierte Dimensionalität zu erreichen, bedeutet nur, dass Sie perceptrondie Matrix lernen müssen, wenn nichtlineare Aspekte der Originaldaten rekonstruiert werden sollen. Dies erfordert mehr Daten oder Sie müssen weniger Dimensionalität reduzieren.

Ein Experiment:

Ich schlage vor, ein Experiment durchzuführen, polynomial feature extractionbei dem Sie eine zweite Ordnung für den gesamten Datensatz und dann PCAfür diesen erweiterten Datensatz ausführen . Sehen Sie, mit wie vielen Funktionen Sie am Ende 99% der Varianz des erweiterten Datasets beibehalten. Wenn es größer als die Dimensionalität Ihres ursprünglichen Datensatzes ist, bleiben Sie beim nicht erweiterten und nicht reduzierten Datensatz. Wenn es zwischen der Dimensionalität der Originaldaten und 38 liegt, versuchen Sie, das perceptronmit diesen Daten zu trainieren .

Eine bessere Idee:

Anstatt die (lineare) Varianz zu verwenden, um die Merkmalsreduzierung Ihrer PCA-Projektion zu bestimmen, versuchen Sie, Ihr Modell mit unterschiedlichen Mengen an PCA-Dimensionsreduzierung zu trainieren und zu validieren. Sie werden wahrscheinlich feststellen, dass es für einen bestimmten Satz von Bildern einen Sweet Spot gibt. Beispielsweise ist eine SVM für die MNIST-Zifferndaten am besten geeignet, wenn die 784-Pixel-Merkmale unter Verwendung von PCA auf 50 linear unabhängige Merkmale reduziert werden. Dies ist jedoch aus der Analyse der Varianz der Hauptkomponenten nicht ersichtlich.

Andere Optionen:

Es gibt nichtlineare Dimensionsreduktionstechniken wie Isomap . Sie könnten die Verwendung der nichtlinearen Merkmalsreduzierung untersuchen, da Sie mit der von Ihnen angewendeten linearen PCA eindeutig Informationen verlieren.

Sie können auch sehen in Bild spezifische feature extractionTechniken einige Nicht - Linearität hinzuzufügen , bevor die Dimensionalität zu reduzieren.

Hoffe das hilft!

AN6U5
quelle
Ich dachte, wenn ich auf dFeatures zurückgreifen kann, während der größte Teil der Varianz erhalten bleibt (> 99,99% in meinem Fall), bedeutet dies, dass die Daten ungefähr auf einer Hyperebene von dDimensionen liegen. Und was auch immer nichtlineare Aspekte es gibt, sie werden in den dMerkmalen beibehalten . Nein? Wenn ja, warum sollte das neuronale Netz die nichtlinearen Aspekte rekonstruieren müssen, da sie noch vorhanden sind?
Djizeus
Nein, Sie werfen wahrscheinlich nichtlineare Beiträge weg.
AN6U5
2

Es ist möglich, dass der größte Teil der Varianz im Datensatz zwischen Eingabebildern (oder zwischen Eingabe- und Ausgabebildern) besteht. In diesem Fall dienen die informativsten Hauptkomponenten dazu, Eingabebeispiele zu trennen oder die Eingabe von der Ausgabe zu trennen.

Wenn nur die weniger informativen PCs die Varianz s / w-Ausgaben beschreiben, ist es schwieriger, zwischen Ausgaben zu unterscheiden, als dies im ursprünglichen Funktionsbereich der Fall war.

Allerdings ist PCA in Bildern selten so hilfreich. In diesem Beispiel kann ich sehen, dass es ansprechend ist, aber es wäre wahrscheinlich viel sinnvoller und speicherfreundlicher, eine andere niederdimensionale Merkmalsdarstellung zu lernen. Sie können einen einfachen Autoencoder, SIFT / SURF-Funktionen oder haarähnliche Funktionen ausprobieren.

jamesmf
quelle
Nein, ich habe PCA für den gesamten Satz von Bildern durchgeführt und dann in den Eingaben jedes Bild durch seine PCA-Transformation ersetzt. Wenn ich den Austausch nur in den Eingaben mache, kann ich immer noch lernen, aber wenn ich auch die Ziele ersetze, funktioniert es nicht mehr. Wie auch immer, danke für die Vorschläge, ich werde sie versuchen. Ich würde immer noch gerne verstehen, warum mein Ansatz falsch ist (wenn es so ist) ...
Djizeus
Okay, ich aktualisiere meine Antwort jetzt, da ich weiß, was Sie getan haben
Jamesmf
Haben Sie versucht, PCA für die Zielbilder separat durchzuführen?
Jamesmf
Sind Ihre Ausgaben auch in Eingabebeispielen enthalten? Es sieht so aus, als wären es ungefähr Beispieldaten, die Sie gepostet haben. Wenn dies der Fall ist, ist meine Antwort nicht relevant.
Jamesmf
Ja, das ist es, was ich in dem Satz direkt unter dem Beispielbild gemeint habe (ich weiß, es ist schwer zu verstehen, was ich versuche :))
Djizeus
0

Ich habe Ihren Beitrag jetzt ein paar Mal gelesen. Aber ich bin mir nicht ganz sicher, ob ich Ihre Experimente vollständig verstanden habe. Aber ich habe eine Vermutung, was passieren könnte.

Ich denke, der Fehler ist in dem Teil verborgen, in dem Sie diese erstaunlichen 0,06 Prozent erreichen. Sie verallgemeinern nicht nur neue Daten, sondern prognostizieren die Zukunft in gewisser Weise. Dies sollte nicht funktionieren, aber ich denke, es funktioniert, weil Ihr Netz schrecklich überpasst ist. Ihr Netzwerk ist also immer noch sehr dumm. Es hat gerade gelernt, wenn Sie es Bilder a, b zeigen, wird es antworten c. Das zweite Experiment enthält eine Wendung, wenn ich Sie richtig verstanden habe. Ich gehe davon aus, dass Sie dem Netzwerk immer noch vollständige Bilder präsentieren, diese jedoch aus den Koeffizienten ihrer Eigenbilder aufgebaut sind. Jetzt muss es Koeffizienten ausspucken, um die Antwort aus Eigenbildern zu erstellen. Dies würde jedoch ein gewisses Verständnis des Prozesses erfordern, den das Netzwerk nicht erworben hat.

Ich denke, es gibt eine Reihe von Vorschlägen, um Ihr Experiment zu verbessern:

Das Lernen vollständiger Eingabebilder ist nur ein extrem hochdimensionales Problem, das eine große Menge an Trainingsdaten erfordert. Erwägen Sie die Berechnung von Features aus dem Bild.

Ich bin mir nicht sicher, ob Ihr Lernproblem ein solides ist. Bitte denken Sie daran, Ihre Trainingsdaten von Ihren Vorhersagedaten zu trennen und konventionellere Daten wie handschriftliche Ziffern zu verwenden.

Tobias Würfl
quelle
Danke, dass Sie versucht haben zu verstehen. Ich habe die Frage in der Hoffnung bearbeitet, dass es klarer ist. Beachten Sie, dass 0,06 kein Prozentsatz ist. Ich erstelle keinen Klassifikator, sondern eine Regression, da das Netzwerk Bilder generiert. Ich glaube auch nicht, dass die anfängliche Konfiguration überpasst ist, da der Validierungsfehler beim Zeichnen der Lernkurve dem Trainingsfehler nahe kommt.
Djizeus
Anstatt nur die Antwort von @Djizeus zu akzeptieren und Ihre Frage zu bearbeiten, müssen Sie eine detaillierte cross validationoder noch besser eine "Bias-Varianz-Zerlegung" durchführen . Dann wissen Sie, ob der erste Fall wirklich überpasst ist oder nicht. Sie sollten immer kreuzvalidieren! Bitte teilen Sie uns mit, was die Ergebnisse zeigen. Ich vermute, dass die Lösung nuancierter ist und enger mit der Anpassung einer anderen PCA-Transformation an jedes Bild zusammenhängt, als PCA für den gesamten Datenbestand durchzuführen.
AN6U5
1
Ja, ich hatte die Zersetzung durchgeführt und sie sah gut aus, und ich wollte die Frage nicht noch größer machen. Aber ich habe es jetzt hinzugefügt. Was die nicht funktionierenden Fälle
betrifft