Kann ich ReLU im Autoencoder als Aktivierungsfunktion verwenden?

11

Bei der Implementierung eines Autoencoders mit einem neuronalen Netzwerk verwenden die meisten Benutzer Sigmoid als Aktivierungsfunktion.

Können wir stattdessen ReLU verwenden? (Da ReLU keine Begrenzung für die Obergrenze hat, bedeutet dies im Grunde, dass das Eingabebild Pixel größer als 1 haben kann, im Gegensatz zu den eingeschränkten Kriterien für Autoencoder, wenn Sigmoid verwendet wird.)

RockTheStar
quelle

Antworten:

5

Hier ist ein Diskussionsthread (ab Juli 2013), der darauf hinweist, dass möglicherweise Probleme damit vorliegen, dies jedoch möglich ist.

Çağlar Gülçehre (aus dem Labor von Yoshua Bengio) sagte, er habe die folgende Technik in Wissensfragen erfolgreich eingesetzt : Bedeutung früherer Informationen für die Optimierung :

Trainieren Sie die erste DAE wie gewohnt, jedoch mit Gleichrichtern in der verborgenen Schicht: a1(x) = W1 x + b1 h1 = f1(x) = rectifier(a1(x)) g1(h1) = {sigmoid}(V1 h1 + c1) Minimieren Sie die Kreuzentropie oder den MSE-Verlust, indem Sie g1 (f1 (korrupt (x))) und x vergleichen. Das Sigmoid ist je nach Daten optional.

Trainieren Sie die 2. DAE mit vor dem f1-Gleichrichter hinzugefügtem Rauschen und verwenden Sie Softplus-Rekonstruktionseinheiten mit MSE-Verlust: h2 = f2(h1) = rectifier(W2 h1 + b2) g2(h2) = softplus(V2 h2 + c2) Minimieren Sief1(x)g2(f2(rectifier(corrupt(a1(x)))))2+λ1W1+λ2W2

Xavier Glorot, ebenfalls aus dem Bengio-Labor, sagte, er habe dasselbe getan, außer dass er durch eine Strafe "für die Aktivierungswerte" (vermutlich ?) In beiden Domänenanpassungen für ersetzt habe Klassifizierung der Stimmung im großen Maßstab: Ein Deep-Learning-Ansatz (ICML 2011) und in neuronalen Netzen mit tiefem Gleichrichter (AISTATS 2011).W1L1g2()1

Dougal
quelle
Danke für die schnelle Antwort! Sie sagen also, dass es ein Problem bei der Optimierung des Auteencoders gibt, wenn ReLU anstelle von Sigmoid verwendet wird?
RockTheStar
Es scheint, dass es Probleme verursachen kann, ja, aber es kann definitiv getan werden, wenn Sie den Lernprozess richtig eingerichtet haben. Es könnte hilfreich sein, die verlinkten Artikel zu lesen.
Dougal
Ich experimentiere mit einem einfachen Autoencoder für den MNIST-Datensatz. Ich verwende vollständig verbundene Netzwerke mit der Architektur 784-128-64-2-64-128-784. Ich benutze Relus überall, experimentiere aber mit der Engpassschicht (relu oder linear) und der Ausgabeschicht (relu oder sigmoid). Die Verwendung eines Gleichrichters im Ausgang führt zu einer schlechteren Leistung. Sigmoid macht es besser. Bei der Sigmoid-Ausgabe scheint der lineare Engpass etwas besser zu funktionieren. Meine Lieblingskombination für diese beiden Schichten ist also linear / sigmoid. (Übrigens macht die Verwendung von Sigmoiden auf allen Schichten es deutlich schlimmer.)
Amöbe sagt Reinstate Monica
@ameoba Es überrascht mich nicht, dass Relu-Ausgaben schlecht sind: Wenn Sie wissen, dass die Ausgaben bestimmte Grenzen haben, ist es sinnvoll, eine Aktivierungsfunktion zu verwenden, die Sie auf diese Grenzen beschränkt. Ich bin in diesem Bereich nicht besonders erfahren, aber ich würde wahrscheinlich eine ELU oder eine undichte ReLU für die versteckten Schichten ausprobieren.
Dougal
2
Oh, wow, ich war mir der ELUs nicht bewusst! Vielen Dank für den Tipp, Dougal. Ich habe sie ausprobiert und sie funktionieren besser. Deep Learning ist erstaunlich: Jedes Jahr tauchen neue Tricks auf und niemand hat eine Ahnung, warum manche besser funktionieren als andere. (CC zu @RockTheStar). Übrigens finde ich auch, dass der Adam-Optimierer eine großartige Leistung erbringt.
Amöbe sagt Reinstate Monica