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

  • Нейронная сеть состоит из множества слоев, и каждый слой состоит из нейронов. Это просто концепция, и мы относимся к нейрону как к некоторому объекту с одним или несколькими входами и одним выходом. Каждый вход нейрона имеет связанный с ним вес — веса меняются на этапе обучения сети.
  • Важен не только вес — есть и предубеждения. На один нейрон приходится только одно смещение. Это дополнительный настраиваемый параметр, не зависящий от входного значения. Наконец, мы получаем довольно простую формулу для расчета выходного значения нейрона, предполагая, что у нас есть нейрон с N входами:

  • Каждый слой состоит из одного или нескольких нейронов, что дает выход каждого слоя в виде вектора, что было показано в уравнении (2):

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

Хорошо, хватит математики…
Чтобы быть эффективным в выборе правильной функции активации, вы должны понимать те уравнения, которые являются основными уравнениями, представляющими идею модели нейронной сети. Позвольте мне также представить вам реализацию приведенного выше уравнения (3) на языке python, потому что python предоставляет нам библиотеку numpy, которая дает нам точку функцию из коробка:

Итак, какова основная цель функций активации?

Функция активации должна принимать выходное значение нейрона (см. (3) уравнение) в качестве входных данных и вычислять выходное значение в зависимости от формулы функции. Итак, предположим, что у нас есть линейная функция активации:

Итак, сначала наш нейрон «вычислит» свой выход (см. уравнение (3)), а затем мы возьмем это значение в качестве входа функции активации — после активации нашего нейрона мы получим выходное значение. В этом случае выходное значение n совпадает с входным значением, поэтому такая функция может показаться вам странной, но она широко используется.

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

  1. Пошаговая функция активации

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

2. Линейная функция активации

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

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

Эта функция более сложная, помните, что e — это число Эйлера (e= 2,718). Эта функция очень похожа на ступенчатую, но ее переход от 0 к 1 плавный. Вот почему намного лучше. Ступенчатая функция неинформативна, поскольку значение для входа -200 совпадает со значением для -50. Оба числа отрицательные, поэтому выход будет равен нулю. С другой стороны, сигмовидная функция уменьшает этот недостаток информации, потому что выходные данные для этих двух чисел будут разными. Это понадобится, когда наша сеть будет обучаться и, таким образом, вычислять ошибки — тогда она будет знать гораздо больше о статусе обучения. Что также очень важно, так это то, что эта функция нелинейна. Помните, что почти каждая проблема в реальной жизни будет нелинейной — для решения нелинейных задач нам нужны нелинейные слои, которые мы можем получить, используя нелинейные функции активации!

4. Выпрямленная линейная функция активации

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

5. Функция активации Softmax

Для проблем, связанных с вероятностью, нам нужна некоторая эффективная функция, которая нормализует наш вывод. Выходные данные функции Softmax представляют собой оценки достоверности, а выходные значения всех нейронов будут в сумме равны 1 (вероятность 100%). Если у нас есть слой с тремя нейронами на выходе, и мы хотим знать вероятность для каждого случая (представленного нейронами), мы можем получить следующий результат [0.1 0.3 0.6] . Для нас это означает, что последний вариант (0,6) наиболее вероятен, но в сумме все значения дадут 1 (0,1 + 0,3 + 0,6 = 1). В этом случае наша нейронная сеть будет уверена в решении. Как вы могли заметить, я предположил, что функция активации softmax используется в последнем слое вывода. Это самый распространенный случай.

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

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

Источники:
Харрисон К., Кукела Д., Нейронные сети с нуля в Python, Харрисон Кинсли, 2020 г.