
По сути, нейронные сети представляют собой многоуровневые коллекции узлов, каждый из которых получает набор входных данных и индивидуально принимает решение о том, запускать ли и распространять информацию вниз по потоку на последующие уровни.
Входные данные комбинируются с весами и смещениями, локальными для каждого узла, которые обновляются алгоритмом обучения в ответ на наблюдаемую ошибку в обучающих примерах. Это позволяет нейронной сети изучать закономерности в данных, где значение веса пропорционально его важности. Для примера того, как веса способствуют решению проблем, см. Эту интерактивную демонстрацию или эту тоже.
Взвешенные входные данные из всех источников суммируются для получения единого значения (называемого линейной комбинацией), которое затем передается в функцию активации, которая превращает его в выходной сигнал.
Одна из оригинальных разработок искусственного нейрона: перцептрон, имела поведение двоичного выхода. Персептроны будут сравнивать свои взвешенные входные данные с порогом, и если он будет превышен, перцептрон будет активирован и выведет 1 (в противном случае - 0). Но этот результат представляет собой ступенчатую функцию, которая не является непрерывной или дифференцируемой, и она не так полезна, потому что дифференциация (обнаружение того, насколько мы неверны) - это то, что делает возможным градиентный спуск.
Лучшим выбором будет что-то вроде сигмовидной функции, которая заменяет пороговое значение шага S-образной кривой. Это активируется как перцептрон, срабатывая в ответ на сумму его входных сигналов, но сигмоидальная функция делает выход непрерывным и, таким образом, дифференцируемым. Концептуально функция активации - это то, что принимает решения: когда ей присваиваются взвешенные характеристики из некоторых данных, она указывает, являются ли эти функции достаточно важными, чтобы внести свой вклад в классификацию.
Сигмоидальная функция также имеет очень полезное свойство, заключающееся в том, что небольшие изменения весов и смещения вызывают только небольшое изменение вывода. Это очень важно для обучения сети нейронов.
Следовательно, цель функции активации - внести нелинейность в нейронную сеть.
Это позволяет нам моделировать переменную отклика, которая нелинейно изменяется вместе с ее независимыми переменными (та, где выходные данные не могут быть воспроизведены из линейной комбинации входных данных). Без нелинейной функции активации нейронная сеть будет вести себя так же, как однослойный перцептрон, потому что независимо от того, сколько слоев у нее было, композиция линейных функций всегда является просто линейной функцией (фактически вычисление методом наименьших квадратов ).
В Python функция активации выглядит так; обратите внимание, как это нелинейная функция, которая применяется к скалярному произведению весов, входных данных и смещений:
def sigmoid(x):
return 1/(1 + np.exp(-x))
output = sigmoid(np.dot(weights, inputs) + bias)
См. также:
- Какую функцию активации мне следует использовать? - Видео Сираджа Раваля
- DL Book Chapter 6 - подробный обзор математики нейронной сети.
- Список функций активации - в Википедии.
- CS231n объясняет функции активации
- Какова роль функции активации в нейронной сети? - Quora