ML Atlas

Kurs uczenia maszynowego od zera · Lekcja 7.1 · 32 z 33 gotowych lekcji · 12 min

Sieci neuronowe: wiele prostych elementów razem

W skrócie

Sieć neuronowa łączy proste elementy, z których każdy rysuje jedną linię i ją zagina. Więcej neuronów ukrytych pozwala granicom oplatać kwiaty irysa.

Rozgrzewka Dwa pytania z wcześniejszych lekcji. Minuta, a lekcji nie blokuje.
Z lekcji 5.6: Który model kiedy? Prawda czy fałsz: „model ze średnią wyższą o 0,3 pkt proc. jest lepszy”.

Pokaż odpowiedź

Poprawna odpowiedź: Fałsz: przy takiej różnicy podziały dzielą się prawie po równo

Na guzach SVM ma 94,2%, a gradient boosting 93,9%. SVM ma więcej trafień w 10 podziałach, boosting w 7, w 3 jest remis.

Z lekcji 5.5: Maszyny wektorów nośnych i jądra Które kwiaty wyznaczają granicę liniowego SVM?

Pokaż odpowiedź

Poprawna odpowiedź: Wektory nośne: kwiaty na brzegu pasa, w nim albo za nim

Pozostałe kwiaty można usunąć, a granica się nie zmieni. Przy C = 100 trzymają ją 4 kwiaty z 70.

Regresja logistyczna z lekcji 5 umie narysować tylko prostą granicę. Drzewa rysują tylko prostokąty. A co, jeśli klasy owijają się wokół siebie? Można by próbować wymyślać właściwą krzywą ręcznie przy każdym problemie — albo zbudować model z elementów tak prostych, że każdy umie narysować tylko prostą, i pozwolić, żeby ich połączenie narysowało cokolwiek. Na tym zakładzie opierają się sieci neuronowe.

Przewidź, potem sprawdź Zwiększasz liczbę neuronów ukrytych z 2 do 32. Co stanie się z dokładnością na zbiorze testowym?
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ć.

Pokaż odpowiedź

Poprawna odpowiedź: Nie wzrośnie, a nawet spadnie, choć na treningu będzie lepsza

Dwa neurony dają 81,3% na teście, a 32 neurony 70,7%, chociaż dokładność treningowa rośnie z 81,3% do 94,7%. Większa sieć dopasowuje się do przypadkowych szczegółów 75 kwiatów treningowych. Dwa z trzech gatunków nakładają się w tych dwóch pomiarach, więc bezbłędnego podziału i tak nie ma.

Spróbuj

  • Ustaw suwak neuronów ukrytych na najmniejszą wartość i naciśnij Trenuj. Spójrz na obszary decyzji: ile prostych krawędzi widzisz?
  • Zwiększ liczbę neuronów ukrytych i znowu naciśnij Trenuj. Patrz, jak granice się wyginają, i porównaj trafność.
  • Ustaw suwak neuronów ukrytych na największą wartość i wytrenuj sieć. Czy obszary zaczynają się wyginać wokół pojedynczych kwiatów? Zastanów się, czy nowy kwiat w takiej zatoczce naprawdę należałby do tego gatunku.
  • Spójrz na kwiaty, w których dwa gatunki na siebie zachodzą. Czy jakakolwiek granica rozdzieli je tylko na podstawie tych dwóch pomiarów?

Gdy już sprawdzisz to w labie, zobaczmy, co się tam właściwie działo.

Pomysł w prostych słowach

Sieć neuronowa składa się z małych elementów zwanych neuronami. Każdy neuron robi coś, co już znamy: liczy ważoną sumę wejść, dodaje wyraz wolny i przepuszcza wynik przez prostą funkcję zginającą, zwaną funkcją aktywacji. Pojedynczy neuron to prawie regresja logistyczna; dzieli płaszczyznę jedną prostą.

Neurony układa się w warstwy. Wejścia (tutaj dwa pomiary kwiatu) trafiają do warstwy ukrytej, w której każdy neuron rysuje własną prostą i melduje, jak daleko i po której stronie leży punkt. Warstwa wyjściowa łączy te meldunki w ostateczną decyzję. Ponieważ każdy neuron ukryty zagina swój sygnał, ich połączenie daje granice z narożnikami i łukami.

