Аналогичный вопрос был задан в CV: Полный список функций активации в нейронных сетях с плюсами / минусами .
Я копирую ниже один из ответов:
Один такой список, хотя и не очень исчерпывающий:
http://cs231n.github.io/neural-networks-1/
Обычно используемые функции активации
Каждая функция активации (или нелинейность ) принимает одно число и выполняет с ним определенную фиксированную математическую операцию. Есть несколько функций активации, с которыми вы можете столкнуться на практике:
Слева: нелинейность сигмоида сжимает действительные числа в диапазоне между [0,1] Справа: нелинейность Танга сжимает действительные числа в диапазоне между [-1,1].
Сигмовидной. Сигмовидная нелинейность имеет математическую форму σ( х ) = 1 / ( 1 + е- х)и показано на изображении выше слева. Как упоминалось в предыдущем разделе, он принимает действительное число и «сдавливает» его в диапазоне от 0 до 1. В частности, большие отрицательные числа становятся 0, а большие положительные числа становятся 1. Исторически сигмовидная функция часто использовалась поскольку он имеет хорошую интерпретацию как скорость стрельбы нейрона: от полного отсутствия (0) до полностью насыщенного срабатывания на предполагаемой максимальной частоте (1). На практике нелинейность сигмовидной формы в последнее время утратила популярность и редко используется. У него есть два основных недостатка:
- Сигмоиды насыщают и убивают градиенты . Очень нежелательное свойство сигмовидного нейрона состоит в том, что, когда активация нейрона насыщается в хвосте 0 или 1, градиент в этих областях почти равен нулю. Напомним, что во время обратного распространения этот (локальный) градиент будет умножен на градиент выходных данных этих ворот для всей цели. Поэтому, если локальный градиент очень мал, он будет эффективно «убивать» градиент, и почти никакой сигнал не будет проходить через нейрон до его весов и рекурсивно к его данным. Кроме того, необходимо соблюдать особую осторожность при инициализации веса сигмовидных нейронов, чтобы предотвратить насыщение. Например, если начальные веса слишком велики, большинство нейронов будет насыщено, и сеть едва научится.
- Сигмоидальные выходы не центрированы по нулю . Это нежелательно, поскольку нейроны на более поздних уровнях обработки в нейронной сети (подробнее об этом в ближайшее время) будут получать данные, которые не центрированы на нуле. Это влияет на динамику во время градиентного спуска, потому что, если данные, поступающие в нейрон, всегда положительны (например,
поэлементно в f = w Tх > 0е= шTх + бвесе). Это может привести к нежелательной зигзагообразной динамике в градиентных обновлениях весов. Однако обратите внимание, что после добавления этих градиентов в пакет данных окончательное обновление весов может иметь переменные признаки, что несколько смягчает эту проблему. Следовательно, это неудобство, но оно имеет менее серьезные последствия по сравнению с вышеуказанной проблемой насыщенной активации.
TANH( х ) = 2 σ( 2 х ) - 1
Слева: функция активации выпрямленной линейной единицы (ReLU), которая равна нулю, когда x <0, и затем линейна с наклоном 1, когда x> 0. Справа: график из Крижевского и соавт. (pdf) документ, показывающий 6-кратное улучшение сходимости с единицей ReLU по сравнению с единицей tanh.
РЕЛУ. Выпрямленная линейная единица стала очень популярной в последние несколько лет. Вычисляет функцию . Другими словами, активация просто пороговая в нуле (см. Изображение выше слева). Есть несколько плюсов и минусов использования ReLU:е( х ) = макс ( 0 , х )
- (+) Было обнаружено, что он значительно ускоряет (например, в 6 раз у Крижевского и др. ) Сходимость стохастического градиентного спуска по сравнению с сигмоидальными / танговыми функциями. Утверждается, что это связано с его линейной ненасыщенной формой.
- (+) По сравнению с коричневыми / сигмовидными нейронами, которые включают в себя дорогостоящие операции (экспоненты и т. Д.), ReLU может быть реализован простым пороговым значением матрицы активаций в нуле.
- (-) К сожалению, во время тренировки юниты ReLU могут быть хрупкими и могут «умереть». Например, большой градиент, протекающий через нейрон ReLU, может привести к тому, что веса обновятся таким образом, что нейрон никогда больше не активируется ни на одном из точек данных. Если это произойдет, то градиент, текущий через единицу, будет всегда нулевым с этой точки. То есть блоки ReLU могут необратимо умереть во время обучения, поскольку они могут быть сбиты с коллектора данных. Например, вы можете обнаружить, что до 40% вашей сети могут быть «мертвыми» (то есть нейроны, которые никогда не активируются по всему набору обучающих данных), если скорость обучения установлена слишком высокой. При правильной настройке скорости обучения это не так часто.
е( x ) = 1 ( x < 0 ) ( α x ) + 1 ( x > = 0 ) ( x )αмаленькая константа. Некоторые люди сообщают об успехе с помощью этой формы функции активации, но результаты не всегда согласуются. Наклон в отрицательной области также может быть превращен в параметр каждого нейрона, как видно из нейронов PReLU, представленных в « Погружении глубоко в выпрямители» , Kaiming He et al., 2015. Тем не менее, в настоящее время согласованность выгод по задачам неясно.
е( шTх + б )макс ( шT1х + б1, шT2х + б2)вес1, б1= 0
На этом мы завершаем обсуждение наиболее распространенных типов нейронов и их активационных функций. В качестве последнего комментария очень редко можно смешивать и сочетать нейроны разных типов в одной и той же сети, хотя в этом нет принципиальной проблемы.
TLDR : « Какой тип нейронов мне следует использовать? » Используйте нелинейность ReLU, будьте осторожны со скоростью обучения и, возможно, следите за долей «мертвых» единиц в сети. Если это касается вас, попробуйте Leaky ReLU или Maxout. Никогда не используйте сигмовидную кишку. Попробуйте tanh, но ожидайте, что он будет работать хуже, чем ReLU / Maxout.
Лицензия:
Лицензия MIT (MIT)
Copyright (c) 2015 Андрей Карпати
Настоящим предоставляется бесплатное разрешение любому лицу, получающему копию данного программного обеспечения и связанных с ним файлов документации (далее - «Программное обеспечение»), осуществлять операции с Программным обеспечением без ограничений, включая, помимо прочего, права на использование, копирование, изменение, слияние. публиковать, распространять, сублицензировать и / или продавать копии Программного обеспечения, а также разрешать лицам, которым предоставляется Программное обеспечение, делать это при соблюдении следующих условий:
Вышеуказанное уведомление об авторских правах и это уведомление о разрешении должны быть включены во все копии или существенные части Программного обеспечения.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЯ ГАРАНТИИ ТОВАРНОГО ОБЕСПЕЧЕНИЯ, ПРИГОДНОСТИ ДЛЯ ОСОБЫХ ЦЕЛЕЙ И НЕЗАКРЕПЛЕНИЙ. Ни при каких обстоятельствах авторы или держатели авторских прав не несут ответственности за любые претензии, ущерб или иную ответственность, будь то в результате действия контракта, деликтного или иного действия, возникающего в результате, в результате или в связи с программным обеспечением или использованием в другом месте. ПРОГРАМНОЕ ОБЕСПЕЧЕНИЕ.*