Jest to małe pytanie koncepcyjne, które dręczy mnie od dłuższego czasu: Jak możemy propagować wstecz przez warstwę max-pooling w sieci neuronowej?
Natknąłem się na warstwy o maksymalnej puli podczas omawiania tego samouczka dla biblioteki nn Torch 7. Biblioteka streszcza obliczenia gradientu i przebiegi do przodu dla każdej warstwy głębokiej sieci. Nie rozumiem, w jaki sposób wykonuje się obliczenia gradientu dla warstwy maksymalnej puli.
Wiem, że jeśli masz wejście wchodzące do neuronu i warstwy l , to δ i l (zdefiniowane jako δ i l = ∂ E ) podaje: δil=θ
Tak więc, warstwa maks pulowania otrzymałby „S kolejnej warstwy, jak zwykle; jednak ponieważ funkcja aktywacji neuronów max-łączenie wykonuje się w wektorze wartości (na której maxes) jako wejście δ , że L nie jest jeden numer więcej, ale wektora ( θbędą musiały być zastąpione∇θ( { oo j l } )). Ponadtoθ, będąc funkcją maksimum, nie różni się pod względem swoich danych wejściowych.
Więc .... jak to powinno działać dokładnie?
źródło
Max Pooling
Załóżmy, że masz warstwę P, która jest na wierzchu warstwy PR. Następnie podanie do przodu będzie wyglądać mniej więcej tak:
źródło
Odpowiedź Shinvu jest dobrze napisana, chciałbym wskazać na wideo, które wyjaśnia gradient operacji Max () i to na grafie obliczeniowym, który jest szybki do zrozumienia.!
podczas implementacji operacji maxpool (węzeł obliczeniowy w grafie obliczeniowym - Twoja architektura NN) potrzebujemy funkcji, która tworzy macierz „maski”, która śledzi, gdzie jest maksimum macierzy. True (1) wskazuje pozycję maksimum w X, pozostałe wpisy to False (0). Śledzimy pozycję maksimum, ponieważ jest to wartość wejściowa, która ostatecznie wpłynęła na wynik, a zatem i na koszt. Backprop oblicza gradienty w odniesieniu do kosztu, więc wszystko, co wpływa na ostateczny koszt, powinno mieć niezerowy gradient. Zatem backprop „propaguje” gradient z powrotem do tej konkretnej wartości wejściowej, która wpłynęła na koszt.
źródło