ML Atlas

Kurs: sieci neuronowe od środka · Lekcja 4 z 12 · 13 min

Wyjście i strata: softmax i entropia krzyżowa

W skrócie

Softmax zamienia wyniki sieci w prawdopodobieństwa, a entropia krzyżowa mierzy, jak bardzo się mylą. Czemu sieć uczy się na niej, a nie na trafności?

Rozgrzewka Dwa pytania z kursu ML, na których ta lekcja się opiera. Minuta, a lekcji nie blokuje.
Z kursu ML, lekcja 2.1: Klasyfikacja: rysowanie granicy Dlaczego regresja logistyczna używa straty logarytmicznej zamiast błędu kwadratowego?

Pokaż odpowiedź

Poprawna odpowiedź: Bo mocno karze pewne i błędne odpowiedzi, co pasuje do prawdopodobieństw

Strata logarytmiczna gwałtownie rośnie, gdy prawdopodobieństwo prawdziwej klasy zbliża się do zera, i zniechęca do nieuzasadnionej pewności.

Z kursu ML, lekcja 2.1: Klasyfikacja: rysowanie granicy Co zwraca regresja logistyczna, zanim zastosuje się próg?

Pokaż odpowiedź

Poprawna odpowiedź: Liczbę od 0 do 1 — prawdopodobieństwo jednej z klas

Funkcja sigmoidalna zamienia ważoną sumę w prawdopodobieństwo, a próg zamienia je w decyzję.

Ostatnia warstwa sieci daje po jednej liczbie na klasę. Mogą być ujemne, mogą być ogromne i nie sumują się do niczego konkretnego. Żeby je czytać jak prawdopodobieństwa i żeby sieć miała się z czego uczyć, potrzebne są dwa klocki: softmax na wyjściu i entropia krzyżowa jako strata.

Przewidź, potem sprawdź Model daje prawdziwej klasie przykładu prawdopodobieństwo 0,01. Ile wynosi entropia krzyżowa tego przykładu?
Jak bardzo jesteś pewny(-a)?

Eksperyment

Ten interaktywny eksperyment działa w przeglądarce z włączonym JavaScriptem. Tekst wokół opisuje, co w nim widać. W eksperymencie: regresja logistyczna na jednej cesze biopsji: krzywa sigmoidalna, a suwak progu prawdopodobieństwa przesuwa cięcie na osi cechy; wklęsłe punkty konturu dają 92,4% trafności i log-loss 0,222, tekstura tylko 70,2% i 0,595.

Pokaż odpowiedź

Poprawna odpowiedź: Około 4,6

Entropia krzyżowa to minus logarytm naturalny prawdopodobieństwa prawdziwej klasy: −ln 0,01 ≈ 4,61. Przy 0,4 byłoby tylko 0,92. W labie to ta sama strata, uśredniona po biopsjach testowych: wklęsłe punkty konturu dają trafność 92,4% i log-loss 0,222, a tekstura 70,2% i 0,595.

Spróbuj

  • Obejrzyj wszystkie trzy cechy i zostań przy tej, której log-loss na walidacji jest poniżej 0,25. To cel labu. Liczy go na 5 częściach zbioru treningowego (398 biopsji), bez zaglądania w 171 testowych.
  • Przesuń próg z 0,5 na 0,1, a potem na 0,9. Trafność się zmienia, log-loss stoi w miejscu, bo liczy się z prawdopodobieństw, zanim jakikolwiek próg je przetnie.
  • Porównaj teksturę z wklęsłymi punktami: krzywa tekstury rośnie łagodnie, więc model rzadko jest pewny i często się myli.

Pomysł w prostych słowach

Surowe wyniki ostatniej warstwy to logity. Softmax robi z nich prawdopodobieństwa w dwóch ruchach: każdy logit podnosi do potęgi e, co daje liczby dodatnie, a potem dzieli przez ich sumę, więc wszystko sumuje się do 1. Kolejność zostaje: największy logit dostaje największe prawdopodobieństwo. Przy dwóch klasach softmax to dokładnie sigmoida z regresji logistycznej, którą widzisz w labie.

