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