close
Przejdź do zawartości

Perceptron

Z Wikipedii, wolnej encyklopedii
Perceptron złożony z jednego neuronu McCullocha-Pittsa: ma wejść (dendrytów) i 1 wyjście (akson); służy do wykrywania pojedynczej cechy w danych; każda dana jest zapisana w postaci wektora mającego składowych.

Perceptron (od angielskiego słowa perception oznaczającego postrzeganie) - prosta sztuczna sieć neuronowa, wprowadzona przez Franka Rosenblatta w 1958 roku, dla której podał metodę jej uczenia czyli stopniowego dobierania wag i biasów (progów) tak, by wyniki podawane na wyjściu sieci były coraz bardziej zgodne z wartościami oczekiwanymi[1]. W swojej podstawowej formie (perceptron prosty) składa się z jednego sztucznego neuronu McCullocha-Pittsa ze skokową funkcją aktywacji i regulowanymi wagami i progiem. Dalszy rozwój doprowadził do konstrukcji perceptronów wielowarstwowych, w tym perceptronów ze sprzężeniem zwrotnym, z różnymi funkcjami aktywacji, mających znacznie większe możliwości obliczeniowe; istotne było tu zastosowanie ciągłych funkcji aktywacji i odkrycie nowych metod uczenia sieci neuronowych, by przezwyciężyć ograniczenia perceptronu Rosenblatta, który mógł uczyć się jedynie problemów liniowo separowalnych.

Historia

[edytuj | edytuj kod]
Schemat budowy neuronu: a – dendryty, b – ciało komórki, c – jądro komórkowe, d – akson, e – otoczka mielinowa, f – komórka Schwanna, g – przewężenie Ranviera, h – wiele zakończeń aksonu.

W 1943 roku neurofizjolog Warren McCulloch i logik Walter Pitts wprowadzili do informatyki „neuron” jako element logiczny z wieloma wejściami i pojedynczym wyjściem binarnym, działający progowo, tj. neuron ten przyjmował stan 1, gdy suma sygnałów wejściowych przekroczyła zadany próg (bias); w przeciwnym zaś wypadku przyjmował stan 0 w odpowiedzi na sygnały wejściowe (patrz schemat neuronu McCullocha-Pittsa ). Odpowiadało to neurobiologicznej analogii potencjału czynnościowego, który komórka nerwowa emituje, gdy następuje zmiana jej potencjału błonowego, gdy suma sygnałów, jakie dochodzą do komórki od dendrytów, przekroczy pewien próg.

Liczba zakończeń aksonu neuronu biologicznego jest znaczna - poprzez te zakończenia dany neuron łączy się z dendrytami innymi neuronów. Analogiczne połączenia można budować między sztucznymi neuronami: akson danego neuronu McCullocha-Pittsa, mimo że posiada pojedynczy akson (pojedyncze wyjście), może być podłączony na wejścia wielu innych neuronów. McCulloch i Pitts wykazali, że poprzez odpowiednie połączenie takich neuronów można tworzyć bramki logiczne AND, OR, NOT, a z nich bardziej złożone układy.

W 1958 roku Frank Rosenblatt opublikował model perceptronu, który do dziś stanowi podstawę sztucznych sieci neuronowych. Perceptron zbudowany przez Rosenblatta wraz z Charlesem Wightmanem służył do rozpoznawania znaków alfanumerycznych. Innowacją było opracowanie metody uczenia sieci neuronowej, dzięki której po odpowiednio dużej liczbie iteracji sieć przyjmowała właściwe wagi i biasy. Był to istotny postęp: McCulloch i Pitts ustawiali wagi i biasy sieci poprzez ich odgadnięcie, co jest niewykonalnym zadaniem dla bardziej złożonych zagadnień.

W Polsce Jacek Karpiński, inżynier i genialny wynalazca, skonstruował w 1962 r. perceptron z tranzystorów. Jego sieć neuronowa rozpoznawała otoczenie za pomocą kamery i potrafiła się uczyć. Był to drugi taki perceptron na świecie[2].

Badania nad perceptronami zostały zahamowane na jakiś czas, gdy w roku 1969 Marvin Minsky i Seymour Papert wykazali, że metoda uczenia perceptronów, podana przez Rosenblatta, jest skuteczna jedynie dla sieci mających uczyć się problemów liniowo separowalnych (pojęcie to omówiono dalej); pokazali m.in. niezdolność do uczenia się przez perceptrony bramek XOR[3].

Przezwyciężenie tego ograniczenia nastąpiło dzięki:

