Что такое функция активации в нейронных сетях?

«Что такое функция активации в нейронных сетях?» — вопрос из категории Нейронные сети и Deep Learning, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Ключевые функции и их применение:

  1. ReLU (Rectified Linear Unit): f(x) = max(0, x)

    • Плюсы: Вычислительно простая, не насыщается (решает проблему затухающего градиента).
    • Минусы: "Умирающий ReLU" (нейрон может перестать активироваться).
    • Использование: Стандартный выбор для скрытых слоев большинства архитектур.
  2. Sigmoid: f(x) = 1 / (1 + e^{-x})

    • Свойства: Сжимает выход в диапазон (0, 1).
    • Использование: Исторически использовалась повсеместно, сейчас в основном только в выходном слое для задач бинарной классификации (вероятность).
  3. Softmax: f(x_i) = e^{x_i} / Σ_j e^{x_j}

    • Свойства: Преобразует вектор в распределение вероятностей (сумма выходов = 1).
    • Использование: Исключительно для выходного слоя в задачах многоклассовой классификации.

Пример с NumPy:

import numpy as np

def relu(x):
    return np.maximum(0, x)

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

def softmax(x):
    exp_x = np.exp(x - np.max(x))  # Стабильная версия (сдвиг)
    return exp_x / exp_x.sum(axis=0)

# Выход нейрона
z = np.array([2.0, 1.0, 0.1])
print("ReLU:", relu(z))
print("Sigmoid:", sigmoid(z))
print("Softmax:", softmax(z))  # Сумма = 1.0