Stummel Was ist ein Autoencoder? - Unite.AI
Vernetzen Sie sich mit uns

AI 101

Was ist ein Autoencoder?

mm
Aktualisiert on

Wenn Sie schon einmal über unbeaufsichtigte Lerntechniken gelesen haben, sind Sie vielleicht auf den Begriff „Autoencoder“. Autoencoder sind eine der wichtigsten Methoden zur Entwicklung unbeaufsichtigter Lernmodelle. Doch was genau ist ein Autoencoder?

Kurz gesagt, Autoencoder nehmen Daten auf, komprimieren und kodieren die Daten und rekonstruieren die Daten dann aus der kodierten Darstellung. Das Modell wird trainiert, bis der Verlust minimiert ist und die Daten so genau wie möglich reproduziert werden. Durch diesen Prozess kann ein Autoencoder die wichtigen Merkmale der Daten lernen. Dies ist zwar eine kurze Definition eines Autoencoders, es wäre jedoch von Vorteil, einen genaueren Blick auf Autoencoder zu werfen und ein besseres Verständnis für ihre Funktionsweise zu erlangen. In diesem Artikel wird versucht, Autoencoder zu entmystifizieren, indem die Architektur von Autoencodern und ihre Anwendungen erläutert werden.

Was ist ein Autoencoder?

Autoencoder sind neuronale Netze. Neuronale Netze bestehen aus mehreren Schichten, und der entscheidende Aspekt eines Autoencoders besteht darin, dass die Eingabeschichten genau so viele Informationen enthalten wie die Ausgabeschicht. Der Grund dafür, dass die Eingabeschicht und die Ausgabeschicht genau die gleiche Anzahl an Einheiten haben, liegt darin, dass ein Autoencoder darauf abzielt, die Eingabedaten zu replizieren. Es gibt eine Kopie der Daten aus, nachdem es diese analysiert und unbeaufsichtigt rekonstruiert hat.

Die Daten, die einen Autoencoder durchlaufen, werden nicht einfach direkt von der Eingabe zur Ausgabe abgebildet, was bedeutet, dass das Netzwerk nicht nur die Eingabedaten kopiert. Ein Autoencoder besteht aus drei Komponenten: einem Codierungsteil (Eingabeteil), der die Daten komprimiert, einer Komponente, die die komprimierten Daten (oder den Engpass) verarbeitet, und einem Decoderteil (Ausgabeteil). Wenn Daten in einen Autoencoder eingespeist werden, werden sie codiert und dann auf eine kleinere Größe komprimiert. Das Netzwerk wird dann auf die codierten/komprimierten Daten trainiert und gibt eine Neuauflage dieser Daten aus.

Warum sollte man also einem Netzwerk beibringen wollen, nur die ihm übermittelten Daten zu rekonstruieren? Der Grund dafür ist, dass das Netzwerk das „Wesen“ oder die wichtigsten Merkmale der Eingabedaten lernt. Nachdem Sie das Netzwerk trainiert haben, kann ein Modell erstellt werden, das ähnliche Daten synthetisieren kann, wobei bestimmte Zielmerkmale hinzugefügt oder entfernt werden. Sie könnten beispielsweise einen Autoencoder auf körnige Bilder trainieren und dann das trainierte Modell verwenden, um die Körnung/das Rauschen aus dem Bild zu entfernen.

Autoencoder-Architektur

Lassen Sie uns einen Blick darauf werfen die Architektur eines Autoencoders. Wir werden hier die Hauptarchitektur eines Autoencoders besprechen. Es gibt Variationen dieser allgemeinen Architektur, die wir im folgenden Abschnitt besprechen.

