Laboratorium 04
Transkrypt
Laboratorium 04
Wprowadzenie do Sieci Neuronowych — lista zadań 4 Jarosław Piersa 2009-10-26 1 1.1 Powtórzenie Perceptron sigmoidalny Funkcja sigmoidalna: σ(x) = 1 1 + exp(−c · (x − p)) (1) Parametr c odpowiada za nachylenie funkcji jest zazwyczaj ustalony (c = 1). Parametr p odpowiada za progowanie i jest parametrem objętym procesem uczenia. Perceptron sigmoidalny o wagach wi na wejściach xi zwraca wartość N X wi xi ) (2) out = σ( i=1 Alternatywnie można wartość progu ustalić p = 0, do sieci dodać N + 1-sze wejście, które zawsze jest równe +1 oraz stowarzyszoną z nim wagę wn+1 , która przejmie funkcję progu. Działanie neuronu jest identyczne. Sigmoida jest funkcją ciągłą i różniczkowalną. σ ′ (x) = σ(x)(1 − σ(x)) (3) Podobnie jak w przypadku neuronów progowych, perceptrony z zigmoidalną funkcją aktywującą można łączyć w sieci. Ze względu na ciągłą (i różniczkowalną!) zależność wyjścia od danych można stosować bardziej wyrafinowane (ale i wymagające!) algorytmy uczenia (alg. spadku gradientowego, ang. gradient descent). 1.2 Wsteczna propagacja błędu / backerror propagation Dane : Sieć warstwowa perceptronów o sogmoidalnej funkcji aktywacji, zakładamy, że wszystkie perceptrony w obrębie jednej warstwy mają takie same ilości wejść i są to wszystkie wyjścia z warstwy poprzedniej. Ponadto dany jest zestaw uczący — zbiór przykładowych danych E i oczekiwanych odpowiedzi T . Wynik: Wartości wagi. Funkcja błędu, określa jak bardzo niedostosowana jest sieć do zestawu uczącego X ERR = (out(E i ) − T i )2 (4) i 1 1.5 0.9 0.8 1 0.7 0.6 0.5 0.5 0.4 0.3 0 0.2 0.1 -0.5 -4 -3 -2 -1 0 1 2 3 4 -4 (a) c = 1, p = −1 -3 -2 -1 0 1 2 3 4 (b) p = −1, c1 = 1, c2 = 2, c3 = 5, c4 = 10, c5 = 50 Rysunek 1: Wykres sigmoidy σ(x) = 1 1 1+exp(−c(x−p)) Naturalna interpretacja — im mniejsza wartość funkcji błędu tym lepiej nauczona sieć. Wniosek — algorytm powienien poszukiwać minimum funkcji ERR na przestrzeni wszystkich możliwych konfiguracji wag sieci (już sam wymiar przestrzeni może być gigantyczny, a do tego wagi są liczbami rzeczywistymi!). Oznaczenia: • η > 0 — stała uczenia, • wij — wagi • σ() — funkcja sigmoidalna • oi , Ii,j — wyjście z neuronu i, wejście numer i do neuronu numer j w następnej warstwie, są to te same wartości (choć mogą występować w różnych kontekstach), wejściami do warstwy pierwszej są dane uczące Ii,1 = Eij . • E j , T j zestaw uczący i odpowaidający mu poprawny wynik, Eji ∈ [0..1] więc dane z poza tego przedziału należy znormalizować. Podobnie wynikowa odpowiedź T ∈ (0.1..0.9). UWAGA! Poniważ sigmoida nie osiąga wartości 0 ani 1 nie należy stosować skrajnych wartości odpowiedzi. Algorytm: 1. Wybierz losowo (!!) przykład uczący E z listy przykładów i odpowiadający mu poprawny wynik T . 2. Oblicz wynik działania sieci na E, zapamiętaj go, zapamiętaj również wyniki w warstwach pośrednich oj , sumy ważone inj (wyniki przed zaaplikowaniem funkcji aktywującej) i wejścia do neuronów w danej warstwie Ik,j (wejściem do warstwy pierwszej jest przykład, dla warstw wyższych j są nimi wyniki z warstwy poprzedniej k) 3. Dla wszystkich jednostek i w zewnętrznej warstwie sieci: • Oblicz błąd erri = Ti − oi • Oblicz ∆i = erri · σ ′ (ini ) • Uaktualnij wagi do jednostki i wj,i = wj,i + η · Ij,i · ∆i = wj,i + η · oj · erri · f ′ (ini ) 4. Dla wszystkich jednostek j w kolejnych warstwach sieci (schodząc warstwami od przedostatniej do pierwszej): P • Oblicz błąd errj = l wj,l · ∆l • Oblicz ∆j = σ ′ (inj ) · errj • Uaktualnij wagi do jednostki j wk,j = wk,j + η · Ik,j · ∆j 5. Wróć do 1. 6. Zakończ po wykonaniu określonej liczby kroków lub osiągnięciu zadowalającego poziomu błędu 2 Zadanie 6 Ramię robota składa się z pary sztywnych odcinków (ustalonej długości) połączonych ze sobą regulowanym zawiasem o rozwartości od 0 do 180 stopni tj. (0..π). Punkt mocowania ramienia jest ustalony, ale można obracać ramię również w tym punkcie. Ramieniem steruje sieć neuronowa, jej wejściami są współrzędne punktu na płaszczyźnie, w które należy sięgnąć dłonią (para liczb znormalizowanych od [0..1]). Wyjściem są wartości rozwarcia obu zawiasów (ponownie znormalizowane do [0.1..0.9]). Sieć należy nauczyć na wygenerowanych danych (np. wylosować pary kątów i analitycznie przeliczyć punkt, w który dłoń trafi). Wielkość sieci, ilość warstw ukrytych, długość ramion, ilość iteracji, sposób reprezentacji... zależna od autora. 3 Zadanie 7 Napisz sieć neuronową sterującą graczem komputerowym w grze Pong. Danymi do sieci mogą być np. współrzędne piłki, kierunek i zwrot ruchu, prędkość, położenie paletki przeciwnika. Danymi wyjściowmi informacje czy przesunąć własną paletkę w górę, czy w dół. Program można uczyć na grze z przeciwnikiem, lub też (rekomendowane) na grze z samym sobą. Zamiast ponga może być np. tetris, arkanoid, space invaders, tanks... 2