ML Atlas

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

Neuron: jedna prosta

W skrócie

Neuron liczy ważoną sumę pomiarów, dodaje bias i patrzy na znak wyniku, więc rysuje jedną prostą. Lekcja pokazuje, kiedy taka prosta wystarcza, a kiedy nie.

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 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ę.

Z kursu ML, lekcja 1.6: Spadek gradientu: nauka małymi krokami Dlaczego w sieciach neuronowych używa się spadku gradientu zamiast dokładnego wzoru?

Pokaż odpowiedź

Poprawna odpowiedź: Bo wzoru na najlepsze parametry zwykle nie ma, a gradient da się policzyć

Spadek gradientu potrzebuje tylko nachylenia straty w bieżącym punkcie, a to jest dostępne nawet przy miliardach parametrów.

Sieć neuronowa to wiele neuronów połączonych w warstwy. Zanim je połączymy, sprawdźmy, co potrafi jeden. Znasz go już prawie cały: regresja logistyczna z kursu ML liczyła ważoną sumę cech i dopiero potem zamieniała ją w odpowiedź. Neuron robi to samo. Pytanie brzmi: czego jedna ważona suma nigdy nie zrobi?

Przewidź, potem sprawdź Perceptron, czyli jeden neuron z regułą uczenia, oddziela setosę od dwóch pozostałych gatunków irysów, a potem versicolor od virginiki. Czy w obu zadaniach kiedyś przestanie poprawiać wagi?
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: Jeden neuron na irysach: suwaki wag i biasu przesuwają prostą; perceptron rozdzielający setosę zatrzymuje się po 3 epokach (8 poprawek), a przy versicolor/virginica poprawia się bez końca (4–11 poprawek na epokę).

Pokaż odpowiedź

Poprawna odpowiedź: Tylko przy setosie; przy versicolor i virginice nigdy

Przy setosie perceptron zatrzymuje się po 3 epokach, łącznie po 8 poprawkach. Przy versicolor i virginice po 100 epokach wciąż poprawia wagi, od 4 do 11 razy na epokę, bo tych gatunków nie rozdziela żadna prosta.

Spróbuj

  • Zostań przy zadaniu „setosa czy nie” i przesuwaj suwaki, aż Twoja prosta trafi wszystkie 150 kwiatów. To cel labu.
  • Kliknij trzy razy „1 epoka” i patrz na przerywaną linię perceptronu: po każdej pomyłce przesuwa się w stronę źle ocenionego kwiatu.
  • Przełącz na „versicolor czy virginica” i klikaj „10 epok”. Słupki poprawek nie znikają. Suwaki mają tylko 9 wartości, co 0,5 od −2 do 2, więc najlepsza prosta z suwaków trafia tu 96 ze 100 kwiatów. Najlepsza możliwa prosta, bez tej siatki, trafia 97 (o tym niżej), nigdy wszystkie.

Pomysł w prostych słowach

Neuron dostaje pomiary kwiatu, na przykład długość i szerokość działki kielicha. Każdy pomiar mnoży przez jego wagę, sumuje, dodaje bias i patrzy na znak wyniku: dodatni znaczy „setosa”, ujemny „inny gatunek”. Waga mówi, jak mocno liczy się dany pomiar, a bias przesuwa próg.

Punkty, dla których suma wychodzi dokładnie zero, leżą na jednej prostej. To granica decyzji neuronu: po jednej stronie odpowiedź „tak”, po drugiej „nie”. Zmiana wag obraca tę prostą, zmiana biasu ją przesuwa. Niczego innego jeden neuron nie narysuje.

Dlaczego to działa

Perceptron Rosenblatta (1958) uczy się na pomyłkach. Bierze kwiaty po kolei. Gdy odpowiada dobrze, nic nie zmienia. Gdy się myli, dodaje pomiary tego kwiatu do wag albo je odejmuje, a prosta przesuwa się tak, żeby ten kwiat trafił na właściwą stronę. Jedno przejście przez wszystkie kwiaty to epoka.

Twierdzenie Novikoffa (1962) mówi: jeśli istnieje prosta, która rozdziela obie klasy bez błędu, perceptron znajdzie jakąś taką prostą po skończonej liczbie poprawek. Setosa ma krótsze i szersze działki niż reszta, więc taka prosta istnieje. Versicolor i virginica nakładają się w kilku kwiatach: nawet najlepsza możliwa prosta trafia 97 ze 100. Zawsze zostaje kwiat do poprawienia, więc reguła nigdy się nie zatrzymuje, a prosta skacze tam i z powrotem.

Neuron to prawie regresja logistyczna: ta sama ważona suma. Perceptron ma jednak twardy próg i uczy się tylko na pomyłkach. Regresja logistyczna daje prawdopodobieństwo i uczy się spadkiem gradientu na wszystkich przykładach. Dzisiejsze sieci idą drugą drogą: ich neurony mają gładkie funkcje aktywacji (lekcja 3) i uczą się na entropii krzyżowej (lekcja 4).

Częsty błąd

Prawda czy fałsz: „Perceptron w końcu się nauczy, wystarczy dłużej trenować.” Fałsz. Gwarancja zatrzymania dotyczy tylko klas, które da się rozdzielić jedną prostą. W labie versicolor i virginica po 100 epokach wciąż dają od 4 do 11 poprawek na epokę. Klasyczny przykład to XOR: punkty (0, 0) i (1, 1) w jednej klasie, (0, 1) i (1, 0) w drugiej. Żadna prosta ich nie rozdzieli, więc jeden neuron nie zejdzie do zera błędów bez względu na liczbę epok. Pomaga dopiero warstwa ukryta (lekcje 2 i 3).

