Функции активации
Урок объясняет три ключевые активации — relu, sigmoid, softmax — и зачем вообще нужна нелинейность.
Функция активации — это нелинейное преобразование выхода нейрона, благодаря которому сеть способна выучивать сложные зависимости, а не только прямые линии.
Без активаций стопка линейных слоёв схлопывается в один линейный слой — сколько ни добавляй, получится та же прямая. Нелинейность активаций — то, что даёт нейросети её мощь.
Три рабочих лошадки
| Активация | Формула | Где применяют |
| relu | max(0, x) | скрытые слои (по умолчанию) |
| sigmoid | 1 / (1 + e^-x) | выход бинарной классификации |
| softmax | нормированные экспоненты | выход многоклассовой классификации |
Считаем активации руками
Реализуем relu, sigmoid и softmax на чистом Python — код запускается:
import math
def relu(x):
return max(0.0, x)
def sigmoid(x):
return 1 / (1 + math.exp(-x))
def softmax(xs):
m = max(xs)
exps = [math.exp(x - m) for x in xs]
s = sum(exps)
return [round(e / s, 3) for e in exps]
print("relu(-2):", relu(-2), "relu(3):", relu(3))
print("sigmoid(0):", round(sigmoid(0), 3))
print("softmax([2,1,0.1]):", softmax([2, 1, 0.1]))Вывод:
relu(-2): 0.0 relu(3): 3 sigmoid(0): 0.5 softmax([2,1,0.1]): [0.659, 0.242, 0.099]
Обратите внимание: softmax превращает любые числа в вероятности, которые в сумме дают 1 (0.659 + 0.242 + 0.099 = 1.0) — поэтому он идеален для выхода классификатора.
Активации в Keras
Их указывают параметром activation у слоя (требует TF):
from tensorflow.keras import layers
layers.Dense(64, activation="relu") # скрытый слой
layers.Dense(1, activation="sigmoid") # бинарный выход
layers.Dense(10, activation="softmax") # 10 классовКак работает под капотом
Активация применяется поэлементно к выходу слоя. relu популярна потому, что её производная — это просто 0 или 1, что делает обучение быстрым и устойчивым к затуханию градиента (в отличие от sigmoid, которая «насыщается» на краях и почти обнуляет градиент). softmax внутри вычитает максимум перед экспонентой — это защищает от переполнения при больших значениях.
Частые ошибки
- Ставить softmax в скрытые слои. softmax — для выхода классификатора, в скрытых слоях нужна relu.
- Использовать sigmoid на многоклассовом выходе. Для нескольких взаимоисключающих классов нужен softmax.
- Сеть без активаций. Тогда все слои схлопываются в один линейный — модель не выучит ничего сложного.
Итог
- Активации добавляют нелинейность; без них стек слоёв = один линейный слой.
- relu (max(0,x)) — стандарт для скрытых слоёв.
- sigmoid — для бинарного выхода, softmax — для многоклассового (даёт вероятности, сумма = 1).
- softmax и sigmoid не ставят в скрытые слои.