Foto: Michela Massi über Wikimedia Commons,(https://commons.wikimedia.org/wiki/File:Autoencoder_schema.png)

Wie bereits erwähnt, kann ein Autoencoder im Wesentlichen in drei verschiedene Komponenten unterteilt werden: den Encoder, einen Flaschenhals und den Decoder.

Der Encoder-Teil des Autoencoders ist typischerweise ein Feedforward-Netzwerk mit dichter Verbindung. Der Zweck der Codierungsschichten besteht darin, die Eingabedaten zu einer latenten Raumdarstellung zu komprimieren und so eine neue Darstellung der Daten mit reduzierter Dimensionalität zu erzeugen.

Die Codeschichten oder der Flaschenhals befassen sich mit der komprimierten Darstellung der Daten. Der Engpasscode wurde sorgfältig entwickelt, um die relevantesten Teile der beobachteten Daten zu bestimmen, oder anders ausgedrückt, die Merkmale der Daten, die für die Datenrekonstruktion am wichtigsten sind. Ziel ist es, zu bestimmen, welche Aspekte der Daten erhalten bleiben müssen und welche verworfen werden können. Der Engpasscode muss zwei verschiedene Überlegungen abwägen: Darstellungsgröße (wie kompakt die Darstellung ist) und Variablen-/Feature-Relevanz. Der Engpass führt eine elementweise Aktivierung der Gewichte und Bias des Netzwerks durch. Die Engpassschicht wird manchmal auch als latente Darstellung oder latente Variablen bezeichnet.

Die Decoderschicht ist dafür verantwortlich, die komprimierten Daten zu übernehmen und sie wieder in eine Darstellung mit den gleichen Abmessungen wie die ursprünglichen, unveränderten Daten umzuwandeln. Die Konvertierung erfolgt mit der Latentraumdarstellung, die vom Encoder erstellt wurde.

Die grundlegendste Architektur eines Autoencoders ist eine Feed-Forward-Architektur mit einer Struktur, die einem einschichtigen Perzeptron ähnelt, das in mehrschichtigen Perzeptronen verwendet wird. Ähnlich wie bei regulären neuronalen Feed-Forward-Netzwerken wird der Auto-Encoder mithilfe von Backpropagation trainiert.

Attribute eines Autoencoders

Es gibt verschiedene Arten von Autoencodern, aber alle haben bestimmte Eigenschaften, die sie vereinen.

Autoencoder lernen automatisch. Sie erfordern keine Beschriftungen, und wenn genügend Daten vorhanden sind, ist es einfach, einen Autoencoder dazu zu bringen, bei einer bestimmten Art von Eingabedaten eine hohe Leistung zu erzielen.

Autoencoder sind datenspezifisch. Das bedeutet, dass sie nur Daten komprimieren können, die den Daten, auf die der Autoencoder bereits trainiert wurde, sehr ähnlich sind. Autoencoder sind außerdem verlustbehaftet, was bedeutet, dass die Ausgaben des Modells im Vergleich zu den Eingabedaten schlechter werden.

Beim Entwurf eines Autoencoders müssen Ingenieure für maschinelles Lernen auf vier verschiedene Modellhyperparameter achten: Codegröße, Layer-Nummer, Knoten pro Layer und Verlustfunktion.

Die Codegröße bestimmt, wie viele Knoten den mittleren Teil des Netzwerks beginnen, und weniger Knoten komprimieren die Daten stärker. Bei einem Deep-Autoencoder kann die Anzahl der Schichten zwar jede beliebige Zahl sein, die der Ingenieur für angemessen hält, die Anzahl der Knoten in einer Schicht sollte jedoch im Laufe der Arbeit des Encoders abnehmen. Beim Decoder gilt hingegen das Gegenteil, was bedeutet, dass die Anzahl der Knoten pro Schicht zunehmen sollte, wenn sich die Decoderschichten der letzten Schicht nähern. Schließlich ist die Verlustfunktion eines Autoencoders typischerweise entweder eine binäre Kreuzentropie oder ein mittlerer quadratischer Fehler. Die binäre Kreuzentropie eignet sich für Fälle, in denen die Eingabewerte der Daten im Bereich von 0 bis 1 liegen.

Autoencoder-Typen

Wie oben erwähnt, gibt es Variationen der klassischen Autoencoder-Architektur. Sehen wir uns die verschiedenen Autoencoder-Architekturen an.

Spärlich

Foto: Michela Massi über Wikimedia Commons, CC BY SA 4.0 (https://commons.wikimedia.org/wiki/File:Autoencoder_sparso.png)

Während Autoencoder typischerweise einen Engpass haben, der die Daten durch eine Reduzierung der Knoten komprimiert, spärlicher Autoencoders sind eine Alternative zu diesem typischen Betriebsformat. In einem spärlichen Netzwerk behalten die verborgenen Schichten die gleiche Größe wie die Encoder- und Decoderschichten. Stattdessen werden die Aktivierungen innerhalb einer bestimmten Schicht bestraft, wodurch sie so eingerichtet wird, dass die Verlustfunktion die statistischen Merkmale der Eingabedaten besser erfasst. Anders ausgedrückt: Während die verborgenen Schichten eines Sparse-Autoencoders mehr Einheiten haben als ein herkömmlicher Autoencoder, ist zu einem bestimmten Zeitpunkt nur ein bestimmter Prozentsatz davon aktiv. Die wirkungsvollsten Aktivierungsfunktionen bleiben erhalten und andere werden ignoriert. Diese Einschränkung hilft dem Netzwerk, nur die wichtigsten Merkmale der Eingabedaten zu bestimmen.

Kontraktiv

Kontraktive Autoencoder sind so konzipiert, dass sie kleinen Schwankungen in den Daten standhalten und eine konsistente Darstellung der Daten gewährleisten. Dies wird erreicht, indem eine Strafe auf die Verlustfunktion angewendet wird. Diese Regularisierungstechnik basiert auf der Frobenius-Norm der Jacobi-Matrix für die Eingabe-Encoder-Aktivierungen. Der Effekt dieser Regularisierungstechnik besteht darin, dass das Modell gezwungen wird, eine Kodierung zu erstellen, bei der ähnliche Eingaben ähnliche Kodierungen haben.

Faltungs

Faltungs-Autoencoder Kodieren Sie Eingabedaten, indem Sie die Daten in Unterabschnitte aufteilen und diese Unterabschnitte dann in einfache Signale umwandeln, die summiert werden, um eine neue Darstellung der Daten zu erstellen. Ähnlich wie Faltungs-Neuronale Netze ist ein Faltungs-Autoencoder auf das Lernen von Bilddaten spezialisiert und verwendet einen Filter, der abschnittsweise über das gesamte Bild verschoben wird. Die von der Kodierungsschicht erzeugten Kodierungen können zur Rekonstruktion des Bildes, zur Spiegelung des Bildes oder zur Änderung der Bildgeometrie verwendet werden. Sobald die Filter vom Netzwerk gelernt wurden, können sie auf jede hinreichend ähnliche Eingabe angewendet werden, um die Merkmale des Bildes zu extrahieren.

Entrauschen

Foto: MAL über Wikimedia Commons, CC BY SA 3.0 (https://en.wikipedia.org/wiki/File:ROF_Denoising_Example.png)

Rauschunterdrückung von Autoencodern Rauschen in die Kodierung einführen, was zu einer Kodierung führt, die eine beschädigte Version der ursprünglichen Eingabedaten darstellt. Diese beschädigte Version der Daten wird zum Trainieren des Modells verwendet, aber die Verlustfunktion vergleicht die Ausgabewerte mit der ursprünglichen Eingabe und nicht mit der beschädigten Eingabe. Ziel ist es, dass das Netzwerk die ursprüngliche, unbeschädigte Version des Bildes reproduzieren kann. Durch den Vergleich der beschädigten Daten mit den Originaldaten lernt das Netzwerk, welche Merkmale der Daten am wichtigsten und welche unwichtig/korrupt sind. Mit anderen Worten: Damit ein Modell die beschädigten Bilder entrauschen kann, muss es die wichtigen Merkmale der Bilddaten extrahiert haben.

Variationen

Variationale Autoencoder arbeiten, indem sie Annahmen darüber treffen, wie die latenten Variablen der Daten verteilt sind. Ein Variations-Autoencoder erzeugt eine Wahrscheinlichkeitsverteilung für die verschiedenen Merkmale der Trainingsbilder/latenten Attribute. Beim Training erstellt der Encoder latente Verteilungen für die verschiedenen Merkmale der Eingabebilder.

 

Da das Modell die Merkmale oder Bilder als Gaußsche Verteilungen und nicht als diskrete Werte lernt, kann es zur Generierung neuer Bilder verwendet werden. Die Gaußsche Verteilung wird abgetastet, um einen Vektor zu erstellen, der in das Decodierungsnetzwerk eingespeist wird, das auf der Grundlage dieses Abtastvektors ein Bild rendert. Im Wesentlichen lernt das Modell gemeinsame Merkmale der Trainingsbilder und weist ihnen eine gewisse Wahrscheinlichkeit zu, dass sie auftreten. Die Wahrscheinlichkeitsverteilung kann dann verwendet werden, um ein Bild zurückzuentwickeln und neue Bilder zu erzeugen, die den ursprünglichen Trainingsbildern ähneln.

Beim Training des Netzwerks werden die codierten Daten analysiert und das Erkennungsmodell gibt zwei Vektoren aus, die den Mittelwert und die Standardabweichung der Bilder ermitteln. Basierend auf diesen Werten wird eine Verteilung erstellt. Dies erfolgt für die verschiedenen latenten Zustände. Der Decoder entnimmt dann zufällige Stichproben aus der entsprechenden Verteilung und rekonstruiert daraus die anfänglichen Eingaben in das Netzwerk.

Autoencoder-Anwendungen

Autoencoder können vielfältig eingesetzt werden Vielzahl von AnwendungenSie werden jedoch typischerweise für Aufgaben wie Dimensionsreduzierung, Datenentrauschung, Merkmalsextraktion, Bilderzeugung, Sequenz-zu-Sequenz-Vorhersage und Empfehlungssysteme verwendet.

Bei der Datenentrauschung handelt es sich um die Verwendung von Autoencodern, um Körnung/Rauschen aus Bildern zu entfernen. Ebenso können Autoencoder verwendet werden, um andere Arten von Bildschäden zu reparieren, wie z. B. verschwommene Bilder oder fehlende Bildabschnitte. Die Reduzierung der Dimensionalität kann Netzwerken mit hoher Kapazität dabei helfen, nützliche Bildmerkmale zu erlernen. Das bedeutet, dass die Autoencoder dazu verwendet werden können, das Training anderer Arten neuronaler Netzwerke zu verbessern. Dies gilt auch für die Verwendung von Autoencodern zur Merkmalsextraktion, da Autoencoder zur Identifizierung von Merkmalen anderer Trainingsdatensätze zum Trainieren anderer Modelle verwendet werden können.

Im Hinblick auf die Bilderzeugung können Autoencoder verwendet werden, um gefälschte menschliche Bilder oder animierte Charaktere zu erzeugen, was bei der Entwicklung von Gesichtserkennungssystemen oder der Automatisierung bestimmter Aspekte der Animation Anwendung finden kann.

Sequenz-zu-Sequenz-Vorhersagemodelle können verwendet werden, um die zeitliche Struktur von Daten zu bestimmen, was bedeutet, dass ein Autoencoder verwendet werden kann, um das nächste gerade in einer Sequenz zu generieren. Aus diesem Grund könnte ein Autoencoder zum Generieren von Videos verwendet werden. Schließlich können tiefe Autoencoder verwendet werden, um Empfehlungssysteme zu erstellen, indem sie Muster im Zusammenhang mit dem Benutzerinteresse aufgreifen, wobei der Encoder die Benutzerinteraktionsdaten analysiert und der Decoder Empfehlungen erstellt, die zu den etablierten Mustern passen.

Blogger und Programmierer mit Spezialisierung auf Maschinelles lernen und Tiefes Lernen Themen. Daniel hofft, anderen dabei zu helfen, die Macht der KI für das soziale Wohl zu nutzen.