a). wprowadzeniu różniczkowalnych funkcji aktywacji, m.in. ReLU (Rectified Linear Unit), Sigmoid (funkcja logistyczna), Tgh (funkcja tangens hiperboliczny), Softmax, Leaky ReLU

b). odkryciu nowej metody ucznia sieci, tzw. back propagation, która wymaga liczenia pochodnych funkcji aktywacji - wymóg ten spełniają funkcje różniczkowalne.

Funkcja skokowa, używana w neuronie McCullocha-Pittsa i przejęta przez Rosenblatta, nie jest różniczkowalna, dlatego dopiero zastosowanie jako funkcji aktywacji funkcji różniczkowalnych pozwoliło z czasem odkryć metodę back propagation. Funkcja skokowa aktywacji neuronu McCullocha-Pittsa jest pokazana na schemacie powyżej w sposób symboliczny jako schodek w kwadracie.

Pojedynczy sztuczny neuron

[edytuj | edytuj kod]

Wyjście z pojedynczego sztucznego neuronu oblicza się za pomocą wzoru:

,

gdzie:

  • – wartość progowa (ang. bias)
  • – wejścia
  • – wagi
  • – funkcja aktywacji
  • – wyjście

W konstrukcji pierwotnego perceptronu jako funkcję aktywacji jego neuronów Rosenblatt stosował funkcję skokową, dla której wyjście przyjmowało wartość lub  :

W ogólności funkcje aktywacji mogą dawać na wyjściu wartości dyskretne lub ciągłe, np. dla sigmoidalnej funkcji aktywacji wyjście przyjmuje wartości w zakresie .

Trenowanie perceptronu

[edytuj | edytuj kod]

Aby perceptron wykonywał zadanie klasyfikacji, należy go "wytrenować", tj. ustalić wartości wag i biasów jego neuronów. Można to np. zrobić metodą prób, podając przykładowe dane na wejście i modyfikuje wagi połączeń i biasy tak, aby wynik na wyjściu przybierał pożądane wartości. Pierwszą metodą algorytmiczną (tj. możliwą do zaprogramowania) uczenia perceptronu podał Rosenblatt. Metoda ta nadaje się jednak tylko do trenowania sieci jednowarstwowych lub sieci o wielu warstwach, ale gdzie tylko jedna warstwa ma dobierane wagi i biasy (taką sieć zbudował Rosenblatt). Później opracowano metody nadające się do trenowania sieci wielowarstwowych (np. metoda propagacji wstecznej).

Metoda uczenia perceptronu według Rosenblatta

[edytuj | edytuj kod]

Podczas uczenia perceptronu używa się zestawu danych uczących, złożonego z par, gdzie - dana wejściowa, - zakładana (oczekiwana) dana wyjściowa. Liczba par uczących zależy od rodzaju zagadnienia, jakiego ma nauczyć się sieć. Celem jest znalezienie wag i biasu neuronu tak, by uzyskać zgodność między wartością wyjściową z sieci a założą daną wyjściową dla wszystkich par uczących

W zerowym kroku iteracji dobiera się losowo wagi i bias . Następnie dla pierwszej pary uczącej oblicza się:

(a) wyjście z neuronu (jest to pojedyncza wartość liczbowa):

gdzie – funkcja aktywacji w perceptronie Rosenblatta to funkcja skokowa Heaviside’a,

(b) błąd sieci, tj. różnicę między wynikiem sieci a oczekiwanym wynikiem :

(c) jeśli błąd jest niezerowy, to koryguje się bias i wagi według reguły uczenia Rosenblatta

gdzie:

  • – numer iteracji (kroku uczenia)
  • – współczynnik uczenia, np. 0.1, który określa wielkość korekty wag w każdej iteracji
  • - wektor wag w kroku t+1
  • - wektor wartości k-tej danej

Drugie z powyższych równań jest równoważne równaniom:

,

Proces ten powtarza się dla wszystkich przykładów uczących , przy czym w danej iteracji koryguje się wagi i bias uzyskane w poprzedniej iteracji; ten cykl uczenia stanowi tzw. pojedynczą epokę uczenia. Zazwyczaj powtarza się uczenie w kolejnych epokach, zaczynając ponownie od pierwszej pary uczącej oraz koryguje się wagi i bias uzyskane w ostatniej iteracji poprzedniej epoki. Proces uczenia kończy się, gdy dla wszystkich par uczących uzyska się zerowe błędy, co oznacza zgodność odpowiedzi sieci z wartościami oczekiwanymi.

Może też zdarzyć się, że nie uzyska się tej zgodności pomimo wykonania założonej maksymalnej liczby epok uczenia - wtedy proces można ponowić, zaczynając od innego zestawu losowo dobranych wag i biasu.

