Perceptron – sieć neuronowa najprostszego typu.
Pojęcie to stosowane jest zamiennie do określenia sieci składającej się z:
- pojedynczego neuronu McCullocha-Pittsa.
- pewnej liczby neuronów wejściowych, których wyjścia połączone są z wejściami pewnej liczby neuronów wyjściowych; mimo iż ten typ perceptronów bywa nazywany perceptronem dwuwarstwowym, zwykle określa się go mianem perceptronu jednowarstwowego, ponieważ właściwą warstwą dokonującą sumowania i obliczania wyjścia według wartości funkcji aktywacji jest tylko warstwa druga,
- wielu warstw neuronów, gdzie wyjścia poprzedniej warstwy łączą się z wejściami kolejnej; są to tak zwane perceptrony wielowarstwowe.
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ść.
Pojęcie perceptronu zostało wprowadzone przez Franka Rosenblatta w roku 1958. 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
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 wartstwy 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) = 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: x1 i x2
- Neuron 1: y1 = 2x1 − 2x2
- Funkcja nieliniowa po neuronie 1: z1 = 1 jeśli y1 > 1, 0 w przeciwnym wypadku
- Neuron 2: y2 = 2x2 − 2x1
- Funkcja nieliniowa po neuronie 2: z2 = 1 jeśli y2 > 1, 0 w przeciwnym wypadku
- Neuron 3: w = 2z1 + 2z2
- 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) | |||
---|---|---|---|---|---|---|---|
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 |