Quiz

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

1. Co liczy jeden neuron, zanim odpowie „tak” albo „nie”?
Pokaż odpowiedź

Poprawna odpowiedź: Ważoną sumę pomiarów plus bias i patrzy na jej znak

Każdy pomiar mnoży się przez wagę, suma plus bias decyduje: dodatnia to „tak”, ujemna to „nie”.

2. Zwiększasz tylko bias neuronu. Co dzieje się z jego granicą na dwóch pomiarach?
Pokaż odpowiedź

Poprawna odpowiedź: Przesuwa się równolegle, bo bias nie zmienia kierunku prostej

Kierunek prostej w₁·x₁ + w₂·x₂ + b = 0 zależy od wag, a bias tylko ją przesuwa.

3. Perceptron na versicolor i virginice po 100 epokach wciąż poprawia wagi. Dlaczego?
Pokaż odpowiedź

Poprawna odpowiedź: Bo tych gatunków nie rozdziela żadna prosta, więc zawsze zostaje pomyłka

Reguła poprawia wagi po każdej pomyłce, a bez prostej rozdzielającej pomyłki nigdy nie znikają.

Najważniejsze wnioski

  • Neuron liczy ważoną sumę pomiarów, dodaje bias i odpowiada według znaku wyniku.
  • Granica decyzji jednego neuronu to prosta: wagi ją obracają, bias przesuwa.
  • Perceptron zatrzymuje się tylko wtedy, gdy klasy da się rozdzielić prostą; inaczej poprawia wagi bez końca.
  • Danych, których nie rozdziela prosta (jak XOR), jeden neuron nie nauczy się bez błędów; potrzebna jest warstwa ukryta.

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

Matematyka

Neuron odpowiada ŷ = 1, gdy w·x + b > 0, a w przeciwnym razie ŷ = 0. Granica decyzji to zbiór punktów w·x + b = 0, czyli prosta na płaszczyźnie dwóch pomiarów.

  • Reguła perceptronu po każdym przykładzie: w ← w + (y − ŷ)·x, b ← b + (y − ŷ). Przy dobrej odpowiedzi y − ŷ = 0 i nic się nie zmienia.
  • Twierdzenie Novikoffa: jeśli jakaś prosta rozdziela klasy z marginesem γ, a wszystkie punkty mieszczą się w kole o promieniu R, liczba poprawek nie przekroczy (R / γ)².
  • Bez prostej rozdzielającej nie ma takiego ograniczenia i reguła się nie zatrzymuje.
W kodzie (Python)

Perceptron w numpy na tych samych irysach co w labie, po standaryzacji. Kwiaty idą w kolejności z pliku, bez tasowania:

import numpy as np

url = "https://raw.githubusercontent.com/scikit-learn/scikit-learn/1.5.2/sklearn/datasets/data/iris.csv"
data = np.loadtxt(url, delimiter=",", skiprows=1)
X, species = data[:, :4], data[:, 4].astype(int)  # 0 setosa, 1 versicolor, 2 virginica

def zscore(A):
    return (A - A.mean(axis=0)) / A.std(axis=0)

def perceptron(Z, y, max_epochs=100):
    w, b, corrections = np.zeros(2), 0.0, []
    for epoch in range(max_epochs):
        mistakes = 0
        for z, target in zip(Z, y):  # kwiaty w kolejności z pliku, bez tasowania
            d = target - int(z @ w + b > 0)
            if d != 0:
                w, b, mistakes = w + d * z, b + d, mistakes + 1
        corrections.append(mistakes)
        if mistakes == 0:
            break
    return corrections

c = perceptron(zscore(X[:, [0, 1]]), (species == 0).astype(int))
print(f"setosa vs rest: {len(c)} epochs, corrections {c}, total {sum(c)}")
m = species > 0
c = perceptron(zscore(X[m][:, [2, 3]]), (species[m] == 2).astype(int))
print(f"versicolor vs virginica: {len(c)} epochs, corrections per epoch {min(c)} to {max(c)}, zero in {c.count(0)} epochs")

Wynik

setosa vs rest: 7 epochs, corrections [4, 2, 2, 5, 2, 2, 0], total 17
versicolor vs virginica: 100 epochs, corrections per epoch 1 to 4, zero in 0 epochs

Liczby poprawek zależą od kolejności kwiatów: w pliku setosa zatrzymuje się po 7 epokach i 17 poprawkach, w labie, po tasowaniu, po 3 epokach i 8 poprawkach. Wniosek się nie zmienia: setosa zawsze się kończy, versicolor i virginica nigdy. Uruchomione w numpy 2.1.3.

Dla praktyka
  • Standaryzuj pomiary przed uczeniem. Inaczej pomiar w dużych liczbach dominuje sumę, a wagi trudno porównać.
  • Tasuj przykłady w każdej epoce. Kolejność zmienia liczbę poprawek i to, którą z wielu dobrych prostych perceptron znajdzie.
  • Gotowy Perceptron jest w scikit-learn, ale w praktyce jeden neuron to raczej regresja logistyczna: daje prawdopodobieństwo i zbiega także wtedy, gdy klasy się nakładają.
  • Gdy klasy się nakładają, nie czekaj na zero błędów. Licz trafność na walidacji, a do zagięcia granicy dodaj warstwę ukrytą albo nowe cechy.

Więcej w Atlasie

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