Давайте начнем с основ нейронов и нейронной сети, а также с того, что такое функция активации и зачем она нам нужна:

Нейронные сети, впервые предложенные в 1944 году Уорреном Маккалоу и Уолтером Питтсом, представляют собой методы, обеспечивающие работу лучших распознавателей и переводчиков речи на наших смартфонах с помощью так называемого «глубокого обучения», в котором используются несколько уровней нейронных сетей.

Нейронные сети смоделированы на основе человеческого мозга, где есть тысячи или даже миллионы узлов, плотно связанных друг с другом. Так же, как мозг «запускает» нейроны, в искусственных нейронных сетях (ИНС) искусственный нейрон запускается, отправляя сигнал от входящий узел умножается на некоторый вес, этот узел можно визуализировать как нечто, содержащее число, которое исходит от конечных ветвей (Синапсы), поставляемых в этот нейрон , что происходит для слоя нейронной сети (NN), мы умножаем ввод в нейрон с весом, удерживаемым этим синапсом, и суммой все, что нужно, чтобы получить наш результат.

  • Пример кода для прямого распространения в одиночном нейроне:

Например (см. D на рисунке выше), если веса равны w1, w2, w3…. wN и input, являющиеся i1, i2, i3…. iN мы получаем суммирование: w1 * i1 + w2 * i2 + w3 * i3…. wN * iN

Для нескольких уровней нейронных сетей и подключений мы можем иметь различные значения wX и iX и суммирование S, которое меняется в зависимости от того, активирован ли нейрон. > или нет, поэтому, чтобы нормализовать это и предотвратить резко различающийся диапазон значений, мы используем то, что называется Функция активации для нейронных сетей, которая превращает эти значения во что-то эквивалентное между 0,1 или -1,1, чтобы сделать весь процесс статистически сбалансированным. Этот процесс предназначен не только для сохранения работоспособности кода, но и для уменьшения сложности и требуемых вычислительных мощностей, что было бы сложнее для неактивированных входных данных.

Вступление >

Функции активации, которые обычно используются на основе нескольких желательных свойств, таких как:

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

Производная или дифференциал или наклон: изменение оси Y в соответствии с изменением оси X.

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

Монотонная функция: функция, которая либо полностью не увеличивает, либо не убывает.

  • Гладкие функции с монотонной производной. Было показано, что в некоторых случаях они лучше обобщаются.
  • Приближает идентичность около начала координат - когда функции активации имеют это свойство, нейронная сеть будет эффективно обучаться, когда ее веса инициализируются небольшими случайными значениями. Если функция активации не приближает идентичность к исходной точке, необходимо соблюдать особую осторожность при инициализации весов.

Таблица функций активации

Нарушение некоторых функций активации:

(Существуют некоторые линейные и простые функции, такие как функция двоичного шага или линейная функция f = ax, но поскольку они широко не используются и нежелательны в качестве функций активации, мы не будем их обсуждать.)

1. Сигмовидная функция

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

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

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

Помимо логистической функции, сигмовидные функции включают в себя обычный арктангенс, гиперболический тангенс, функцию Гудермана и функцию ошибки, а также обобщенную логистическую функцию и алгебраические функции.

2. Функция Тань

В функции tanh устранен недостаток, который мы видели в сигмоидной функции (не полностью), здесь единственное отличие от сигмоидной функции состоит в том, что кривая симметрична в начале координат со значениями в диапазоне от -1 к 1.

Формула для гиперболического тангенса (tanh) может быть дана следующим образом

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

3. ReLU (выпрямленные линейные единицы) и Leaky ReLU ›

Выпрямитель по состоянию на 2018 год является самой популярной функцией активации глубоких нейронных сетей.

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

Некоторые из вариантов ReLU включают: Softplus (SmoothReLU), Noisy ReLU, Leaky ReLU, Parametric ReLU и ExponentialReLU (ELU). Некоторые из них мы обсудим ниже.

