В чем проблема «умирающего ReLU» в нейронных сетях?

119

Ссылаясь на заметки Стэнфордского курса о сверточных нейронных сетях для визуального распознавания , в параграфе говорится:

«К сожалению, юниты ReLU могут быть хрупкими во время обучения и могут« умереть ». Например, большой градиент, протекающий через нейрон ReLU, может привести к тому, что веса обновятся таким образом, что нейрон никогда не активируется ни при каком повторении данных. Если это произойдет случается, тогда градиент, текущий через единицу, всегда будет нулевым с этой точки. То есть единицы ReLU могут необратимо умереть во время обучения, так как они могут быть сбиты с коллектора данных. Например, вы можете обнаружить, что целых 40 % вашей сети может быть «мертвым» (т. е. нейроны, которые никогда не активируются по всему набору обучающих данных), если скорость обучения установлена ​​слишком высокой. При правильной настройке скорости обучения это не так часто ».

Что значит умирать от нейронов здесь?

Не могли бы вы дать интуитивное объяснение в более простых терминах.

tejaskhot
источник
2
Может кто-нибудь найти ссылку на какую-нибудь научную статью о «мертвых нейронах»? Поскольку это первый результат попыток Google, было бы здорово, если бы этот вопрос был отредактирован со ссылкой.
Марек Жидек
Можем ли мы предотвратить смещение путем регуляризации для решения этой проблемы?
Лен,
3
Чувак, мне удалось оживить мертвые релейные нейроны, дав новые случайные (нормально распределенные) значения в каждую эпоху для весов <= 0. Я использую этот метод только вместе с замораживающими весами на разных глубинах, так как тренировка продолжается до более высоких эпох (I '). я не уверен, что это то, что мы называем фазовым переходом) Теперь можно использовать более высокие скорости обучения, что дает лучшую общую точность (тестируется только при линейной регрессии). Это действительно легко реализовать.
Бол
1
@boli, можешь рассказать о своей реализации здесь?
ана

Ответы:

121

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

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

Как только ReLU окажется в этом состоянии, он вряд ли восстановится, потому что градиент функции в 0 также равен 0, поэтому обучение градиентному спуску не изменит весов. «Утечки» ReLU с небольшим положительным градиентом для отрицательных входных данных ( y=0.01xкогда, скажем, x <0) являются одной из попыток решить эту проблему и дать шанс на восстановление.

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

Нил Слэйтер
источник
7
Хороший комментарий, и также стоит упомянуть об экспоненциальных линейных единицах (ELU), которые могут помочь решить эту проблему лучше: arxiv.org/abs/1511.07289
падура
14
@alex: потому что смещение очень важно для точности. Избавиться от предвзятости - это то же самое, что сказать, что все плоскости принятия решений должны проходить через начало координат - за некоторыми исключениями это плохой выбор. Фактически, избавление от терминов смещения в нейронной сети или связанных моделях (таких как линейная регрессия или логистическая регрессия) обычно означает, что ваша модель будет страдать от смещения! Это один из немногих способов, с помощью которых вы можете получить модель, которая одновременно и в нижнем, и в нижнем белье,
Нил Слейтер
1
@ Алекс: Я думаю, что обычно добавляют небольшой положительный уклон к ReLU. Я не знаю, поможет ли это в «умирающей проблеме ReLU» - скорее всего, это не изменит численно значения градиента очень сильно (поскольку для ReLU градиент равен либо 1, либо 0, и когда он равен 1, он может перескочить, небольшой начальный уклон, казалось бы, имеет очень мало значения). В основном, я думаю, что это просто хитрость, чтобы добавить небольшой импульс к начальному обучению, но это может помочь, если начать лучше, и, как правило, раньше снизить градиенты.
Нил Слэйтер
1
@max: Вы пропустили часть моего ответа «для любого ввода». Нет градиент не будет течь к любому весу , связанному с «мертвым» нейроном в прямоточной сети, потому что все пути к этим весам будут вырезать - нет альтернативных путей для градиента протекающего в подмножество весов питающих , что блок РЕЛ. Вы можете просматривать ReLU, например, в CNN или как имеющие общие веса, и в этом случае все местоположения в карте объектов должны будут обнуляться одновременно. Тем не менее, я бы рассматривал это как еще один пример "для любого ввода".
Нил Слэйтер
1
@anu: градиентным спуском. Большой положительный градиент, вызванный большим значением ошибки, может, в свою очередь, привести к тому, что один шаг члена смещения будет достаточно большим, чтобы он «убил» нейрон, чтобы он достиг состояния (для весов и смещений), что будущие входные данные чтобы функция ReLU никогда не поднималась выше 0.
Нил Слейтер
102

Давайте рассмотрим, как выглядит ReLU (выпрямленный линейный блок):

Вход выпрямителя для некоторых входных является г п = K Σ я = 0 ш I п я для весов ш I , и активаций из предыдущего слоя п я для этих конкретных входного сигнала х п . Нейронная функция выпрямителя имеет вид R e L U = m a x ( 0 , z n )ИксN

ZNзнак равноΣязнак равно0КвесяaяN
весяaяNИксNреLUзнак равномaИкс(0,ZN)

Предполагая очень простую меру ошибки

еррорзнак равнореLU-Y

еррорZNзнак равноδNзнак равно{1ZN00ZN<0
весJ
еррорзнак равноеррорвесJзнак равноеррорZN×ZNвесJзнак равноδN×aJNзнак равно{aJNZN00ZN<0

знак равноИксN

ИксNИкс*

ZN<0

реLUзнак равномaИкс(0,1Икс,Икс)введите описание изображения здесь

MohamedEzz
источник
Разве вы не забыли термин смещения в формуле для ввода в выпрямитель?
Том Хейл,
Я думаю, что следовал обозначениям некоторых учебников, которые предполагают, что a_0 = 1 для всех слоев, а w_0 - это смещение. Уклон не важен, так что лучше все равно его опускать
MohamedEzz
@ MohamedEzz, я не понял твою точку зрения What if, for the input 𝑥𝑛, the current weights put the ReLU on the left flat side while it optimally should be on the right side for this particular input ?, если вход отрицательный, градиент будет 0? что оптимально для этого случая? Не могли бы вы помочь понять это?
ана
1
Оптимальным я имел в виду, что если бы сеть делала лучший прогноз для этого входа, ей нужно было отрегулировать веса так, чтобы ReLU давал положительное значение, он не смог бы выполнить эту настройку из-за имеющегося у него градиента 0. на плоской стороне.
MohamedEzz
Удивительный ответ. Спасибо
Дэвид Рафаэли
13

Нейроны ReLU выводят ноль и имеют нулевые производные для всех отрицательных входов. Таким образом, если весовые коэффициенты в вашей сети всегда приводят к отрицательным входам в нейрон ReLU, этот нейрон фактически не способствует обучению сети. Математически вклад градиента в обновления веса, приходящий от этого нейрона, всегда равен нулю (некоторые детали см. В математическом приложении).

L(W)LLWL

В целом, что происходит, зависит от того, как информация проходит через сеть. Вы можете себе представить, что в процессе обучения значения, которые производят нейроны, могут смещаться и позволять весам уничтожать весь поток данных через некоторые из них. (Иногда они могут оставить эти неблагоприятные конфигурации из-за более ранних обновлений в сети!). Я исследовал эту идею в своем блоге о инициализации веса - что также может способствовать этой проблеме - и ее связи с потоком данных. Я думаю, что моя точка зрения может быть проиллюстрирована сюжетом из этой статьи:

Активации в MLP ReLU с различными стратегиями инициализации

На графике отображаются активации в 5-слойном многоуровневом персептроне с активациями ReLU после одного прохода по сети с различными стратегиями инициализации. Вы можете видеть, что в зависимости от конфигурации весов выходы вашей сети могут быть перекрыты.

Математическое приложение

LИксJ(я)Jяе(s)знак равноМаксимум(0,s)sJ(я)(я+1)я(я+1)

LвесJК(я)знак равноLИксК(я+1)ИксК(я+1)весJК(я),

весJК(я)

ИксК(я+1)весJК(я)знак равное(sJ(я))sJ(я)sJ(я)весJК(я)знак равное'(sJ(я))ИксJ(я),

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

Андре П
источник
отличное объяснение !, не могли бы вы помочь мне понять, Therefore, if your inputs are on roughly the same scale, a large step in the direction of the gradient can leave you with weights that give similar inputs which can end up being negative.как веса становятся отрицательными, если входные данные нормализованы?
ана
вес-λdвесλdвесвес
@JohnsonJia, отлично, я понял :), нужно еще одно уточнение, почему это особенно плохо в случае смещения по сравнению с весом, поскольку отрицательный вклад может быть связан как с весом, так и смещением, поправьте меня, если я ошибаюсь.?
ана
Zзнак равновесИкс+ббZИкс
4

«Dying ReLU» относится к нейрону, который выводит 0 для ваших данных в тренировочном наборе. Это происходит потому, что сумма весовых * входов в нейроне (также называемая активацией ) становится <= 0 для всех входных паттернов. Это приводит к тому, что ReLU выдает 0. Поскольку производная от ReLU равна 0, в этом случае обновления веса не производятся, и нейрон застревает при выводе 0.

Что следует отметить:

  1. Умирающий ReLU не означает, что выход нейрона также останется нулевым во время теста. В зависимости от различий в распределении это может иметь место или не иметь место.
  2. Умирающий ReLU не является постоянно мертвым. Если вы добавите новые данные о тренировках или используете предварительно обученную модель для нового обучения, эти нейроны могут дать ответный удар!
  3. Технически Dying ReLU не должен выводить 0 для ВСЕХ тренировочных данных. Может случиться, что он выводит ненулевое значение для некоторых данных, но количество эпох недостаточно для значительного перемещения весов.
Шиталь шах
источник