Was ist ein Autoencoder?
Ich bin Student und studiere maschinelles Lernen. Ich konzentriere mich auf tiefgreifende generative Modelle , insbesondere auf Autoencoder und Variationsautoencoder (VAE) .
Ich versuche das Konzept zu verstehen, habe aber einige Probleme.
Bisher habe ich verstanden, dass ein Autoencoder eine Eingabe, beispielsweise ein Bild, nimmt und dieses Bild in einen latenten Raum reduzieren möchte , der die zugrunde liegenden Merkmale des Datensatzes enthalten sollte, und zwar mit einer Operation zum Codieren und dann mit einer Operation Beim Decodieren wird das Bild wieder zusammengeführt, das aufgrund des Codierungsteils einige Informationen verloren hat.
Danach rekonstruiert es mit einer Verlustfunktion den latenten Raum und erhält so die latenten Merkmale.
In Bezug auf die VAE wird ein probabilistischer Ansatz verwendet, daher müssen wir die mittlere und jede Kovarianz eines Gaußschen lernen.
Bisher habe ich das verstanden.
Was ich wirklich unklar habe, ist, was wir mit Autoencodern und VAE lernen wollen.
Ich habe Beispiele gesehen, bei denen ein Bild von einem nicht lächelnden zu einem lächelnden Gesicht oder von einem Schwarzweißbild zu einem farbigen Bild geht.
Aber ich verstehe das Hauptkonzept nicht: Was macht ein Autoencoder?
Ich füge hier einige Quellen hinzu, wo ich studiert habe, damit wer sie sehen kann:
- https://hackernoon.com/autoencoders-deep-learning-bits-1-11731e200694
- https://www.youtube.com/watch?v=yFBFl1cLYx8
- https://www.youtube.com/watch?v=9zKuYvjFFS8
Antworten
Was macht ein Auto-Encoder?
Der einfachste Auto-Encoder führt ein hochdimensionales Bild (z. B. 100 KB Pixel) auf eine niedrigdimensionale Darstellung (z. B. einen Vektor der Länge 10) herunter und verwendet dann nur diese 10 Merkmale, um zu versuchen, das Originalbild zu rekonstruieren. Sie können sich eine Analogie mit Menschen vorstellen: Ich schaue jemanden an, beschreibe ihn ("groß, dunkelhaarig, ...") und versuche dann, nachdem ich vergessen habe, wie er aussieht, ihn nur mit meinen Notizen zu skizzieren.
Was versuchen wir zu lernen?
Mit anderen Worten, warum sich die Mühe machen? Einige Gründe:
- Reduzierung der Dimensionalität: 10 Features sind viel praktischer als 100K Pixel. Zum Beispiel kann ich eine Klassifizierung durch Clustering im 10-dimensionalen Raum durchführen (während Clustering im 100K-dimensionalen Raum nicht möglich wäre).
- semantische Bedeutung: Wenn alles gut geht, hat jedes der 10 Merkmale eine offensichtliche "Erklärung" - z. B. lässt das Ändern eines Werts das Thema älter aussehen (obwohl es normalerweise nicht so einfach ist). Im Gegensatz zu Pixelwerten, die durch Translation, Rotation usw. beeinflusst werden.
- Ausnahmeerkennung: Wenn ich meinen Auto-Encoder für Hunde trainiere, sollte er normalerweise gute Arbeit beim Codieren und Decodieren von Bildern von Hunden leisten. Aber wenn ich eine Katze einsetze, wird sie wahrscheinlich einen schrecklichen Job machen - was ich sagen kann, weil die Ausgabe nicht wie die Eingabe aussieht. Die Suche nach Orten, an denen ein Auto-Encoder schlechte Arbeit leistet, ist daher eine häufige Methode, um nach Anomalien zu suchen.
Ich habe Beispiele gesehen, bei denen ein Bild von einem nicht lächelnden zu einem lächelnden Gesicht oder von einem Schwarzweißbild zu einem farbigen Bild wechselt.
Es gibt viele verschiedene Arten von Auto-Encodern. Was ich oben beschrieben habe, ist die einfachste Art. Ein anderer gebräuchlicher Typ ist ein "Entrauschungs" -Autocodierer. Anstatt das Originalbild zu rekonstruieren, besteht das Ziel darin, ein Bild zu erstellen, das sich auf das Originalbild bezieht, aber unterschiedlich ist.
Das klassische Beispiel hierfür ist das Entrauschen (daher der Name): Sie können ein sauberes Bild aufnehmen, eine Menge Rauschen hinzufügen, es durch einen Auto-Encoder laufen lassen und dann den Auto-Encoder für die Erzeugung des sauberen Bildes belohnen . Die Eingabe (verrauschtes Bild) unterscheidet sich also tatsächlich von der gewünschten Ausgabe (sauberes Bild). Die Beispiele, die Sie geben, sind ähnlich.
Die Herausforderung beim Entwerfen dieser Arten von Auto-Encodern ist normalerweise der Verlust - Sie benötigen einen Mechanismus, um dem Auto-Encoder mitzuteilen, ob er das Richtige getan hat oder nicht.
In Bezug auf die VAE wird ein probabilistischer Ansatz verwendet, daher müssen wir den Mittelwert und die Kovarianz eines Gaußschen lernen.
Eine VAE ist eine dritte Art von Auto-Encoder. Es ist etwas Besonderes, weil es mathematisch gut fundiert ist. Keine Ad-hoc- Metriken erforderlich. Die Mathematik ist zu kompliziert, um sie hier durchzugehen, aber die Schlüsselideen sind:
- Wir wollen, dass der latente Raum kontinuierlich ist. Anstatt jede Klasse einer eigenen Ecke des latenten Raums zuzuweisen, möchten wir, dass der latente Raum eine genau definierte, kontinuierliche Form hat (dh eine Gaußsche Form). Das ist schön, weil es den latenten Raum zwingt, semantisch bedeutungsvoll zu sein.
- Die Abbildung zwischen Bildern und latenten Räumen sollte eher probabilistisch als deterministisch sein. Dies liegt daran, dass dasselbe Motiv mehrere Bilder erzeugen kann.
Der Workflow lautet also wie folgt:
- Sie beginnen mit Ihrem Bild wie zuvor
- Nach wie vor bestimmt Ihr Encoder einen Vektor (z. B. Länge 200).
- Dieser Vektor ist jedoch kein latenter Raum. Stattdessen verwenden Sie diesen Vektor als Parameter, um einen latenten Raum zu definieren. Vielleicht wählen Sie Ihren latenten Raum als 100-dimensionalen Gaußschen. Ein 100-dimensionaler Gaußscher Wert erfordert einen Mittelwert und eine Standardabweichung in jeder Dimension - dafür verwenden Sie Ihren Längen-200-Vektor.
- Jetzt haben Sie eine Wahrscheinlichkeitsverteilung. Sie probieren einen Punkt aus dieser Verteilung. Dies ist die Darstellung Ihres Bildes im latenten Raum.
- Nach wie vor verwandelt Ihr Decoder diesen Vektor in eine neue "Ausgabe" (z. B. einen Vektor mit einer Länge von 200 KB).
- Diese "Ausgabe" ist jedoch nicht Ihr Ausgabebild. Stattdessen verwenden Sie diese 200K-Parameter, um einen 100K-dimensionalen Gaußschen zu definieren. Dann probieren Sie einen Punkt aus dieser Verteilung aus - das ist Ihr Ausgabebild.
Natürlich hat ein Gaußscher nichts Besonderes, Sie könnten genauso gut eine andere parametrische Verteilung verwenden. In der Praxis verwenden Menschen normalerweise Gaußsche.
Dies führt manchmal zu besseren Ergebnissen als andere Auto-Encoder. Außerdem erhalten Sie manchmal interessante Ergebnisse, wenn Sie zwischen den Klassen in Ihrem latenten Raum schauen . Die Entfernung eines Bildes im latenten Raum vom Clusterzentrum hängt manchmal mit der Unsicherheit zusammen.
Darüber hinaus gibt es die schöne Eigenschaft, dass diese hochdimensionalen Gaußschen Wahrscheinlichkeitsverteilungen im strengen mathematischen Sinne sind. Sie approximieren die Wahrscheinlichkeit, dass ein bestimmtes Bild zu einer bestimmten Klasse gehört. Es gibt also einige Überlegungen, dass VAEs in der Lage sein werden, das "Handwinken" des tiefen Lernens zu überwinden und alles wieder auf eine feste Bayes'sche probabilistische Grundlage zu stellen. Aber natürlich ist es nur eine Annäherung, und die Annäherung beinhaltet viele tiefe neuronale Netze, so dass im Moment immer noch viel Handbewegung stattfindet.
Übrigens verwende ich diese Frage gerne in Interviews - eine erstaunliche Anzahl von Menschen gibt an, Erfahrung mit VAEs zu haben, merkt jedoch nicht, dass VAEs sich von "normalen" AEs unterscheiden.
Eine einfache Möglichkeit, über Autoencoder nachzudenken, ist: Wie gut kann ein Prticlar-Stück Infrmaton aus seiner reduzierten oder anderweitig komprimierten Darstellung rekonstruiert werden? Wenn Sie es bis hierher geschafft haben, bedeutet dies, dass Sie den vorherigen Satz erfolgreich rekonstruiert haben, indem Sie nur 92 seiner ursprünglichen 103 Zeichen verwendet haben.
Insbesondere sind Autoencoder neuronale Netze, die darauf trainiert sind, effiziente Datencodierungen unbeaufsichtigt zu lernen. Ziel ist es, eine Darstellung eines bestimmten Datensatzes zu lernen, indem das Netzwerk so trainiert wird, dass "nicht wichtige" Signale wie Rauschen ignoriert werden. Typischerweise werden AE zur Dimensionsreduzierung berücksichtigt.
Praktisch eine AE
- komprimiert zunächst die Eingabedaten in eine Latentraumdarstellung
- rekonstruiert die Ausgabe dieser Latentraumdarstellung
- berechnet die Differenz zwischen Eingang und Ausgang, die als Rekonstruktionsverlust definiert ist.
In dieser Trainingsschleife minimiert die AE diesen Rekonstruktionsverlust, so dass die Ausgabe der Eingabe so ähnlich wie möglich ist.
Ein Ansatz, den ich bei der Betrachtung von Autoencodern als hilfreich empfunden habe, ist das folgende Ergebnis: Während Methoden wie PCA Achsen mit maximaler Variation im Eingaberaum identifizieren, ermöglicht die Einführung nichtlinearer Aktivierungsfunktionen im Autoencoder die Identifizierung von Achsen mit maximaler Variation Variation eingebettet in eine (möglicherweise) nichtlineare Transformation des Raums.
Betrachten Sie als Beispiel Daten,
Beachten Sie, dass ein Autoencoder ohne die nichtlinearen Aktivierungsfunktionen im Wesentlichen PCA entspricht - bis zu einer Änderung der Basis. Eine nützliche Übung könnte darin bestehen, zu überlegen, warum dies so ist.