KI 101
Was ist ein Autoencoder?

Wenn Sie bereits über Techniken des unüberwachten Lernens gelesen haben, sind Sie möglicherweise auf den Begriff “autoencoder” gestoßen. Autoencoder sind eine der primären Methoden, mit denen unüberwachte Lernmodelle entwickelt werden. Doch was ist ein Autoencoder genau?
Kurz gesagt, funktionieren Autoencoder, indem sie Daten entgegennehmen, diese 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, einen genaueren Blick auf Autoencoder zu werfen und ein besseres Verständnis dafür zu erlangen, wie sie funktionieren. Dieser Artikel wird sich bemühen, Autoencoder zu entmystifizieren und die Architektur von Autoencodern sowie ihre Anwendungen zu erklären.
Was ist ein Autoencoder?
Autoencoder 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, dass die Eingabeschicht und die Ausgabeschicht die gleiche Anzahl an Einheiten haben, ist, dass ein Autoencoder darauf abzielt, die Eingabedaten zu replizieren. Es gibt eine Kopie der Daten aus, nachdem es diese analysiert und in unsupervisierter Weise rekonstruiert hat.
Die Daten, die durch einen Autoencoder fließen, werden nicht einfach von der Eingabe zur Ausgabe gemappt, was bedeutet, dass das Netzwerk die Eingabedaten nicht einfach kopiert. Es gibt drei Komponenten eines Autoencoders: einen Kodierungs- (Eingabe-) Teil, der die Daten komprimiert, eine Komponente, die 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 verpixelten Bildern trainieren und dann das trainierte Modell verwenden, um den Rauschen aus dem Bild zu entfernen.
Autoencoder-Architektur
Lassen Sie uns die Architektur eines Autoencoders betrachten. Wir werden hier die Hauptarchitektur eines Autoencoders 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 Dekodierer.
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, wodurch eine neue Repräsentation der Daten mit reduzierter Dimensionalität erzeugt wird.
Die Kodierungsschichten oder der Engpass befassen sich mit der komprimierten Repräsentation der Daten. Der Engpass-Code ist sorgfältig darauf ausgelegt, die relevantesten Teile der beobachteten Daten oder die Merkmale der Daten zu bestimmen, die für die Datenrekonstruktion am wichtigsten sind. Das Ziel besteht darin, zu bestimmen, welche Aspekte der Daten erhalten und welche verworfen werden müssen. Der Engpass-Code muss zwei verschiedene Überlegungen ausbalancieren: Repräsentationsgröße (wie kompakt die Repräsentation ist) und Variable/Merkmalrelevanz. Der Engpass führt eine elementweise Aktivierung der Gewichte und Verzerrungen des Netzwerks durch. Der Engpass-Schicht wird manchmal auch als latente Repräsentation oder latente Variable bezeichnet.
Der Dekodierer 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 der eines einzelnen Schichten-Perzeptrons in multilayer-Perzeptrons ähnelt. Ähnlich wie reguläre feed-forward-Neuronale Netze wird der Autoencoder durch die Verwendung von 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 genügend Daten vorhanden sind, 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 verschlechtert 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, wenn der Encoder fortschreitet. Im Gegensatz dazu sollte die Anzahl der Knoten pro Schicht zunehmen, wenn die Dekodierer-Schichten sich der letzten Schicht nähern. 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 oben erwähnt, gibt es Variationen der klassischen Autoencoder-Architektur. Lassen Sie uns die verschiedenen Autoencoder-Architekturen betrachten.
Sparse

Foto: Michela Massi via 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, sind sparse Autoencoder eine Alternative zu diesem typischen Betriebsmodus. In einem sparsen Netzwerk bleiben die versteckten Schichten die gleiche Größe wie die Encoder- und Dekodierer-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 wirksamsten Aktivierungsfunktionen werden erhalten und andere ignoriert, und diese Einschränkung hilft dem Netzwerk, nur die wichtigsten Merkmale der Eingabedaten zu bestimmen.
Kontraktiver
Kontraktive Autoencoder 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 konstruieren, bei der ähnliche Eingaben ähnliche Kodierungen haben.
Konvolutionell
Konvolutionelle Autoencoder kodieren Eingabedaten, indem sie die Daten in Abschnitte unterteilen und diese Abschnitte dann in einfache Signale umwandeln, die zusammengefügt werden, um eine neue Repräsentation der Daten zu erstellen. Ähnlich wie konvolutionelle Neuronale Netze spezialisiert sich ein konvolutioneller Autoencoder auf das Lernen von Bilddaten und verwendet ein Filter, der über den gesamten Bildbereich Schritt für Schritt bewegt wird. Die durch die Kodierungsschicht erzeugten Kodierungen können verwendet werden, um das Bild zu rekonstruieren, zu spiegeln oder die Geometrie des Bildes 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.
Rauschunterdrückung

Foto: MAL via Wikimedia Commons, CC BY SA 3.0 (https://en.wikipedia.org/wiki/File:ROF_Denoising_Example.png)
Rauschunterdrückungs-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 Eingabedaten und nicht mit den korrupten Eingabedaten. Das Ziel ist, dass das Netzwerk in der Lage ist, 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/korrupt sind. Mit anderen Worten, damit ein Modell in der Lage ist, die korrupten Bilder zu entrauschen, muss es die wichtigsten Merkmale der Bilddaten extrahiert haben.
Variational
Variationale Autoencoder 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 erzeugt der Encoder latente Verteilungen für die verschiedenen Merkmale der Eingabebilder.

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 geschieht für die verschiedenen latenten Zustände. Der Dekodierer nimmt dann zufällige Stichproben 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 typischerweise für Aufgaben wie Dimensionalitätsreduzierung, Datenentrauschung, Merkmalsextraktion, Bildgenerierung, Sequenz-zu-Sequenz-Vorhersage und Empfehlungssysteme verwendet.
Datenentrauschung ist die Verwendung von Autoencodern, um Rauschen von Bildern zu entfernen. Ähnlich können Autoencoder verwendet werden, um andere Arten von Bildschäden zu reparieren, wie verpixelte Bilder oder Bilder mit fehlenden Abschnitten. Dimensionalitätsreduzierung kann helfen, Hochkapazitätsnetze 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.
In Bezug auf Bildgenerierung 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 Benutzerinteresse erkennen, wobei der Encoder Benutzerengagement-Daten analysiert und der Dekodierer Empfehlungen erstellt, die den etablierten Mustern entsprechen.












