KI 101

Was ist ein Autoencoder?

mm

Wenn Sie vorher über Techniken des unüberwachten Lernens gelesen haben, sind Sie möglicherweise auf den Begriff “Autoencoder” gestoßen. Autoencoder sind eine der Hauptmethoden, mit denen unüberwachte Lernalgorithmen entwickelt werden. Doch was ist ein Autoencoder genau?

Kurz gesagt, funktionieren Autoencoder, indem sie Daten aufnehmen, komprimieren und kodieren und dann die Daten aus der Kodierungsrepräsentation rekonstruieren. 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. Obwohl das eine kurze Definition eines Autoencoders ist, wäre es hilfreich, Autoencoder genauer zu betrachten und ihre Funktionsweise besser zu verstehen. Dieser Artikel wird versuchen, Autoencoder zu entmystifizieren und ihre Architektur sowie ihre Anwendungen zu erklären.

Was ist ein Autoencoder?

Autoencoders sind neuronale Netze. Neuronale Netze bestehen aus mehreren Schichten, und das definierende Merkmal eines Autoencoders ist, dass die Eingabeschichten genau so viel Information enthalten wie die Ausgabeschicht. Der Grund dafür ist, dass ein Autoencoder darauf abzielt, die Eingabedaten zu replizieren. Es gibt eine Kopie der Daten aus, nachdem es sie analysiert und in unsupervisierter Weise rekonstruiert hat.

Die Daten, die durch einen Autoencoder fließen, werden nicht einfach von der Eingabe direkt auf die Ausgabe abgebildet, was bedeutet, dass das Netzwerk die Eingabedaten nicht einfach kopiert. Es gibt drei Komponenten eines Autoencoders: einen Kodierungs- (Eingabe-) Teil, der die Daten komprimiert, einen Teil, der die komprimierten Daten (oder Engpass) behandelt, und einen Dekodierungs- (Ausgabe-) Teil. Wenn Daten in einen Autoencoder eingegeben werden, werden sie kodiert und dann auf eine kleinere Größe komprimiert. Das Netzwerk wird dann auf den kodierten/komprimierten Daten trainiert und gibt eine Rekonstruktion dieser Daten aus.

Warum würde man ein Netzwerk trainieren, nur um die Daten zu rekonstruieren, die ihm gegeben werden? Der Grund dafür ist, dass das Netzwerk die “Essenz” oder die wichtigsten Merkmale der Eingabedaten lernt. Nachdem das Netzwerk trainiert wurde, kann ein Modell erstellt werden, das ähnliche Daten synthetisieren kann, mit dem Hinzufügen oder Entfernen bestimmter Zielmerkmale. Zum Beispiel könnte man einen Autoencoder auf verrauschten Bildern trainieren und dann das trainierte Modell verwenden, um den Rausch aus dem Bild zu entfernen.

Autoencoder-Architektur

Lassen Sie uns die Architektur eines Autoencoders betrachten. Wir werden die Hauptarchitektur eines Autoencoders hier diskutieren. Es gibt Variationen dieser allgemeinen Architektur, die wir im nächsten Abschnitt diskutieren werden.

Foto: Michela Massi via 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 Engpass und den Dekoder.

Der Encoder-Teil des Autoencoders ist typischerweise ein feedforward, dicht verbundenes Netzwerk. Der Zweck der Kodierungsschichten ist es, die Eingabedaten zu komprimieren und in eine latente Raumrepräsentation umzuwandeln, die eine neue Repräsentation der Daten mit reduzierter Dimensionalität erzeugt.

Die Kodierungsschichten oder der Engpass befassen sich mit der komprimierten Repräsentation der Daten. Der Engpass-Code wird sorgfältig entworfen, um die relevantesten Teile der beobachteten Daten zu bestimmen, oder um es anders auszudrücken, die Merkmale der Daten, die für die Rekonstruktion der Daten am wichtigsten sind. Das Ziel hier ist es, zu bestimmen, welche Aspekte der Daten erhalten und welche verworfen werden müssen. Der Engpass-Code muss zwei Überlegungen ausgleichen: Repräsentationsgröße (wie kompakt die Repräsentation ist) und Variable/Merkmal-Relevanz. Der Engpass führt eine elementweise Aktivierung der Gewichte und Voreinstellungen des Netzwerks durch. Der Engpass-Schicht wird manchmal auch als latente Repräsentation oder latente Variablen bezeichnet.

Die Dekodierungs-Schicht ist dafür verantwortlich, die komprimierten Daten in eine Repräsentation mit den gleichen Dimensionen wie die ursprünglichen, unveränderten Daten umzuwandeln. Die Umwandlung erfolgt mit der latenten Raumrepräsentation, die vom Encoder erstellt wurde.

