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

Podobne dokumenty