3. Dwuwarstwowa sieć neuronowa
Transkrypt
3. Dwuwarstwowa sieć neuronowa
3. Dwuwarstwowa sieć neuronowa W tym ćwiczeniu zajmiemy się najprostszą z sieci dwuwarstwowych, która rozwiązuje wcale nie banalny problem dwuwymiarowego zadania klasyfikacji XOR. Funkcja XOR zdefiniowana jest w następujący sposób: X 0 0 1 1 Y 0 1 0 1 X XOR Y 0 1 1 0 Tradycyjna sieć jednowarstwowa nie jest w stanie rozwiązać tego zadania. Potrafi to już jednak prosta sieć wielowarstwowa mająca 2 warstwy oraz 2 neurony w warstwie wejściowej (pierwszej) i 1 neuron w warstwie wyjściowej (drugiej) (patrz rysunek 1). Rysunek 1: Model sieci dwuwarstwowej realizującej funkcję XOR. Do uczenia takiej sieci znakomicie nadaje się algorytm z ćwiczenia 1 po wprowadzeniu pewnych poprawek. Są to jednak zmiany czysto kosmetyczne, prowadzące do uogólnienia na sieci wielowarstwowe a nie jakościowo nowa metoda. Zanim przejdziemy do ich przedstawienia jeszcze mała uwaga. Otóż teraz do a oznaczenia wagi używać będziemy aż trzech indeksów. Zapis wbc oznacza, że mówimy o wadze z warstwy a łączącej neuron o numerze c z warstwy a − 1 z neuronem o numerze b z warstwy a. Postąpimy podobnie jak we wspomnianym już parokrotnie ćwiczeniu. Chcąc zastosować metodę gradientową musimy policzyć pochodną funkcji celu po kolejnych wagach. Jak się przekonamy wzór na zmianę wag warstwy wyjściowej pozostanie bez zmian. Wzór na zmianę wag w warstwie wcześniejszej uwzględniać będzie natomiast sygnał błędu, nazwyany sygnałem delta. Wynika to stąd, że dla wszystkich warstw z wyjątkiem wyjściowej nie znamy prawidłowej odpowiedzi sieci, znajomość której wymagana jest w algorytmie. W związku z tym, wychodząc ze słusznego założenia, 1 że neuroy z warstw poprzednich mają wpływ na na błąd w warstwie wyjściowej, będziemy ich błąd obliczać w oparciu o błąd warstwy wyjściowej (dokładniej mówiąc, to błąd warstwy I będzie obliczany na podstawie błędu warstwy I + 1). Oto jak będzie przebiegało wyprowadzenie potrzebnych wzorów. Przyjmujemy analogiczną postać funkcji błędu 1 E(w) = [t − f (net21 )]2 , 2 gdzie net21 to pobudzenie neuronu 1 z warstwy 2. Dla warstwy wyjściowej otrzymujemy 1 X ∂E ∂net21 1 ∂E 2 2 0 2 = = [t − f (net )] = t − f ( x2k w1k ) 1 2 2 2 w1p ∂w1p ∂net21 ∂w1p 2 k=1 " #" t − f( 1 X #0 2 x2k w1k ) k=1 gdzie: • p zmienia się od 1 do ilości wejść dla warstwy 2, w naszym przypadku do 3; • suma po k jest od 1 do 3, gdyż sieć ma 2 wejścia +1 sygnał stały, razem 3; • x2k oznacza k − ty sygnał wejściowy dla warstwy 2; 2 • w1k oznacza wagę łączącą neuron 1 z warstwy 2 z k−tym wejściem dla warstwy 2 (czyli na ogół z k − tym neuronem); ... = −(t − f (net21 ))f 0 (net21 )x21p iloczyn (t − f (net21 ))f 0 (net21 ) oznaczamy przez δ12 = (t − f (net21 ))f 0 (net21 ) (W tym przypadku oznacza to, że jest to sygnał delta dla 1 neuronu z warstwy 2). Oczywiście net21 = 3 X 2 x2p w1p p=1 gdzie x21 = f ( 3 X 1 x1m w1m ) m=1 x22 = f ( 3 X 1 x1m w2m ) m=1 x23 = 1. Teraz zajmijmy się warstwą pierwszą. h ih i ∂E 1 2 2 0 2 2 0 = [t − f (net )] = t − f (net ) t − f (net ) 1 1 1 w1 = 1 1 wqp ∂wqp 2 qp 0 2 2 2 2 2 2 2 0 = − [t − y] f 0 (net21 )(net21 )0wqp 1 = − [t − y] f (net1 )(x1 w11 + x2 w12 + x3 w13 )w 1 = qp 2 2 2 = − [t − y] f 0 (net21 ) f (net11 )w11 + f (net12 )w12 + w13 2 0 1 wqp = = ... 2 w1p 2 = − [t − y] f 0 (net21 )f 0 (net1q )w1q net1q 0 1 wqp = 2 1 1 1 = − [t − y] f 0 (net21 )f 0 (net1q )w1q x11 wq1 + x12 wq2 + x13 wq3 0 1 wqp = 2 1 2 1 = − [t − y] f 0 (net21 )f 0 (net1q )w1q xp = −δ12 f 0 (net1q )w1q xp = −δq1 x1p gdzie 2 δq1 = δ12 f 0 (net1q )w1q Jeśli teraz sieć miałaby więcej warstw, to analogiczne obliczenia należałoby przeprowadzić dla kolejnych warstw poprzedzających te dwie, dla których właśnie wyprowadziliśmy odpowiednie wzory. Algorytm Definiujemy w następujący sposób kolejne elementy zbioru uczącego: p1 = {−1, −1, 1} p2 = {−1, 1, 1} p3 = {1, −1, 1} p4 = {1, 1, 1} t1 t2 t3 t4 = {0} = {1} = {1} = {0} 1. Wybór η > 0 (współczynnik uczenia), Emax > 0 (maksymalny błąd jaki chcemy osiągnąć), Cmax > 0 (ilość kroków uczenia). 2. Losowy wybór początkowych wartości wag jako niewielkich liczb (na przykład z przedziału [−1, 1]); c := 0. 3. l := 0, E := 0. 4. Podanie jednego z obrazów ze zbioru P na wejścia sieci. 5. Obliczenie sygnału wyjściowego sieci, czyli y12 . 6. Obliczenie sygnałów błędu δ12 = (t − f (net21 ))f 0 (net21 ) 2 0 δ11 = δ12 w11 f (net11 ) 2 0 δ21 = δ12 w12 f (net12 ) 7. Uaktualnienie wartości wag według wzoru a a wbc = wbc + ηδba xac 3 8. Obliczenie błędu 1 E = E + (t − y)2 2 9. Jeśli l < ilość obrazów to l := l + 1 i przejście do kroku 4. 10. Jeśli E < Emax , to kończymy algorytm. Jeśli c < Cmax , to c := c + 1 i przechodzimy do kroku 3. W przeciwnym razie kończymy algorytm. Zadanie Należy zaimplementować zaprezentowany algorytm dla problemu XOR. 4