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

40

Я нашел выпрямленную линейную единицу (ReLU), восхваляемую в нескольких местах как решение проблемы исчезающего градиента для нейронных сетей. То есть, в качестве функции активации используется max (0, x). Когда активация положительна, очевидно, что это лучше, чем, скажем, функция активации сигмоида, поскольку ее вывод всегда равен 1, а не сколь угодно малому значению для большого х. С другой стороны, деривация точно равна 0, когда x меньше 0. В худшем случае, когда единица никогда не активируется, веса для этой единицы также никогда не изменятся, и единица будет навсегда бесполезной - что кажется намного хуже, чем даже исчезающе малые градиенты. Как алгоритмы обучения справляются с этой проблемой, когда используют ReLU?

Ханс-Петер Стёрр
источник
2
То, что вы описываете как наихудший случай, называется умирающим ReLU
Мартин Тома
Я думаю, что идея заключается в том, что для логистической функции, поскольку градиент может стать сколь угодно малым, вы можете получить численно исчезающий градиент, составив несколько «незначительных» логистических функций (проблема будет ухудшаться для более глубоких архитектур). Для функции линейного изменения, поскольку градиент является кусочно-постоянным, исчезающий составной градиент может возникнуть, только если есть компонент, который фактически равен 0.
GeoMatt22
(Я не уверен, что это «навсегда», хотя? Не может ли он стать ненулевым после дополнительного обучения? От зависимостей от других узлов и / или текущего мини-пакета данных? (Для стохастического градиентного спуска)
GeoMatt22

Ответы:

33

Вот статья, которая объясняет проблему. Я процитирую некоторую часть этого, чтобы прояснить проблему.

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

Таким образом, функция активации выпрямителя создает эффект редкости в сети. Вот некоторые преимущества разреженности из той же статьи;

  • Распутывание информации . Одной из заявленных целей алгоритмов глубокого обучения (Bengio, 2009) является разделение факторов, объясняющих различия в данных. Плотное представление сильно запутано, потому что почти любое изменение во входных данных изменяет большинство записей в векторе представления. Вместо этого, если представление является и разреженным, и устойчивым к небольшим изменениям ввода, набор ненулевых признаков почти всегда приблизительно сохраняется небольшими изменениями ввода.

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

  • Линейная отделимость . Разреженные представления также с большей вероятностью могут быть линейно разделимыми или более легко разделяемыми с помощью менее нелинейного механизма просто потому, что информация представлена ​​в многомерном пространстве. Кроме того, это может отражать исходный формат данных. Например, в текстовых приложениях исходные исходные данные уже очень скудны.

  • Распределенный, но редкий . Плотные распределенные представления являются самыми богатыми представлениями, они потенциально экспоненциально более эффективны, чем чисто локальные (Bengio, 2009). Эффективность разреженных представлений все еще экспоненциально выше, причем степень экспоненты равна числу ненулевых признаков. Они могут представлять собой хороший компромисс в отношении вышеуказанных критериев.

Он также отвечает на вопрос, который вы задали:

softplus(x)=log(1+ex)(Dugas et al., 2001), плавная версия выпрямляющей нелинейности. Мы теряем точную редкость, но можем надеяться получить более легкое обучение. Тем не менее, экспериментальные результаты, как правило, противоречат этой гипотезе, предполагая, что жесткие нули могут реально помочь контролируемой тренировки. Мы предполагаем, что жесткие нелинейности не повреждают до тех пор, пока градиент может распространяться по некоторым путям, т. Е. Что некоторые из скрытых единиц в каждом слое являются ненулевыми, поскольку кредит и ответственность назначены этим единицам ON, а не распределены более равномерно, мы предполагаем, что оптимизация легче.

Вы можете прочитать статью для более подробной информации.

yasin.yazici
источник
18

Вот почему, вероятно, лучше использовать PReLU, ELU или другие протекающие ReLU-подобные активации, которые не просто отмирают до 0, но падают до чего-то вроде 0,1 * x, когда x становится отрицательным, чтобы продолжать обучение. Долгое время мне казалось, что ReLUs - это история, как сигмоид, хотя по какой-то причине люди до сих пор публикуют статьи с ними. Зачем? Я не знаю.

Дмитрий Мишкин и другие ребята на самом деле протестировали сеть с множеством различных типов активации, вы должны посмотреть на их выводы о производительности различных функций активации и другие вещи, Однако некоторые функции, такие как XOR, лучше изучать с помощью простого ReLU. Не думайте о нейронных вещах в догматических терминах, потому что нейронные сети находятся в стадии разработки. Никто в мире на самом деле не знает и не понимает их достаточно хорошо, чтобы говорить божественную правду. Никто. Попробуйте, сделайте свои собственные открытия. Имейте в виду, что использование самого ReLU является очень недавней разработкой, и в течение десятилетий все разные кандидаты наук в этой области использовали слишком сложные функции активации, о которых мы теперь можем только смеяться. Слишком часто «зная» слишком много, вы можете получить плохие результаты. Важно понимать, что нейронные сети не точная наука. Ничто в математике не говорит, что нейронные сети будут работать так же хорошо, как и они. Это эвристика. И поэтому это очень податливо.

К вашему сведению, даже активация по абсолютному значению дает хорошие результаты по некоторым проблемам, например, по XOR-подобным. Различные функции активации лучше подходят для разных целей. Я попробовал Cifar-10 с abs (), и, похоже, он работал хуже. Хотя я не могу сказать, что «это худшая функция активации для визуального распознавания», потому что я не уверен, например, была ли моя предварительная инициализация оптимальной для этого и т. Д. Сам факт того, что он изучал относительно хорошо поразил меня.

Кроме того, в реальной жизни «производные», которые вы передаете в backprop, не обязательно должны соответствовать фактическим математическим производным.

Я бы даже сказал, что мы должны запретить называть их «производными» и начать называть их чем-то другим, например, error activation functionsне закрывать умы возможности возиться с ними. Фактически, вы можете, например, использовать активацию ReLU, но предоставить 0,1 или что-то подобное вместо 0 в качестве производной для x <0. В некотором смысле, тогда у вас есть простой ReLU, но с нейронами, не способными «умереть от адаптивности». Я называю это NecroRelu, потому что это ReLU, который не может умереть. И в некоторых случаях (хотя определенно не в большинстве) это работает лучше, чем обычный LeakyReLU, который на самом деле имеет 0,1 производную при x <0 и лучше, чем обычный ReLU. Я не думаю, что слишком многие другие исследовали такую ​​функцию, хотя эта или что-то подобное на самом деле могло бы быть вообще классной функцией активации, которую никто не рассматривал только потому, что они слишком сконцентрированы на математике.

Что касается того, что обычно используется, для функции активации tanH (x) это обычная вещь, чтобы передать 1 - x² вместо 1 - tanH (x) ² как производную, чтобы вычислить вещи быстрее.

Кроме того, помните, что ReLU не так уж и явно лучше, чем, например, TanH. TanH может быть лучше в некоторых случаях. Просто, похоже, не в визуальном распознавании. Хотя, например, ELU обладает некоторой мягкостью сигмовидной формы, и в настоящее время это одна из самых известных функций активации для визуального распознавания. Я на самом деле не пробовал, но могу поспорить, что можно установить несколько групп с разными функциями активации на одном уровне слоя, чтобы получить преимущество. Потому что разная логика лучше описывается разными функциями активации. И иногда вам, вероятно, нужно несколько видов оценки.

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

РЕДАКТИРОВАТЬ: На самом деле, стандартный ReLU кажется менее склонным к оснащению против утечек с современными архитектурами. По крайней мере, в распознавании изображений. Похоже, что если вы собираетесь использовать сеть с очень высокой точностью и огромной загрузкой параметров, возможно, лучше придерживаться простых параметров ReLU против неплотных. Но, конечно, проверить все это самостоятельно. Может быть, некоторые утечки будут работать лучше, если дать больше регуляризации.

Mгор ме
источник
Я заинтересован в вашем NecroReLU, но не могу понять из того, что вы написали, чем он отличается от LeakyReLU. Не могли бы вы уточнить?
Том Хейл
Отличается тем, что активация - это ReLU, но производная - LReLU
Íhor Mé
@ ÍhorMé, как вы упомянули об этом initialization that corresponds to a type of activation function one is usingв NOTEсвоем посте, не могли бы вы высказать свои предложения по этому вопросу в той же строке, я не полностью убежден, что использование активаций ReLu через сигмоид / tanH является решением проблемы исчезающего / взрывающегося градиента ,
ана
16

Вот эвристическое объяснение:

  • Каждое обновление градиента в backprop состоит из нескольких умноженных факторов.
  • Чем дальше вы продвигаетесь к началу сети, тем больше этих факторов умножаются вместе, чтобы получить обновление градиента.
  • Многие из этих факторов являются производными от функции активации нейронов - остальные являются весами, отклонениями и т. Д.
  • Из этих факторов наиболее важными являются весовые коэффициенты, смещения и т. Д. Производные функции активации являются своего рода параметром настройки, предназначенным для того, чтобы спуск градиента проходил в правильном направлении с правильной скоростью.
  • Если вы умножите набор терминов, которые меньше 1, они будут стремиться к нулю, чем больше терминов у вас есть. Следовательно, исчезающий градиент при удалении от выходного слоя, если у вас есть функции активации с уклоном <1.
  • Если вы умножите набор терминов, которые больше 1, они будут стремиться к бесконечности, чем больше у вас будет, и, следовательно, будет расти градиент по мере удаления от выходного слоя, если у вас есть функции активации с уклоном> 1.
  • Как насчет того, если бы мы могли каким-то волшебным образом получить эти термины, вносимые производной функций активации, равными 1. Это интуитивно означает, что все вклады в обновления градиента поступают от ввода в задачу и модели - весов, входы, смещения - а не какой-то артефакт выбранной функции активации.
  • RELU имеет градиент 1, когда выход> 0, и ноль в противном случае.
  • Следовательно, умножение связки производных RELU вместе в уравнениях backprop имеет приятное свойство быть либо 1, либо нулем - обновление либо ничего, либо принимает вклады от других весов и смещений.

Вы можете подумать, что было бы лучше иметь линейную функцию, а не сглаживать, когда x <0. Идея здесь заключается в том, что RELU генерирует разреженные сети с относительно небольшим количеством полезных ссылок, что имеет больше биологической правдоподобности, поэтому потеря куча весов на самом деле полезна. Кроме того, моделирование интересных функций с помощью нейронных сетей возможно только при некоторой нелинейности в функции активации. Линейная функция активации приводит к линейному выходу, что не очень интересно.

Том Уокер
источник
отличное объяснение, не могли бы вы подробнее остановиться на 6-м пункте? Также, не могли бы вы представить свои предложения для этого в тех же строках, я не полностью убежден, что использование активаций ReLu через сигмоид / tanH является решением проблемы исчезающего / взрывающегося градиента.
ана
1
Инициализация разумного веса также важна; но так же и выбор функции активации. В качестве тривиального примера, если все ваши веса по умолчанию равны нулю и вы используете RELU, тогда все выходы из ваших нейронов будут равны нулю и останутся равными нулю ... Ни один RELU, ни одни только методы инициализации не полностью решают градиент исчезновения / взрыва, но оба они помогают. Не уверен, что вы имеете в виду повторную разработку пункта 6, что неясно?
Том Уокер
1

Давайте рассмотрим основное рекуррентное соотношение, которое определяет обратное распространение сигнала ошибки.

Wibiif

hii

si=Wi(hi1)+bi

hi=f(si)

δi

δi=Wi+1(δi+1f(si))

ff(si)=(1hi2)hi

f=Relu=max(0,x)ff=numpy.where(hi>0,1,0)

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

user1767774
источник