Gewichtsnormalisierungstechnik, die bei der Bildstilübertragung verwendet wird

6

Ich versuche, die Papier- Bildstilübertragung mithilfe von Faltungs-Neuronalen Netzen zu implementieren . In Abschnitt 2 - Tiefenbilddarstellungen erwähnen die Autoren die folgende Technik zur Gewichtsnormalisierung:

Wir haben das Netzwerk normalisiert, indem wir die Gewichte so skaliert haben, dass die mittlere Aktivierung jedes Faltungsfilters über Bildern und Positionen gleich eins ist. Eine solche Neuskalierung kann für das VGG-Netzwerk durchgeführt werden, ohne dessen Ausgabe zu ändern, da es nur korrigierende lineare Aktivierungsfunktionen und keine Normalisierung oder Zusammenfassung über Feature-Maps enthält.

Aus einer verwandten Frage , die zuvor gestellt wurde, ging hervor, dass die Autoren die Aktivierungswerte aus Bildern des ILSVRC-Validierungssatzes verwenden, um die Gewichte zu normalisieren.

Ich wollte die mathematische Formulierung einer solchen Normalisierung kennen, da ich selbst keine finden konnte.

Nach meinem Verständnis des Problems habe ich eine Aktivierungskarte (X) und entsprechend K Aktivierungskarten der vorherigen Schicht (L) und eine Gewichtsmatrix (W) mit den Abmessungen 3x3xK, so dass, wenn Schicht L mit gefaltet wird W es erzeugt X. Nachdem ich nun die Aktivierungswerte für alle Neuronen in Schicht L für alle Bilder im Validierungssatz erfasst habe, besteht das Ziel darin, den Mittelwert aller Neuronen in X über alle Bilder im Validierungssatz gleich 1 zu machen durch irgendwie anpassen W.

Ich konnte nicht herausfinden, was ich mit W tun sollte, um dies zu erreichen.

Außerdem wollte ich wissen, ob dies auf kaskadierte (sequentielle) Weise durchgeführt werden soll, indem zuerst die Gewichte der anfänglichen Ebene normalisiert werden und dann die neuen Feature-Maps verwendet werden, um die Gewichte der vor uns liegenden Ebenen oder unabhängig für jede Aktivierungskarte durch Aufnehmen zu normalisieren die Werte der vorherigen Ebene als die ursprünglich vortrainierten Gewichte für jede Aktivierungskarte?

Codetrotter
quelle

Antworten:

1

Sie haben Recht, sobald wir die mittleren Feature-Aktivierungen für eine Reihe von Bildern haben, normalisieren wir das Netzwerk nacheinander Schicht für Schicht. Es ist jedoch eine Subtilität beteiligt. Sie können Ebenengewichte nicht unabhängig von den vorherigen Ebenen neu skalieren.

Lassen W.ichl und bichl seien die Gewichte und Vorspannung der ich-th Faltungsfilter in Schicht l. Der KernelW.ichl hat eine 3D-Form mit Abmessungen h×w×c (Höhe, Breite, Kanäle_in), aber zur einfacheren Notation auf der Straße lassen Sie es uns umformen p×c, wo p=h×w.

F.ichjlmeinx(0, W.ichlP.jl- -1+bichl) ist die Aktivierung des ich-th Filter in Schicht l Bei der j-te Position in der Aktivierungskarte. Hier bezeichnet die Faltungsoperation (oder Frobenius-Innenprodukt oder Multiplikationsaddition; ich habe das Symbol aus Babas Antwort übernommen) und P.jl- -1 ist das Fenster von h×w×c=p×c Aktivierungen in Schicht l- -1Ausgang, mit dem sich der Filter an der betrachteten Position zusammenfaltet.

Lassen

μichlE.X.,jF.ichjl=1N.M.lX.j=1M.lF.ichjl=1N.M.lX.j=1M.lmeinx(0, W.ichlP.jl- -1+bichl)
sei die mittlere Aktivierung der ich-th Filter in Schicht l über alles N. Bilder im Datensatz X. und alles M.lPositionen in der Aktivierungskarte des Filters. Dies ist offensichtlich eine nicht negative Zahl, und sie ist tatsächlich für alle Filter in den VGG-Netzen positiv (wenn mittlere Aktivierungen über einen Datensatz mit angemessener Größe gesammelt werden).