Wyobraź sobie drużynę bardzo prostych wartowników pilnujących pola. Każdy umie powiedzieć tylko „intruz jest po lewej” albo „po prawej” od jednego prostego płotu. Jeden wartownik na wiele się nie zda. Ale dowódca, który słucha wielu wartowników, każdego z płotem w innym miejscu, potrafi wskazać obszar niemal dowolnego kształtu.

Dlaczego to działa

Jeden neuron liczy

wyjście = f(w · x + b)

gdzie x to lista wejść, w to wagi, b to wyraz wolny, a f to funkcja aktywacji. Bez f układanie warstw nie miałoby sensu: ważona suma ważonych sum to wciąż jedna ważona suma, więc cała sieć rysowałaby jedną prostą. Aktywacja to zagięcie, które zostaje. Dzięki niej każdy neuron ukryty dokłada jedno zgięcie, a odpowiednio wiele zgięć przybliży każdą rozsądną granicę. Więcej neuronów ukrytych to więcej możliwych zgięć — więcej elastyczności, która, jak nauczyła nas lekcja 7, działa w obie strony.

Wagi uczy się narzędziami z lekcji 4 i 5. Sieć przewiduje, strata logarytmiczna mierzy, jak bardzo się myli, a spadek gradientu przesuwa każdą wagę w dół. Jedyna nowa sztuczka dotyczy tego, jak znaleźć gradient dla wag ukrytych głęboko w sieci: algorytm propagacji wstecznej stosuje regułę łańcuchową z rachunku różniczkowego od wyjścia wstecz, warstwa po warstwie, i mówi każdej wadze, ile dołożyła do błędu.

Przykładem w tej lekcji jest zbiór Iris: 150 kwiatów trzech gatunków, po 50 z każdego, rozsławiony przez artykuł Ronalda Fishera z 1936 roku. Bierzemy dwa z czterech pomiarów, więc każdy kwiat to punkt na płaszczyźnie, a nauczona sieć przypisuje przewidywany gatunek każdemu miejscu tej płaszczyzny.

Pomysł jest stary — Frank Rosenblatt zbudował perceptron, pojedynczy uczący się neuron, w 1958 roku — ale sieci zdominowały dziedzinę dopiero wtedy, gdy dane, moc obliczeniowa i sztuczki treningowe urosły na tyle, żeby trenować wiele warstw.

Częsty błąd

„Neuronowa” sugeruje mózg i ta sugestia wprowadza w błąd. Sztuczny neuron to ważona suma ze zgięciem, a nie model biologicznej komórki, a sieć nie rozumie kwiatów; dopasowuje funkcję do przykładów. Praktyczny błąd to założenie, że większa sieć jest zawsze lepsza. Sieć z wieloma neuronami ukrytymi na małym zbiorze potrafi uczyć się na pamięć dokładnie tak jak głębokie drzewo albo wielomian wysokiego stopnia. Jej rozmiar trzeba dobierać na danych walidacyjnych, a w czasie treningu pilnować tej samej różnicy między wynikiem treningowym a testowym, którą poznaliśmy w lekcji 7.

Ułóż dość warstw, nakarm je dość dużą ilością tekstu, a jedno zadanie przewidywania zamieni się w coś, co pisze. W ostatniej lekcji zobaczymy, jak sieć uczy się języka, zgadując następne słowo.

Chcesz głębiej? Kurs NN zaczyna od jednego neuronu.

Quiz

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

1. Dlaczego sieć neuronowa potrzebuje funkcji aktywacji?
Pokaż odpowiedź

Poprawna odpowiedź: Bo bez niej kilka warstw działa jak jedna ważona suma i rysuje prostą

Aktywacja zagina sygnał; bez zgięć kolejne warstwy nie dodają nic ponad jeden model liniowy.

2. Co daje dodanie neuronów ukrytych?
Pokaż odpowiedź

Poprawna odpowiedź: Daje elastyczność: złożone granice, ale też ryzyko uczenia się na pamięć

Więcej neuronów to więcej możliwych zgięć, które mogą uchwycić prawdziwą strukturę albo przeuczyć model, zależnie od danych.

3. Co liczy propagacja wsteczna?
Pokaż odpowiedź