ReLU: Выпрямленный линейный блок (блок, использующий выпрямитель, также называется выпрямленным линейным блоком ReLU), имеет выход 0, если входной сигнал меньше чем 0, иначе выводит raw. То есть, если вход больше 0, выход равен входу. Работа ReLU ближе к тому, как работают наши биологические нейроны.

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

  • Биологическое правдоподобие: одностороннее по сравнению с антисимметрией tanh.
  • Разреженная активация: например, в случайно инициализированной сети активируется только около 50% скрытых единиц (с ненулевым выходом).
  • Лучшее распространение градиента: меньше проблем с исчезающим градиентом по сравнению с сигмоидальными функциями активации, которые насыщаются в обоих направлениях.
  • Эффективные вычисления: только сравнение, сложение и умножение.
  • Масштабно-инвариантный: max (0, a x) = a max (0, x) для a ≥ 0

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

Одним из условий использования ReLU является использование, его можно использовать только в скрытых слоях, а не где-либо еще. Это связано с указанным ниже ограничением.

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

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

4. Функция PReLU (параметрическое ReLU) ›

В параметрическом ReLU, как показано на рисунке выше, вместо использования фиксированного наклона, например 0,01, используемого в Leaky ReLU, делается параметр «a», который будет изменяться в зависимости от модели для x ‹0

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

Поэтому, поскольку PReLU относится к максимальному значению, мы также используем его в так называемых сетях «maxout».

5. Функция ELU (экспоненциальная LU) ›

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

Было показано, что ELU дает более точные результаты, чем ReLU, а также быстрее сходится. ELU и ReLU одинаковы для положительных входов, но для отрицательных входов ELU сглаживается (до -альфа) медленно, тогда как ReLU сглаживает резко.

6. Функция порогового значения ReLU ›

В результате объединения ReLU и FTSwish, было создано Threshold ReLU или просто TReLU, TReLU похож на ReLU, но с двумя важными изменениями: здесь разрешены отрицательные значения, но они ограничены, что значительно повышает точность. Отсюда следует: f(x) = x для x > theta, f(x) = 0 в противном случае, где theta - число с плавающей запятой ›= 0 (пороговое положение срабатывания).

7. Функция Softmax

Softmax - очень интересная функция активации, поскольку она не только сопоставляет наш вывод в диапазоне [0,1], но также сопоставляет каждый вывод в таком таким образом, чтобы общая сумма была 1. Таким образом, вывод Softmax представляет собой распределение вероятностей.

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

Математически Softmax - это следующая функция, где z - вектор входных данных для выходного слоя, а j - индексирует выходные блоки. из 1,2, 3…. k:

В заключение, Softmax используется для множественной классификации в модели логистической регрессии (многомерной), тогда как Sigmoid используется для двоичной классификации в модели логистической регрессии.

Для цитирования используйте формат:

@article{himanshuxd,
    author       = {Himanshu S},
    title        = { Activation  Functions : Sigmoid, tanh, ReLU, Leaky ReLU, PReLU, ELU, Threshold ReLU  and Softmax basics for Neural Networks and Deep Learning },
    howpublished = {\url{https://himanshuxd.medium.com/activation-functions-sigmoid-relu-leaky-relu-and-softmax-basics-for-neural-networks-and-deep-8d9c70eed91e}},
    year         = {2019}
}

[1]: https://en.wikipedia.org/wiki/Artificial_neural_network

[2]: https://en.wikipedia.org/wiki/Activation_function

[3]: https://en.wikipedia.org/wiki/Rectifier_(neural_networks)

[4]: http://cs231n.github.io/neural-networks-1/

[5]: https://en.wikipedia.org/wiki/Softmax_function

[6]: https://github.com/Kulbear/deep-learning-nano-foundation/wiki/ReLU-and-Softmax-Activation-Functions

[7]: https://www.kaggle.com/dansbecker/rectified-linear-units-relu-in-deep-learning

[8]: http://dataaspirant.com/2017/03/07/difference-between-softmax-function-and-sigmoid-function/

До встречи в моей следующей статье!

If you found this useful and informative, please let me know by clapping or commenting ! Also for any queries you may have in regard to the above, ask me by commenting or tweeting @himanshuxd