Entropia krzyżowa ocenia jeden przykład jedną liczbą: minus logarytm prawdopodobieństwa, które model dał prawdziwej klasie. Pewna i trafna odpowiedź (0,99) kosztuje 0,01. Niepewna (0,4) kosztuje 0,92. Pewna i błędna (0,01) kosztuje 4,61. Log-loss z kursu ML to ta sama strata dla dwóch klas.

Softmax ma też pokrętło, temperaturę: dzieli logity przez T przed potęgowaniem. W widżecie hasła Softmax dla zdania „Kot siedzi na …” słowo „parapecie” ma przy T = 1 prawdopodobieństwo 35%, a przy T = 0,1 już 95%. Niska temperatura wyostrza rozkład, wysoka go spłaszcza.

Dlaczego to działa

Spadek gradientu potrzebuje odpowiedzi na pytanie: w którą stronę przesunąć wagę, żeby strata spadła? Trafność tej odpowiedzi nie daje. Zmienia się skokami: mała zmiana wagi zwykle nie przestawia żadnej decyzji, więc trafność stoi w miejscu, a jej nachylenie wynosi zero prawie wszędzie. W kodzie niżej nachylenie trafności to 0,0, a entropii krzyżowej 0,059.

Entropia krzyżowa zmienia się płynnie przy każdej zmianie prawdopodobieństw, więc gradient jest zawsze. Do tego ma prostą postać: po logitach to po prostu prawdopodobieństwo minus prawdziwa etykieta. Im bardziej pewna pomyłka, tym większy gradient, a tym mocniej sieć poprawia wagi. Kara rośnie bez końca, gdy prawdopodobieństwo prawdziwej klasy dąży do zera, więc sieć uczy się nie być pewna bez powodu.

Częsty błąd

Prawda czy fałsz: „Wystarczy uczyć sieć na trafności, bo to ją i tak mierzymy.” Fałsz. Trafność zmienia się skokami, więc jej gradient prawie wszędzie wynosi zero i spadek gradientu nie wie, dokąd iść. Trafność nie widzi też, jak bardzo model się myli: odpowiedź 0,4 i odpowiedź 0,01 dla prawdziwej klasy to dla niej ta sama pomyłka, a dla entropii krzyżowej 0,92 wobec 4,61. Dlatego sieć uczy się na entropii krzyżowej, a trafność liczymy na walidacji, gdy chcemy wiedzieć, ile przykładów model trafia.

Quiz

Trzy pytania na sprawdzenie się. Wybierz odpowiedź albo rozwiń odpowiedź pod pytaniem. Z klawiatury: strzałki wybierają, Enter albo spacja zatwierdza.

1. Model daje prawdziwej klasie 0,01. Ile wynosi entropia krzyżowa tego przykładu?
Pokaż odpowiedź

Poprawna odpowiedź: Około 4,6

Entropia krzyżowa to −ln p prawdziwej klasy, a −ln 0,01 ≈ 4,61.

2. Co softmax robi z logitami?
Pokaż odpowiedź

Poprawna odpowiedź: Zamienia je w liczby dodatnie, które sumują się do 1, i zachowuje ich kolejność

Potęgowanie daje liczby dodatnie, dzielenie przez sumę daje 1, a większy logit dostaje większe prawdopodobieństwo.

3. Dlaczego nie uczymy sieci wprost na trafności?
Pokaż odpowiedź

Poprawna odpowiedź: Bo zmienia się skokami i jej gradient prawie wszędzie wynosi zero

Mała zmiana wagi zwykle nie przestawia żadnej decyzji, więc trafność nie mówi, w którą stronę iść.

Najważniejsze wnioski

  • Softmax zamienia logity w prawdopodobieństwa: dodatnie, sumują się do 1, kolejność zostaje; przy dwóch klasach to sigmoida.
  • Entropia krzyżowa to −ln prawdopodobieństwa prawdziwej klasy: pewna pomyłka kosztuje dużo, pewna trafna odpowiedź prawie nic.
  • Sieć uczy się na entropii krzyżowej, bo zawsze ma gradient; trafność zmienia się skokami i gradientu nie daje.
  • Temperatura softmaxu wyostrza rozkład, gdy jest niska, i spłaszcza, gdy jest wysoka.

