Ćwiczenie 2. Możliwości pojedynczego neuronu (perceptronu)
Program do napisania (zamiast wykonywania ćwiczenia):
symulacja działania pojedynczego neuronu ze skokową oraz sigmoidalną funkcją aktywacji (dowolny język programowania). Przetestowanie działania na funkcjach AND, OR, NOR, NAND, XOR, . Dodanie kolejnego neuronu w celu umożliwienia nauki XOR.
Ćwiczenie:
Stworzyć w MS Excel symulator neuronu. Przetestować działanie tego symulatora dla funkcji logicznych OR, AND, NOR, NAND, XNOR lub XOR.
1) Na początku wykorzystać skokową funkcję aktywacji:
początkowe obliczenia przeprowadzić krok po kroku i „ręcznie” sprawdzić algorytm modyfikacji wag. Obliczenia wykonać dla jednego kroku, w którym nastąpi modyfikacja wag, czyli gdy odpowiedź neuronu była nieprawidłowa (WSKAZÓWKA 2):
zapisać zestaw wag przed modyfikacją
zapisać zestaw wag po jednym kroku uczenia
sprawdzić algorytm modyfikacji wag dokonując odpowiednich obliczeń
wykonać uczenie sieci dla odpowiednich ciągów uczących (dla AND, OR, XOR)
zmieniać współczynnik szybkości uczenia i sprawdzić jaki ma on wpływ na proces uczenia
czy pojedynczy neuron jest w stanie nauczyć się realizacji każdej z tych funkcji logicznych? - analizy dokonać wykonując odpowiednie rysunki
dla nauczonej sieci, dla każdego z uzyskanych zestawów wag narysować wykres linii prostej rozdzielającej punkty w przestrzeni sygnałów wejściowych (WSKAZÓWKA 5)
gdzie:
w1, w2, b - to wartości wag połączeń odpowiednio wejść x1, x2 i biasu
jest to łączne pobudzenie neuronu
Jeśli (e < 0), to funkcja aktywacji (f(e) = 0) w przeciwnym wypadku (f(e) = 1)
zweryfikować działanie neuronu przy wykorzystaniu ciągu weryfikującego (WSKAZÓWKA 4):
obliczyć wyjścia sieci dla uzyskanego zestawu wag i kolejnych wektorów z ciągu weryfikującego
czy odpowiedzi sieci są zgodne z oczekiwaniami - napisać wnioski
2) Zmienić funkcję aktywacji na funkcję sigmoidalną:
dla funkcji (OR lub AND lub NOR lub NAND) początkowe obliczenia przeprowadzić krok po kroku i „ręcznie” sprawdzić algorytm modyfikacji wag (WSKAZÓWKA 3):
zapisać zestaw wag przed modyfikacją
zapisać zestaw wag po jednym kroku uczenia
sprawdzić algorytm modyfikacji wag dokonując odpowiednich obliczeń
wykonać uczenie sieci dla odpowiednich ciągów uczących
czy pojedynczy neuron z sigmoidalną funkcją aktywacji jest w stanie nauczyć się realizacji każdej z tych funkcji logicznych?
zweryfikować działanie neuronu przy wykorzystaniu ciągu weryfikującego:
obliczyć wyjścia sieci dla uzyskanego zestawu wag i kolejnych wektorów z ciągu weryfikującego
czy odpowiedzi sieci są zgodne z oczekiwaniami - napisać wnioski
3) Zmienić funkcję aktywacji na funkcję skokową - zmienić topologię sieci (dodać neuron w warstwie ukrytej) i przeprowadzić uczenie dla funkcji logicznej XOR lub XNOR (WSKAZÓWKA 1). Obliczenia wykonywać przy użyciu apletu http://ii.pwsz.bialapodlaska.pl/~mk/perceptronPrg/html/index.html). Wykonać zrzuty ekranu z wynikami obliczeń.
dla nauczonej sieci zweryfikować działanie neuronu przy wykorzystaniu ciągu weryfikującego:
obliczyć wyjścia sieci dla uzyskanego zestawu wag i kolejnych wektorów z ciągu weryfikującego
czy odpowiedzi sieci są zgodne z oczekiwaniami - napisać wnioski,
sprawdzić działanie apletu, wykonując odpowiednie obliczenia
4) Czy pojedynczy neuron jest w stanie nauczyć się funkcji NAND, NOR, NOT, XNOR? Jaka jest jego budowa w każdym z przypadków? Napisać zasadę określającą możliwości pojedynczego neuronu.
5) Przetestować działanie neuronu bez wejścia BIAS (podstawić różne zestawy wag początkowych). Jakie problemy mogą się pojawić podczas uczenia takiego neuronu? Czy zawsze nauczy się funkcji logicznych?
6) Przetestować i opisać wpływ współczynnika szybkości uczenia na naukę neuronu.
W sprawozdaniu napisać wnioski dotyczące każdego z etapów obliczeń oraz wnioski końcowe.
Zestawy do wyboru:
Zestaw |
Treść zadania |
|
|
1 |
OR, NAND, XOR |
2 |
NOR, AND, XOR |
3 |
OR, AND, XNOR |
4 |
OR, NAND, XNOR |
5 |
NOR, AND, XNOR |
6 |
NOR, OR, XOR |
7 |
AND, NAND, XOR |
8 |
NOR, OR, XNOR |
9 |
AND, NAND, XNOR |
10 |
NOR, NAND, XOR |
11 |
NOR, NAND, XNOR |
12 |
NOR, AND, XOR |
13 |
OR, NOR, XNOR |
14 |
OR, NAND, XOR |
15 |
OR, NAND, XOR |
16 |
OR, NAND, XOR |
WSKAZÓWKI:
Wskazówka 1). Dla przypomnienia: XOR to następująca funkcja logiczna:
Zgodnie z pokazanym modelem, sieć musi mieć dwa wejścia i jedno wyjście.
Ciąg uczący powinien składać się z czterech następujących wektorów uczących
x1 |
x2 |
y |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
Wskazówka 2) Kolejne etapy w jednym kroku uczenia przy skokowej funkcji aktywacji:
1) dla danego wektora uczącego (x1, x2, d) wyliczenie łącznego pobudzenia
2) wyliczenie aktualnego wyjścia sieci
założyliśmy, że wartość progowa
= 0
3) w przypadku błędnej odpowiedzi sieci tzn. y≠d modyfikacja wag według następujących wzorów:
gdzie
- współczynnik szybkości uczenia
Wskazówka 3) Kolejne etapy w jednym kroku uczenia przy sigmoidalnej funkcji aktywacji
,
:
1) dla danego wektora uczącego (x1, x2, d) wyliczenie łącznego pobudzenia
2) wyliczenie aktualnego wyjścia sieci
3) w przypadku błędnej odpowiedzi sieci tzn. y≠d modyfikujemy wagi
Stosujemy tutaj regułę Delta:
Warto zauważyć, że dla funkcji sigmoidalnej o wzorze
Modyfikacja wag przebiega następująco:
Wskazówka 4) Weryfikacja działania neuronu:
„Nauczona” sieć neuronowa poddawana jest procesowi weryfikacji.
Ciąg weryfikujący dla OR, AND i XOR może wyglądać np. następująco:
x1 |
x2 |
0.05 |
0.05 |
0.95 |
0.05 |
0.05 |
0.95 |
0.95 |
0.95 |
Przykład (skokowa funkcja aktywacji):
Załóżmy, że po nauce zostały ustalone następujące wagi:
w1 = 1 w2 = 2 b = -1
x1 |
x2 |
e |
f (e) |
0,05 |
0,05 |
-0,85 |
0 |
0,95 |
0,05 |
0,05 |
1 |
0,05 |
0,95 |
0,95 |
1 |
0,95 |
0,95 |
1,85 |
1 |
Jeśli weryfikowaliśmy działanie funkcji logicznej OR, to odpowiedzi neuronu są poprawne (takie jak oczekiwaliśmy).
Wskazówka 5) Wykres linii prostej rozdzielającej punkty w przestrzeni sygnałów wejściowych:
Załóżmy, że po nauce zostały ustalone następujące wagi:
w1 = 1 w2 = 2 b = -1
x1 |
x2 |
0 |
0,5 |
0,1 |
0,45 |
0,2 |
0,4 |
0,3 |
0,35 |
0,4 |
0,3 |
0,5 |
0,25 |
0,6 |
0,2 |
0,7 |
0,15 |
0,8 |
0,1 |
0,9 |
0,05 |
1 |
0 |