Poprawna odpowiedź: Ile każda waga dołożyła do błędu, żeby gradient mógł ją poprawić

Propagacja wsteczna stosuje regułę łańcuchową od wyjścia wstecz i daje gradient dla każdej wagi.

Najważniejsze wnioski

  • Neuron to ważona suma plus zginająca funkcja aktywacji.
  • Warstwa ukryta łączy wiele prostych linii w zakrzywione granice.
  • Wagi uczy się spadkiem gradientu; propagacja wsteczna dostarcza gradient dla każdej warstwy.
  • Więcej neuronów ukrytych to więcej elastyczności, którą trzeba kontrolować danymi walidacyjnymi.

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

Matematyka

Jeden neuron liczy a = f(w·x + b), gdzie x to wejścia, w wagi, b wyraz wolny, a f aktywacja. Warstwa ukryta z h neuronami to to samo w zapisie macierzowym: a = f(W₁x + b₁). Warstwa wyjściowa liczy potem ŷ = softmax(W₂a + b₂).

  • Bez f warstwy się zapadają: W₂(W₁x + b₁) + b₂ = (W₂W₁)x + (W₂b₁ + b₂), czyli jedno przekształcenie liniowe. To aktywacja sprawia, że głębokość się opłaca.
  • Trening minimalizuje stratę logarytmiczną L = −(1/n) Σ log ŷᵢ,yᵢ, gdzie ŷᵢ,yᵢ to prawdopodobieństwo, jakie model dał prawdziwemu gatunkowi kwiatu i.
  • Propagacja wsteczna to reguła łańcuchowa stosowana od wyjścia do tyłu: ∂L/∂W₁ = ∂L/∂ŷ · ∂ŷ/∂a · ∂a/∂W₁.
  • Spadek gradientu aktualizuje potem każdą wagę: w ← w − η · ∂L/∂w, gdzie η to współczynnik uczenia.
W kodzie (Python)

Mała sieć na danych z laba: dwa pomiary działki kielicha, połowa kwiatów do treningu (75), standaryzowane wejścia, neurony tanh, 2 i 32 neurony ukryte. To trener scikit-learn, a nie labowy:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler

X, y = load_iris(return_X_y=True)
X = X[:, :2]  # długość i szerokość działki kielicha, jak w labie
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.5, stratify=y, random_state=1)
for h in (2, 32):
    net = make_pipeline(StandardScaler(), MLPClassifier(hidden_layer_sizes=(h,), activation="tanh", solver="lbfgs", max_iter=5000, random_state=0))
    net.fit(X_tr, y_tr)
    print(f"{h:2d} hidden units: train {net.score(X_tr, y_tr):.1%}, test {net.score(X_te, y_te):.1%}")

Wynik

 2 hidden units: train 84.0%, test 74.7%
32 hidden units: train 96.0%, test 66.7%

Wzór jest ten z lekcji: większa sieć lepiej dopasowuje się do kwiatów treningowych i gorzej radzi sobie z testowymi. Własny trener laba (spadek gradientu z pędem) daje 81,3% i 70,7% na teście dla 2 i 32 neuronów, więc liczby się różnią, ale wzór nie.

Dla praktyka
  • Standaryzuj wejścia przed treningiem (odejmij średnią treningową, podziel przez odchylenie treningowe). Nieprzeskalowane cechy spowalniają spadek gradientu albo czynią go niestabilnym.
  • Liczbę neuronów ukrytych wybieraj na danych walidacyjnych, nie po trafności treningowej. Większa sieć prawie zawsze lepiej dopasowuje się do zbioru treningowego (96,0% wobec 84,0% wyżej).
  • Małe zbiory, jak 75 kwiatów treningowych, łatwo zapamiętać. Zanim dodasz neurony, spróbuj mniejszej sieci, regularyzacji wag albo wczesnego zatrzymania.
  • Różne losowe wagi początkowe dają różne sieci. Dla uczciwego porównania ustal używane ziarna i porównuj po kilku z nich.
  • Na danych tabelarycznych mocniejszą bazą bywa wzmacnianie gradientowe drzew (gradient boosting). Wypróbuj go, zanim sięgniesz po sieć.

Więcej w Atlasie

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