Głębiej: wzór, kod, praktyka

Matematyka

Softmax logitów z₁, …, z_K: p_k = e^(z_k) / Σ_j e^(z_j). Entropia krzyżowa jednego przykładu z prawdziwą klasą y: L = −ln p_y.

  • Gradient po logitach: ∂L/∂z_k = p_k − 1 dla prawdziwej klasy i p_k dla pozostałych, czyli prawdopodobieństwo minus etykieta.
  • Dla dwóch klas z logitami z i 0: p = e^z / (e^z + 1) = 1 / (1 + e^(−z)), czyli sigmoida.
  • Temperatura: p_k = e^(z_k / T) / Σ_j e^(z_j / T). Gdy T maleje do 0, rozkład zmierza do jedynki przy największym logicie.
  • Odjęcie tej samej liczby od wszystkich logitów nie zmienia softmaxu; w praktyce odejmuje się maksimum, żeby potęgi nie przepełniły pamięci.
W kodzie (Python)

Softmax i entropia krzyżowa w numpy, logity z widżetu „Kot siedzi na …” i nachylenie trafności wobec nachylenia entropii krzyżowej:

import numpy as np

def softmax(z, T=1.0):
    e = np.exp((z - z.max()) / T)  # odjęcie maksimum nie zmienia wyniku, chroni przed przepełnieniem
    return e / e.sum()

# entropia krzyżowa jednego przykładu: −ln(prawdopodobieństwo prawdziwej klasy)
for p in [0.99, 0.4, 0.01]:
    print(f"p(true class) = {p}: cross-entropy {-np.log(p):.2f}")

# logity „Kot siedzi na …” z widżetu softmax-temperature
z = np.array([3.1, 2.8, 2.2, 1.9, 1.5, 0.9, 0.6, -0.4])
for T in [1.0, 0.1]:
    print(f"T = {T}: top word {softmax(z, T)[0]:.0%}")

# trafność a entropia krzyżowa przy małej zmianie wagi w
x, y = np.array([-2.0, -1.0, 0.5, 1.0, 2.0]), np.array([0, 1, 0, 1, 1])
p = lambda w: 1 / (1 + np.exp(-w * x))  # neuron z sigmoidą
accuracy = lambda w: np.mean((p(w) > 0.5) == y)
cross_entropy = lambda w: -np.mean(y * np.log(p(w)) + (1 - y) * np.log(1 - p(w)))
h = 1e-3
print(f"accuracy {accuracy(1.0):.1f}, slope {(accuracy(1 + h) - accuracy(1 - h)) / (2 * h):.1f}")
print(f"cross-entropy {cross_entropy(1.0):.3f}, slope {(cross_entropy(1 + h) - cross_entropy(1 - h)) / (2 * h):.3f}")

Wynik

p(true class) = 0.99: cross-entropy 0.01
p(true class) = 0.4: cross-entropy 0.92
p(true class) = 0.01: cross-entropy 4.61
T = 1.0: top word 35%
T = 0.1: top word 95%
accuracy 0.6, slope 0.0
cross-entropy 0.571, slope 0.059

Nachylenie trafności to zero, więc nie mówi, dokąd przesunąć wagę. Dodatnie nachylenie entropii krzyżowej mówi: zmniejsz w, a strata spadnie. Uruchomione w numpy 2.1.3.

Dla praktyka
  • Ostatnia warstwa sieci zwraca logity, a softmax i entropię krzyżową licz razem jedną funkcją straty z biblioteki: liczy logarytm softmaxu stabilnie, bez przepełnienia.
  • Do wyboru modelu porównuj log-loss na walidacji, a próg decyzji ustaw osobno, na końcu, według kosztów pomyłek.
  • Strata treningowa, która dalej spada, gdy walidacyjna już rośnie, to znak przeuczenia: zatrzymaj trening tam, gdzie walidacyjna była najniższa.
  • Prawdopodobieństwa z softmaxu bywają zbyt pewne. Gdy mają znaczyć częstość, a nie tylko kolejność, sprawdź kalibrację na walidacji.

Więcej w Atlasie

Hasła encyklopedii o pojęciach z tej lekcji: