Backprop durch Max-Pooling-Ebenen?

62

Dies ist eine kleine konzeptionelle Frage, die mich schon seit einiger Zeit beschäftigt: Wie können wir uns durch eine Max-Pooling-Schicht in einem neuronalen Netzwerk rückwärts ausbreiten?

Ich bin auf Max-Pooling-Ebenen gestoßen, als ich dieses Tutorial für die nn-Bibliothek von Torch 7 durchgesehen habe . Die Bibliothek abstrahiert die Gradientenberechnung und leitet Passagen für jede Schicht eines tiefen Netzwerks weiter. Ich verstehe nicht, wie die Gradientenberechnung für eine Max-Pooling-Schicht durchgeführt wird.

Ich weiß , dass , wenn Sie einen Eingang in Neuron gehen der Schicht , dann (definiert als ) ist gegeben durch: zililδilδil=Ezil

δil=θ(zil)jδjl+1wi,jl,l+1

Eine Max-Pooling-Schicht würde also wie gewohnt die der nächsten Schicht erhalten. aber da die Aktivierungsfunktion für die Max-Pooling-Neuronen einen (über den sie maxiert) als Eingabe verwendet, ist keine einzelne Zahl mehr, sondern ein Vektor ( müsste durch ) ersetzt werden. Außerdem ist , als die maximale Funktion, in Bezug auf seine Eingaben nicht unterscheidbar.δjl+1δilθ(zjl)θ({zjl})θ

Also .... wie soll es genau gehen?

Shinvu
quelle

Antworten:

58

Es gibt keine Steigung in Bezug auf Nicht-Maximalwerte, da eine geringfügige Änderung die Ausgabe nicht beeinflusst. Ferner ist das Maximum lokal linear mit der Steigung 1 in Bezug auf den Eingang, der tatsächlich das Maximum erreicht. Somit wird der Gradient von der nächsten Schicht nur zu dem Neuron zurückgeführt, das die max. Alle anderen Neuronen erhalten einen Gradienten von Null.

In Ihrem Beispiel wäre also ein Vektor aller Nullen, mit der Ausnahme, dass die -te Stelle die Werte wobeiδili{δjl+1}i=argmaxi(zil)

abora
quelle
7
Oh ja, es hat keinen Sinn, sich durch die nicht-maximalen Neuronen zu verbreiten - das war eine entscheidende Erkenntnis. Wenn ich das jetzt richtig verstehe, wählt das Backpropagieren durch die Max-Pooling-Schicht einfach das Max aus. Neuron aus der vorherigen Schicht (auf der das Max-Pooling durchgeführt wurde) und setzt die Rückübertragung nur dadurch fort.
Shinvu
Aber müssen Sie nicht mit der Ableitung der Aktivierungsfunktion multiplizieren?
Jason
1
@Jason: Die Max-Funktion ist für die Aktivierung, die das Maximum erhalten hat, lokal linear, die Ableitung davon ist also konstant 1. Für die Aktivierungen, die es nicht geschafft haben, ist es 0. Das ist konzeptionell sehr ähnlich zur Differenzierung der ReLU (x ) = max (0, x) Aktivierungsfunktion.
Chrigi
Was ist der Schritt ist weniger als die Kernelbreite für maximales Pooling?
Vatsal
1
Gute Antwort! Was ist mit dem Kantenfall, bei dem mehrere Einträge den gleichen Maximalwert haben (z. B. haben 2 Werte 0 von einer ReLU und die anderen beiden sind negativ)?
DankMasterDan
6

Max Pooling

Angenommen, Sie haben eine Schicht P, die über einer Schicht PR liegt. Dann wird der Forward Pass ungefähr so ​​aussehen:

Pi=f(jWijPRj) ,

wobei die Aktivierung des i-ten Neurons der Schicht P ist, f die Aktivierungsfunktion ist und W die Gewichte sind. Wenn Sie das ableiten, erhalten Sie durch die Kettenregel, dass die Farbverläufe wie folgt fließen:Pi

grad(PRj)=igrad(Pi)fWij .

Aber jetzt, wenn Sie maximale Bündelung haben, für das maximale Neuron und für alle anderen Neuronen, also für das maximale Neuron in der vorherigen Schicht und für alle anderen Neuronen. Damit:f=idf=0f=1f=0

grad(PRmax neuron)=igrad(Pi)Wi max neuron ,

grad(PRothers)=0.

patapouf_ai
quelle
2

@ Antwort des Shinvu gut geschrieben wird, würde Ich mag zu einem Punkt zu Video , das den Gradienten von Max () Betrieb erklärt und dies innerhalb eines Berechnungsgraphen , die begreifen schnell zu.!

Während der Implementierung der Maxpool-Operation (ein Rechenknoten in einem Rechengraphen - Ihre NN-Architektur) muss eine Funktion eine "Masken" -Matrix erstellen, die nachverfolgt, wo sich das Maximum der Matrix befindet. True (1) gibt die Position des Maximums in X an, die anderen Einträge sind False (0). Wir verfolgen die Position des Maximums, da dies der Eingabewert ist, der letztendlich die Ausgabe und damit die Kosten beeinflusst. Backprop berechnet Steigungen in Bezug auf die Kosten, sodass alles, was die endgültigen Kosten beeinflusst, eine Steigung ungleich Null haben sollte. Daher "propagiert" backprop den Gradienten zurück zu diesem bestimmten Eingabewert, der die Kosten beeinflusst hat.

anu
quelle