Funkcja aktywacji to jeden z najważniejszych komponentów sieci neuronowej. Bez niej nawet najgłębsza sieć byłaby jedynie liniową transformacją danych — niezdolną do rozwiązywania złożonych problemów. Funkcja aktywacji wprowadza nieliniowość, dzięki której sieć może uczyć się skomplikowanych wzorców w danych.

Dlaczego potrzebujemy funkcji aktywacji?

Wyobraź sobie sieć neuronową bez funkcji aktywacji. Każda warstwa oblicza jedynie liniową transformację: y = Wx + b. Złożenie dwóch liniowych transformacji to... kolejna liniowa transformacja. Bez względu na liczbę warstw, cała sieć sprowadzałaby się do jednej operacji liniowej — równoważnej pojedynczemu perceptronowi.

Funkcja aktywacji „łamie" liniowość. Dzięki niej każda warstwa wnosi coś nowego — sieć z dwiema warstwami jest realnie potężniejsza niż sieć z jedną.

Twierdzenie o uniwersalnej aproksymacji (Cybenko, 1989) mówi, że sieć neuronowa z jedną warstwą ukrytą i nieliniową funkcją aktywacji może aproksymować dowolną ciągłą funkcję z dowolną dokładnością (przy wystarczającej liczbie neuronów). To fundamentalny wynik teoretyczny uzasadniający użycie funkcji aktywacji.

Ładowanie wizualizacji...

Przegląd najważniejszych funkcji aktywacji

1. Sigmoid (logistyczna)

Wzór: σ(z) = 1 / (1 + e⁻ᶻ)

Zakres: (0, 1)

Sigmoid przekształca dowolną wartość rzeczywistą w liczbę z przedziału (0, 1). Przy dużych dodatnich z → 1, przy dużych ujemnych z → 0. Wykres ma charakterystyczny kształt litery S.

Zalety:

  • Gładka i różniczkowalna — umożliwia backpropagation
  • Interpretowalna jako prawdopodobieństwo — idealna w warstwie wyjściowej klasyfikatorów binarnych
  • Historycznie ważna — dominowała w sieciach neuronowych do ~2012

Wady:

  • Zanikający gradient (vanishing gradient) — przy dużych |z| pochodna zbliża się do zera, blokując przepływ gradientów przez głębokie warstwy
  • Niesymetryczna — wyjścia zawsze dodatnie, co może spowalniać uczenie (wagi aktualizują się w jednym kierunku)
  • Kosztowna obliczeniowo — wymaga potęgowania (exp)

Kiedy używać: warstwa wyjściowa w klasyfikacji binarnej. Unikaj w warstwach ukrytych głębokich sieci.

2. Tanh (tangens hiperboliczny)

Wzór: tanh(z) = (eᶻ - e⁻ᶻ) / (eᶻ + e⁻ᶻ)

Zakres: (-1, 1)

Tanh jest „poprawioną" wersją sigmoida — symetryczna względem zera. Wyjścia mogą być ujemne, co oznacza, że średnia aktywacji jest bliższa zeru, co pomaga w uczeniu.

Zalety:

  • Symetryczna — wyjścia mogą być ujemne, lepsza dynamika gradientów
  • Silniejszy gradient niż sigmoid w okolicach z = 0

Wady:

  • Nadal cierpi na zanikający gradient (choć mniej niż sigmoid)
  • Kosztowna obliczeniowo

Kiedy używać: warstwy ukryte w sieciach RNN/LSTM. Rzadko w nowoczesnych CNN/transformerach.

3. ReLU (Rectified Linear Unit)

Wzór: ReLU(z) = max(0, z)

Zakres: [0, ∞)

ReLU to przełom, który umożliwił rewolucję głębokiego uczenia. Zasada jest banalna: jeśli wejście jest dodatnie — przepuść bez zmian; jeśli ujemne — wyzeruj.

Zalety:

  • Brak zanikającego gradientu (dla z > 0 pochodna = 1)
  • Ekstremalnie szybka — porównanie z zerem zamiast potęgowania
  • Rzadka aktywacja — część neuronów daje zero, co prowadzi do efektywniejszych reprezentacji
  • Umożliwia trenowanie bardzo głębokich sieci (setki warstw)