Die grundlegendste Architektur eines Autoencoders ist eine feed-forward-Architektur mit einer Struktur, die einer einzelnen Schicht eines Perzeptrons in multilayer-Perzeptronen ähnelt. Ähnlich wie reguläre feed-forward-Neuronale Netze wird der Autoencoder durch Backpropagation trainiert.

Merkmale eines Autoencoders

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

Autoencoder lernen automatisch. Sie benötigen keine Labels, und wenn ihnen genügend Daten zur Verfügung stehen, ist es leicht, einen Autoencoder zu einem hohen Leistungsgrad für eine bestimmte Art von Eingabedaten zu bringen.

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

Bei der Konstruktion eines Autoencoders müssen Maschinenlern-Ingenieure auf vier verschiedene Modell-Hyperparameter achten: Code-Größe, Schichtenzahl, Knoten pro Schicht und Verlustfunktion.

Die Code-Größe bestimmt, wie viele Knoten den mittleren Teil des Netzwerks bilden, und weniger Knoten komprimieren die Daten stärker. In einem tiefen Autoencoder kann die Anzahl der Schichten beliebig sein, die der Ingenieur für angemessen hält, die Anzahl der Knoten in einer Schicht sollte jedoch abnehmen, während der Encoder fortschreitet. Im Gegenzug sollte die Anzahl der Knoten pro Schicht im Dekoder zunehmen, während die Dekodier-Schichten der letzten Schicht näher kommen. Schließlich ist die Verlustfunktion eines Autoencoders typischerweise entweder binäre Kreuzentropie oder mittlerer quadratischer Fehler. Binäre Kreuzentropie ist geeignet für Fälle, in denen die Eingabewerte der Daten im Bereich 0 – 1 liegen.

Autoencoder-Typen

Wie erwähnt, gibt es Variationen der klassischen Autoencoder-Architektur. Lassen Sie uns die verschiedenen Autoencoder-Architekturen untersuchen.

Sparse

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

Während Autoencoder normalerweise einen Engpass haben, der die Daten durch eine Reduzierung der Knoten komprimiert, sind sparse Autoencoders eine Alternative zu diesem typischen Betriebsmodus. In einem sparsen Netzwerk bleiben die versteckten Schichten die gleiche Größe wie die Encoder- und Dekodier-Schichten. Stattdessen werden die Aktivierungen innerhalb einer gegebenen Schicht bestraft, so dass die Verlustfunktion die statistischen Merkmale der Eingabedaten besser erfassen kann. Um es anders auszudrücken, während die versteckten Schichten eines sparsen Autoencoders mehr Einheiten haben als ein traditioneller Autoencoder, sind nur ein bestimmter Prozentsatz von ihnen zu jedem gegebenen Zeitpunkt aktiv. Die einflussreichsten Aktivierungsfunktionen werden erhalten und andere ignoriert, und diese Einschränkung hilft dem Netzwerk, nur die wichtigsten Merkmale der Eingabedaten zu bestimmen.

Contractive

Contractive Autoencoders sind so konzipiert, dass sie gegen kleine Variationen in den Daten resilient sind und eine konsistente Repräsentation der Daten beibehalten. Dies wird durch die Anwendung einer Strafe auf die Verlustfunktion erreicht. Diese Regularisierungstechnik basiert auf der Frobenius-Norm der Jacobian-Matrix für die Eingabe-Encoder-Aktivierungen. Die Wirkung dieser Regularisierungstechnik ist, dass das Modell gezwungen wird, eine Kodierung zu erstellen, bei der ähnliche Eingaben ähnliche Kodierungen haben.

Convolutional

Convolutional Autoencoder kodieren Eingabedaten, indem sie die Daten in Unterabschnitte unterteilen und diese Unterabschnitte dann in einfache Signale umwandeln, die zusammengefügt werden, um eine neue Repräsentation der Daten zu erstellen. Ähnlich wie Convolution-Neuronale Netze spezialisiert sich ein convolutionaler Autoencoder auf das Lernen von Bilddaten und verwendet ein Filter, der über den gesamten Bildbereich Schritt für Schritt bewegt wird. Die durch die Kodierungs-Schicht erzeugten Kodierungen können verwendet werden, um das Bild zu rekonstruieren, zu spiegeln oder seine Geometrie zu ändern. Sobald die Filter vom Netzwerk gelernt wurden, können sie auf jede ausreichend ähnliche Eingabe angewendet werden, um die Merkmale des Bildes zu extrahieren.

