Wprowadzenie do Sieci Neuronowych — Algorytm wstecznej

Transkrypt

Wprowadzenie do Sieci Neuronowych — Algorytm wstecznej
Wprowadzenie do Sieci Neuronowych — Algorytm wstecznej
propagacji błędu
Maja Czoków, Jarosław Piersa
2010-11-16
1
1.1
Powtórzenie
Perceptron sigmoidalny
Funkcja sigmoidalna:
1
1 + exp(−c · (x − p))
σ(x) =
(1)
Parametr c odpowiada za nachylenie funkcji jest zazwyczaj ustalony (c = 1). Parametr p odpowiada za progowanie. Zazwyczaj jest pomijany, a w jego miejsce dodawane jest sztuczne wejście zawsze równe +1 z dodatkową
wagą w0 , która jest objęta uczeniem. Perceptron sigmoidalny o wagach wi na wejściach xi zwraca wartość
N
X
out = σ(
wi xi )
(2)
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ą.
σ 0 (x) = σ(x)(1 − σ(x))
(3)
Podobnie jak w przypadku neuronów progowych, perceptrony z sigmoidalną 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 C.
1.5
1
1.4
1.2
0.5
1
0.8
0
0.6
0.4
-0.5
0.2
0 10
5
-1
10
5
0
0
-5
-1.5
-4
-2
0
2
-5
-10
-10
4
(a) Jeden wymiar parametry c = 1, c = −3, c = 10
(b) Sigmoida określona na sumie ważonej dwóch
zmiennych.
Rysunek 1: Wykres sigmoidy σ(x) =
1
1
1+exp(−c(x))
w = [ -3.0 3.0 -1.5 3.0 -3.0 -1.5 * * -2.0]
4
4
3.5
3.5
3
3
2.5
2.5
2
2
1.5
1.5
1
1
0.5
0.5
0
25
0
4
-5
20
-4
2
-2
0
0
15
-2
5
10
0
10
5
2
-4
15
0
4
20
-5 25
(a) Portret błędu sieci z progową funkcją aktywacji.
(b) Portret błędu sieci z sigmoidalną funkcją aktywacji.
Rysunek 2: Portret błędu dla problemu XOR.
Wynik: Wartości wagi.
Funkcja błędu, określa jak bardzo niedostosowana jest sieć do zestawu uczącego
X
ERR =
(out(E i ) − C i )2
(4)
i
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 , C 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ź C ∈ (0.1..0.9). UWAGA! Ponieważ 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 C.
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 = Ci − oi
• Oblicz ∆i = erri · σ 0 (ini )
• Uaktualnij wagi do jednostki i
wj,i = wj,i + η · Ij,i · ∆i
= wj,i + η · oj · erri · f 0 (ini )
4. Dla wszystkich jednostek j w kolejnych warstwach sieci (schodząc warstwami od przedostatniej do pierwszej):
2
25
20
15
10
5
0
-6
-4
-2
0
2
4
6
8
Rysunek 3: Interpretacja pochodnych cząstkowych.
• Oblicz błąd errj =
P
l
wj,l · ∆l
• Oblicz
∆j = σ 0 (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
1.3
Algorytm spadku grdientowego
∂f
∂f
... ∂x
). Chcemy
Dana niech będzie funkcja f : Rn → R ciągła i różniczkowalna (istnieją pochodne cząstkowe ∂x
1
n
n
wyznaczyć minimum (lokalne) funkcji tj. x ∈ R , takie że dla f (x) ≤ f (y) dla y należących do pewnego otoczenia
x. Dodatkowo dany niech będzie pewien punkt startowy a0 ∈ Rn .
Przypomnijmy definicję pochodnych cząstowych
∂f
f (x1 , .., xi−1 , xi + h, xi+1 , ...xn ) − f (x1 , ..., xn )
(x1 , ..., xn ) = lim
h→0
∂xi
h
(5)
∂f
(a0 )? Intuicyjnie jest to kierunek, w którą stronę funkcja rośnie zmieniając
Zastanówmy się czym jest ∂x
1
pierwszą współrzędną, przy pozostałych ustalonych. Mając cały zestaw pochodnych cząstkowych (gradient)
mamy dokładny kierunek, w którym funkcja najszybciej rośnie.
Szukając minimum należy zatem wybrać zwrot przeciwny i... udać się w jego kierunku.
1. Rozpocznij w losowym / wybranym a(0)
2. Dla każdej współrzędnej i = 1..n
(k+1)
ai
(k)
= ai
−η·
∂f (k)
(a )
∂xi
3. Powtarzaj krok 2
Uwagi:
• W przykładach rozważana jest parabola — funkcja posiada dokładnie jedno minimum lokalne (i bardzo
ładne wzory do jego analitycznego obliczenia — jej celem jest ilustrowanie działania algorytmu). Jeżeli
funkcja rozbiega do (minus) nieskończoności algorytm może się zapętlić.
• Trajektoria poszukiwania minimum zależy od punktu startowego. Wybór „złego” może powodować utknięcie w minimum lokalnym. Zazwyczaj nie ma możliwości stwierdzenia, że jest to minimum lokalne. W takiej
sytuacji jednym z sensowniejszych pomysłów jest ponowne uruchomienie algorytmu z innym / losowym
punktem startowym.
3
35
30
50
25
40
30
20
20
10
15
06
4
10
2
0
5
-2
-4
0
-6
-4
-2
0
2
4
-6 -6
6
-4
-2
0
2
4
6
(b) f (x, y) = x2 + 12 y 2
(a) f (x) = x2
Rysunek 4: Postęp GDA do obliczania minimum funkcji.
• Sugerowane warunki stopu: gdy zmiany będą bardzo małe (poniżej ustalonego progu względnego lub
bezwzględnego), po wykonaniu ustalonej liczby iteracji, po osiągnięciu zadowalającej wartości.
• Parametr η > 0 jest stałą uczenia. Zbyt duża wartość uniemożliwi osiągnięcie minimum (kolejne punkty
zaczną „przeskakiwać minimum na drugą stronę”), zbyt mały spowoduje powolne działanie. Wartość η
można uzmiennić i zmniejszać wraz z postępem obliczeń.
(Jeżeli ktoś jeszcze nie spostrzegł...) Wstecza propagacja błędu jest algorytmem spadku gradientowego.
Minimalizowane jest funkcja błędu (nieujemna!) 4.
ERR =
1X
(out(E i ) − C i )2
2 i
Dziedziną funkcji jest przestrzeń wszystkich wartości wag. Każda waga jest rzeczywista. Przy x wejściach,
trzech warstwach liczących kolejno j,k,l neuronów cała przestrzeń ma wymiar xj + jk + kl (tu już trudniej o
gotowe analityczne wzory dla każdej z wag).
2
Zadania
Inne pomysły są jak najbardziej mile widziane.
2.1
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.
2.2
Zadanie 7a
Napisz sieć neuronową sterującą graczem komputerowym w grze Pong / Arkanoid. 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ół (lewo / prawo — arkanoid).
4
2.3
Zadanie 7b
Napisz sieć neuronową sterującą graczem komputerowym w grze Tanks / Worms. Danymi do sieci mogą być np.
współrzędne strzelającego działa, współrzędne celu, grawitacja, wiatr (ewentualnie również topografia terenu).
Danymi wyjściowmi są kierunek (kąt) oraz siła (prędkość początkowa) strzału.
2.4
Zadanie 7c
Napisz sieć neuronową sterującą graczem komputerowym w grze Space Invaders / Galaxian. Danymi do sieci
mogą być np. współrzędne statku kosmicznego, współrzędne celów (ewentualnie pocisków lecących na nasz
statek). Danymi wyjściowmi mogą być zmiana położenia (lewo, prawo, góra, dół, bez zmian) oraz decyzja czy
strzelać.
5