Wady:

  • Problem umierających neuronów (dying ReLU) — jeśli neuron zawsze otrzymuje ujemne wejścia, jego gradient wynosi 0 i nigdy się nie nauczy
  • Niesymetryczna — wyjścia zawsze ≥ 0

Kiedy używać: domyślny wybór dla warstw ukrytych w CNN i MLP. Najczęściej stosowana funkcja aktywacji.

4. Leaky ReLU

Wzór: LeakyReLU(z) = z jeśli z > 0, αz jeśli z ≤ 0 (typowo α = 0,01)

Zakres: (-∞, ∞)

Wariant ReLU rozwiązujący problem umierających neuronów — dla ujemnych wejść przepuszcza mały, niezerowy gradient (typowo 1% wartości).

Zalety:

  • Rozwiązuje problem dying ReLU
  • Szybka obliczeniowo

Wady:

  • Hiperparametr α wymaga dostrojenia
  • W praktyce nie zawsze lepsza od zwykłego ReLU

Warianty:

  • Parametric ReLU (PReLU) — α jest uczone podczas treningu
  • ELU — dla z < 0 używa krzywej eksponencjalnej: α(eᶻ - 1)

5. GELU (Gaussian Error Linear Unit)

Wzór: GELU(z) = z · Φ(z), gdzie Φ to dystrybuanta rozkładu normalnego

Zakres: (~-0,17, ∞)

GELU to gładka aproksymacja ReLU, która „miękko" wycisza wejścia zamiast ostro zerować. Dominuje w architekturach transformerów — BERT, GPT, Claude używają GELU.

Zalety:

  • Gładka — lepsza optymalizacja niż ReLU z ostrym „rogiem" w z = 0
  • Probabilistyczna interpretacja — neuron jest aktywowany proporcjonalnie do jego pozycji w rozkładzie
  • Empirycznie lepsza w transformerach

Wady:

  • Droższa obliczeniowo niż ReLU (choć w praktyce różnica jest marginalna)

Kiedy używać: transformery, modele językowe, modele wielomodalne.

6. Softmax

Wzór: softmax(zᵢ) = eᶻⁱ / Σⱼ eᶻʲ

Zakres: (0, 1), suma = 1

Softmax to nie tyle funkcja aktywacji pojedynczego neuronu, co transformacja wektora w rozkład prawdopodobieństwa. Każdy element wyjściowy jest dodatni, a ich suma wynosi 1.

Kiedy używać: warstwa wyjściowa w klasyfikacji wieloklasowej, mechanizm atencji w transformerach.

Porównanie — tabela zbiorcza

Funkcja Zakres Gradient Koszt Zastosowanie
Sigmoid (0, 1) Zanika Wysoki Wyjście binarne
Tanh (-1, 1) Zanika Wysoki RNN/LSTM
ReLU [0, ∞) Stabilny Niski CNN, MLP
Leaky ReLU (-∞, ∞) Stabilny Niski Wariant ReLU
GELU (~-0,17, ∞) Stabilny Średni Transformery
Softmax (0, 1) Średni Klasyfikacja wieloklasowa

Jak wybrać funkcję aktywacji?

Praktyczne reguły:

  1. Warstwy ukryte CNN/MLP → ReLU (domyślnie) lub Leaky ReLU (jeśli zauważysz dying neurons)
  2. Transformery / LLM → GELU
  3. RNN / LSTM → Tanh (wewnętrznie) + Sigmoid (bramki)
  4. Wyjście — klasyfikacja binarna → Sigmoid
  5. Wyjście — klasyfikacja wieloklasowa → Softmax
  6. Wyjście — regresja → brak aktywacji (liniowa)

W praktyce ReLU i GELU pokrywają ponad 90% zastosowań. Sigmoid i Tanh dominowały historycznie, ale w nowoczesnych głębokich sieciach pełnią rolę niszową (warstwy wyjściowe, bramki w LSTM).

Podsumowanie

Funkcja aktywacji to „dusza" sieci neuronowej. Bez niej nie ma uczenia się złożonych wzorców. Ewolucja od sigmoida (lata 80.) przez ReLU (2012) po GELU (2016+) odzwierciedla rosnącą głębokość sieci i coraz wyższe wymagania dotyczące stabilności gradientów. Każda nowa generacja architektur przynosi nowe funkcje aktywacji — ale fundamentalna zasada pozostaje: nieliniowość pozwala sieci być czymś więcej niż sumą swoich części.