Что, почему и что ?? Функции активации

Изучая нейронную сеть, мы часто сталкиваемся с термином «Активационные функции». Что это за функции активации?
1. Основная идея, как работает нейронная сеть —

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

3. Почему мы используем функцию активации?
Если у нас нет функции активации, веса и смещение просто выполняли бы линейное преобразование. Линейное уравнение легко решить, но его способность решать сложные задачи ограничена, и у него меньше возможностей для изучения сложных функциональных отображений на основе данных. Нейронная сеть без функции активации — это просто модель линейной регрессии.
Как правило, нейронные сети используют нелинейные функции активации, которые могут помочь сети изучать сложные данные, вычислять и изучать практически любую функцию, представляющую вопрос, и обеспечивать точные прогнозы.
3.1 Зачем использовать нелинейную функцию активации?
Если бы мы использовали линейную функцию активации или функцию активации идентичности, тогда нейронная сеть просто выдала бы линейную функцию ввода. Итак, независимо от того, сколько слоев имеет наша нейронная сеть, она по-прежнему будет вести себя так же, как однослойная сеть, потому что суммирование этих слоев даст нам другую линейную функцию, которая недостаточно сильна для моделирования данных.
Также наша функция активации должна быть дифференцированной.
4. Типы функций активации
Функции активации можно разделить на 2 типа:
- Линейная или идентификационная функция активации
- Нелинейные функции активации
4.1 Линейная или идентификационная функция активации
Он принимает входные данные, умноженные на веса для каждого нейрона, и создает выходной сигнал, пропорциональный входному.

Уравнение: f (x) = x
Производная: f ’(x) = 1
Диапазон: (-∞, + ∞)
Две основные проблемы:
- Обратное распространение невозможно — производная функции является константой и не имеет отношения к входу X. Таким образом, невозможно вернуться назад и понять, какие веса во входных нейронах могут обеспечить лучший прогноз.
- Все слои нейронной сети сворачиваются в один — с линейными функциями активации, независимо от того, сколько слоев в нейронной сети, последний слой будет линейной функцией первого слоя.
4.2 Нелинейная функция активации
Современные модели нейронных сетей используют нелинейные функции активации. Они позволяют модели создавать сложные сопоставления между входами и выходами сети, которые необходимы для изучения и моделирования сложных данных, таких как изображения, видео, аудио и наборы данных, которые являются нелинейными или имеют высокую размерность.
Практически любой процесс, который можно себе представить, можно представить как функциональное вычисление в нейронной сети при условии, что функция активации нелинейна.
Нелинейные функции решают проблемы линейной функции активации:
- Они допускают обратное распространение, потому что у них есть производная функция, которая связана с входными данными.
- Они позволяют «складывать» несколько слоев нейронов для создания глубокой нейронной сети. Несколько скрытых слоев нейронов необходимы для изучения сложных наборов данных с высоким уровнем точности.
5. Некоторые часто используемые нелинейные функции активации:
1. Сигмоид / логистика
Сигмовидная функция дает S-образную кривую. Чтобы сопоставить предсказанные значения с вероятностями, мы используем сигмовидную функцию. Функция отображает любое действительное значение в другое значение от 0 до 1.

- Уравнение: f (x) = s = 1 / (1 + e⁻ˣ)
- Производная: f ’(x) = s * (1-s)
- Диапазон: (0,1)
Преимущества:
- Функция является дифференцируемой. Это означает, что мы можем найти наклон сигмовидной кривой в любых двух точках.
- Выходные значения связаны между 0 и 1, нормализуя выходной сигнал каждого нейрона.
Недостатки:
- Исчезающий градиент — для очень высоких или очень низких значений X прогноз почти не изменяется, что приводит к проблеме исчезающего градиента.
- Из-за проблемы исчезающего градиента сигмоиды имеют медленную сходимость.
- Выводит не по центру нуля.
- С точки зрения вычислений.
2. Тан-ч / Гиперболический тангенс

- Уравнение: f (x) = a = tanh (x) = (eˣ — e⁻ˣ) / (eˣ + e⁻ˣ)
- Производная: (1- a²)
- Диапазон: (-1, 1)
Преимущества:
- С нулевым центрированием — упрощает моделирование входных данных с резко отрицательными, нейтральными и строго положительными значениями.
- И функция, и ее производнаямонотонны.
- Работает лучше, чем сигмовидная функция
Недостаток:
- Он также страдает проблемой исчезающего градиента и, следовательно, медленной сходимостью.
3. ReLU (выпрямленное линейное устройство)

- Уравнение: f (x) = a = max (0, x)
- Производная: f ’(x) =
- Диапазон: (0, + ∞)
Преимущества:
- Вычислительная эффективность — позволяет сети очень быстро сходиться.
- Нелинейный — хотя он выглядит как линейная функция, ReLU имеет производную функцию и допускает обратное распространение
Недостатки:
- Проблема умирающего ReLU — когда входные данные приближаются к нулю или являются отрицательными, градиент функции становится нулевым, сеть не может выполнять обратное распространение и не может обучаться.
4. Утечка ReLU

