Percep

 

Trochę historii

W roku 1958 Rosenblatt opracował i zbudował sztuczną sieć neuronową nazwaną perceptronem. Ten częściowo elektromechaniczny, a częściowo elektroniczny układ przeznaczony był do rozpoznawania znaków alfanumerycznych z procesem uczenia jako metodą programowania systemu. Pomimo iż działanie perceptronu nie było zadowalające z punktu widzenia zasadniczego celu (układ wykazywał dużą wrażliwość na zmianę skali rozpoznawanych obiektów oraz ich położenia w polu widzenia), był to ogromny sukces badań prowadzonych w tym zakresie. Przede wszystkim był to pierwszy fizycznie skonstruowany układ symulujący sieć nerwową, który wraz ze zdolnością do uczenia się wykazywał zdolność do poprawnego działania nawet po uszkodzeniu części jego elementów. W swojej najprostszej postaci perceptron zbudowany był z dwóch oddzielnych warstw neuronów reprezentujących odpowiednio wejście i wyjście.
    Rosenblatt odkrył jedną z interesujących właściwości perceptronu, którą przedstawił w swoim twierdzeniu: jeżeli tylko istnieje taki wektor wag w, przy pomocy którego element perceptronowy odwzorowuje w sposób poprawny zbiór wzorcowych wektorów wejściowych na odpowiadający mu zbiór oczekiwanych wartości wyjściowych, to istnieje metoda uczenia tego elementu gwarantująca zbieżność do wektora w.   

Perceptron prosty

Najprostszą siecią jednokierunkową jest perceptron prosty. Zbudowany jest jedynie z warstwy wejściowej i warstwy wyjściowej. Ponieważ nie istnieją połączenia pomiędzy elementami warstwy wyjściowej, każdy z tych elementów może być traktowany niezależnie jako osobna sieć o m+1 wejściach i jednym wyjściu.

Idea perceptronu jest zawarta w następujących zasadach:

l) Elementem składowym perceptronu jest sztuczny neuron, którego model matematyczny może być opisany funkcją aktywacji unipolarną                             


Rozmiar: 1703 bajtów

lub bipolarną

Rozmiar: 2015 bajtów

gdzie

Rozmiar: 1527 bajtów

przy czym wi ; oznacza wagę i-tego połączenia wstępującego do elementu; ui - wartość i-tego wejścia; θ - wartość progową funkcji aktywacji.

2) Sieć perceptronową można podzielić jednoznacznie na ścisłe uporządkowane i rozłączne klasy elementów, zwanych warstwami, wśród których wyróżnić można warstwę wejściową i wyjściową. Pozostałe noszą nazwę warstw ukrytych.

3) Perceptron nie zawiera połączeń pomiędzy elementami należącymi do tej samej warstwy.

4) Połączenia pomiędzy warstwami są asymetryczne i skierowane zgodnie z ich uporządkowaniem, tzn. od warstwy wejściowej do pierwszej warstwy ukrytej, następnie od pierwszej do drugiej warstwy ukrytej, itd. aż do warstwy wyjściowej. Nie ma połączeń zwrotnych.

Warstwa wejściowa posiada elementy o nieco uproszczonej funkcji przejścia i jednym wejściu. Jest to swego rodzaju układ receptorów odbierających sygnały wejściowe i po wstępnym ich przetworzeniu (np. normalizacji, filtracji) przesyłających je do elementów warstwy następnej. Umownie jest to warstwa zerowa sieci. Stąd perceptron zawierający jedynie warstwy wejściową i wyjściową nosi nazwę perceptronu jednowarstwowego lub inaczej perceptronu prostego (jedynie warstwa wyjściowa jest warstwą przetwarzania neuronowego). Analogicznie, jeśli istnieje jedna warstwa ukryta, mamy do czynienia z perceptronem dwuwarstwowym, itd.

    Jeśliby przedstawić sygnały wejściowe w postaci przestrzeni m - wymiarowej ( m - liczba sygnałów wejściowych ) to w przypadku dwóch wejść mamy 2 - wymiarową przestrzeń którą można przedstawić w postaci układu współrzędnych:


Na obu osiach mamy sygnały wejściowe,  zaś sygnał wyjściowy z perceptronu y to punkt znajdujący się w obrębie przestrzeni układu. Odpowiada on sygnałom wejściowym w tym przypadku u1' i u2'.
    Perceptron dzieli powstałą w ten sposób przestrzeń na dwie półprzestrzenie oddzielone m -1 wymiarową hiperpłaszczyzną. Dla wejść z jednej półprzestrzeni perceptron jest aktywy ( y=1) a dla drugiej nie ( y=0 ). 



