Функция активации — это математическое правило, которое преобразует взвешенную сумму всех входных сигналов нейрона в единственный выходной сигнал. Без неё нейросеть любой глубины оставалась бы эквивалентной одной линейной модели, неспособной улавливать сложные зависимости в данных.
Как это работает
Каждый нейрон получает на вход число, равное сумме произведений входных данных на их веса плюс смещение. Это число называется логитом. Функция активации применяется к логиту, сжимая его в определённый диапазон или пропуская дальше по сети. Именно нелинейность этой функции позволяет нейросети аппроксимировать любые непрерывные функции — свойство, известное как теорема об универсальной аппроксимации.
Разные функции активации по-разному влияют на обучение. Одни насыщаются на больших значениях входа, из-за чего градиент становится близким к нулю и веса перестают обновляться. Другие, наоборот, сохраняют градиент, ускоряя сходимость. Выбор функции активации определяет, насколько быстро и стабильно будет обучаться модель.
Зачем это нужно
Без функции активации нейросеть не сможет решать задачи, где зависимость между входом и выходом нелинейна: распознавание изображений, обработка текста, прогнозирование временных рядов. Нелинейность — это то, что превращает цепочку линейных преобразований в универсальный аппроксиматор.
В выходном слое функция активации интерпретирует результат работы сети в терминах задачи. Sigmoid и Softmax выдают вероятности для бинарной и многоклассовой классификации. Tanh удобен, когда нужен выход в диапазоне от -1 до 1. Линейная активация используется для задач регрессии, где нет ограничений на диапазон выходного значения.
Примеры
- Sigmoid — сжимает вход в диапазон (0, 1). Раньше применялась в скрытых слоях, сейчас чаще используется в выходном слое для бинарной классификации. Формула: σ(x) = 1 / (1 + e-x). Основной недостаток — затухающий градиент на больших по модулю значениях.
- ReLU (Rectified Linear Unit) — возвращает max(x, 0). Самая популярная функция в скрытых слоях свёрточных и полносвязных сетей. Вычислительно эффективна, не насыщается на положительных значениях, ускоряет сходимость. Проблема — «мёртвые нейроны»: если логит стабильно отрицателен, нейрон перестаёт обновляться.
- Tanh — сжимает вход в диапазон (-1, 1). В отличие от Sigmoid, выход центрирован относительно нуля, что помогает градиентам не смещаться в одну сторону. Применяется в рекуррентных сетях и там, где нужны отрицательные активации.
- Softmax — преобразует вектор логитов в распределение вероятностей: каждый элемент в диапазоне (0, 1), сумма всех элементов равна 1. Стандартная функция для выходного слоя в задачах многоклассовой классификации.
- GELU (Gaussian Error Linear Unit) — гладкая нелинейность, взвешивающая вход по значению его функции распределения. Стала стандартом для трансформеров (BERT, GPT). Формула: GELU(x) = x · Φ(x), где Φ — функция распределения стандартного нормального закона.
Формула или метрика
Базовое преобразование нейрона с функцией активации:
y = f(Σ wi · xi + b)
где wi — веса, xi — входы, b — смещение, f — функция активации.
Для Softmax на выходе K классов:
σ(z)i = ez_i / Σj=1..K ez_j
Типичные ошибки
- Использование Sigmoid в скрытых слоях глубоких сетей. Из-за насыщения на краях диапазона градиент затухает экспоненциально, и обучение останавливается. Для глубоких архитектур Sigmoid заменяют на ReLU или GELU.
- ReLU в выходном слое для классификации. ReLU не ограничивает выход, поэтому его значения нельзя интерпретировать как вероятности. Для вероятностных задач на выходе ставят Sigmoid или Softmax.
- Игнорирование dying ReLU. Если большая часть нейронов с ReLU получает отрицательные логиты и не обновляется, эффективная ёмкость сети падает. Leaky ReLU или ELU решают эту проблему ценой небольшого усложнения.
- Softmax для многометочной классификации. Softmax предполагает взаимоисключающие классы. Если объект может принадлежать нескольким классам одновременно, нужно использовать независимые Sigmoid на выходе.
Как улучшить
- Начинайте с ReLU для скрытых слоёв. Это рабочий стандарт для большинства архитектур: быстро, дёшево, предсказуемо. Если видите много «мёртвых» нейронов — переходите на Leaky ReLU с небольшим отрицательным наклоном (0.01–0.2).
- Для трансформеров используйте GELU. BERT, GPT и большинство современных языковых моделей обучаются именно с GELU. Если вы обучаете трансформер с нуля, не заменяйте её на ReLU без экспериментального обоснования.
- Проверяйте градиенты. Если loss перестал падать или стал NaN — первым делом посмотрите на распределение активаций и градиентов. Насыщение функции активации — частая причина остановки обучения.
- Экспериментируйте на валидации. Замена функции активации — гиперпараметр. Нет универсально лучшей функции для всех задач. Сравнивайте ReLU, Leaky ReLU и GELU на отложенной выборке.
- Не смешивайте Softmax и Sigmoid на выходе. Softmax нормализует вектор целиком, Sigmoid обрабатывает каждый выход независимо. Выбор зависит от постановки задачи: взаимоисключающие классы или многометочная классификация.