- Уравнение: f (x) = a = max (0,01x, x)
- Производная: f ’(x) =
- Диапазон: (0,01, + ∞)
Преимущество:
- Предотвращает умирающую проблему ReLU — этот вариант ReLU имеет небольшой положительный наклон в отрицательной области, поэтому он обеспечивает обратное распространение даже для отрицательных входных значений.
Недостаток:
- Несогласованные результаты — дырявый ReLU не обеспечивает согласованных прогнозов для отрицательных входных значений.
- Во время распространения фронта, если скорость обучения установлена очень высокой, это приведет к перерегулированию, убивая нейрон.
Идея дырявого ReLU может быть расширена еще больше. Вместо умножения x на постоянный член мы можем умножить его на гиперпараметр, который, кажется, лучше работает с дырявым ReLU. Это расширение для дырявого ReLU известно как Parametric ReLU.
5. Софтмакс
Функция Softmax вычисляет распределение вероятностей события по ‘n’ различным событиям.

- Уравнение: f (x) = eˣᵢ / (Σⱼ₌₀ eˣᵢ)
- Вероятностная интерпретация: Sⱼ = P (y = j | x)
- Диапазон: (0, 1)
Преимущества:
- Возможность обрабатывать несколько классов только один класс в других функциях активации — нормализует выходные данные для каждого класса от 0 до 1 и делит на их сумму, давая вероятность того, что входное значение находится в определенном классе.
- Полезно для выходных нейронов — обычно Softmax используется только для выходного слоя, для нейронных сетей, которым необходимо классифицировать входные данные по нескольким категориям.
6. Какую функцию активации использовать?

Итак, до сих пор мы видели разные типы функций активации, их преимущества и недостатки. Возникает вопрос: какую функцию активации использовать для нейронной сети?
Было бы невероятно сложно порекомендовать функцию активации, которая работает для всех случаев использования. Есть много соображений — насколько сложно вычислить производную (если она вообще дифференцируема!), Как быстро сходится сеть с выбранной вами AF, насколько она гладкая, удовлетворяет ли она условиям универсальной аппроксимационной теоремы, является ли сохраняет нормализацию и так далее. Вы можете заботиться или не заботиться о некоторых из них.
- Сигмовидные функции и их комбинации обычно лучше работают в случае проблем с классификацией.
- Сигмоидные и tanh-функции иногда избегают из-за проблемы исчезающего градиента.
- Тань избегают в большинстве случаев из-за проблемы с мертвыми нейронами.
- Функция активации ReLU широко используется и является выбором по умолчанию, поскольку дает лучшие результаты.
- Если мы сталкиваемся с случаем мертвых нейронов в наших сетях, лучшим выбором будет функция дырявого ReLU.
- Функция ReLU должна только использоваться в скрытых слоях.
- выходной слой может быть линейной функцией активации в случае проблем регрессии.
Надеюсь, эта статья поможет вам получить представление о функции активации, о том, почему, когда и что использовать для данной постановки задачи. Прокомментируйте свое мнение о статье, а также нажмите Хлопает, чтобы побудить меня написать новые статьи.
Deep Learning: как это работает? Часть 1
Это начало цикла статей о том, какие задачи есть в DL, сети, архитектуры, принципы работы, как решаются те или иные задачи и почему одно лучше другого.
Какие предварительные навыки для понимания всего нужны? Сказать сложно, но если вы умеете гуглить или правильно задавать вопросы, то, я уверен, мой цикл статей поможет разобраться во многом.
В чем вообще суть глубокого обучения?
Суть в том, чтобы построить некий алгоритм, который принимал бы на вход X и предсказывал Y. Если мы пишем алгоритм Евклида для поиска НОД, то мы просто напишем циклы, условия, присваивания и вот это вот все — мы знаем как построить такой алгоритм. А как построить алгоритм, который на вход принимает изображение и говорит собака там или кошка? Или вовсе ничего? А алгоритм, на вход которого мы подаем текст и хотим узнать — какого он жанра? Вот так просто ручками написать циклы и условия тут не выйдет — тут на помощь и приходят нейронные сети, глубокое обучение и все вот эти модные слова.
Более формально и чуть-чуть о функциях активации
Выражаясь формально, мы хотим построить функцию от функции от функции…от входного параметра X и весов нашей сети W, которая выдавала бы нам некий результат. Тут важно отметить, что мы не можем взять просто много линейных функций, т.к. суперпозиция линейных функций — линейная функция. Тогда любая глубокая сеть аналогична сети с двумя слоями (входом и выходом). Для чего нам нелинейность? Наши параметры, которые мы хотим научиться предсказывать, могут нелинейно зависеть от входных данных. Нелинейность достигается путем использования различных функций активаций на каждом слое.
Fully-connected neural networks(FCNN)
Просто полносвязная нейронная сеть. Выглядит как-то так:

Суть в том, что каждый нейрон одного слоя связан с каждым нейроном следующего и предыдущего (если они есть).
Первый слой — входной. Например, если мы хотим подать изображение 256x256x3 на вход такой сети, то ровно 256x256x3 нейронов во входном слое нам и понадобится (каждый нейрон будет принимать 1 компоненту (R, G или B) пикселя). Если хотим подать рост человека, его вес и еще 23 признака, то понадобится 25 нейронов во входном слое. Кол-во нейронов на выходе — кол-во признаков, которые мы хотим предсказать. Это может быть как 1 признак, так и все 100. В общем случае по выходному слою сети можно почти наверняка сказать — какую задачу она решает.
Каждая связь между нейронами — вес, который тренируется алгоритмом backpropagation, о котором я писал тут.
Какие задачи может решать FCNN
-Задача регрессии. Например, предсказание стоимости магазина по каким-то входным критериям типа страны, города, улицы, проходимости и т.п.
-Задача классификации. Например, классика — MNIST classification.
-Насчет задачи сегментации и обнаружения объектов с помощью FCNN я сказать не возьмусь. Быть может, кто-то поделится в комментариях 🙂