Autoencoder: Architekturtypen und Anwendungen

3 min read

Autoencoder

Autoencoder sind neuronale Netzwerke mit direkter Ausbreitung, die das Eingangssignal am Ausgang regenerieren. Im Inneren haben sie eine oder mehrere verborgene Schichten. Autoencoder sind so konzipiert, dass sie die Eingabe nicht exakt in die Ausgabe kopieren können. Normalerweise sind sie in der Dimension des Codes begrenzt (sie ist kleiner als die Dimension des Signals) oder werden durch Aktivierung im Code begrenzt. Das Eingangssignal wird aufgrund von Codierverlusten mit Fehlern wiederhergestellt, aber um diese zu minimieren, muss das Netzwerk lernen, die wichtigsten Merkmale auszuwählen.

Auf nachfolgendem Bild sind zwei Teile von Autoencoder dargestellt.

  • Encoder ist für die Komprimierung des Latenzraum-Eingangs verantwortlich. Dargestellt durch die Codierfunktion h = f (x);
  • Decoder  ist für die Wiederherstellung von Eingaben aus dem Latenzbereich verantwortlich. Dargestellt durch die Dekdodierungsfunktion h = f (x)

Kopieren von Eingaben in Ausgaben

Das Kopieren von Eingaben in Ausgaben ist nicht die einzige Aufgabe von Autoencodern. Die Forscher sind sich sicher, dass die versteckte Darstellung von h nützliche Eigenschaften hat.

Um dieses Ziel zu erreichen, muss man Einschränkungen für die Kopieraufgabe erstellen. Die Autoencoder können die Kopieraufgabe starten, ohne nützliche Informationen zur Datenverteilung zu extrahieren. Zum Beispiel:

  • Wenn die Dimension der verborgenen Ansicht mit der Dimension der Eingabe übereinstimmt.
  • Wenn die Dimension der verborgenen Ansicht größer als die Dimension der Eingabe ist.
  • Wenn die Autoencoder zu viele Daten erhalten.

Man kann jede Architektur von Autoencodern organisieren, indem man die Codegröße und die Kapazität des Encoders und Decoders basierend auf der Komplexität der modellierten Verteilung festlegt.


Verwendung der Autoencoder

Man unterscheidet zwei praktische Hauptanwendungen von Autoencodern für Datenvisualisierung:

  • um das Geräusch zu glätten
  • eine Abnahme der Dimensionalität

Mit entsprechenden dimensionalen und spärlichen Grenzen können Autoencoder Datenprojektionen untersuchen, die von großer Bedeutung als PCA oder andere grundlegende Techniken sind.

Autoencoder werden automatisch mithilfe von Beispieldaten geschult. Die Teile des Algorithmus sind einfach zu trainieren, die dann bei einer bestimmten Art von Input gut funktionieren und nicht den Einsatz neuer, sondern nur die relevanten Daten für das Training erfordern können.

Autoencoder werden geschult, um Informationen zu speichern und neuen Ideen unterschiedliche Eigenschaften zu verleihen. Man verwendet verschiedene Arten der Autoencoder.


Autoencoder Vanilla
input_size = 784
hidden_size = 64
output_size = 784

x = Input(shape=(input_size,))

# Encoder
h = Dense(hidden_size, activation='relu')(x)

# Decoder
r = Dense(output_size, activation='sigmoid')(h)

autoencoder = Model(input=x, output=r)
autoencoder.compile(optimizer='adam', loss='mse')

Der Autocoder ist ein dreischichtiges Netzwerk, d.h. ein neuronales Netzwerk mit einer verborgenen Schicht. Die Ein- und Ausgabe stimmen überein und wir werden lernen, wie man die Eingabedaten wiederherstellt, z.B. mit dem Adams-Optimierer und der RMS-Fehlerverlustfunktion.

Hier sehen wir einen unvollständigen Autocoder, weil die Größe der verborgenen Schicht (64) kleiner als die Eingabe (784) ist. Diese Einschränkung wird unser neuronales Netzwerk zwingen, die komprimierte Darstellung von Daten zu untersuchen.

Mehrschichtiger Autoencoder
input_size = 784
hidden_size = 128
code_size = 64

x = Input(shape=(input_size,))

# Encoder
hidden_1 = Dense(hidden_size, activation='relu')(x)
h = Dense(code_size, activation='relu')(hidden_1)

# Decoder
hidden_2 = Dense(hidden_size, activation='relu')(h)
r = Dense(input_size, activation='sigmoid')(hidden_2)

autoencoder = Model(input=x, output=r)
autoencoder.compile(optimizer='adam', loss='mse')

