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:
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.
Also .... wie soll es genau gehen?
quelle
Max Pooling
Angenommen, Sie haben eine Schicht P, die über einer Schicht PR liegt. Dann wird der Forward Pass ungefähr so aussehen:
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
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=id f=0 f′=1 f′=0
quelle
@ 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.
quelle