Uwaga: Dodatkowe nieliniowe wejście – rozwiązanie ograniczeń perceptronu

Metoda Rosenblatta nadaje się tylko dla jednowarstwowych sieci neuronowych z liniowo separowalnymi danymi. Jeśli dane nie są liniowo separowalne, to nie da się osiągnąć tą metodą zgodności przewidywań sieci z wartościami oczekiwanymi nawet po wielu iteracjach. Istnieje też inne rozwiązanie: można dodać dodatkowe wejście neurony, na które poda się iloczyn wejść , tj. – wtedy problem staje się liniowo separowalny w przestrzeni i można taką sieć wytrenować metodą Rosenblatta. Rosenblatt nie stosował jednak takiego rozwiązania, co stało się powodem przekonania, iż perceptron może rozwiązywać tylko problemy liniowo separowalne (mimo że Minsky i Papert podali taką możliwość). W konsekwencji nastąpił okres tzw. zimy w badaniach na sieciami neuronowymi.

Poniżej podano kod w języku Python do trenowania perceptronu metoda Rosenblatta, który uczy się bramki logicznej XOR - dodano tu dodatkowe wejście .

import numpy as np

# --- Dane wejściowe dla XOR z dodatkową cechą x3 = x1*x2 ---
X = np.array([
    [0, 0],
    [0, 1],
    [1, 0],
    [1, 1]
])

# Tworzymy dodatkową cechę x3
x3 = (X[:,0] * X[:,1]).reshape(-1,1)
X_new = np.hstack([X, x3])

# Oczekiwane wyjścia XOR
y = np.array([0, 1, 1, 0])

# --- Inicjalizacja wag i biasu ---
np.random.seed()
w = np.random.randn(3)
b = 0.0
eta = 0.1  # współczynnik uczenia
epochs = 20

# --- Funkcja aktywacji (step) ---
def step(x):
    return np.where(x >= 0, 1, 0)

# --- Trening perceptronu ---
for epoch in range(epochs):
    errors = 0
    for xi, target in zip(X_new, y):
        output = step(np.dot(w, xi) + b)
        delta = target - output
        if delta != 0:
            w += eta * delta * xi
            b += eta * delta
            errors += 1
    print(f"Epoka {epoch+1}: błąd = {errors}, wagi = {w}, bias = {b}")
    if errors == 0:
        break

# --- Test sieci ---
print("\nTest końcowy:")
for xi, target in zip(X_new, y):
    output = step(np.dot(w, xi) + b)
    print(f"Wejście: {xi}, Wyjście: {output}, Oczekiwane: {target}")

W powyższym programie wagi początkowe są losowo dobierane. W zależności od ich wartości perceptron uczy się właściwych wag dla bramki XOR przez kilka-kilkanaście epok. Na końcu podaje test końcowy, który wskazuje na zgodność obliczeń perceptrony z wartościami oczekiwanymi, tj.

Wejście: [0 0 0], Wyjście: 0

Wejście: [0 1 0], Wyjście: 1

Wejście: [1 0 0], Wyjście: 1

Wejście: [1 1 1], Wyjście: 0

Trzecie liczby w nawiasach - to wartości podawane jako dodatkowe wejście .

Perceptron jednowarstwowy - budowa

[edytuj | edytuj kod]

Perceptron jednowarstwowy jest zbudowany z neuronów, których wejścia są wspólne - na te wejścia podaje się analizowaną daną. Przy tym:

  • - ilość wejść perceptronu (równa liczbie wejść każdego neuronu) zależy od danych: jeżeli każda dana wejściowa jest określona za pomocą liczb , to każdy neuron musi mieć wejść
  • - liczba neuronów perceptronu / liczba wyjść: jeśli perceptron ma klasyfikować dane ze względu na 1 cechę, to ma 1 neuron; jeśli ma klasyfikować dane ze względu na 2 cechy, to ma 2 neurony; do analizy cech perceptron ma neuronów; ponieważ każdy neuron ma jedno wyjście, więc jeżeli perceptron analizuje cech, to ma neuronów

Perceptron jako klasyfikator binarny

[edytuj | edytuj kod]