Z powyższego wynika, że aby funkcja mogła być realizowana przez perceptron prosty sygnały wejściowe dla których funkcja aktywacji przyjmuje wartość 0 muszą leżeć w innej półpłaszczyżnie niż te sygnały wejściowe dla których funkcja ta przyjmuje wartość 1. Mówi się że muszą one być liniowo separowalne.

To ograniczenie powoduje, że wiele ciekawych funkcji nie może być realizowanych przez perceptron prosty. Przykładem takiej funkcji może być XOR

u1

u2

XOR (u1,u2)

0

0

0

0

1

1

1

0

1

1

1

0


Nie istnieje bowiem taka prosta, która rozdzielałaby punkty o wartościach równych 0 od punktów o wartościach 1.




    Ograniczenia takie eliminuje się poprzez wprowadzanie warstw ukrytych uzyskując w ten sposób strukturę nazwaną perceptronem wielowarstwowym.


Perceptron dwuwarstwowy

W perceptronie dwuwarstwowym każdy element warstwy ukrytej dzieli przestrzeń sygnałów wejściowych na dwie półprzestrzenie rozdzielone hiperpłaszczyzną (tak jak perceptron jednowarstwowy ). Element wyjściowy, dzieli przestrzeń sygnałów wejściowych również na dwie podrzestrzenie. W efekcie otrzymujemy podprzestrzeń, która jest zborem wielościennym wypukłym *. Jeśli więc jeden z dwóch zbiorów sygnałów wejściowych o wartościach odpowiednio równych 0 i 1 zawiera się w tym zbiorze wypukłym to funkcja może być zrealizowana przez perceptron dwuwarstwowy. 

 

Za pomocą perceptronu dwuwarstwowego można zrealizować już więcej funkcji w tym między innymi funkcję XOR.

    Jak widać na powyższym rysunku jeden z dwóch zbiorów sygnałów wejściowych o wartości funkcji aktywacji równej 0 zawiera się w wydzielonym zbiorze wypukłym. Tak więc warunek jest spełniony.
    Na poniższym skrypcie możesz spróbować zrealizować funkcję XOR na perceptronie dwuwarstwowym. Trzeba określić wejścia ( a i b ) oraz wagi warstwy pierwszej ( ukrytej ) i drugiej ( wyjściowej ). Przycisk start uruchamia przeliczenie.    

 

Jeśli próbowałeś to już wiesz, że określenie współczynników wag nie jest sprawą prostą zwłaszcza jeśli w grę wchodzą bardziej skomplikowane funkcje niż XOR. Współczynniki wag określane są w trakcie procesu uczenia sieci do czego wykorzystuje się specjale algorytmy.
Jeśli ci się nie udało to w wagi 1- warstwy wpisz odpowiednio od góry 2, -1, -1, 2, a wagi 2- warstwy ustaw na 2; powinno zadziałać.

Algorytm uczenia elementu perceptronowego można przedstawić następująco:


 

Schemat procesu uczenia elementu perceptronowego

Osobnym problemem jest ustalenie kolejności prezentacji wzorcowych sygnałów wejściowych. Istnieją trzy możliwości:

Prezentować dany wzorzec dopóty, dopóki uzyska się stabilny wektor wag i następnie przejść do kolejnego wzorca.

Prezentować wzorce cyklicznie zgodnie z ustaloną z góry kolejnością.

Do każdej prezentacji losować wzorzec z pewnego określonego zbioru

Pierwsza z metod jest niewskazana, ponieważ sieć ucząc się danego wzorca traci zdolność udzielania poprawnych odpowiedzi na wzorce nauczone wcześniej. Drugi wariant unika niedogodności pierwszego, lecz istnieje obawa utraty zbieżności, cyklicznie podawane wzorce mogą bowiem generować cykliczne stany sieci. Preferowany jest zatem wariant trzeci.

Jedną z podstawowych operacji w procesie uczenia elementu perceptronowego jest wyznaczanie współczynników wag. Istnieje kilka metod korekcji wag:

za pomocą ustalonego kroku wzrostu lub spadku;

za pomocą kroku proporcjonalnego do różnicy pomiędzy sumą ważoną otrzymaną w sumatorze a oczekiwaną wartością wyjściową; w tym przypadku proces uczenia może być niestabilny;

za pomocą kombinacji dwóch powyższych metod.

 *  zbiór wieloscienny wypukły to taki zbiór w którym gdy połączymy dwa dowolne punkty z tego zbioru i otrzymamy odcinek to będzie się on zawsze zawierał w tym zbiorze