Ich bin ein Neuling in Faltungs-Neuronalen Netzen und habe nur eine Vorstellung von Feature-Maps und wie Faltung von Bildern durchgeführt wird, um Features zu extrahieren. Ich würde mich freuen, einige Details zur Anwendung der Chargennormalisierung in CNN zu erfahren.
Ich habe dieses Papier https://arxiv.org/pdf/1502.03167v3.pdf gelesen und konnte den BN-Algorithmus verstehen, der auf Daten angewendet wurde, aber am Ende wurde erwähnt, dass eine geringfügige Änderung erforderlich ist, wenn auf CNN angewendet wird:
Für Faltungsebenen möchten wir außerdem, dass die Normalisierung der Faltungseigenschaft entspricht - damit verschiedene Elemente derselben Feature-Map an verschiedenen Orten auf dieselbe Weise normalisiert werden. Um dies zu erreichen, normalisieren wir gemeinsam alle Aktivierungen in einem Minibatch über alle Standorte. In Alg. In 1 lassen wir B die Menge aller Werte in einer Feature-Map über die Elemente eines Mini-Batches und räumliche Standorte hinweg sein. Für einen Mini-Batch der Größe m und Feature-Maps der Größe p × q verwenden wir also den Effekt - aktive Mini-Charge der Größe m ′ = | B | = m · pq. Wir lernen ein Paar von Parametern γ (k) und β (k) pro Merkmalskarte und nicht pro Aktivierung. Alg. 2 wird auf ähnliche Weise modifiziert, so dass die BN-Transformation während der Inferenz dieselbe lineare Transformation auf jede Aktivierung in einer gegebenen Merkmalskarte anwendet.
Ich bin total verwirrt, wenn sie sagen, "dass verschiedene Elemente derselben Feature-Map an verschiedenen Orten auf dieselbe Weise normalisiert werden".
Ich weiß, was Feature-Maps bedeuten, und verschiedene Elemente sind die Gewichte in jeder Feature-Map. Aber ich konnte nicht verstehen, was Ort oder räumlicher Ort bedeutet.
Ich konnte den folgenden Satz überhaupt nicht verstehen. "In Alg. 1 lassen wir B die Menge aller Werte in einer Feature-Map sowohl über die Elemente eines Mini-Batch als auch über räumliche Orte sein."
Ich würde mich freuen, wenn jemand mich kalt ausarbeiten und in viel einfacheren Worten erklären würde
quelle
B*H*W
Werten nehmen, nicht vonB*H*C
Werten. Lesen Sie den ersten Absatz nach Batchnorm in der Conv-Ebene . In jedem Fall +1.out[:,:,:,:] = norm(t[:,:,:,:], mean, stddev)
ohne die Schleife? Der Mittelwert und die Varianz werden über die gesamte Charge berechnet und dann auf jedes Element in der Charge separat und nicht sofort angewendet. @ MaximH*W*C
Mittel : Oder berechnet es im ersten Fall nur B Mittel? Für ein kleines Beispiel: Wenn wir 3x2x3 i / p - Mittelwert betrachtendim=(0)
ist2x3
. Gleich hier wäreBxHxWxC
der Mittelwert von FormHxWxC
und würde von jeder Eingabe dieser Charge abgezogen. Bitte klären Sie.gamma
und erfordern würdenbeta
, was unmöglich ist. Ist das korrekt?Einige Klarstellungen zu Maxim's Antwort.
Ich war verwirrt, als ich in Keras sah, dass die von Ihnen angegebene Achse die Kanalachse ist, da es nicht sinnvoll ist, über die Kanäle zu normalisieren, da jeder Kanal in einem Conv-Net als ein anderes "Merkmal" betrachtet wird. Das Normalisieren über alle Kanäle entspricht dem Normalisieren der Anzahl der Schlafzimmer mit einer Größe in Quadratfuß (multivariates Regressionsbeispiel aus Andrews ML-Kurs). Dies ist normalerweise nicht das, was Sie wollen - Sie normalisieren jedes Feature für sich. Das heißt, Sie normalisieren die Anzahl der Schlafzimmer in allen Beispielen mit mu = 0 und std = 1, und Sie normalisieren die Quadratfuß in allen Beispielen mit mu = 0 und std = 1.
Aus diesem Grund möchten Sie C bedeutet und stds, weil Sie einen Mittelwert und std pro Kanal / Feature möchten.
Nachdem ich es selbst überprüft und getestet hatte, erkannte ich das Problem: Hier gibt es ein bisschen Verwirrung / Missverständnis. Die Achse, die Sie in Keras angeben, ist tatsächlich die Achse, die nicht in den Berechnungen enthalten ist. dh Sie erhalten einen Durchschnitt über jede Achse mit Ausnahme der durch dieses Argument angegebenen. Dies ist verwirrend, da es genau das Gegenteil von NumPy ist, bei dem die angegebene Achse diejenige ist, auf der Sie die Operation ausführen (z. B. np.mean, np.std usw.).
Ich habe tatsächlich ein Spielzeugmodell mit nur BN gebaut und dann die BN manuell berechnet - habe den Mittelwert über alle 3 ersten Dimensionen [m, n_W, n_H] berechnet und n_C-Ergebnisse erhalten, berechnet (X-mu) / std (mit Rundfunk) und erhielt identische Ergebnisse wie die Keras-Ergebnisse.
Hoffe das hilft jedem, der so verwirrt war wie ich.
quelle
Ich bin mir nur zu 70% sicher, was ich sage. Wenn es keinen Sinn ergibt, bearbeiten oder erwähnen Sie es bitte vor dem Downvoting.
Über
location
oderspatial location
: Sie bedeuten die Position von Pixeln in einer Bild- oder Feature-Map. Eine Feature-Map ist vergleichbar mit einer spärlich modifizierten Version des Bildes, in der Konzepte dargestellt werden.Über
so that different elements of the same feature map, at different locations, are normalized in the same way
: Einige Normalisierungsalgorithmen sind lokal, daher hängen sie von ihrer Nähe (Position) und nicht von den Dingen ab, die im Bild weit voneinander entfernt sind. Sie bedeuten wahrscheinlich, dass jedes Pixel, unabhängig von seiner Position, wie das Element einer Menge behandelt wird, unabhängig von seiner direkten speziellen Umgebung.Info
In Alg. 1, we let B be the set of all values in a feature map across both the elements of a mini-batch and spatial locations
: Sie erhalten eine flache Liste aller Werte jedes Trainingsbeispiels im Minibatch, und diese Liste kombiniert Dinge unabhängig von ihrem Standort auf der Feature-Map.quelle
quelle