Perceptron
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 separowalnych[1] . 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
[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 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ść[1] . Z matematycznego punktu widzenia wagi perceptronu tworzą wektor normalny, który określa prostą (w przypadku dwóch wejść) lub hiperpłaszczyznę decyzyjną[2]. 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:
- ,
- gdzie: – waga, – wejście, – funkcja aktywacji, – wyjście, – liczba wejść, – stała wartość (ang. bias).
W przypadku oryginalnego perceptronu, jako funkcje aktywacji, stosowano funkcję skokową. Dlatego wyjście mogło wynosić , gdy dane wejściowe należały do zbioru, lub , gdy nie należały do tego zbioru. Można jednak stosować inne funkcje ciągłe w zakresie np. funkcję sigmoidalną.
Historia
[edytuj | edytuj kod]Pojęcie perceptronu zostało wprowadzone przez Franka Rosenblatta w roku 1958[3]. 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[1] .
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[4].
Ograniczenia perceptronu
[edytuj | edytuj kod]Jeśli potraktujemy wejście oraz wyjście jako wektory liczb rzeczywistych, to warstwa neuronów zachowuje się jako macierz
Działanie każdej kolejnej warstwy można przedstawić jako kolejne mnożenie przez pewną macierz:
Wszystkie te mnożenia można zastąpić mnożeniem przez jedną macierz:
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:
albo
itd.
Takie sieci neuronowe potrafią obliczać znacznie bardziej skomplikowane funkcje. Na przykład poniższa sieć neuronowa wylicza funkcję XOR:
- Wejścia: i
- Neuron 1:
- Funkcja nieliniowa po neuronie 1: jeśli w przeciwnym wypadku
- Neuron 2:
- Funkcja nieliniowa po neuronie 2: jeśli w przeciwnym wypadku
- Neuron 3:
- Funkcja nieliniowa po neuronie 3: jeśli w przeciwnym wypadku
Wejścia | Wyjścia warstwy 1 | Po funkcji nieliniowej | Wyjścia warstwy 2 | Po funkcji nieliniowej (ostateczny wynik) | |||
---|---|---|---|---|---|---|---|
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ż
[edytuj | edytuj kod]Przypisy
[edytuj | edytuj kod]- ↑ a b c Marsland 2014 ↓.
- ↑ Bartkowiak 2002 ↓, s. 10.
- ↑ Margaret Ann Boden: Sztuczna inteligencja. Wydawnictwo Uniwersytetu Łódzkiego, 2020, s. 31. ISBN 83-8142-639-1. (pol.).
- ↑ 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].
Bibliografia
[edytuj | edytuj kod]- Stephen Marsland: Machine Learning. An algorithmic perspective. 2014. ISBN 978-1-4665-8328-3.
- Anna Bartkowiak: Sieci Neuronowe: Notatki do wykładu „Sieci Neuronowe” dla studentów kierunku Informatyka na Uniwersytecie Wrocławskim. 2002.