Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

Вход выпрямителя для некоторого входа $ x_n $ равен $$z_n=\sum_{i= 0}^k w_i a ^ n_i $$ для весов $ w_i $ и активаций из предыдущего уровня $ a ^ n_i $ для этого конкретного ввода $ x_n $.Функция выпрямляющего нейрона равна $ReLU = max(0,z_n)$

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

$$ошибка = ReLU - y$$

выпрямитель имеет только 2 возможных значения градиента для дельт алгоритма обратного распространения:$$\frac{\ частичная ошибка}{\частичный z_n} = \delta_n = \left\{ \begin{массив}{c l} 1 & z_n \geq 0\\ 0 и z_n < 0 \конец {массива}\справа.$$ (если мы используем правильную меру ошибки, то 1 станет чем-то другим, но 0 останется прежним) и так для определенного веса $ w_j $ :$$\ ошибка nabla = \frac{\ частичная ошибка}{\частичный w_j}=\frac{\ частичная ошибка}{\частичный z_n} imes \frac {\частичный z_n}{\частичный w_j} = \delta_n imes a_j ^ n = \left \{ \begin{массив}{c 1} a_j^ n & z_n \geq 0\\ 0 и z_n < 0 \конец {массива}\справа.$$

Один вопрос, который приходит на ум, заключается в том, как на самом деле ReLU работает "вообще" с градиентом $ = $ 0 с левой стороны.Что, если для ввода $ x_n $ текущие веса помещают ReLU на левую плоскую сторону, в то время как для этого конкретного ввода он оптимально должен быть на правой стороне ?Градиент равен 0, и поэтому вес не будет обновляться, даже ничтожно мало, так где же "обучение" в этом случае?

Суть ответа заключается в том, что стохастический градиентный спуск будет учитывать не только один вход $x_n $, но и многие из них, и есть надежда, что не все входы будут помещать ReLU на плоскую сторону, поэтому градиент будет ненулевым для некоторые входные данные (хотя это может быть +ve или -ve).Если хотя бы на одном входе $ x_ * $ наш ReLU находится на крутой стороне, то ReLU по-прежнему живой потому что обучение для этого нейрона все еще продолжается, и веса обновляются.Если все входные данные помещают ReLU на плоскую сторону, нет никакой надежды на то, что веса вообще изменятся и нейрон будет мертвый.

ReLU может быть живым, а затем умереть из-за шага градиента для некоторых входной пакет приводя веса к меньшим значениям, получаем $z_n < 0$ за все входные данные.Большая скорость обучения усугубляет эту проблему.

Как упоминал @Neil Slater, исправление заключается в изменении плоской стороны, чтобы она имела небольшой градиент, так что она становится $ ReLU =max (0.1x, x) $, как показано ниже, что называется LeakyReLU .enter image description here

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

Каковы шансы, что ваши веса в конечном итоге приведут к отрицательным числам для ВСЕ входные данные в данный нейрон?Трудно ответить на этот вопрос в целом, но один из способов, которым это может произойти, - это слишком большое обновление весов.Напомним, что нейронные сети обычно обучаются путем минимизации функции потерь $ L (W) $ относительно весов с использованием градиентного спуска.То есть веса нейронной сети являются "переменными" функции $L$ (потеря зависит от набора данных, но только неявно:обычно это сумма по каждому обучающему примеру, и каждый пример фактически является константой).Поскольку градиент любой функции всегда указывает в направлении наибольшего увеличения, все, что нам нужно сделать, это вычислить градиент $ L $ относительно весов $ W $ и немного переместиться в противоположном направлении, затем промыть и повторить.Таким образом, мы достигнем (локального) минимума в $ L $.Следовательно, если ваши входные данные примерно одинакового масштаба, большой шаг в направлении градиента может привести к тому, что вы получите веса, которые дают аналогичные входные данные, которые в конечном итоге могут оказаться отрицательными.

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

Activations in a ReLU MLP with different initialization strategies

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

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

Математически, если $ L $ - функция потерь вашей сети, $ x_j ^ { (i)} $ - выходной сигнал $ j $-го нейрона в $ i $-м слое, $ f (s) = \max (0, s) $ - это нейрон ReLU, а $ s ^ { (i)} _j $ - линейный входной сигнал в $ (i + 1) $-й слой, то по правилу цепочки производная потерь по весу, соединяющему $ i $-й и $ (i + 1) $-й уровни. слои st - это

$$ \frac{\частичный L}{\частичный w_{jk}^{(i)}} = \frac{\частичный L}{\частичный x_k^{(i+1)}} \frac{\частичный x_k ^{(i+1)}}{\частичный w_{jk}^{(i)}}\,.$$

Первый член справа может быть вычислен рекурсивно.Второй член справа является единственным местом, непосредственно связанным с весом $ w_ {jk} ^ {(i)} $, и может быть разбит на

$$ \начать{выровнять*} \frac{\частичный{x_k^{(i+1)}}}{\частичный w_{jk}^{(i)}} &= \frac{\частичный{f(s^{(i)}_j)}}{\частичный s_j^{(i)}} \frac{\частичный s_j ^{(i)}}{\частичный w_{jk}^{(i)}} \\ &=f'(s^{(i)}_j)\, x_j^{(i)}.\end{выровнять*} $$

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

Чтобы быть более конкретным на языке, в то время как локальный градиент ReLU (который равен $ 1 $) умножает градиент, который возвращается из-за обратного распространения, результатом обновленного градиента может быть большое отрицательное число (если градиент, который возвращается, является большим отрицательным числом).

Такой большой отрицательный обновленный градиент создает большой отрицательный $ w_i $, когда скорость обучения относительно велика, следовательно, будет подавлять обновления, которые произойдут в этом нейроне, поскольку практически невозможно выставить большое положительное число, чтобы компенсировать большое отрицательное число, вызванное этим "сломанным" $ w_i $.

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

На что следует обратить внимание:

  1. Умирающий ReLU не означает, что выходной сигнал нейрона также останется нулевым во время тестирования.В зависимости от различий в распределении это может иметь место, а может и не иметь.
  2. Умирающий РеЛУ не является постоянным мертвецом.Если вы добавите новые обучающие данные или используете предварительно обученную модель для нового обучения, эти нейроны мог бы откинься назад!
  3. Технически умирающему ReLU не обязательно выводить 0 для ВСЕХ обучающих данных.Может случиться так, что он выводит ненулевые значения для некоторых данных, но количества эпох недостаточно для существенного перемещения весов.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с datascience.stackexchange
scroll top