Jetzt verwendet unsere Implementierung 3 verborgene Ebenen anstelle von einer. Jede der verborgenen Schichten kann als Funktionsdarstellung ausgewählt werden, aber wir werden das Netzwerk symmetrisch gestalten und die mittlere Schicht verwenden.

Autocoder mit Faltungen

Man kann Autocoder mit Faltungen verwenden, anstatt sie mit vollflächig gebundenen Schichten zu verwenden. Das Prinzip ist das gleiche, aber nur bei Verwendung von 3D-Vektoren statt 1D-Vektoren.

x = Input(shape=(28, 28,1)) 

# Encoder
conv1_1 = Conv2D(16, (3, 3), activation='relu', padding='same')(x)
pool1 = MaxPooling2D((2, 2), padding='same')(conv1_1)
conv1_2 = Conv2D(8, (3, 3), activation='relu', padding='same')(pool1)
pool2 = MaxPooling2D((2, 2), padding='same')(conv1_2)
conv1_3 = Conv2D(8, (3, 3), activation='relu', padding='same')(pool2)
h = MaxPooling2D((2, 2), padding='same')(conv1_3)


# Decoder
conv2_1 = Conv2D(8, (3, 3), activation='relu', padding='same')(h)
up1 = UpSampling2D((2, 2))(conv2_1)
conv2_2 = Conv2D(8, (3, 3), activation='relu', padding='same')(up1)
up2 = UpSampling2D((2, 2))(conv2_2)
conv2_3 = Conv2D(16, (3, 3), activation='relu')(up2)
up3 = UpSampling2D((2, 2))(conv2_3)
r = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(up3)

autoencoder = Model(input=x, output=r)
autoencoder.compile(optimizer='adam', loss='mse')

Die Auflösung des Eingangsbildes wird reduziert, um eine kleinere verborgene Darstellung zu erhalten und für den Auto-Encoder, um das komprimierte Bild zu untersuchen.

Regulierter Autoencoder

Anstatt die Kapazität des Modells zu begrenzen und einen kurzen Code zu verwenden, nutzen normalisierte Encoder die Verlustfunktion. Es fügt dem Modell weitere Eigenschaften hinzu, ohne seine Eingabe in die Ausgabe zu kopieren. In der Praxis werden zwei Arten von regulierten Autoencodern verwendet: Sparse und Denoising.

Sparse

Sparse Autocoder untersuchen normalerweise Bilder für andere (im Vergleich zur Klassifizierung) Aufgaben. Sie reagieren auf die einzigartigen Eigenschaften des Datensatzes und dienen nicht nur als Identifikator.

input_size = 784
hidden_size = 64
output_size = 784

x = Input(shape=(input_size,))

# Encoder
h = Dense(hidden_size, activation='relu', activity_regularizer=regularizers.l1(10e-5))(x)

# Decoder
r = Dense(output_size, activation='sigmoid')(h)

autoencoder = Model(input=x, output=r)
autoencoder.compile(optimizer='adam', loss='mse')

Um die Rekonstruktion des Autocoders einzuschränken, kann man den Verlust begrenzen. Wenn wir zum Beispiel den Begriff Regularisierung zur Verlustfunktion hinzufügen, kann der Autocoder spärliche Datendarstellungen untersuchen.

Denoising

x = Input(shape=(28, 28, 1))

# Encoder
conv1_1 = Conv2D(32, (3, 3), activation='relu', padding='same')(x)
pool1 = MaxPooling2D((2, 2), padding='same')(conv1_1)
conv1_2 = Conv2D(32, (3, 3), activation='relu', padding='same')(pool1)
h = MaxPooling2D((2, 2), padding='same')(conv1_2)


# Decoder
conv2_1 = Conv2D(32, (3, 3), activation='relu', padding='same')(h)
up1 = UpSampling2D((2, 2))(conv2_1)
conv2_2 = Conv2D(32, (3, 3), activation='relu', padding='same')(up1)
up2 = UpSampling2D((2, 2))(conv2_2)
r = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(up2)

autoencoder = Model(input=x, output=r)
autoencoder.compile(optimizer='adam', loss='mse')

Anstatt der Verlustfunktion eine Geldstrafe hinzuzufügen, können wir einen Autocoder bekommen, der etwas Nützliches untersucht, indem er den Wert des Rekonstruktionsfehlers der Verlustfunktion ändert. Dies kann durch Hinzufügen von Rauschen zum Eingabebild und durch das Entfernen des Autocoders erreicht werden. Auf diese Weise extrahiert der Encoder die wichtigsten Funktionen und untersucht seltenere Datendarstellungen.

Haben Sie soweit verstanden, wie Autoencoder verwendet werden?

Wie kann man Autoencoder in Ihrem Umfeld einsetzen?

Diese und weitere Fragen beantwortet gerne das AI United Team per Email oder in dem Q&A Bereich.

Quelle

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.