Wykład 3
Transkrypt
Wykład 3
Sieci neuronowe - uczenie http://zajecia.jakubw.pl/nai/ Perceptron - przypomnienie x1 x2 xn w1 w2 wn 1 ↔∑ wi xi ≥ θ y= w p. p. 0 y 1 Uczenie perceptronu Przykład: rozpoznawanie znaków Wyjście: 1, jeśli na wejściu pojawia się litera “A”, zaś 0 w p.p. 36 wejść Siatka 6 × 6 Zadanie: dobrać wagi wejść i wartość progową tak, by uzyskać zaplanowany efekt Dane testowe Dane treningowe (znane odpowiedzi) Dobór wag (uczenie) Odpowiedź Uczenie perceptronu • Wejście: – Ciąg przykładów uczących ze znanymi odpowiedziami • Proces uczenia: x1 w1 + x2 w2 -θ = 0 – Inicjujemy wagi losowo [w1,w2] – Dla każdego przykładu, jeśli odpowiedź jest nieprawidłowa, to w 1 + = α x1 w 2 + = α x2 θ–=α gdzie α jest równe różnicy między odpowiedzią prawidłową a otrzymaną. 2 Uczenie perceptronu • Często α mnoży się dodatkowo przez niewielki współczynnik uczenia • Po wyczerpaniu przykładów, zaczynamy proces uczenia od początku, dopóki następują jakiekolwiek zmiany wag połączeń • Próg θ można traktować jako wagę dodatkowego wejścia o wartości -1: (zawsze -1) x1 2 θ=3 x2 -4 x1 3 2 x2 (θ = 0) -4 Uczenie perceptronu • Opisany schemat jest w miarę przejrzysty tylko dla pojedynczych perceptronów, lub niewielkich sieci • Ciężko jest stosować reguły tego typu dla skomplikowanych modeli – Tymczasem np. do rozpoznawania wszystkich liter potrzeba by sieci złożonej z 26 takich perceptronów 3 Sieci perceptronów Dendrites Synapses + + (weights) Axon + Synapses Nodes - Ograniczenia pojedynczych perceptronów spowodowały w latach 80-tych wzrost zainteresowania sieciami wielowarstwowymi i opracowanie algorytmu ich uczenia (propagacja wsteczna) SIECI WIELOWARSTWOWE • Wyjścia neuronów należących do warstwy niższej połączone są z wejściami neuronów należących do warstwy wyższej – np. metodą „każdy z każdym” • Działanie sieci polega na liczeniu odpowiedzi neuronów w kolejnych warstwach • Nie jest znana ogólna metoda projektowania optymalnej architektury sieci neuronowej 4 SIECI PERCEPTRONÓW Potrafią reprezentować dowolną funkcję boolowską (opartą na rachunku zdań) p 1 1 θ=2 -2 θ=1 p XOR q 1 1 q Funkcje aktywacji 1,2 • Progowe 1 0,8 1 ⇔ s ≥ 0 f (s ) = 0 ⇔ s < 0 0,6 0,4 0,2 0 -15 -10 -5 0 5 10 15 -0,2 1,2 • Sigmoidalne 1 0,8 0,6 f (s ) = 0,4 0,2 1 1 + e−s 0 -15 -10 -5 0 5 10 15 5 FUNKCJE AKTYWACJI (2) 1,2 • Unipolarne 1 0,8 1 f (s ) = 1 + e−s 0,6 0,4 0,2 0 -15 -10 -5 0 5 10 15 1,5 • Bipolarne 1 0,5 0 -15 -10 -5 0 5 10 2 −1 1 + e −s f (s ) = 15 -0,5 -1 -1,5 FUNKCJE AKTYWACJI (3) fα (s ) = 1,2 1 1 1 + e −α s 0,8 0,6 α = 2.0 0,4 α = 1.0 0,2 0 -15 -10 -5 0 lim fα (s ) = 0.5 α →0 5 10 15 1 ⇔ lim fα (s ) = 0.5 ⇔ α → +∞ 0 ⇔ α = 0.5 s>0 s=0 s<0 6 FUNKCJE AKTYWACJI (4) fθ ,α (s ) = 1 1+ e −α ( s −θ ) θ =2 α = 1. 5 1,2 1 0,8 0,6 0,4 0,2 0 -10 -5 0 5 10 15 FUNKCJE AKTYWACJI (5) • Zasady ogólne: – Ciągłość (zachowanie stabilności sieci jako modelu rzeczywistego) – Różniczkowalność (zastosowanie propagacji wstecznej) – Monotoniczność (intuicje związane z aktywacją komórek neuronowych) – Nieliniowość (możliwości ekspresji) 7 SIECI NEURONOWE Potrafią modelować (dowolnie dokładnie przybliżać) funkcje rzeczywiste (z tw. Kołmogorowa) n y = f w0 + ∑ wi xi i =1 f (s ) = Σ 1 1 + e−s funkcja aktywacji SIECI NEURONOWE 0 0.3 0.4 1.1 0.4 -2 1 -0.2 -0.2 Σ 8 SIECI NEURONOWE -0.4 1 1.2 -0.5 -0.8 0.3 -0.4 -0.4 0.9 1.2 -0.8 0.9 -2 -0.7 -0.5 -0.1 1 1.2 -0.4 SIECI JAKO FUNKCJE ZŁOŻONE (1) v11 x1 f1 w1 y v12 g v21 x2 v22 f2 w2 y = g (w1 f1 (v11 x1 + v21 x2 ) + w2 f 2 (v12 x1 + v22 x2 )) y = Network ( x1 , x2 ) 9 SIECI JAKO FUNKCJE ZŁOŻONE (2) 5 x1 f1 4 y 3 g -7 x2 1 f2 -3 2 4 ⇔ − − 1 3 1 ≥8 1+ e−3(5x1 −7 x2 ) 1 + e−2(3x1 + x2 ) y= 2 4 0 ⇔ − − 1 3 <8 1+ e−3(5x1 −7 x2 ) 1 + e−2(3x1 + x2 ) SIECI JAKO FUNKCJE ZŁOŻONE (3) v11 x1 f1 w1 v12 g v21 x2 v22 f2 y= =Network(x1,x2) w2 • Jeśli wszystkie poszczególne funkcje aktywacji są liniowe, to funkcja Network jest również liniowa • Architektura wielowarstwowa daje zatem nowe możliwości tylko w przypadku stosowania funkcji nieliniowych 10 SIECI JAKO FUNKCJE ZŁOŻONE – przypadek liniowy v11 x1 f1 w1 y v12 g v21 x2 v22 f2 w2 • Niech fi(x1,x2) = ai*(x1*v1i + x2*v2i) + bi g(z1,z2) = a*(z1*w1 + z2*w2) + b • Wtedy Network(x1,x2) = A1*x1 + A2*x2 + B • Np.: A1 = a*(a1*v1*w1 + a2*v2*w2) PROPAGACJA WSTECZNA (1) • Chcemy “wytrenować” wagi połączeń między kolejnymi warstwami neuronów • Inicjujemy wagi losowo (na małe wartości) • Dla danego wektora uczącego obliczamy odpowiedź sieci (warstwa po warstwie) • Każdy neuron wyjściowy oblicza swój błąd, odnoszący się do różnicy pomiędzy obliczoną odpowiedzią y oraz poprawną odpowiedzią t 11 PROPAGACJA WSTECZNA (2) dane uczące odpowiedź sieci y błąd d właściwa odpowiedź t Błąd sieci definiowany jest zazwyczaj jako d= 1 ( y − t )2 2 PROPAGACJA WSTECZNA (3) • Oznaczmy przez: – f: R → R – funkcję aktywacji w neuronie – w1 ,..., wK – wagi połączeń wchodzących – z1 ,..., zK – sygnały napływające do neuronu z poprzedniej warstwy • Błąd neuronu traktujemy jako funkcję wag połączeń do niego prowadzących: 1 2 d (w1 ,..., wK ) = ( f (w1 z1 + ... + wK z K ) − t ) 2 12 PRZYKŁAD (1) • Rozpatrzmy model, w którym: – Funkcja aktywacji przyjmuje postać f ( s) = 1 1 + e − 3( s + 2 ) – Wektor wag połączeń = [1;-3;2] • Załóżmy, że dla danego przykładu: – Odpowiedź powinna wynosić t = 0.5 – Z poprzedniej warstwy dochodzą sygnały [0;1;0.3] PRZYKŁAD (2) • Liczymy wejściową sumę ważoną: s = w1 x1 + w2 x2 + w3 x3 = 1 ⋅ 0 + (−3) ⋅1 + 2 ⋅ 0.3 = −2.4 • Liczymy odpowiedź neuronu: y = f (s) = 1 1+ e − 3( − 2.4 + 2 ) = 1 ≈ 0.23 1 + e1.2 • Błąd wynosi: d= 1 (0.23 − 0.5)2 ≈ 0.036 2 13 IDEA ROZKŁADU BŁĘDU • Musimy „rozłożyć” otrzymany błąd na połączenia wprowadzające sygnały do danego neuronu • Składową błędu dla każdego j-tego połączenia określamy jako pochodną cząstkową błędu względem j-tej wagi • Składowych tych będziemy mogli użyć do zmodyfikowania ustawień poszczególnych wag połączeń IDEA ROZKŁADU BŁĘDU Załóżmy, że mamy neuron z wagami w0=0, w1=2, w2=3. Mamy dane wektor wejściowy: [0.3 , 0.7], przy czym oczekiwana odpowiedź to t=1. Jak należy zmienić wagi, aby błąd był jak najmniejszy? Możemy błąd przedstawić jako funkcję w1, w2: x1 w1 y w2 0.4 4 0.2 y = f w0 + ∑ wi xi i =1 n błąd 2 0 0 -4 -2 -2 0 2 1 f (s ) = 1 + e−s -4 wa gi x2 4 Wagi powinniśmy zmienić w kierunku spadku wartości błędu. wartość błędu dla wag [2, 3] 14 KIERUNEK ZMIANY WAG Jeśli rozważymy większą liczbę przykładów, funkcja średniego błędu będzie miała bardziej skomplikowany kształt. [0.3, 0.7], t=1 [0.2, 0.9], t=0.1 [-0.6, 1], t=0 [0, -0.8], t=0.5 [0.6, 1], t=0.3 1.25 1 10 0.75 5 0.5 0.25 -10 0 -5 10 -5 0 5 5 Nachylenie wykresu w danym punkcie (odpowiadającym aktualnym wartościom wag) dane jest przez gradient, czyli wektor pochodnych cząstkowych. 0 -5 -10 -10 -10 Zmiana wag powinna nastąpić w kierunku przeciwnym. -8 -6 -4 -2 0 2 4 OBLICZANIE POCHODNEJ ∂d (w1 ,..., wK ) = ∂w j = = ( y − t ) ⋅ f ' (s ) ⋅ z j ∂ 1 ( f (w1 z1 + ... + wK z K ) − t )2 2 ∂w j ∂ 1 ( y − t )2 ∂f (s ) ∂(w z + ... + w z ) K K 1 1 2 ⋅ ⋅ ∂w j ∂s ∂y 15 PROPAGACJA WSTECZNA • Idea: – Wektor wag połączeń powinniśmy przesunąć w kierunku przeciwnym do wektora gradientu błędu (z pewnym współczynnikiem uczenia η) – Możemy to zrobić po każdym przykładzie uczącym, albo sumując zmiany po kilku przykładach. ∆w j = η ⋅ (t − y ) ⋅ f ' (s ) ⋅ z j • Realizacja: Prosty przykład: wagi w1=1, w2=1, dane wejściowe: [0.5, 0.5], t = 1. Funkcja sigmoidalna: f (s ) = 1 1 + e−s więc: f ′(s ) = e− s (1 + e ) −s 2 Stąd: s = 0.5 + 0.5 = 1, y = 0.731, zmiana w= (1- 0.731) * 0.19 * 0.5 = 0.026. A więc nowe wagi to 1.026. Ten sam przykład da tym razem odpowiedź y=0.736. PROPAGACJA WSTECZNA Błędy są następnie propagowane w kierunku poprzednich warstw. Wprowadźmy pomocniczo współczynnik błędu δ zdefiniowany dla ostatniej warstwy jako: δ = f ′( s) ⋅ (t − y ) a dla pozostałych warstw: w1 błąd δ błąd δ1 w2 n δ = f ′( s) ⋅ ∑ wiδ i i =1 błąd δ2 czyli neuron w warstwie ukrytej “zbiera” błąd z neuronów, z którymi jest połączony. Zmiana wag połączeń następuje po fazie propagacji błędu i odbywa się według wzoru: ∆w = η ⋅ δ ⋅ z Oznaczenia: w - waga wejścia neuronu, z - sygnał wchodzący do neuronu danym wejściem, δ - współczynnik błędu obliczony dla danego neuronu, s - wartość wzbudzenia (suma wartości wejściowych pomnożonych przez wagi) dla danego neuronu. 16