Perceptron

Z testwiki
Przejdź do nawigacji Przejdź do wyszukiwania
Perceptron złożony z jednego neuronu McCullocha-Pittsa

Perceptron – najprostsza sieć neuronowa, składająca się z jednego bądź wielu niezależnych neuronów McCullocha-Pittsa, implementująca algorytm uczenia nadzorowanego klasyfikatorów binarnych. Perceptron jest funkcją, która potrafi określić przynależność parametrów wejściowych do jednej z dwóch klas, poprzez wskazanie czy coś należy czy nie do pierwszej klasy. Może być wykorzystywany tylko do klasyfikowania zbiorów liniowo separowalnychSzablon:Odn. Aby móc testować przynależność do więcej niż dwóch klas, należy użyć perceptronu z większą ilością neuronów, w którym klasy zakodowane są jako wyjścia perceptronu (dla danych testowych), w postaci bitów.

Zasada działania

Działanie perceptronu polega na klasyfikowaniu danych pojawiających się na wejściu i ustawianiu stosownie do tego wartości wyjścia. Przed używaniem perceptron należy wytrenować, podając mu przykładowe dane na wejście i modyfikując w odpowiedni sposób wagi wejść i połączeń między warstwami neuronów, tak aby wynik na wyjściu przybierał pożądane wartości. Perceptrony mogą klasyfikować dane na zbiory, które są liniowo separowalne. Własność ta uniemożliwia na przykład wytrenowanie złożonego z jednego neuronu perceptronu, który wykonywałby logiczną operację XOR na wartościach wejśćSzablon:Odn. Z matematycznego punktu widzenia wagi perceptronu tworzą wektor normalny, który określa prostą (w przypadku dwóch wejść) lub hiperpłaszczyznę decyzyjnąSzablon:Odn. Trenowanie perceptronu to dopasowanie tej hiperpłaszczyzny do danych wejściowych, aby mógł wskazywać czy punkt należy lub nie należy do zbioru wskazywanego przez hiperpłaszczyznę. Dlatego tak ważne jest, aby dane były liniowo separowalne, inaczej dopasowanie do danych będzie niemożliwe.

Wyjście perceptronu obliczamy za pomocą wzoru:

y=f(i=1mwixi+b),
gdzie: wi – waga, xi – wejście, f – funkcja aktywacji, y – wyjście, m – liczba wejść, b – stała wartość (Szablon:Ang.).

W przypadku oryginalnego perceptronu, jako funkcje aktywacji, stosowano funkcję skokową. Dlatego wyjście mogło wynosić 1, gdy dane wejściowe należały do zbioru, lub 0, gdy nie należały do tego zbioru. Można jednak stosować inne funkcje ciągłe w zakresie 0,1 np. funkcję sigmoidalną.

Historia

Pojęcie perceptronu zostało wprowadzone przez Franka Rosenblatta w roku 1958[1]. Perceptron zbudowany przez niego wraz z Charlesem Wightmanem był częściowo elektromechanicznym, częściowo elektronicznym urządzeniem, którego przeznaczeniem było rozpoznawanie znaków alfanumerycznych. Innowacją było tu zastosowanie procesu uczenia się jako metody programowania systemu. W roku 1969 Marvin Minsky i Seymour Papert wykazali ograniczenia perceptronów, co spowodowało długotrwały impas w pracach nad sztucznymi sieciami neuronowymiSzablon:Odn.

W Polsce pierwszą osobą, która skonstruowała perceptron z tranzystorów, był Jacek Karpiński. Jego sieć neuronowa rozpoznawała otoczenie za pomocą kamery i potrafiła się uczyć. Był to drugi taki perceptron na świecie[2].

Ograniczenia perceptronu

Jeśli potraktujemy wejście X oraz wyjście Y jako wektory liczb rzeczywistych, to warstwa neuronów zachowuje się jako macierz N:

Y=NX.

Działanie każdej kolejnej warstwy można przedstawić jako kolejne mnożenie przez pewną macierz:

Y=N5N4N3N2N1X.

Wszystkie te mnożenia można zastąpić mnożeniem przez jedną macierz:

N*=N5N4N3N2N1,
Y=N*X.

A zatem sieć perceptronowa o dowolnie wielu warstwach potrafi wykonywać tylko te operacje, które potrafi wykonać sieć złożona z jednej warstwy neuronów – a jest to bardzo mało. Nie znaczy to jednak, że wielowarstwowe perceptrony są pozbawione sensu – chociaż już działający perceptron wielowarstwowy można zastąpić jednowarstwowym, to sposób w jaki taka sieć się uczy, jest zupełnie inny.

Sytuacja zmienia się całkowicie jeśli po każdej warstwie wstawimy jakąś funkcję nieliniową, taką jak:

f(x)={0dla x<01dla x>1xw pozostałych przypadkach

albo

f(x)={1dla x>10w pozostałych przypadkach

itd.

Takie sieci neuronowe potrafią obliczać znacznie bardziej skomplikowane funkcje. Na przykład poniższa sieć neuronowa wylicza funkcję XOR:

Wejścia: x1 i x2
Neuron 1: y1=2x12x2
Funkcja nieliniowa po neuronie 1: z1=1 jeśli y1>1, w przeciwnym wypadku z1=0
Neuron 2: y2=2x22x1
Funkcja nieliniowa po neuronie 2: z2=1 jeśli y2>1, w przeciwnym wypadku z2=0
Neuron 3: w=2z1+2z2
Funkcja nieliniowa po neuronie 3: v=1 jeśli w>1, w przeciwnym wypadku v=0
Wejścia Wyjścia warstwy 1 Po funkcji nieliniowej Wyjścia warstwy 2 Po funkcji nieliniowej (ostateczny wynik)
x1 x2 y1 y2 z1 z2 w v
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

Zobacz też

Przypisy

Szablon:Przypisy

Bibliografia

Szablon:Kontrola autorytatywna