Функции активации: ступенчатая, линейная, сигмоида, ReLU и Tanh | robot_dreams
Для отслеживания статуса заказа — авторизируйтесь
Введите код, который был выслан на почту Введите код с SMS, который был выслан на номер
 
Код действителен в течение 5 минут Код с sms действителен в течение 5 минут
Вы уверены, что хотите выйти?
Сеанс завершен
На главную
Функции активации: ступенчатая, линейная, сигмоида, ReLU и Tanh

Функции активации: ступенчатая, линейная, сигмоида, ReLU и Tanh

Большой гайд по функциям активации нейронок от robot_dreams

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

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

СОДЕРЖАНИЕ

Общая информация: как работают нейроны

Функции активации:

1. Пороговая (ступенчатая) функция

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

3. Сигмоидная функция (логистическая)

4. Гиперболический тангенс (Tahn)

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

→ Краткие выводы и сравнительная таблица

Как работают нейроны

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

Простейшая схема нейронной сети

Базовый блок любой нейронной сети — это нейрон. Он работает по следующему принципу:

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

2. Входное значение умножается на соответствующий вес. Этот вес (wji) определяет важность этого входа для вычислений нейрона. Полученные в результате умножения значения суммируются:

3. К сумме взвешенных значений добавляется смещение. Смещение (bias) в искусственном нейроне — это дополнительный параметр, некоторое константное значение, благодаря которому нейрон может активироваться, даже если взвешенные входы принимают нулевое значение.

Важно! Без смещения нейронная сеть могла бы представлять только линейные отображения, а это ограничило бы ее способность решать сложные задачи и извлекать сложные паттерны из данных.

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

Как работает нейрон

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

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

Пороговая (ступенчатая) функция

Самая простая функция активации. Иногда ее называют функцией Хевисайда. Если значение ступенчатой функции превышает некоторый порог, нейрон считается активированным:

Пороговая (ступенчатая) функция активации

Недостатки

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

1. Первая проблема связана с алгоритмом обратного распространения ошибки Backpropagation — механизмом обучения нейронной сети. Благодаря ему настраиваются веса связей между нейронами сети на основе вычисленных ошибок предсказания.

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

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

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

 

Линейная функция

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

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

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

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

Пример использования

Предположим, мы решаем задачу прогнозирования продаж товаров на основе их рекламных затрат.

Дано:

  • сведения о сумме денег, потраченных на рекламу в различных медиаканалах (раскрутка на телевидении/радио, в социальных сетях);
  • соответствующие сведениям объемы продаж товаров.

Конечная цель этой задачи — построение модели, которая бы прогнозировала объем продаж на основе входных данных.

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

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

Недостатки

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

 

Сигмоидная функция (логистическая)

Логистическая функция нелинейна и сжимает входные значения от 0 до 1 по формуле:

где x — входное значение.

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

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

Пример использования

Допустим, есть набор данных, состоящий из физических характеристик пациентов. Нам нужно построить модель, которая предскажет, есть ли у пациента болезнь сердца.

Для этого мы можем использовать нейронную сеть с одним выходным нейроном и сигмоидной функцией активации:

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

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

Недостатки логистической функции

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

 

Гиперболический тангенс (Tahn)

Полная формула гиперболического тангенса (tanh) выглядит так:

Но так как в поведении тангенс похож на сигмоиду, ее можно представить так:

С сигмоидой у тангенса есть и схожие особенности, и слабые моменты: они оба нелинейные и сжимающие, и оба ограничены в диапазоне от −1 до 1.

Гиперболический тангенс

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

Недостатки гиперболического тангенса

Недостатки tanh(x) тоже связаны с проблемой затухания градиента.

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

Максимальное значение производной логистической функции активации в точке 0 равна ¼ и вычисляется так:

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

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

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

Пример использования гиперболического тангенса

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

Мы применяем рекуррентную нейронную сеть (RNN), где в качестве функции активации взят tanh(x). У RNN есть память, которая позволяет ей учитывать предыдущие значения и предсказывать будущие значения на основе этой истории.

Код на Python с использованием фреймворка TensorFlow будет выглядеть примерно так:

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, LSTM
# Подготовка временного ряда для анализа
# ...
# Предобработка данных
# ...
# Создание  модели
model = Sequential()
model.add(LSTM(32, activation='tanh', input_shape=(time_steps, input_dim)))
model.add(Dense(1))
# Компиляция 
model.compile(loss='mean_squared_error', optimizer='adam')
# Обучение модели
model.fit(X_train, y_train, epochs=10, batch_size=32)
# Прогнозирование
predictions = model.predict(X_test)

