Почему не работает проверка градиента при нормализации партии - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть самостоятельная реализация нейронной сети с частотой обучения, импульсом, регуляризацией L1 / L2 и пакетной нормализацией. Когда я выполняю проверку градиента, все градиенты верны, кроме случаев, когда я использую пакетную нормализацию

Я написал код на Python для проверки градиента только при нормализации партии: https://gist.github.com/arnaldog12/9ba321cfdb18b6955a83403df1a7f514

Для кода выше я попытался удалить весь ненужный код, такой как импульс, выпадение и регуляризация L1 / L2. Если вы просто скопируете и вставите приведенный выше код в какую-либо среду Python с помощью numpy, это сработает.

Я считаю, что ошибка в градиенте, который я передаю функции batchnorm_backward и градиентах, которые я вычисляю позже. В настоящее время я отлаживаю код, но не могу найти, что не так.

Кто-нибудь уже выполнил проверку градиента при нормализации партии? Если так, что я делаю не так?

1 Ответ

0 голосов
/ 04 мая 2018

Через некоторое время я понял, что для проверки градиентов нормы партии необходимо рассчитать стоимость, как если бы модель находилась в режиме обучения. Если вы проверяете градиенты, как если бы модель находилась в тестовом режиме, норма партии будет использовать среднее значение и дисперсию вместо среднего и дисперсии партии, и проверка градиента не будет выполнена.

...