Функция активации Maxout - реализация в NumPy для прямого и обратного распространения - PullRequest
0 голосов
/ 22 апреля 2019

Я строю ванильную нейронную сеть с нуля, используя NumPy, и проверяю производительность модели для различных функций активации. Мне особенно интересно посмотреть, как функция активации «Maxout» повлияет на производительность моей модели.

После некоторого поиска я не смог найти реализацию в NumPy, за исключением их определения (https://ibb.co/kXCpjKc).). Формула для прямого распространения ясна, где я бы взял max (Z) (где Z = wT * x + b). Но их производная, которую я буду использовать при обратном распространении, мне не ясна.

Что означает j = argmax (z) в этом контексте? Как мне реализовать это в NumPy?

Любая помощь будет высоко ценится! Спасибо!

1 Ответ

1 голос
/ 22 апреля 2019

Изменение любого из не максимальных значений незначительно не влияет на вывод, поэтому их градиент равен нулю.Градиент передается от следующего слоя только к нейрону, который достиг максимума (градиент = 1 в предоставленной вами ссылке).Посмотрите ответ на этот стек: https://datascience.stackexchange.com/a/11703.

В настройках нейронной сети вам потребуется градиент по отношению к каждому из x_i, поэтому вам потребуется полная производная.В указанной вами ссылке вы видите, что определена только частичная производная.Частной производной является вектор (из почти всех нулей и 1, где нейрон максимален), поэтому полный градиент станет матрицей.

Вы можете реализовать это в numpy, используя np.argmax.

...