ML Atlas

06 · Sieci · 4 min czytania · Interaktywne · aktualizacja

Czym jest softmax i dlaczego zamienia logity w prawdopodobieństwa?

W skrócie

Softmax zamienia wektor logitów na rozkład prawdopodobieństwa: każdy wynik podnosi do e^z i dzieli przez sumę, więc wyjścia są dodatnie i sumują się do 1.

Co to jest

Softmax to funkcja, która wektor K liczb rzeczywistych (logitów) zamienia na K dodatnich liczb sumujących się do 1: pᵢ = exp(zᵢ) / Σⱼ exp(zⱼ). Wynik można czytać jako rozkład prawdopodobieństwa nad K wzajemnie wykluczającymi się klasami.

To standardowa warstwa wyjściowa w klasyfikacji wieloklasowej: w sieciach neuronowych, w wieloklasowej regresji logistycznej (regresja softmax, multinomialna), w XGBoost (multi:softprob) i w modelach językowych, gdzie zamienia logity na rozkład nad następnym tokenem. Dla dwóch klas sprowadza się do funkcji sigmoidalnej.

Mechanizm — dlaczego tak działa

Dwie własności są wymuszone konstrukcją: wykładnik gwarantuje dodatniość, a dzielenie przez sumę — normalizację. Trzecia jest wyborem: dlaczego akurat e^z, a nie np. z²? Odpowiedź daje statystyka. Softmax to funkcja łącząca rozkładu kategorialnego w rodzinie wykładniczej, a logity są wtedy logarytmami stosunków prawdopodobieństw: zᵢ − zⱼ = ln(pᵢ / pⱼ). Różnica logitów o 1 to stosunek szans e ≈ 2,72, o 2 — około 7,4, o 5 — około 148. Jeśli cechy wpływają na szanse addytywnie w skali logarytmicznej, softmax jest naturalną konwersją.

Przesunięcie wszystkich logitów o tę samą stałą nie zmienia wyniku, więc znaczenie mają tylko różnice między nimi. Softmax jest „miękkim argmaksem”: gdy jeden logit wyraźnie dominuje, jego prawdopodobieństwo zbliża się do 1; gdy logity są równe, każda klasa dostaje 1/K. Temperatura T w softmax(z / T) reguluje tę ostrość bez zmiany kolejności klas.

Z entropią krzyżową softmax tworzy parę o wyjątkowo prostym gradiencie: pochodna straty po logicie klasy i wynosi pᵢ − yᵢ, czyli „przewidywane minus prawdziwe”. Dlatego biblioteki łączą obie operacje w jedną (log-softmax), co jest też stabilne numerycznie. Samo e^z przekracza zakres float32 już przy z ≈ 89, więc przed wykładnikiem odejmuje się maksimum logitów — wynik się nie zmienia, a przepełnienie znika.

Zastrzeżenie: softmax zawsze zwraca rozkład sumujący się do 1, także dla wejść zupełnie niepodobnych do danych treningowych. Wysokie pᵢ to pewność względna między znanymi klasami, nie dowód, że model „wie”.

Na przykładzie

Na zbiorze Digits (70% trening, random_state=0) wytrenowaliśmy wieloklasową regresję logistyczną; jej predict_proba to dokładnie softmax z logitów zwracanych przez decision_function. Pierwszy obraz testowy przedstawia jedynkę. Logity najwyżej ocenianych klas: 5,99 dla „1”, 4,91 dla „8” i 2,00 dla „4”. Softmax daje im 72,9%, 24,6% i 1,3%. Stosunek dwóch pierwszych to 2,96, czyli e podniesione do różnicy logitów 1,08.

Przy temperaturze T = 2 ten sam obraz dostaje 51% dla „1” i 30% dla „8”, przy T = 0,5 — 90% i 10%; decyzja się nie zmienia. Prosty przykład liczbowy: logity [2; 0,5; −1] dają 78,6%, 17,5% i 3,9%, przy T = 0,1 — praktycznie 100%, 0% i 0%, a przy T = 10 — 38,4%, 33,1% i 28,5%. Na całym teście model trafił w 97,0% przypadków, a średnie najwyższe prawdopodobieństwo wyniosło 0,90.

Ta ilustracja działa w przeglądarce z włączonym JavaScriptem: dla zdania „Kot siedzi na …” suwak temperatury zmienia rozkład prawdopodobieństw następnego słowa: przy T = 1 „parapecie” ma 35%, przy T = 0,1 już 95%.

Dane: Digits (ręcznie pisane cyfry 8×8)

W praktyce

  • PyTorch: nn.CrossEntropyLoss przyjmuje surowe logity i sam liczy log-softmax — nie dodawaj nn.Softmax przed stratą. Do predykcji torch.softmax(logits, dim=-1).
  • scikit-learn: LogisticRegression przy wielu klasach używa softmaksu; predict_proba zwraca jego wynik.
  • XGBoost: objective="multi:softprob" zwraca prawdopodobieństwa, "multi:softmax" tylko klasę.
  • Modele językowe: logity nad słownikiem liczącym dziesiątki tysięcy tokenów → softmax → próbkowanie z temperaturą, top-k lub top-p.
  • Typowy błąd: softmax w zadaniu wieloetykietowym (kilka klas naraz) — tam potrzebny jest niezależny sigmoid dla każdej klasy.

Najczęstsze pytania

Czym różni się softmax od sigmoidu?
Sigmoid zamienia jedną liczbę na prawdopodobieństwo jednej klasy (decyzja tak/nie). Softmax zamienia K liczb na rozkład nad K wzajemnie wykluczającymi się klasami. Dla K = 2 softmax jest matematycznie tym samym co sigmoid różnicy dwóch logitów.
Dlaczego softmax używa funkcji wykładniczej?
Bo wtedy różnice logitów są logarytmami stosunków szans, co zgadza się z regresją logistyczną i rozkładem kategorialnym, a gradient entropii krzyżowej upraszcza się do „przewidywane minus prawdziwe”. Wykładnik daje też dodatniość i niezależność od wspólnego przesunięcia logitów.
Co to jest temperatura w softmaksie?
Liczba T, przez którą dzieli się logity przed softmaksem. T > 1 spłaszcza rozkład (więcej niepewności, bardziej losowe próbkowanie), T < 1 go wyostrza, a T → 0 daje argmax. Kolejność klas się nie zmienia, więc klasa o największej szansie zostaje ta sama.

Źródła

  • Bridle, J. S. (1990). "Probabilistic interpretation of feedforward classification network outputs, with relationships to statistical pattern recognition". W: Neurocomputing, NATO ASI Series F 68, Springer.
  • Goodfellow, I., Bengio, Y., Courville, A. (2016). Deep Learning, MIT Press, rozdz. 6.2.2.3 "Softmax units for multinoulli output distributions". https://www.deeplearningbook.org/contents/mlp.html
  • Bishop, C. M. (2006). Pattern Recognition and Machine Learning, Springer, rozdz. 4.3.4 "Multiclass logistic regression".
  • Zhang, A., Lipton, Z. C., Li, M., Smola, A. J. Dive into Deep Learning, rozdz. 4.1 "Softmax regression". https://d2l.ai/chapter_linear-classification/softmax-regression.html

Zobacz też