Działanie perceptronu jest następujące:

  • w przypadku analizy 1 cechy perceptron ma 1 neuron; na jego wejścia podawane są wartości liczbowe analizowanej danej i jeżeli dana ta należy do analizowanej przez neuron klasy, to neuron na wyjściu poda liczbę , a gdy nie należy, to poda
  • gdy perceptron klasyfikuje cech, to ma neuronów, mających wspólnych wejść; poszczególnym cechom analizowanej danej neurony przypiszą liczby 1 lub 0; na wyjściu perceptronu będzie więc wyjść od poszczególnych neuronów, każde w stanie wyjściowym 1 lub 0; perceptron przypisze więc danej wejściowej liczbę o bitach - kolejne bity określają, czy ta dana posiada czy nie poszczególne analizowane cechy. Z tego względu perceptron należy do klasyfikatorów binarnych.

Problem liniowej separowalności danych

[edytuj | edytuj kod]

Problemy liniowo separowalne

[edytuj | edytuj kod]
Dane w 2D są liniowo separowalne ze względu na jakąś cechę (np. przypisany danym kolor), gdy istnieje prosta, która rozdziela te dane na dwa rozłączne podzbiory

Najprostsze perceptrony mogą klasyfikować dane, które są liniowo separowalne. Dane są separowalne liniowo w następującym sensie:

  • jeżeli perceptron ma 2 wejścia, to dane te można przedstawić jako punkty na płaszczyźnie 2D; są one separowalne liniowo, jeżeli istnieje prosta na tej płaszczyźnie, która oddziela punkty mające daną cechę od punktów, które jej nie mają
  • jeżeli perceptron ma 3 wejścia, to dane te można przedstawić jako punkty w przestrzeni 3D; są one separowalne liniowo, jeżeli istnieje płaszczyzna w tej przestrzeni, która oddziela punkty mające daną cechę od punktów, które jej nie mają
  • w ogólności: jeżeli perceptron ma wejść, to dane te można przedstawić jako punkty w przestrzeni -wymiarowej; są one separowalne liniowo, jeżeli istnieje hiperpłaszczyzna wymiarowa w tej przestrzeni, która oddziela punkty mające daną cechę od punktów, które jej nie mają [4]

Trenowanie perceptronu w tym wypadku oznacza poszukiwanie równania takiej prostej (płaszczyzny, ogólnie: hiperpłaszczyzny), która separuje dane wejściowe na te, które spełniają zadany warunek i te, które nie spełniają tego warunku. Perceptrony jednowarstwowe w ogólności z nieliniowymi funkcjami aktywacji mogą rozwiązywać problemy liniowo separowalne.

Problemy liniowo nieseparowalne

[edytuj | edytuj kod]

Jeżeli dane nie są liniowo separowalne, to perceptron jednowarstwowy nie będzie działał - nie będzie możliwe znalezienie odpowiednich prostych, płaszczyzn, hiperpłaszczyzn. W takiej sytuacji perceptron musi mieć bardziej złożoną budowę: wiele warstw, nieliniowe funkcje aktywacji, sprzężenia zwrotne, itd.

Perceptron o liniowych funkcjach aktywacji, jednowarstwowy

[edytuj | edytuj kod]

Załóżmy, że mamy perceptron, złożony z wejść oraz neuronów, tworzących pojedynczą warstwę. Każdą daną wejściową do perceptronu można przedstawić za pomocą wektora kolumnowego mającego składowych liczbowych (symbol oznacza transpozycję czyli zmianę wektora wierszowego na kolumnowy), zaś wyjście z perceptronu za pomocą wektora kolumnowego mającego składowych liczbowych; to wagi pojedynczej warstwy neuronów można przedstawić za pomocą macierzy prostokątnej o wierszach i kolumnach; jeżeli przyjmiemy, że neurony nie mają "nieliniowych" funkcji aktywacji (de facto dopuszczalne są przekształcenia afiniczne, choć w żargonie AI używa się często tej pierwszej nazwy), to wyjścia związane są z wejściami zależnością macierzową , gdzie macierz N jest iloczynem macierzy wag oraz macierzy przekształcenia, jakiego dokonuje funkcja aktywacji.

Jeżeli perceptron miałby więcej warstw, ale każda byłaby jedynie liniowym przekształceniem, bez nieliniowych funkcji aktywacji, to działanie każdej kolejnej warstwy można by przedstawić jako kolejne mnożenie przez pewną macierz; np. dla sieci o pięciu warstwach mielibyśmy:

Ponieważ jednak iloczyn macierzy daje macierz:

to sieć taka jest równoważna sieci z jedną warstwą. A zatem sieć perceptronowa o dowolnie wielu warstwach, których wyjścia nie mają nieliniowych funkcji aktywacji, potrafi wykonać tylko te operacje, które wykona sieć złożona z jednej warstwy neuronów. Sieci takie służą np. do obliczania regresji liniowej zbioru danych.

Perceptron o nieliniowych funkcjach aktywacji, jednowarstwowy

