1, gdy 0. sfss +
Transkrypt
1, gdy 0. sfss +
Ćwiczenia nr 2. Neuron adaline i neuron Hebba. Pierwsze reguła delta. Wsteczna propagacja błędów. Zad. 1) Napisać i przetestować program do symulacji neuronu typu adaline. Zbadać wpływ stałej uczenia na liczbę iteracji, po której uzyskuje się nauczony neuron. Jak pamiętamy z wykładu neuron Hebba to neuron sigmoidalny lub perceptron ze specjalną regułą uczenia. W wersji bez nauczyciela umożliwia on klasyfikowanie obiektów bez wcześniejszej wiedzy na temat przynależności ich do tych klas. Modyfikacja wag ma postać w(t 1) w(t ) yx(t ), (1.1) gdzie 0 to współczynnik uczenia, w (t ) aktualny wektor wag, x (t ) wektor sygnałów wejściowych, y wartość sygnału wyjściowego z neuronu. Powyższą równość wektorową możemy zapisać dla składowych wi (t 1) wi (t ) yxi (t ), dla i 0,1, gdzie sygnał dla progu x0 1. Zad. 2) Rozważmy perceptron z bipolarną funkcja aktywacji 1, gdy s 0, f ( s) 1, gdy s 0. Na wejście podajemy figury zaprezentowane na poniższym rysunku: Obrazy kodujemy wg schematu: +1=kratka czarna, -1=kratka biała. , n, (1.2) Należy przeprowadzić proces uczenia neuronu regułą Hebba. Czy po nauczeniu uzyskamy (oczekiwany ?) rezultat, tzn. dla figur z pierwszego rzędu na wyjściu będzie jedna wartość, a dla figur z dolnego rządu druga? Zad. 3) Przeprowadzić przykładowe obliczenia dla jednego kroku algorytmu wstecznej propagacji błędu. Zakładamy, że mamy daną sieć z dwiema warstwami (jedna warstwa ukrytą i jedna warstwa wyjściowa). Funkcje aktywacji w warstwie wyjściowej są sigmoidalne ( f ( s) 1/(1 e s )), a w warstwie wyjściowej liniowe ( f (s) s). Dla funkcji aktywacji f ( s) modyfikacja wag dla połączeń do danego neuronu ma ogólnie postać wi (1 )wi f (s) xi , (1.3) gdzie oznacza błąd na wyjściu z danego neuronu. Jest on zdefiniowany jako różnica pomiędzy wartością oczekiwaną, d, a wartością wyliczaną przez sieć, y, przy aktualnych wagach. Dla warstwy wyjściowej mamy out d y (1.4) Natomiast dla warstw wejściowych musimy te błędy oszacować na podstawie błędów z warstwy następnej jako średnią ważoną błędów warstwy następnej: Nl 1 i(l ) (j l 1) w(jl,i1) , (1.5) j 0 ( l 1) gdzie j błędy na wyjściach neuronów w warstwie następnej (już znane z poprzedniego kroku obliczeń);