Perceptron

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj

Perceptron - sieć neuronowa najprostszego typu. Pojęcie to stosowane jest zamiennie do określenia sieci składającej się z:

Zasada działania[edytuj | edytuj kod]

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 wartość na wyjściu przybierała 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ść.

Historia[edytuj | edytuj kod]

Pojęcie perceptronu zostało wprowadzone przez Franka Rosenblatta w roku 1957. 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 neuronowymi.

Ograniczenia perceptronu[edytuj | edytuj kod]

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 = N_5N_4N_3N_2N_1X

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

N^* = N_5N_4N_3N_2N_1
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) = 1 jeśli x > 1, f(x) = 0 w przeciwnym wypadku
f(x) = 1 jeśli x > 1, f(x) = x jeśli 1 > x > 0, f(x) = 0 w przeciwnym wypadku
itd.

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

Wejścia: x_1 i x_2
Neuron 1: y_1 = 2x_1 - 2x_2
Funkcja nieliniowa po neuronie 1: z_1 = 1 jeśli y_1 > 1, 0 w przeciwnym wypadku
Neuron 2: y_2 = 2x_2 - 2x_1
Funkcja nieliniowa po neuronie 2: z_2 = 1 jeśli y_2 > 1, 0 w przeciwnym wypadku
Neuron 3: w = 2z_1 + 2z_2
Funkcja nieliniowa po neuronie 3: v = 1 jeśli w > 1, 0 w przeciwnym wypadku
Wejścia Wyjścia warstwy 1 Po funkcji nieliniowej Wyjścia warstwy 2 Po funkcji nieliniowej (ostateczny wynik)
x_1 x_2 y_1 y_2 z_1 z_2 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