COMRAD404 / GLOSSARY

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

Функция активации задаёт нелинейность в нейросети, влияет на градиенты и тип выхода. Разбираем ReLU, sigmoid, softmax и практический выбор.

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

Простыми словами

Нейрон сначала считает взвешенную сумму входов: z = w1x1 + w2x2 + ... + b. Функция активации берёт это число z и превращает его в новый сигнал a = f(z). Именно этот шаг делает сеть нелинейной.

Практический смысл простой: активация решает, как сильно нейрон «сработает» и в каком диапазоне будет его ответ. Если использовать только линейные преобразования, сколько слоёв ни добавляй, результат останется линейным. Поэтому скрытые слои почти всегда содержат нелинейную активацию.

Есть два частых сценария:

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

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

Как это работает

Типичный шаг в слое нейросети выглядит так:

  1. Вычисляется линейная часть: z = Wx + b.
  2. К результату применяется функция активации: a = f(z).
  3. Во время обратного распространения ошибка проходит через производную этой функции.

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

Функция Формула Где обычно применяют Что учитывать
ReLU max(0, x) Скрытые слои MLP и CNN Проста и быстра, но часть нейронов может «умереть» и всегда выдавать 0
Leaky ReLU max(ax, x) Скрытые слои, если у ReLU много нулевых нейронов Сохраняет небольшой градиент для отрицательных значений
Sigmoid 1 / (1 + exp(-x)) Выход для бинарной классификации Даёт значения от 0 до 1, но в скрытых слоях часто насыщается
tanh (exp(x)-exp(-x)) / (exp(x)+exp(-x)) Иногда скрытые слои и рекуррентные сети Центрирована около 0, но тоже склонна к насыщению
Softmax exp(x_i) / sum(exp(x_j)) Выход для многоклассовой классификации с одним правильным классом Применяется к вектору логитов, а не к одному числу
GELU / SiLU x * Phi(x) / x * sigmoid(x) Современные языковые модели и трансформеры Гладкие функции, часто удобны в больших моделях, но не являются универсально лучшими

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

Зачем нужно

Функции активации нужны как минимум по четырём причинам.

  • Добавить нелинейность. Без неё сеть не сможет выразить сложные границы решений, взаимодействия признаков и составные зависимости.
  • Управлять оптимизацией. Разные активации по-разному пропускают градиент. Это влияет на сходимость, чувствительность к инициализации и глубине сети.
  • Ограничить или интерпретировать выход. Вероятность для бинарного класса требует диапазона от 0 до 1, а многоклассовая классификация — нормированного распределения.
  • Задать свойства представления. Например, ReLU создаёт разреженные активации, а гладкие функции вроде GELU дают более плавный отклик.

Практическое правило выбора обычно такое:

  • Для скрытых слоёв в обычных MLP и CNN чаще всего начинают с ReLU или близких вариантов.
  • Для бинарной классификации на выходе используют sigmoid.
  • Для многоклассовой классификации с одним правильным классом — softmax.
  • Для регрессии — часто линейный выход, то есть без ограничивающей активации.

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

Пример

Допустим, вы строите нейросеть для бинарной классификации: предсказать, уйдёт ли клиент в отток по 50 числовым признакам.

Рабочая схема может быть такой:

  • Вход: 50 признаков
  • Скрытый слой 1: 128 нейронов + ReLU
  • Скрытый слой 2: 64 нейрона + ReLU
  • Выход: 1 нейрон + sigmoid

Почему так:

  • ReLU в скрытых слоях помогает сети учить нелинейные зависимости между признаками и обычно обучается проще, чем sigmoid или tanh в тех же слоях.
  • Sigmoid на выходе переводит логит в число от 0 до 1, которое удобно трактовать как вероятность положительного класса.

Что будет плохим выбором:

  • Поставить softmax на один выходной нейрон — смысла нет, потому что softmax нужен для распределения по нескольким классам.
  • Поставить sigmoid во все скрытые слои глубокой сети без дополнительных мер — обучение может стать медленным из-за насыщения.
  • Поставить ReLU на выходе для вероятности оттока — выход перестанет быть корректной вероятностью.

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

Заблуждения и ограничения

Заблуждение 1: есть одна лучшая функция активации. На практике лучшая функция зависит от архитектуры, глубины, данных, нормализации и цели модели. ReLU — хороший базовый выбор, но не универсальный стандарт для всего.

Заблуждение 2: softmax — это просто «вероятность» для любой классификации. Нет. Softmax подходит, когда классы взаимно исключают друг друга. Для multi-label задач, где объект может принадлежать нескольким классам сразу, обычно используют отдельный sigmoid на каждый класс.

Заблуждение 3: если обучение идёт плохо, достаточно сменить активацию. Проблема может быть в масштабе признаков, функции потерь, дисбалансе классов, инициализации, learning rate, нормализации или самой архитектуре.

Ограничение 1: исчезающие и взрывающиеся градиенты. Некоторые активации затрудняют обучение в глубоких сетях, особенно без корректной инициализации и нормализации.

Ограничение 2: «мёртвые» нейроны у ReLU. Если нейрон стабильно попадает в отрицательную область, его выход равен нулю, а обновления могут почти прекратиться. В таких случаях иногда помогают Leaky ReLU, инициализация, меньший learning rate или нормализация.

Ограничение 3: несоответствие задаче. Активация на выходе должна соответствовать целевой переменной. Нельзя бездумно ставить sigmoid или softmax «потому что это классификация».

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

Частые вопросы

Что ставить в скрытых слоях по умолчанию?

Для многих задач разумная отправная точка — ReLU. Если возникают проблемы с «мёртвыми» нейронами или архитектура ближе к современным трансформерам, можно проверить Leaky ReLU, GELU или SiLU.

Когда использовать sigmoid, а когда softmax?

Sigmoid обычно используют для бинарной классификации или для multi-label сценариев, где каждый класс предсказывается независимо. Softmax применяют, когда из нескольких классов верен ровно один.

Нужна ли активация на выходе при регрессии?

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

Почему sigmoid плохо работает в глубоких скрытых слоях?

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

Можно ли убрать все активации из сети?

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

Связанные понятия

  • Логит: значение до применения выходной активации, например до sigmoid или softmax.
  • Функция потерь: должна быть согласована с выходной активацией, например binary cross-entropy с sigmoid.
  • Обратное распространение ошибки: механизм, через который производная активации влияет на обновление весов.
  • Инициализация весов: неправильная инициализация может усилить проблемы активации, особенно в глубоких сетях.
  • Нормализация: batch normalization и layer normalization часто стабилизируют распределение активаций.
  • Линейный слой: часть вычисления до нелинейного преобразования.

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

Читайте также

LINKS