Как проверить мертвые нейроны релю

10

Предыстория: при настройке нейронных сетей с активацией Relu я обнаружил, что иногда прогноз становится почти постоянным. Я полагаю, что это связано с гибелью нейронов релу во время тренировок, как указано здесь. (В чем проблема «умирающего ReLU» в нейронных сетях? )

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

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

Если это помогает, я использую керас.

Aveiur
источник
Добавьте сводную информацию об отклонениях в тензорной доске: tenorflow.org/get_started/summaries_and_tensorboard
Эмре,

Ответы:

6

Мертвый ReLU в значительной степени означает, что его аргумент имеет отрицательное значение, так что градиент остается равным 0; независимо от того, как вы тренируете это с этого момента. Вы можете просто взглянуть на градиент во время тренировки, чтобы увидеть, мертв ли ​​ReLU или нет.

На практике вы можете просто захотеть использовать герметичные ReLU, то есть вместо f (x) = max (0, x) вы устанавливаете f (x) = x, если x> 0, и f (x) = 0.01x, если x <= 0. Таким образом, вы всегда допускаете небольшой ненулевой градиент, и юнит больше не должен застрять на тренировках.

Мартин Крамер
источник
1

Мертвый нейрон - это нейрон, который не обновляется во время тренировки, т.е. 0 градиент.

Keras позволяет извлекать градиент непосредственно для данной строки данных. (Еще один хороший пример)

Или вы можете извлечь веса нейронов и рассчитать градиент самостоятельно
(например, для relu, отрицательный аргумент для relu -> 0 градиента).

К сожалению, градиент зависит от конкретной точки данных. Только если градиент равен 0 для каждой строки обучающих данных, вы можете быть уверены, что нейрон не будет обновляться для всех мини-пакетов в течение учебной эпохи.

Leaky relu может быть полезной стратегией, так как нет никакого значения для leaky relu, где градиент равен 0.

Д Болта
источник