Denoising

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

Denoising-Autoencoder fügen Rauschen in die Kodierung ein, was zu einer Kodierung führt, die eine korrupte Version der ursprünglichen Eingabedaten ist. Diese korrupte Version der Daten wird verwendet, um das Modell zu trainieren, aber die Verlustfunktion vergleicht die Ausgabewerte mit den ursprünglichen Eingaben und nicht mit den korrupten Eingaben. Das Ziel ist, dass das Netzwerk in der Lage sein wird, die ursprüngliche, unkorrupte Version des Bildes zu reproduzieren. Durch den Vergleich der korrupten Daten mit den ursprünglichen Daten lernt das Netzwerk, welche Merkmale der Daten am wichtigsten sind und welche Merkmale unimportant/Korruptionen sind. Mit anderen Worten, damit ein Modell die verrauschten Bilder denoisen kann, muss es die wichtigen Merkmale der Bilddaten extrahiert haben.

Variational

Variational Autoencoders funktionieren, indem sie Annahmen über die Verteilung der latenten Variablen der Daten treffen. Ein variationaler Autoencoder erzeugt eine Wahrscheinlichkeitsverteilung für die verschiedenen Merkmale der Trainingsbilder/die 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ß-Verteilungen anstelle von diskreten Werten lernt, kann es verwendet werden, um neue Bilder zu generieren. Die Gauß-Verteilung wird beprobt, um einen Vektor zu erstellen, der in das Dekodier-Netzwerk eingegeben wird, das ein Bild auf der Grundlage dieses Vektors von Proben rendert. Im Wesentlichen lernt das Modell die gemeinsamen Merkmale der Trainingsbilder und weist ihnen eine bestimmte Wahrscheinlichkeit zu, dass sie auftreten. Die Wahrscheinlichkeitsverteilung kann dann verwendet werden, um ein Bild rückzuerschließen, um neue Bilder zu generieren, die den ursprünglichen Trainingsbildern ähneln.

Beim Training des Netzwerks werden die kodierten Daten analysiert und das Erkennungsmodell gibt zwei Vektoren aus, die den Mittelwert und die Standardabweichung der Bilder ermitteln. Eine Verteilung wird auf der Grundlage dieser Werte erstellt. Dies wird für die verschiedenen latenten Zustände durchgeführt. Der Dekoder nimmt dann zufällige Proben aus der entsprechenden Verteilung und verwendet sie, um die anfänglichen Eingaben des Netzwerks zu rekonstruieren.

Autoencoder-Anwendungen

Autoencoder können für eine Vielzahl von Anwendungen verwendet werden, aber sie werden normalerweise für Aufgaben wie Dimensionalitätsreduzierung, Daten-Denoising, Merkmalsextraktion, Bildgenerierung, Sequenz-zu-Sequenz-Vorhersage und Empfehlungssysteme verwendet.

Daten-Denoising ist die Verwendung von Autoencodern, um Rauschen aus Bildern zu entfernen. Ähnlich können Autoencoder verwendet werden, um andere Arten von Bildschäden zu reparieren, wie verschwommene Bilder oder Bilder mit fehlenden Abschnitten. Dimensionalitätsreduzierung kann helfen, Hochleistungs-Netzwerke zu trainieren, um nützliche Merkmale von Bildern zu lernen, was bedeutet, dass Autoencoder verwendet werden können, um das Training anderer Arten von neuronalen Netzen zu unterstützen. Dies gilt auch für die Verwendung von Autoencodern zur Merkmalsextraktion, da Autoencoder verwendet werden können, um Merkmale anderer Trainingsdatensätze zu identifizieren, um andere Modelle zu trainieren.

Was die Bildgenerierung betrifft, können Autoencoder verwendet werden, um falsche menschliche Bilder oder animierte Charaktere zu generieren, was Anwendungen in der Gestaltung von Gesichtserkennungssystemen oder der Automatisierung bestimmter Aspekte der Animation hat.

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 die nächste Sequenz zu generieren. Aus diesem Grund kann ein Autoencoder verwendet werden, um Videos zu generieren. Schließlich können tiefe Autoencoder verwendet werden, um Empfehlungssysteme zu erstellen, indem sie Muster in Bezug auf das Benutzerinteresse erkennen, wobei der Encoder Benutzer-Engagement-Daten analysiert und der Dekoder Empfehlungen erstellt, die den etablierten Mustern entsprechen.

Blogger und Programmierer mit Spezialisierungen in Machine Learning und Deep Learning Themen. Daniel hofft, anderen zu helfen, die Macht von KI für das soziale Wohl zu nutzen.