[edytuj | edytuj kod]

Sytuacja zmienia się całkowicie jeśli jako funkcje aktywacji zastosuje się funkcje nieliniowe, np.

albo

itd.

Takie sieci neuronowe potrafią obliczać znacznie bardziej skomplikowane funkcje, np. funkcje logiczne AND, OR, NOT. Nie radzą sobie jednak z problemami takimi jak obliczanie funkcji logicznej XOR.

Perceptron o nieliniowych funkcjach aktywacji, wielowarstwowy

[edytuj | edytuj kod]
Diagram przedstawia omówiony tu perceptron o 2 neuronach warstwy ukrytej i neuronie wyjściowym, z nieliniowymi funkcjami aktywacji (funkcje skokowe), realizujący bramkę logiczną XOR. Liczby - to wagi.

Omówiono tu działanie przykładowej sieci neuronowej, która dla dwóch wejść binarnych wylicza ich funkcję logiczną XOR. Sieć ta zbudowana jest z 2 neuronów warstwy ukrytej i jednego neuronu wyjściowego; wszystkie neurony mają jako funkcję aktywacji funkcję skokową.

I. wejścia: i
II. warstwa ukryta z dwoma neuronami:
Inny niż omówiony w tekście model perceptronu liczący funkcję XOR: sieć dwuwarstwowa z 3 neuronami warstwy ukrytej, z nieliniowymi funkcjami aktywacji (funkcja skokowa). Wartości liczbowe w zielonych kółkach oznaczają biasy danego neurony, wartości liczbowe na liniach oznaczają wagi.

neuron 1

(1) suma sygnałów z wejść, mnożonych przez wagi, ma postać
(2) skokowa funkcja aktywacji:

neuron 2

(3) suma sygnałów z wejść, mnożonych przez wagi, ma postać
(4) skokowa funkcja aktywacji:
III. jeden neuron wyjściowy:
(5) suma sygnałów z wejść, mnożonych przez wagi, ma postać
(6) skokowa funkcja aktywacji:

Wstawiając do równań (1) wartości wejściowe i i obliczając kolejne równania (2)-(6) otrzymuje się na wyjściu wartości zgodne z funkcją logiczną XOR. Poniższa tabela pokazuje wyniki kolejnych obliczeń, jakie wykonuje sieć

wejścia warstwa ukryta - ważone sumy warstwa ukryta - funkcje aktywacji neuron wyjściowy wyjście
0 0 0 0 0 0 0 0
0 1 −2 2 0 1 2 1
1 0 2 −2 1 0 2 1
1 1 0 0 0 0 0 0

Uwaga: Podane tu wagi i biasy zostały odgadnięte. Problem zasadniczym w rozwoju sieci neuronowych było odkrycie metody uczenia sieci - metody propagacji wstecznej. Można pokazać, że za pomocą tej metody po kolejnych krokach iteracyjnych znajdzie się wagi i biasy, zbliżone np. do wartości tu podanych dla sieci XOR. Dzięki tej metodzie możliwe stało się rozwiązywanie problemów bardzo złożonych, których nie dałoby się rozwiązać metodą odgadnięcia.

Zobacz też

[edytuj | edytuj kod]

Przypisy

[edytuj | edytuj kod]
  1. Margaret Ann Boden: Sztuczna inteligencja. Wydawnictwo Uniwersytetu Łódzkiego, 2020, s. 31. ISBN 83-8142-639-1. (pol.).
  2. Jacek Karpiński, geniusz. Stworzył najlepszy komputer na świecie. Komuniści zaprzepaścili jego osiągnięcie. Dziennik.pl, 2017-04-08. [dostęp 2024-08-27].
  3. Marsland 2014 ↓.
  4. Bartkowiak 2002 ↓, s. 10.

Bibliografia

[edytuj | edytuj kod]
Po polsku
  • publikacja w otwartym dostępie – możesz ją przeczytać Anna Bartkowiak, Sieci Neuronowe: Notatki do wykładu „Sieci Neuronowe” dla studentów kierunku Informatyka na Uniwersytecie Wrocławskim [online], 2002.
Po angielsku
  • Rosenblatt, Frank (1958): The perceptron: a probabilistic model for information storage and organization in the brain. Psychological Reviews 65 (1958) 386–408
  • M. L. Minsky, S. A. Papert: Perceptrons. 2nd Edition, MIT-Press 1988, ISBN 0-262-63111-3.
  • Stephen Marsland: Machine Learning. An algorithmic perspective. 2014. ISBN 978-1-4665-8328-3.

Linki zewnętrzne

[edytuj | edytuj kod]