Warum verwendet die Rekonstruktion in Autoencodern dieselbe Aktivierungsfunktion wie die Vorwärtsaktivierung und nicht die umgekehrte?

9

Angenommen, Sie haben eine Eingabeebene mit n Neuronen und die erste verborgene Ebene hat Neuronen, typischerweise m < n . Dann berechnen Sie die Aktivierung a j des j- ten Neurons in der verborgenen Schicht durchmm<neinjj

, wobei f eine Aktivierungsfunktion wie tanh oder sigmoid ist .einj=f(ich=1 ..nwich,jxich+bj)ftanhSigmoid

Um das Netzwerk zu trainieren, berechnen Sie die Rekonstruktion der mit bezeichneten Eingabe und minimieren den Fehler zwischen z und x . Nun wird das i- te Element in z typischerweise wie folgt berechnet:zzxichz

zich=f(j=1 ..mwj,ich'einj+bich')

Ich frage mich, warum die rekonstruierten normalerweise mit derselben Aktivierungsfunktion berechnet werden, anstatt die Umkehrfunktion zu verwenden, und warum getrennte w ' und b ' nützlich sind, anstatt gebundene Gewichte und Verzerrungen zu verwenden. Es erscheint mir viel intuitiver, die mit der inversen Aktivierungsfunktion f - 1 , z. B. arctanh , rekonstruierte wie folgt zu berechnen :zw'b'f- -1Arctanh

zich'=j=1 ..mf- -1(einj)- -bjwj,ichT.

Es ist zu beachten, dass hier gebundene Gewichte verwendet werden, dh , und die Vorspannungen b j der verborgenen Schicht verwendet werden, anstatt einen zusätzlichen Satz von Vorspannungen für die Eingabeschicht einzuführen.w'=wT.bj

Und eine sehr verwandte Frage: Um Merkmale zu visualisieren, anstatt die Rekonstruktion zu berechnen, würde man normalerweise eine Identitätsmatrix mit der Dimension der verborgenen Schicht erstellen. Dann würde man jede Spalte der Matrix als Eingabe für eine Reaktivierungsfunktion verwenden, die eine Ausgabe in den Eingangsneuronen induziert. Wäre es für die Reaktivierungsfunktion besser, dieselbe Aktivierungsfunktion (bzw. das ) oder die Umkehrfunktion (bzw. das z ' i ) zu verwenden?zichzich'

Manfred Eppe
quelle

Antworten:

5

Ich glaube nicht, dass Ihre Annahme gilt. Oder eher ist es nicht notwendig, und wenn es getan wird, ist es nicht, um die Berechnung irgendwie automatisch umzukehren, um die verborgenen Ebenen-Features zu erstellen. Es ist im Allgemeinen nicht möglich, die Komprimierung im Allgemeinen von n zu kleiner m direkt auf diese Weise umzukehren. Wenn das das Ziel wäre, würden Sie eine Form der Matrixinversion wollen, keine einfache Transponierung.w'=wT.

Stattdessen möchten wir nur für die komprimierte übergeordnete Feature-Darstellung und verwerfen w ' i j, nachdem der automatische Encoder abgeschlossen ist.wichjwichj'

Sie können einstellen und die Gewichte binden. Dies kann bei der Regularisierung helfen und dem Autoencoder helfen, zu verallgemeinern. Das ist aber nicht nötig.w'=wT.

Damit der Autoencoder funktioniert, spielt es keine Rolle, welche Aktivierungsfunktion Sie nach der Ebene verwenden, die Sie vor dem Training verwenden, vorausgesetzt, die letzte Ebene des Autoencoders kann den Bereich möglicher Eingaben ausdrücken. Je nach Verwendung können jedoch unterschiedliche Ergebnisqualitäten erzielt werden, wie dies für ein neuronales Netzwerk normal ist.

Es ist durchaus sinnvoll, dieselbe Aktivierungsfunktion zu verwenden, für die Sie die vorab trainierte Ebene erstellen, da dies die einfachste Wahl ist.

Die Verwendung einer Umkehrfunktion ist ebenfalls möglich, für Sigmoid oder Tanh jedoch nicht ratsam, da z. B. Arctanh nicht <-1 oder> 1 definiert ist und daher wahrscheinlich nicht numerisch stabil wäre.

Neil Slater
quelle
Vielen Dank! Das scheint jedoch gängige Praxis zu sein, wie es z. B. im sehr grundlegenden Tutorial zum Entrauschen von Autoencodern von deeplearning.net verwendet wird: ( deeplearning.net/tutorial/dA.html#daa ) Ich nicht Finden Sie es so vernünftig, dieselbe Aktivierungsfunktion für die Rekonstruktion zu verwenden. Können Sie dies näher erläutern? Es ist wahr, dass es die einfachste Wahl ist, aber es erscheint mir viel natürlicher, das z ' i mit dem a r c t a n h zu verwenden , da dies tatsächlich die mathematische Umkehrung der Aktivierung ergibt. w'=wT.zich'einrcteinnh
Manfred Eppe
Du kannst wenn du willst. ZB aus deeplearning.net/tutorial/dA.html " Optional kann die Gewichtsmatrix der Rückwärtsabbildung auf die Transponierung der Vorwärtsabbildung beschränkt werden: W ' = W T. Dies wird als gebundene Gewichte bezeichnet." (Hervorhebung von mir). Der Punkt meiner Antwort ist, dass wenn Sie dies tun, es nicht um eine automatische Umkehrung der Codierung zu ermöglichen, sondern nur eine Einschränkung ist, die das Training reguliert. W.'W.'=W.T.
Neil Slater
Danke Neil. Ihr Kommentar zum Thema hat mir geholfen, meine Frage zu verallgemeinern und präziser zu gestalten, sodass ich die Frage entsprechend bearbeitet habe. Tatsächlich verstehe ich eigentlich nicht, warum es nützlich ist, überhaupt ein separates w ' zu haben, anstatt immer die transponierte Matrix w T zu verwenden . Die Antwort könnte sein "weil es bessere Ergebnisse liefert", aber dann frage ich mich, warum es bessere Ergebnisse liefert. Es sieht für mich nicht intuitiv aus. w'=wT.w'wT.
Manfred Eppe
@ManfredEppe: Vielleicht sollten Sie stattdessen sorgfältig darüber nachdenken, warum Sie die transponierte Gewichtsmatrix und die Umkehrfunktion für nützlich halten? Es gibt keinen bestimmten Grund, sie zu verwenden - was genau ist Ihre Intuition hinter der Annahme, dass sie nützlich wären? Wenn es sich um "Symmetrie" handelt, werfen Sie einen weiteren Blick auf die Reihenfolge, in der sie angewendet werden - es handelt sich nicht um eine symmetrische Umkehrung der Eingabe in die verborgene Ebene (wenn dies der Fall wäre, sollte die inverse Aktivierungsfunktion an erster Stelle stehen)
Neil Slater