Nehmen wir nun an, wir "normalisieren" die Aktivierungen, indem wir Gewichte und Vorurteile durch dividieren μichl. Dies würde den Mittelwert der Aktivierung gleich 1 machen, wenn die eingehenden Aktivierungen dieselben wären wie die ursprünglichen nicht normalisierten Aktivierungen . Das ist,E.X.,jmeinx(0, W.ichlμichlP.jl- -1+bichlμichl)=1, aber nur, wenn die vorherigen Ebenen aktiviert sind P.jl- -1 sind die gleichen wie im ursprünglichen nicht normalisierten Netzwerk - dem Netzwerk, das wir berechnet haben μichlDies gilt nur für die erste Conv-Schicht im normalisierten Netzwerk, die Schicht, die sich mit dem Eingabebild faltet. Für andere Schichten führt dies nicht nur zu einer falschen Skalierung, sondern kann auch das Vorzeichen der Faltung umkehren und folglich Aktivierungen nach dem Durchlaufen der ReLU auf Null setzen. Mit anderen Worten, es ändert die Netzwerkausgabe .

Um dies zu beheben, müssen wir eingehende Aktivierungen wiederherstellen. Wir können die eingehenden Werte jedoch nicht selbst ändern. Wir müssen die Normalisierung der vorherigen Ebene mit den Gewichten der aktuellen Ebene rückgängig machen. Beachten Sie, dass ein Gewicht in einem Filter nur mit einem einzelnen Kanal in der vorherigen Ebene interagiert. Also skalieren wir alle Gewichte neuW.ichl die mit dem interagieren k-th Kanal in Schicht l- -1 durch Multiplikation mit μkl- -1. Dies hebt die Normalisierung der vorherigen Ebene auf.

Um zu formalisieren, lassen Sie

D.l- -1[μ1l- -1000μ2l- -1000μcl- -1]] sei die Diagonale c×c Matrix mit allen konstruiert c mittlere Aktivierungen aus der Schicht l- -1.

Dann, E.X.,jmeinx(0, W.ichlD.l- -1μichlP.jl- -1+bichlμichl)=1. (Aus diesem Grund haben wir die Gewichte in 2D umgestaltet, damit wir der Übersichtlichkeit halber Matrizen anstelle von Tensoren multiplizieren können.)

Beachten Sie auch, dass maximale und durchschnittliche Pooling-Ebenen dieses Schema nicht beeinträchtigen, da sie den Maßstab nicht ändern.

Das Obige sieht wahrscheinlich komplexer aus als im eigentlichen Code. Ich habe ein GitHub-Repo mit einer kurzen Keras-Implementierung gepusht: https://github.com/corleypc/vgg-normalize . Ein Blick auf den Beispielcode wird die Dinge wahrscheinlich weiter erläutern.

cpc
quelle
1

Kurze Antwort: Nehmen Sie die Aktivierungskarte, die einer bestimmten Gewichtsmatrix entspricht, nehmen Sie den Mittelwert aller Aktivierungen und mitteln Sie diesen Mittelwert über alle Bilder. Teilen Sie dann die Gewichtsmatrix und die Vorspannung durch diesen Durchschnitt. Und ja, es ist sinnvoll, dies nacheinander zu tun.

Lange Antwort: (Unter Verwendung der in dem von Ihnen zitierten Artikel verwendeten Notation)

Der Faltungsoperator für die ichth Feature Map führt ein inneres Produkt mit Bildfeldern aus xj::

meinx{0, wichlxj+bjl}}=F.ichjl

Sie nehmen den Mittelwert der Aktivierungen über alle Bilder χ und alle räumlichen Orte j (Nennen wir das sich)

sichlE.χ,j[meinx{0, wichlxj+bjl}}]]=1K.M.lχj=1M.lF.ichjl

Hier K. ist die Anzahl der Bilder im Datensatz.

Jetzt skalieren Sie einfach wichl und bjl durch 1sichl, dir geben:

E.χ,j[meinx{0, wichlsichlxj+bjlsichl}}]]=1

Dies stellt auch sicher, dass Aktivierungen, die früher Null waren, nachdem sie die RELU-Nichtlinearität durchlaufen haben, dies auch bleiben, d. H.

wichlxj+bjl<0wichlsichlxj+bjlsichl<0

Baba
quelle