Это небольшой концептуальный вопрос, который мучил меня некоторое время: как мы можем распространяться обратно через слой максимального пула в нейронной сети?
Я наткнулся на слои с максимальным объединением, проходя этот урок для библиотеки nn в Torch 7. Библиотека абстрагирует вычисление градиента и прямые проходы для каждого слоя глубокой сети. Я не понимаю, как вычисляется градиент для слоя с максимальным пулом.
Я знаю, что если у вас есть вход входящий в нейрон i слоя l , то δ i l (определяется как δ i l = ∂ E ) определяется как: δil=θ
Таким образом, слой с максимальным пулом получит следующего слоя, как обычно; но поскольку функция активации для нейронов с максимальным пулом принимает вектор значений (по которым она достигает максимума) в качестве входных данных, δ i l больше не является одним числом, а вектором ( θдолжно быть заменено на∇θ( { z j l } )). Кроме того,θ, будучи функцией max, не дифференцируема по отношению к своим входам.
Так .... как это должно сработать?
Макс пулинг
Итак, предположим, у вас есть слой P, который идет поверх слоя PR. Тогда прямой проход будет примерно таким:
источник
Ответ @ Shinvu хорошо написан, я хотел бы указать на видео, которое объясняет градиент операции Max (), и это в вычислительном графе, который быстро понять.!
при реализации операции maxpool (вычислительный узел в вычислительном графе - ваша архитектура NN) нам нужна функция, создающая матрицу «маски», которая отслеживает, где находится максимум матрицы. True (1) указывает положение максимума в X, остальные записи - False (0). Мы отслеживаем положение максимума, потому что это входное значение, которое в конечном итоге повлияло на выход, и, следовательно, на стоимость. Backprop вычисляет градиенты по отношению к стоимости, поэтому все, что влияет на конечную стоимость, должно иметь ненулевой градиент. Таким образом, backprop будет «распространять» градиент обратно к этому конкретному входному значению, которое повлияло на стоимость.
источник