Важно! В этом коде предполагается, что данные уже оптимизированы и готовы к использованию.

Общий принцип построения нейронной сети такой:

  • С помощью класса Sequential() создается последовательная модель нейронной сети.
  • Метод model.add()добавляет слой LSTM (с 32 скрытыми нейронами и функцией активации гиперболического тангенса).
  • Параметром input_shape=(time_steps, input_dim) определяем входной размер модели, где time_steps — количество временных шагов, а input_dim — количество признаков на каждом временном шаге.
  • Через команду model.compile() компилируется модель. В ней указывается функция потерь mean_squared_error (среднеквадратическая ошибка) и оптимизатор adam, используемый для обновления весов модели.
  • Через метод обучения model.fit() выполняем тренировку модели на обучающих данных (X_train, y_train).
  • Указываем число эпох epochs=10 (определяет, сколько раз весь набор обучающих данных будет проходить через нейронную сеть в процессе обучения) и размер пакета данных, используемых для каждого обновления весовых коэффициентов, — batch_size=32.
  • После завершения процедуры обучения применяем model.predict() к тестовым данным (X_test) для получения предсказанных значений.

 

Функция активации ReLU

ReLU (Rectified Linear Unit) — одна из самых популярных функций активации, используемых как в сетях с низким числом слоев, так и в моделях deep learning.

Формула ReLU:

где x — входной сигнал, а f(x) — выходной.

Функция активации ReLU

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

Полезно знать! У модифицированных функций Leaky ReLU, Parametric ReLU (PReLU) и Exponential Linear Unit (ELU) тоже есть свойства, которые способствуют предотвращению затухания градиента. Например, Leaky ReLU добавляет небольшой наклон для отрицательных значений, а у ELU есть экспоненциальная зависимость отрицательных значений.

Сравнение функции активации ReLU с ее модификациями

Хотя на графике заметна ее частичная линейность, функция ReLU нелинейна и комбинации с ней также нелинейны.

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

Функция ReLU активирует только отдельные нейроны, оставляя остальные неактивными. Благодаря этому сеть может обучаться на более разреженных представлениях данных — и снижается риск переобучения.

Недостатки функции ReLU

Очевидный минус функции активации ReLU — ее ненормализуемость. Так же как и у сигмоидной функции активации, выходное значение ReLU всегда находится в интервале от 0 до ∞, что может быть ограничивающим в некоторых случаях.

Как решить проблему: нормализовать данные перед применением функции активации ReLU.

Из-за больших значений весов или несбалансированности данных в ReLU (немодифицированных версиях) может проявляться проблема «мертвых нейронов», снижающая производительность в моделях deep learning. Это значит, что если веса для определенных входных данных отрицательны или близки к нулю, то функция ReLU будет активировать нейрон только для положительных значений входа, а остальные останутся пассивными.

 

Вывод

Функция активации определяет выходной сигнал нейрона на основе его входа. Мы просто подставляем в нее суммированное значение произведения входных нейронных сигналов и коэффициентов весов — и получаем выходной сигнал нейронной сети.

Ниже указаны преимущества и недостатки разных функций активации:

  • Пороговая функция бинарна и используется редко по причине своей непрерывности и отсутствия градиента.
  • Линейная функция активации передает входной сигнал без изменений, поэтому применяется в простых моделях и не годится для представления сложных нелинейных зависимостей.
  • Гиперболический тангенс (tanh) сжимает входные значения в диапазоне от −1 до 1. Он часто используется в скрытых слоях нейронных сетей, сохраняя отрицательные значения и обеспечивая нелинейность.
  • Сигмоида преобразует входные значения в диапазоне от нуля до единицы. Она часто используется в задачах классификации, но страдает от проблемы затухающего градиента при обучении глубоких нейронных сетей.
  • Функция активации ReLU (Rectified Linear Unit) активирует нейрон, если вход положительный, иначе — выходит 0. Она широко применяется в глубоких нейронных сетях благодаря простоте и отсутствию затухающего градиента, но может вызывать «мертвые нейроны» с отрицательным входом.

Напоследок — таблица со сравнением основных функций активации и некоторых модификаций ReLU. Сохраняйте себе, чтобы была под рукой:

Ещё статьи
Экспертки о том, как оценивают кандидатов на нетехнических интервью
Часть 2. Работа с записями: вставка, чтение, изменение и удаление