• Nie Znaleziono Wyników

Wstęp do Sieci Neuronowych

N/A
N/A
Protected

Academic year: 2021

Share "Wstęp do Sieci Neuronowych"

Copied!
28
0
0

Pełen tekst

(1)

Maja Czoków, Jarosław Piersa, Tomasz Schreiber

1

5 listopada 2013

11975–2010, Profesor Uniwersytetu Mikołaja Kopernika w Toruniu. Autor oryginalnej formy wykładu na WMiI.

(2)
(3)

Spis treści

1 Modele pojedynczych neuronów i ich zastosowania 5

1.1 Neuron biologiczny . . . 5

1.2 Perceptron prosty . . . 6

1.2.1 Dynamika perceptronu prostego. . . 6

1.2.2 Postacie funkcji aktywującej . . . 6

1.2.3 Dynamika działania . . . 7

1.2.4 Interpretacja geometryczna . . . 8

1.2.5 Ograniczenia perceptronu prostego . . . 8

1.2.6 Uczenie perceptronu . . . 9

1.2.7 Algorytm uczenia perceptronu (Simple perceptron learning algorithm, SPLA) . . . 9

1.2.8 Algorytm kieszonkowy (Pocket learning algorithm, PLA) . . . 10

1.2.9 Algorytm z zapadką (ang. Pocket algorithm with ratchet, RLA, PAwR) . . . 10

1.2.10 Poprawność algorytmów . . . 11

1.3 Zagadnienia klasyfikacyjne z wieloma kategoriami . . . 12

1.3.1 Maszyna liniowa . . . 12

1.3.2 Uzasadnienie poprawności — konstrukcja Kesslera . . . 12

1.4 Warstwy ukryte, Radialne Funkcje Bazowe / Radial Basis Functions — RBF . . . 13

1.5 Adaline . . . 15

1.5.1 Definicja . . . 15

1.5.2 Zagadnienie uczenia Adaline . . . 15

1.5.3 Poprawność algorytmu. . . 15

1.5.4 Wielkość stałej uczenia ρ. . . 16

1.6 APPENDIX: Algorytm Spadku Gradientowego . . . 16

2 Sieci skierowane 19 2.1 Sieci skierowane . . . 19

2.2 Algorytmy konstukcyjne . . . 20

2.2.1 Algorytm wieżowy . . . 20

2.2.2 Aglorytm piramidalny . . . 21

2.2.3 Algorytm kafelkowy . . . 22

2.2.4 Algorytm upstart . . . 22

2.3 Algorytm propagacji wstecznej dla sieci skierowanych . . . 24

2.3.1 Perceptron sigmoidalny . . . 24

2.3.2 Wsteczna propagacja błędu / Backerror propagation . . . 25

2.3.3 Dowód algorytmu . . . 26

2.3.4 Propagacja wsteczna z bezwładnością . . . 28

Literatura

1. R. Rojas Neural Networks, A Systematic Introduction, Springer 1996,

2. P. Peretto, Introduction to Modeling Neural Networks, Cambridge University Press 1994, 3. C. Bishop, Neural Networks for Pattern Recognition, Oxford University Press 1995.

3

(4)

Program

1. Informacje o przedmiocie, warunki zaliczenia

2. Pojedynczy neuron. Model perceptronu prostego, dynamika i uczenie Maszyna liniowa, dynamika i uczenie 3. Sieci skierowane. Toplogie, algorytmy konstrukcyjne, algorytmy uczenia Algorytm Wstecznej propagacji

błędu

4. Uczenie bez nauczyciela, samoorganizacja, alg. Kohonena k-means, ART2 5. Analiza składowych głównych PCA

6. Regresja liniowa, walidacja danych

7. Sieci rekurencyjne, podstawowe informacje

8. Sieć Hopfielda, model, dynamika, zastosowania w optymalizacji grafowej i graficznej 9. Łańcuchy Markowa, informacje, własności, zastosowania

10. Maszyny Boltzmanna i symulowane wyżarzanie

11. (?) Wielowartościowe sieci neuronowe, sieci zespolone, SVM 12. (?) Algorytmy genetyczne

(5)

Rozdział 1

Modele pojedynczych neuronów i ich zastosowania

1.1 Neuron biologiczny

Komórka Schwanna Przewężenie Ranviera

Akson Dendryty

Zakończenia aksonów Jądro neuronu Ciało komórki

Otoczka mielinowa

Rysunek 1.1: Schemat komórki neuronowej. Rysunek zahttp://pl.wikipedia.org/.

Krótkie wprowadzenie nie objęte egzaminem

• informacje o neuronach jako podstawowych jednostkach „obliczeniowych” mózgu,

• budowa anatomiczna neuronu (rys. 1.1),

• przybliżona dynamika neuronu jako integratora, który zbiera spływający prąd jonowy i po przkroczeniu

„progu” sam wysyła impuls elektryczny, żadnych układów równań różniczkowych nie będzie (na razie)

• informacje o masowym paraleizmie (1011neuronów, 1015 połączeń synaptycznych),

• angdotki historyczne...

5

(6)

Zagadnienie

Mając dane pewne obiekty opisane przez zestaw numerycznych cech (czyt. wektor liczb) chcemy stworzyć sys- tem, który będzie w stanie przypisać danym obiektom pewną kategorię, do której należą. Dodatkowo chcemy aby system był w stanie samodzielnie się takiej kategoryzacji „nauczyć”, jeżeli zobaczy przykładową listę obiektów z przypisanymi już poprawnymi kategoriami.

Chcemy aby system działał również dla danych, których nie widział w trakcie uczenia (coś bardziej finezyj- nego niż słownik).

1.2 Perceptron prosty

Na początek zajmiemy się kategoryzacją binarną, tj. podziałem „albo obiekt należy do danej, klasy, albo nie”.

Perceptronem prostym nazywamy następujący model składający się z:

• określonej liczby wejść n,

• wagi stowarzyszonej z każdym wejściem wi∈ R, i = 1..n

• funkcji aktywującej φ : R → R

out

Rysunek 1.2: Schemat działania perceptronu

1.2.1 Dynamika perceptronu prostego.

Mając n wejść x1...xn liczbowych perceptron zwraca wartość

out = φ(

n

X

i=1

xiwi) (1.1)

1.2.2 Postacie funkcji aktywującej

• Identyczność φ(s) = s — taka jednostka liczy po prostu sumę ważoną wejść,

• Afiniczna φ(s) = c1· s + c2,

• Funkcja progowa (bipolarna)

φ(s) =

 0 s < p 1 s ≥ p

Wartość p jest w tym przypadku dodatkowym parametrem opisującym perceptron. Ten typ funkcji mo- deluje wysyłanie impulsu po przekroczeniu pewnego progu, które to zachowanie z pewnym przybliżeniem charakteryzuje komórki neuronowe.

Taki model nazywamy perceptronem progowym

• funkcja znakowa (polarna)

φ(s) =

 −1 s < p +1 s ≥ p

Funkcja podobna do poprzedniej z tą różnicą, że wartość −1, łatwo implementowalna poprzez funkcję sign().

(7)

-1.5 -1 -0.5 0 0.5 1 1.5

-3 -2 -1 0 1 2 3

Rysunek 1.3: Funkcja znakowa.

• Sigmoida

φ(s) = σ(s) = 1 1 + exp(−βs)

Funkcja sigmoidalna może tu dziwić. Wymaga dzielenia i potęgowania, czyli więcej obliczeń, co nie powinno być wskazane przy wielokrotnym wykonywaniu. Jednakże jest ciągła i różniczkowalna co ma zasadnicze znaczenie przy algorytmach uczenia i przybliża funkcją bipolarną. Ponadto zachodzi

σ0(s) = σ(s) · (1 − σ(s))

• Symetryczna sigmoida (limx→−∞φ = −1)

φ(s) = 1 − exp(−βs) 1 + exp(−βs)

-0.5 0 0.5 1 1.5

-3 -2 -1 0 1 2 3

=1

=2

=5

=10

Rysunek 1.4: Funkcja sigmoidalna z parametrami β = 1, β = 3, β = 10.

1.2.3 Dynamika działania

Mając dany punkt x ∈ Rn perceptron prosty z progową funkcją aktywacji zwraca wartość +1 albo 0. Naturalną interpretacją jest przypisanie jednej z dwóch klas do danego punktu.

Perceptron zwróci +1 dokładnie wtedy, gdy zachodzi

n

X

i=1

xi· wi≥ p

Czasami przyjmuje się inną interpretację perseptronu progowego. Przyjmowane jest dodatkowe sztuczne wejście, które jest zawsze aktywne x0= 1 wraz z wagą w0= −p. Wówczas perceptron zwraca +1, gdy:

n

X

i=0

xi· wi≥ 0

(8)

co jest równoważne

n

X

i=1

xi· wi≥ −w0= p

1.2.4 Interpretacja geometryczna

Przyjmijmy n = 2. W tej sytuacji, zbiorem punktów, dla których preceptron zwróci +1, jest cała półpłaszczyzna po jednej stronie prostej x1w1+ x2w2= p.

Dla n = 3 zauważamy, że zborór rozdzielający jest płaszczyzną R2 w przestrzeni R3. w1x1+ w2x2+ w3x3− p = 0

Przechodząc z n do wyższych wymiarów zauważamy, podział również przebiega wzdłuż pewnej hiperprze- strzeni opisanej przez równanie

n

X

i=1

xi· wi− p = 0

W wypadku stosowania funkcji polarnych, efekt jest ten sam, z tym że klasyfikacja jest oznaczana poprzez +1 i −1. Dla funkcji ciągych (sigmoida), uzyskamy klasyfikację „rozmytą” na linii separującej.

-6 -4 -2 0 2 4 6

-6 -4 -2 0 2 4 6

Rysunek 1.5: Zbiór uczący na R2 z dwiema kategoriami oraz prosta rozdzielająca. Parametry perceptronu:

w1= 2.45, w2= −1, p = −w0= −1

Z punktu widzenia wektora wag w = (w1..wn)t zbiór separujący jest hiperpłaszczyzną (podprzestrzenią), która jest prostopadła do wektora wag oraz dodatkowo przesunięta o |w|p .

1.2.5 Ograniczenia perceptronu prostego

Z powodu wyżej wymienionej dynamiki perceptron prosty jest w stanie klasyfikować tylko zbiory, które dają się rozdzielić od siebie poprzez prostą na R2, płaszczyznę na R3oraz hiperpłaszczyznę w wyższych wymiarach.

Takie problemy nazywamy liniowo separowalnymi.

Definicja Dwa zbiory punktów A oraz B w Rn nazywamy liniowo separowalnymi jeżeli istnieje n + 1 liczb w1...wn, p ∈ R, które spełniają: dla każdego (x1..xn) ∈ A zachodziPn

i=1xi, wi ≥ p oraz dla każdego (x1..xn) ∈ B zachodziPn

i=1xi, wi< p

Jeżeli podział zbioru nie jest liniowo separowalny, to nie istnieje perceptron (tj. układ wag i progu), który będzie w stanie zwrócić poprawną klasyfikację. W niskich wymiarach jest to dość duże ograniczenie. Ale w wyższych okazuje się, że pozwala na tworzenie dość dobrych klasyfikatorów.

Przykład Prostym przykładem problemu nieseparowalnego liniowo jest XOR.

(9)

-1.5 -1 -0.5 0 0.5 1 1.5

-1.5 -1 -0.5 0 0.5 1 1.5

Rysunek 1.6: Problem XOR.

Kiedy stosować perceptrony? W wypadku przestrzeni wysoko-wymiarowych, gdy chcemy uzyskać pewną generalizację klasyfikacji (intuicynie: podobne dane dają podobne wyniki), gdy chcemy uzyskać pewną odporo- ność na szum. Kiedy nie wiadomo jaki model będzie działał. Perceptron jest szybki i prosty w implementacji.

Warto spróbować na początku, jeżeli nie daje zadowalających wyników, to należy stosować silniejsze narzędzia.

Kiedy nie stosować perceptronów Perceptrony źle sobie radzą z uczeniem się funkcji logicznych, kiedy dane uczące różnią się na jednym bicie np. czy liczba zapisana binarnie jest podzielna przez 23?

1.2.6 Uczenie perceptronu

Zagadnienie Niech dana będzie pewna ilość przykładów ((E(1), C(1)), ..., (E(N ), C(N ))). Za cel stawiamy sobie dobranie takiego układu wag i progu, by perceptron otrzymujący na wejściu E(i)dawał na wyjściu C(i).

1.2.7 Algorytm uczenia perceptronu (Simple perceptron learning algorithm, SPLA)

Jest to podstawowy algorytm uczenia.

1. Przypisujemy wagom i progowi małe losowe wartości wokół 0,

2. Przebiegamy kolejno przykłady (albo jeden po drugim, albo (zalecane) losując z listy), 3. Dla wybranego przykładu E sprawdzamy, czy E jest dobrze klasyfikowany,

• Jesli tak, to wracamy do 2,

• Jesli nie, to korygujemu wartości wag

wi:= wi+ CEi

oraz progu

θ := θ − C, 4. Wracamy do kroku 2.

Iteracje kończymy, jeśli wszystkie przykłady są dobrze sklasyfikowane (w przypadku wyborów zgodnych z kolejnością odpowiada to przebiegnieciu calej listy bez wprowadzania zmian, w przypadku doboru losowego — odpowiednio długiej serii iteracji bez zmian wag). Uwaga. Jesli problem jest liniowo speparowalny, a więc istnieje odpowiedni zestaw wag oraz progu, to SPA go znajdzie. Uwaga. Algorytm modyfikuje wagi i próg, jeśli przykład E jest źle sklasyfikowany, czyli

sign(< E, w > −θ) 6= C.

(10)

Niech najpierw C = 1, wtedy < E, w > −θ < 0. Kładąc w = w + E

θ − 1 mamy sprawdzić, czy < E, w + E > −(θ − 1) > 0

< E, w + E > −(θ − 1) =

< E, w > + < E, E > −θ + 1 =

< E, w > −θ+ < E, E > +1 Podobnie dla C = −1 i < E, w > −θ < 0

Uwaga. Jesli dane uczące nie są liniowo separowalne, to SPLA zapętla się bez zwrocenia sensownego wyniku.

1.2.8 Algorytm kieszonkowy (Pocket learning algorithm, PLA)

Często rozkład przykladów jest na tyle skomplikowany, że ich idealna klasyfikacja przez perceptron prosty jest niemożliwa. Dążymy wówczas do tego, by sklasyfikować poprwnie jak największą ilość przykładów. Sluży do tego następujacy algorytm.

1. Przypisujemy wagom i progowi małe losowe wartości wokół 0, przypisujemy takiemu układowi wag zerowy czas życia, kopie wag, progu i czasu życia zapamiętujemy jako rekordzistę,

2. Przebiegamy przykłady losujac z listy,

3. Dla lylosowanego przykładu E sprawdzamy, czy E jest dobrze klasyfikowany,

• Jeśli tak, to zwiekszamy mu czas życia o jeden. Jeżeli jest to wynik lepszy niż u dotychczasowego rekordzisty, zapominamy dotychczasowego rekordziste i zapisujemy bieżacy uklad wag (i próg) jako nowego rekordzistę. W każdym z wypadków wracamy do 2,

• Jeśli nie, to przypisujemy wi:= wi+ CEi oraz θ := θ − C, nowo powstałemu układowi przypisujemy zerowy czas życia,

4. Wracamy do 2.

Algorytm kończymy po odpowiednio dużej ilości iteracji.

Uwaga. Algorytm może zmienić dobre wagi rekordzisty na gorsze, skoro tylko informacja z ostatnio użytego przykładu jest wykorzystana (nie ma tego w algorytmie z zapadka). Prawdopodoieństwo, że się to stanie jest maleje wraz ze wzrostem ilości iteracji. Jeśli zbiór przykładów jest skończony i wagi sa wymierne, to można pokazać, że algorytm z prawdopodobienstwem 1 zbiega do optymalnego rozwiazania.

1.2.9 Algorytm z zapadką (ang. Pocket algorithm with ratchet, RLA, PAwR)

Jest to modyfikacja powyżeszgo algorytmu. Jeśli ma nastapić zmiana rekordzisty, to sprawdzamy czy istotnie nowy kandydat na rekordzistę klasyfikuje poprawnie wiecej przykładow niż dotychczasowy rekordzista. Jeśli tak, to dokonujemy zmiany. Jesli nie, to zmianę blokujemy. Czasem może to minimalnie poprawić wydajność.

1. Przypisujemy wagom i progowi małe losowe wartości wokół 0, przypisujemy takiemu ukladowi wag zerowy czas życia, kopie wag, progu i czasu życia zapamiętujemy jako rekordzistę,

2. Przebiegamy przykłady, losując z listy,

3. Dla wybranego przykładu E sprawdzamy, czy E jest poprawnie klasyfikowany,

• Jesli tak, to zwiększamy mu czas życia o jeden. Jeżeli jest to wynik lepszy niż u dotychczasowego re- kordzisty i jeżeli dotychczasowy rekordzista klasyfikował poprawnie nie więcej przykladów niż bieżacy układ, zapominamy go (dotychczasowego rekordziesę) i zapisujemy bieżacy układ wag jako nowego rekordzistę. Wracamy do punktu 2,

• Jeśli nie, to korygujemy wagi wi := wi+ CEi oraz próg θ := θ − C, nowo powstałemu układowi przypisujemy zerowy czas życia,

(11)

4. Wracamy do 2.

Algorytm kończymy po odpowiedniej ilości iteracji. Uwaga. Wydajnosc algorytmow PLA i PAwR jest po- równywalna, ponieważ plusem PAwR jest brak błędnych uaktualnień rekordzisty, natomiast minusem — czas realizacji modyfikacji (dodatkowy koszt obliczeń).

1.2.10 Poprawność algorytmów

W algorytmach pocket i pocket with ratchet zachodzi zbiezność wedłóg prawdopodobieństwa ilości dobrze skla- syfikowanych przykładow do wartości optymalnej (na podstawie pracy Marco Muselli On Convergence Properties of Pocket Algorithm).

t→∞lim P (ε(w(t)) − εmin < η) = 1,

Dla każdej η > 0, gdzie ε jest to funkcja błędu (ilość źle klasyfikowanych przykladów dla perceptronu z bipolarną funkcją aktywacji, por rys. 1.7), natomiast w(t) to wagi w t-tej iteracji algorytmu)

W przypadku prostej nauki mamy

Twierdzenie Rozważmy separowalny zbiór przykładów ((E(n), C(n)))Nn=1 i załóżmy, że istnieje układ wag (w1, ..., wk) i próg θ oraz σ > 0 takie, że |P wjEj− θ| > σ dla wszystkich przykładów. Niech ponadto długość przykładów będzie wspólnie ograniczona przez K. Wówczas algorytm prosty osiągnie cel po wykonaniu najwyżej K2(P(wi)2+ (θ)2)/σ2 iteracji.

Dowód Możemy bez straty ogólności wyzerować próg wydłużając o jeden przykłady (dopisując im na początku

−1 i traktując próg jako dodatkową wagę). Ponadto, ewentualnie zmieniając znaki, możemy uznać, że C(n)= +1 dla wszystkich n. Wtedy nasz perceptron zwraca znak iloczynu skalarnego hw, Ei.

Poprawiane wagi w wypadku złej klasyfikacji wynoszą:

wt+1= wt+ ηE(n)· (Cn− O) = wt+ Enη · (1 − (−1)) Ustalając η = 0.5 uzyskujemy:

wt+1= wt+ En

Policzmy (im większy iloczyn skalarny, tym bliższe sobie są wektory w i wt+1):

hw, wt+1i = hw, wt+ E(n)i ≥ hw, wti + σ Z kolei

hw, wt+1i ≥ hw, wt−1+ E(n)i + σ ≥ hw, wt−1i + 2σ Stąd

hw, wti ≥ tσ. (1.2)

Z drugiej strony mamy oszacowanie długości wektora wag po t-tej poprawce:

|wt+1|2= hwt+ E(k), wt+ E(k)i = |wt|2+ 2hwt, E(k)i + |E(k)|2

Zauważmy, że hwt, E(k)i < 0. Inaczej przykład Ek byłby poprawnie klasyfikowany, więc nie uaktualnialibyśmy wag.

|wt|2+ 2hwt, E(k)i + |E(k)|2≤ |wt|2+ |E(k)|2 Stąd

|wt|2≤ tK2 (1.3)

Zestawiając nierówności (1.2) i (1.3) dostajemy

tσ ≤ hw, wti ≤ |w| · |wt| ≤ |w|Kp (t) co daje oszacowanie na czas:

t ≤ |w|2K2 σ2 Co kończy dowód.

(12)

-4 -2 0 2 4

w1

-4 -2

0 2

w2 4 0

0.5 1 1.5 2 2.5 3 3.5 4

Error

theta = 0.50

Rysunek 1.7: Profil funkcji błędu (ilość błędnie klasyfikowanych przykładów) dla danych OR w zależności od wag (w1, w2). Wartość progu jest ustalona na p=0.5.

1.3 Zagadnienia klasyfikacyjne z wieloma kategoriami

Rozważmy kategoryzację, w której chcemy odwzorować podział obiektów na trzy lub więcej kategorii.

1.3.1 Maszyna liniowa

Załóżmy teraz, że dany jest pewien zestaw przykładów ((E(n), C(n)))Nn=1, gdzie C(n) nie są już w zbiorze

−1, +1, ale należą do pewnego liczniejszego zbioru kategorii. Do rozwiązania takiego problemu używamy tzw.

maszyn liniowych (winner-take-all groups). Każdej kategorii odpowiada jedna jednostka o identycznościowych aktywacjach. Przyklad jest klasyfikowany do tej kategorii, której jednostka osiągnęła najwyższą aktywację. Jak się uczy takie maszyny?

Algorytm uczenia

1. Losujemy wagi, pamiętajac, by były w pobliżu 0 (progów nie ma!), 2. Wybieramy przykład E (losowo lub wg kolejności),

3. Dla wybranego przykładu E sprawdzamy, czy E jest dobrze klasyfikowany,

• Jeśli tak, to wracamy do 2,

• Jeżeli przyklad jest źle klasyfikowany: niech i bedzie numerem prawdziwej kategorii C, zaś j kategorii wygrywajacej. Wtedy dodajemy E do wag kategorii i oraz odejmujemy E od wag kategorii j (nie wolno odejmować od innych, to zaburzyłoby stabilność algorytmu)

4. Wracamy do 2.

Oczywiscie, ten algorytm ma swoje odmiany (simple, pocket, pocket with ratchet) analogiczne do odpowied- nich odmian dla perceptronu prostego.

1.3.2 Uzasadnienie poprawności — konstrukcja Kesslera

Okazuje się, że wszystkie twierdzenia o zbieżnosci i o zapętleniu sformułowane powyżej mają swoje odpowiedniki dla maszyn liniowych. Wykazaniu tego służy konstrukcja Kesslera, zamieniająca każdy przykład klasyfikacyjny dla n wejść i k kategorii na k − 1 przykladów dla k · n wejść (parujemy wygrywającą kategorię i po kolei z wszystkimi innymi kategoriami j tworząc wektory (0, ..., −Ej, ..., Ei, ..., 0), które mają być sklasyfikowane pozytywnie. Po przeniesieniu algorytmu uczenia maszyny liniowej przez konstrukcję Kesslera otrzymujemy algorytm uczenia perceptronu z wyborem zawsze najgorszego źle klasyfikowanego przykładu przebijającego poprawną kategorię. Ale w dowodzie tw. o zbieżnosci nie było mowy o kolejności.

(13)

Przykłd Rozważmy maszynę liniową z 3-ma wejściami (u1, u2, u3) i z 3-ma wyjściami (ua, ub, uc) (3 kategorie, 3 perceptrony). Skonstruujemy równoważną jednostkę jednokomórkowę składającą się z 9-u wejść (u1, ..., u9) i jednego wyjścia u10. 9 wag jednostki odpowiada poszczególnym wagom maszyny liniowej.

Konstrukcja przykladow uczacych.

Załóżmy, ze dla przykładu E = [E1, E2, E3] najwyższą wartość powinna zwrócić jednostka ub Wtedy dla zmo- dyfikowanego problemu dla pojedynczej jednostki mamy dwa przykłady uczące

E‘ = [−E1, −E2, −E3, E1, E2, E3, 0, 0, 0], C1= 1 E“ = [0, 0, 0, E1, E2, E3, −E1, −E2, −E3], C1= 1 E‘ będzie dobrze sklasyfikowany wtedy i tylko wtedy, gdy

[w10,4, w10,5, w10,6]E > [w10,1, w10,2, w10,3]E natomiast E“ bedzie dobrze sklasyfikowany wtedy i tylko wtedy, gdy

[w10,4, w10,5, w10,6]E > [w10,7, w10,8, w10,9]E Wagi dla problu z jedną jednostką

[w10,1, w10,2, w10,3, w10,4, w10,5, w10,6, w10,7, w10,8, w10,9]

mogą zostać przekształcone na wagi dla trzech jednostek wyjściowych w orginalnej maszynie liniowej w naste- pujący sposób

wa,1= w10,1 wa,2= w10,2 wa,3= w10,3

wb,1= w10,4 wb,2= w10,5 wb,3= w10,6

wc,1= w10,7 wc,2= w10,8 wc,3= w10,9

Patrz książka Gallant, Neural Network learning and Expert Systems.

1.4 Warstwy ukryte, Radialne Funkcje Bazowe / Radial Basis Func- tions — RBF

Idea polega na dodaniu pewnej liczby jednostek ukrytych U1, ..., Um. Każda z jednostek przyjmuje jako wejścia wszystkie dane wejściowe x1, ..., xn oraz ma przypisane dodatkowe wagi powiązane do funkcji radialnych wejścia:

φ(x) = f (||x||) Zazwyczaj korzystamy z normy euklidesowej tj:

||x||2= v u u t

n

X

i=1

x2i

Taka jednostka zwraca wartość:

out(x) =

n

X

i=1

wiφ(x)

Przykłady RBF

• φ(x) = ||x − x0||

• φ(x) = exp(−||x−x2c0||2)

• φ(x) = (||x − x0||2+ c2)d, gdzie 0 < d < 1

• φ(x) = (||x − x0||2+ c2)d, gdzie d < 0

• φ(x) = c||x − x0||2ln(c · ||x − x0||), gdzie c > 0

Główny perceptron jako wejścia przyjmuje wszystkie dane wejściowe x1, ..., xn oraz m wyników z jednostek ukrytych U1, ..., Um. Łącznie ma m + n wejść, tyleż wag oraz próg. Wagi jednostki głównej oraz próg podlegają uczeniu algorytmem kieszonkowym (z zapadką).

Dodanie do sieci ukrytych jednostek o wyżej opisanej dynamice i z losowymi wagami przenosi nieseparowalne dane uczące do wyższego wymiaru, gdzie dzięki losowości mogą stać się separowalne. Jednostki ukryte stanowią tzw. warstwę ukrytą lub warstwę rozproszoną.

(14)

-10 -5

0 5

10 -10 -5

0 5

10 0

5 10 15 20 25

RBF

x y

RBF

-10 -5 0 5 10

x -10

-5 0 5 10

y

Rysunek 1.8: Wykres funkcji f (x) =p1/2(x − 1)2+ (y − 1)2+ 1

-4 -3 -2 -1

0 1 2 3

4 -4 -3 -2 -1 0 1 2 3 4 0

0.2 0.4 0.6 0.8 1

RBF

f(x) = exp(- (x - x0)2 / (2 sigma2))

x y

RBF

f(x) = exp(- (x - x0)2 / (2 sigma2))

-4 -3 -2 -1 0 1 2 3 4

x -4

-3 -2 -1 0 1 2 3 4

y

Rysunek 1.9: Wykres funkcji f (x) = exp−||x−(0,1)||22 2

out

Rysunek 1.10: Przykładowa warstwa ukryta.

(15)

1.5 Adaline

Jeżeli kategorii jest nieskończenie wiele, to taką „kategoryzację” możemy utożsamiać z funkcją f : Rn→ R.

Chcemy skonstruować system, który będzie w stanie (przy pewnych założeniach) lokalnie przybliżał daną funkcję. Jak poprzednio, chcemy aby system (pół-)samodzielnie „nauczył się” tej funkcji na podstawie przy- kładów uczących.

1.5.1 Definicja

Maszyna Adaline (Adaptive Linear Network) składa się z n wejść x1, .., xn (w ogólności rzeczywistych) oraz stowarzyszonych z każdym wejściem wag w1, .., wn. Przyjmujemy, że funkcja aktywująca ma postać identycz- nościową, tj. odpowiedź jednostki:

S(x1, .., xn) =

n

X

i=1

wi· xi

Jednostka zwraca odpowiedź rzeczywistą, co za tym idzie pozwala na aproksymację funkcji ciągłych.

1.5.2 Zagadnienie uczenia Adaline

Dane: Lista m danych wejściowych Ei = (ei1, .., ein), gdzie i = 1..m oraz odpowiadających im poprawnych odpowiedzi Ci ∈ R.

Wynik: Wartości wag wj maszyny, która będzie minimalizowała funkcję błędu:

ERROR =

m

X

i=1

(S(ei1, .., ein) − Ci)2

Algorytm:

1. Przypisz wagi losowo małe wokół zera.

2. Losowo wybierz przykład E oraz poprawną odpowiedź C uczący z listy.

3. Oblicz aktywację jednostki na przykładzie E S =

n

X

i=1

wiei

4. Przypisz

wj:= wj+ ρ(C − S) · ej gdzie ρ > 0 — jest małą stałą uczenia.

5. Jeżeli algorytm przebiegł określoną liczbę iteracji lub osiągnął odpowiednio niski błąd, to zakończ. W przeciwnym wypadku wróć do 2.

1.5.3 Poprawność algorytmu.

Zauważmy, że jest to algorytm spadku gradientowego. Określona jest funkcja błędu ERROR : Rn → R≥0 na przestrzenie wag.

ERROR(w1, ..., wn) =

m

X

j=1

(

n

X

i=1

wieji− Cj)2

Chcemy znaleźć wagi, które minimalizują wartość tej funkcji. Policzmy pochodne cząstkowe funkcji błędu po wagach, przy ustalonym przykładzie (S, C):

∂wj

(S − C)2= ∂

∂wj

(X

i

wiei− C)2= 2(X

i

wiei− C) ∂

∂wj

(X

i

wiei− C)

Zauważmy, że

∂wj

(X

i

wiei− C) =X

i

∂wj

wiei− ∂

∂wj

C = ej

(16)

Czyli pochodna cząskowa upraszcza się do:

∂wj

(S − C)2= 2(X

i

wiei− C)ej= 2(S − C)ej

Gradient pochodnych cząstkowych wskazuje kierunek największego wzrostu funkcji błędu. Aby uzyskać największy spadek, należy odwrócić zwrot (przemnożyć przez −1).

1.5.4 Wielkość stałej uczenia ρ.

Z jednej strony musi być ρ > 0. Przyjmijmy oznaczenia: w — wektor wag przed zmianą, E — przykład uczący, C — oczekiwana odpowiedź, S = wE — uzyskana odpowiedź, w= w + ρ(C − S)E — wektor wag po zmianie.

Enariga układu E () po zmianie (błąd, który chcemy zmniejszać):

E(w) = (wE − C)2= ((w + ρ(C − S)E)E − C)2= (wE − C) + ρ(C − S)|E|22

=

=

E(w)1/2− ρE(w)1/2|E|22

= E (w) − 2ρE (w)|E|2+ ρ2E(w)|E|4 = E(w) 1 − 2ρ|E|2+ ρ2|E|4 =

= E (w) 1 + ρ|E|2(ρ|E|2− 2) Chcemy aby energia zmalała tj. E (w) < E (w) Zatem musimy otrzymać:

0 ≤ 1 + ρ|E|2(ρ|E|2− 2) < 1 ρ|E|2(ρ|E|2− 2) < 0

Z naszych założeń mamy ρ > 0 oraz norma |E|2≥ 0, zatem upraszczamy nierówność:

ρ|E|2− 2 < 0 0 < ρ < 2

|E|2

1.6 APPENDIX: Algorytm Spadku Gradientowego

Dana niech będzie funkcja f : Rn → R ciągła i różniczkowalna (istnieją pochodne cząstkowe∂x∂f

1...∂x∂f

n). Chcemy wyznaczyć minimum (lokalne) funkcji tj. x ∈ Rn, 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

∂xi(x1, ..., xn) = lim

h→0

f (x1, .., xi−1, xi+ h, xi+1, ...xn) − f (x1, ..., xn)

h (1.4)

Czym jest ∂x∂f

1(a0)? Przy kilku założeniach, intuicyjnie może być interpretowana jako kierunek, w którą stronę funkcja rośnie zmieniając 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 maksimum należy zatem wykonać krok w tymże kierunku. Szukając minimum należy znaleźć kierunek najszybszego wzrostu... i wykonać krok w „przeciwną stronę” rys. 1.12.

1. Rozpocznij w losowym / wybranym a(0) 2. Dla każdej współrzędnej i = 1..n

a(k+1)i = a(k)i − η · ∂f

∂xi(a(k)) 3. Powtarzaj krok 2

Uwaga! Algorytm spadku gradientowego może przy niesprzyjających okolicznościach utknąć w minimum lokalnym. Co gorsza, zazwyczaj nie jesteśmy w stanie stwierdzić czy zwrócony wynik jest minimum globalnym, czy lokalnym. W takich sytuacjach najprostszym (i jednym z najlepszych) rozwiązaniem jest restart algorytmu z losowego rozwiązania początkowego i wybranie najlepszego ze zwróconych wyników.

Uwagi:

(17)

0 5 10 15 20 25

-6 -4 -2 0 2 4 6 8

Rysunek 1.11: Interpretacja pochodnych cząstkowych.

0 5 10 15 20 25 30 35

-6 -4 -2 0 2 4 6

(a) f (x) = x2

-6 -4 -2 0 2 4 6

-6 -4 -2 0 2 4 06 10 20 30 40 50

(b) f (x, y) = x2+12y2

Rysunek 1.12: Postęp GDA do obliczania minimum funkcji.

• 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.

• 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ń.

(18)
(19)

Rozdział 2

Sieci skierowane

Ograniczenia, o których mowa była w poprzednim rozdziale, spowodowały zastój w badaniach nad sztucznymi neuronami, ale na szczęście nie ich porzucenie. Okazuje się, że problemy nie do przeskoczenia dla pojedynczego neuronu może rozwiązać sieć współpracujących ze sobą perceptronów.

Pozostajemy przy problemie zbudowania (bardziej zaawansowanego) systemu, który będzie mógł nauczyć się klasyfikacji obiektów. Tym razem natomiast system będzie budowany z większej liczby mniejszych neuronów, znanych z rozdziału1.

2.1 Sieci skierowane

W takiej sieci wyniki zwracane przez jedne neurony są wejściami do innych jednostek. Wyróżniamy podzbiór neuronów akceptujących impulsy z zewnątrz — są to jednostki wejściowe, podzbiór neuronów, których wyjście jest również wyjściem, lub częścią wyjścia, całej sieci jednostki wyjściowe. Pozostałe neurony zwykło się określać mianem ukrytych.

Wyróżniane są dwa typy sieci neuronowych:

• skierowane (ang. feed-forward) — nie dopuszczane są cykle skierowane, w takiej sieci przepływ infor- macji jest ustalony w jednym kierunku. Zauważmy, że opawiany perceptron prosty jest (prymitywnym) przykładem sieci skierowanej,

• rekurencyjne (ang. recurrent) — dopuszczane są cykle skierowane, wysłany impuls może kiedyś do neuronu powrócić, w ogólnym przypadku możliwe jest aby wejściem neuronu było jego własne wyjście.

W bieżącej sekcji skupimy się na sieciach skierowanych. Sieci rekurencyjne opawiane będą później (sek. 4-5).

out

Rysunek 2.1: Sieć składająca się z trzech perceptronów, która rozwiązuje problem XOR (aktywacje binarne tj.

0, 1).

Dynamika Sieć skierowana charakteryzuje się synchroniczną dynamiką, to jest każdy neuron, przed obli- czeniem swojej aktywacji, czeka aż wszystkie jego wejścia zostaną obliczone. Ponieważ nie występują cykle skierowane mamy gwarancję, że nie dynamika nie ulegnie zakleszczeniu. Programistycznie można obliczać funk- cje aktywacji w neuronach po kolei według porządku nadanego przez algorytm sortowania topologicznego (jeżeli istnieje krawędź A → B to A będze przed B na posortowanej liście). Jednostki wejściowe nie mają dochodzących krawędzi, więc będą na początku, jednostki wyjściowe na końcu.

19

(20)

...

...

(a) Sieć wieżowa.

...

...

(b) Sieć piramidalna.

Rysunek 2.2: Porównanie sieci wieżowej i poramidalnej, w tej drugiej dodatkowo dochodzą połączenia od pośrednich neuronów do wszystkich wyższych

Sieci warstwowe (Multi Layer Perceptron) Szczególnym typem sieci skierowanych są sieci warstwowe.

Wszystkie perceptrony podzielone są na rozłączne warstwy2.3. Warstwa wejściowa jest określana jako pierwsza.

Warstwa L + 1-sza za wejścia przyjmuje wyniki z warstwy L-tej i tylko te. Warstwa wyjściowa jest ostatnia. W sieciach MLP nie są dopuszczane bezpośrednie połączenia wewnątrz tej samej warstwy, ani połączenia przeska- kujące warstwę tj. z warstwy L do L + 2, z L do L + 3 itd. Propagacja sygnałów może następować jednocześnie w całej bieżącej warstwie, co ułatwia programowanie wielowątkowe.

2.2 Algorytmy konstukcyjne

Zagadnienie: mając zadany zestaw uczący E = (E1, .., Em), gdzie Ej = (E1j, .., Ejn) oraz odpowiadający im zestaw oczekiwanych odpowiedzi C1, ..., Cm chcemy znaleźć sieć o „zgrubsza zadanej” architekturze oraz wagi neuronów tejże sieci, tak aby poprawnie klasyfikowała ona wszystkie / możliwie najwięcej z przykładów uczą- cych.

2.2.1 Algorytm wieżowy

Algorytm konstrukcyjny patrz również rys. 2.2(a).

1. Rozpocznij od sieci składającej się z pojedynczego perceptronu z progową funkcją aktywacji, 2. Naucz jedyny preceptron algorytmem kieszonkowym (z zapadką),

3. Powtarzaj aż do uzyskania zadowalającego rezultatu (tj. zadowalający poziom klasyfikacji, limit czasowy itp.)

• Na szczyt wieży dodaj kolejny neuron. Jego wejściami będą dane uczące E1, .., En oraz wyjście neuronu leżącego bezpośrednio niżej,

• Naucz szczytowy neuron algorytmem kieszonkowym (z zapadką), za n+1-sze wejścia przyjmij wyniki z neuronu niższego,

• Jako wynik całej sieci zwracany będzie wynik nowo-dodanego perceptronu, 4. Zwróć wynikową sieć.

Uzasadnienie działania Pokażemy, że da się tak dobrać wagi, aby nowo-dodany neuron klasyfikował po- prawnie o (przynajmniej) jeden przykład uczący niż poprzedni. Przyjmijmy oznaczenia:

• Oj — jednostka j-ta,

• Oj+1— jednostka +1j-ta, tą będziemy uczyli,

(21)

• Ek — k-ty przykład uczący, źle klasyfikowany przez Oj,

• n — ilość wejść (wymiar danych),

• θj+1 — próg jednostki Oj+1,

• 0 < ε  1 — mała stała dodatnia,

• wi,j+1 — wagi neuronu Oj+1stowarzyszone z danymi wejściowymi,

• wj,j+1 — waga neuronu Oj+1stowarzyszona wejściem pochodzącym z jednostki Oj, Przypiszmy:

• wi,j+1:=CkEik

• wj,j+1:=n − ε, gdzie n = ilość wejść

• θj+1:= −12Ck

Obliczmy wynik na wejściu Ek (ε ≤ klasyfikowane przez Oj):

Ij+1=X

i

CkEikEik+ (n − ε)Oj= Ck· n + n(−Ck) − ε(−Ck)

= εCk

Zauważmy, że ten wynik w połączeniu z progiem da poprawną klasyfikację przykładu Ek. Jak zadziała sieć na innych przykładach El(l 6= k)?

Ij+1(El) = (n − ε)Oj+X

i

CkEikEil

Zauważmy, że |P

iCkEkiEil| = |CkP

iEikEli| = +n, jeżeli ∀iEik= +Eillub ∀iEik = −Eil. Możliwości:

• Jeżeli Ek = El oraz Ck = Cl, to są to te same przykłady i Elbędzie klasyfikowany poprawnie,

• Jeżeli Ek = El oraz Ck = −Cl, to dane są sprzeczne (nie da się znaleźć poprawnych wag),

• (TODO: to chyba nie musi być prawda...) Ek= −El nie zachodzi jeżeli mamy perceptron z obciążeniem stale równym, wówczas E0k= E0l = +1,

• Ek = −Eloraz Ck= −Cl, wówczas [Ij+1(El) = (n − ε)Oj+P

iCkEikEil= (n − ε)Oj+ n = nOj− εOj+ n, Jeżeli Oj= 1, to nadal będzie źle klasyfikowany (nie zmieni się), jeżeli

• Ek = −El oraz Ck= +Cl, wówczas [Ij+1(El) = (n − ε)Oj+P

iCkEikEil= (n − ε)Oj− n

• W pozostałych wypadkach mamy |CkP

iEikEli| ≤ n − 1, a zatem klasyfikacja się nie zmieni.

2.2.2 Aglorytm piramidalny

Algorytm konstrukcyjny patrz również rys. 2.2(b).

1. Rozpocznij od sieci składającej się z pojedynczego perceptronu z progową funkcją aktywacji, 2. Naucz jedyny preceptron algorytmem kieszonkowym (z zapadką),

3. Powtarzaj aż do uzyskania zadowalającego rezultatu (tj. zadowalający poziom klasyfikacji, limit czasowy itp.)

• Na szczyt wieży dodaj kolejny neuron. Jego wejściami będą dane uczące E1, .., En oraz wyszstkie wyjścia neuronów leżących poniżej,

• Naucz szczytowy neuron algorytmem kieszonkowym (z zapadką),

• Jako wynik całej sieci zwracany będzie wynik nowo-dodanego perceptronu, 4. Zwróć wynikową sieć.

(22)

out

Rysunek 2.3: Sieć kafelkowa

2.2.3 Algorytm kafelkowy

Algorytm konstrukcyjny, por. rys2.3.

1. Rozpocznij od sieci składającej się z warstwy wejściowej L = 1,

2. Dodaj do sieci L + 1 kafel, na razie składający się tylko z jednego neuronu. Dodany neuron za wejścia przyjmuje wszystkie wyjścia zkafla L, Za wyjście sieci przyjmij wyjście z nowego neuronu.

3. Naucz dodaną jednostkę algorytmem kieszonkowym z zapadką. Jeżeli sieć klasyfikuje poprawnie wszystkie przykłady, to zakończ zwracając wynikową sieć,

4. Jeżeli nie, to dodaj do L + 1-go kafla kolejny neuron. Naucz go algorytmem kieszonkowym z zapadką, ale tylko na takim zbiorze, że:

• poprzednie neurony w L + 1 kaflu dają na tych przykładach tę samą kombinację odpowiedzi (tj. z punktu widzenia sieci jest to ta sama klasa),

• oczekujemy, że mają być to przykłady z różnych klas,

• spośród wszystkich podzbiorów spełniających dwa powyższe wybrany powinien być najliczniejszy, Zauważmy, że ilość podzbiorów na jakie zestaw uczący jest dzielony będzie się zwiększała wykładniczo wraz z dodawaniem neuronów do kafla. Ale tym samym podzbiory będą coraz mniej liczne. W najgorszym przypadku każdy z nich będzie liczył po jednym przykładzie uczącym — taki podzestaw uczący jest już wiernie reprezentowany przez sieć tj. nie ma w niem dwóch przykładów o różnych oczekiwanych odpowiedziach.

5. Jeżeli kafel poprawnie klasyfikuje wszystkie przykłady (tj. różnym kategoriom przypisuje różne zestawy odpowiedzi), to wróć do 2 (dodaj nowy kafel), jeżeli nie to wróć do 4 (dodaj nową jednostkę w tym samym kaflu),

6. Zwróć wynikową sieć (oczekujemy odpowiedzi binarnej, więc ostatni kafel powinien liczyć tylko jedną jednostkę).

2.2.4 Algorytm upstart

Algorytm:

1. Tworzymy pojedynczą jednostkę U , która widzi wszystkie wejścia. Jej wyjście jest wyjściem całej sieci.

2. Odkładamy U na stos wraz ze wszystkimi przykładami uczącymi.

(23)

-8 -6 -4 -2 0 2 4 6

-10 -5 0 5 10

-8 -6 -4 -2 0 2 4 6

-10 -5 0 5 10

-8 -6 -4 -2 0 2 4 6

-10 -5 0 5 10

-8 -6 -4 -2 0 2 4 6

-10 -5 0 5 10

(a) Podział danych przez neurony w kaflu

(0 0 0) (0 0 1)

(0 1 0) (0 1 1)

(1 0 0) (1 0 1)

(1 1 0) (1 1 1)

(b) Problem po przekształceniu przez pierwszy kafel

Rysunek 2.4: Działanie algorytmu na przykładach. (a) Etap 1: klasa 0 jest niepoprawnie reprezentowana (tj. są w niej + oraz o). Etap 2: dodajemy nowy neuron separujący, klasa 00 jest już poprawnie reprezentowana, klasa 01 jeszcze nie. Etam 3: dodany trzeni neuron. Wszytkie klasy są wiernie reprezentowane. Klasa 10 została podzielona na 100 i 101, ale to nie jest problemem. (b) Problem po przekształceniu przez pierwszy kafel został przeniesiony do R3 na separowalne odwzorowanie na hiperkostce.

3. Dopóki stos jest niepusty, powtarzamy:

• zdejmujemy ze stosu jednostkę Ui i zbiór stowarzyszonych z nią przykładów uczących,

• uczymy Ui na jej przykładach algorytmem zapadkowym,

• jeżeli klasyfikacja Ui jest w pełni zgodna, to rozpocznij następną iterację pętli (continue),

• jeżeli istnieją źle sklasyfikowane przykłady z oczekiwaną odpowiedzią +1 dla jednostki Ui, to – tworzymy nową jednostkę Ui+, jej wejściami są wszystkie wejścia, jej wyjście wchodzi do Ui z

dużą wagą dodatnią,

(24)

Rysunek 2.5: Architektura upstart

– odkładamy Ui+ na stos z następującym zbiorem uczącym:

Ek: Uik = −1, CUki = +1 ∪ Ek : CUki = −1 , to jest przykłady, które są klasyfikowane przez Ui jako −1, a powinny +1 oraz przykłady, która powinny być klasyfikowane przez Ui jako −1, Zbiór uczący dla Ui+ jest mniejszy od Ui o przykłady dodatnie, które są dobrze klasyfikowane,

• jeżeli istnieją źle sklasyfikowane przykłady z oczekiwaną odpowiedzią −1 dla Ui, to

– tworzymy nową jednostkę Ui−, jej wejściami są wszystkie wejścia, jej wyjście wchodzi do Ui z dużą wagą ujemną,

– odkładamy Ui−na stos z następującym zbiorem uczącym:

Ek: Uik = +1, CUki = −1 ∪ Ek : CUki = +1 , to jest przykłady, które są klasyfikowane przez Ui jako +1, a powinny −1 oraz przykłady, która powinny być klasyfikowane przez Ui jako +1,

• zdejmij ze stosu następny neuron (continue), 4. Zwróć uzyskaną sieć.

2.3 Algorytm propagacji wstecznej dla sieci skierowanych

Zagadnienie Mając daną sieć warstwową neuronów oraz przykłady uczące (wraz z poprawnymi odpowie- dziami), chcemy znaleźć zestaw wag, tak aby sieć klasyfikowała / przybliżała w przypadku danych ciągłych przykłady uczące możliwe jak najlepiej.

2.3.1 Perceptron sigmoidalny

Funkcja sigmoidalna:

σ(x) = 1

1 + exp(−c · (x − p)) (2.1)

Parametr c odpowiada za nachylenie funkcji jest zazwyczaj ustalony (c = 1). Parametr p odpowiada za progo- wanie. 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ść

out = σ(

N

X

i=1

wixi) (2.2)

Alternatywnie można wartość progu ustalić p = 0, do jednostki 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)) (2.3)

(25)

-0.5 0 0.5 1 1.5

-3 -2 -1 0 1 2 3

=1

=2

=5

=10

(a) Jeden wymiar parametry c = 1, c = −3, c = 10

-10 -5

0 5

10

-10 -5 0 5 010 0.2 0.4 0.6 0.8 1 1.2 1.4

(b) Sigmoida określona na sumie ważonej dwóch zmiennych.

Rysunek 2.6: Wykres sigmoidy σ(x) = 1+exp(−c(x))1

-4 -2 0 2 4

-4 -2 0 2 4 0

0.5 1 1.5 2 2.5 3 3.5 4

(a) Portret błędu sieci z progową funkcją aktywacji.

-5 0 5 10 15 20 25

-5 0 5 10 15 20 25 0

0.5 1 1.5 2 2.5 3 3.5 4

w = [ -3.0 3.0 -1.5 3.0 -3.0 -1.5 * * -2.0]

(b) Portret błędu sieci z sigmoidalną funkcją aktywacji.

Rysunek 2.7: Portret błędu dla problemu XOR.

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).

2.3.2 Wsteczna propagacja błędu / Backerror propagation

Dane: Sieć warstwowa perceptronów o sigmoidalnej 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(j)i oczekiwanych odpowiedzi C(j).

Wynik: Wartości wagi.

Funkcja błędu, określa jak bardzo niedostosowana jest sieć do zestawu uczącego ERR(w) =X

i

(out(Ei) − Ci)2 (2.4)

Naturalna interpretacja — im mniejsza wartość funkcji błędu tym lepiej nauczona sieć. Wniosek — algorytm powinien poszukiwać minimum funkcji ERR na przestrzeni wszystkich możliwych konfiguracji wag w sieci (już sam wymiar przestrzeni może być gigantyczny, a do tego wagi są liczbami rzeczywistymi!).

(26)

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.

• Ej, Cj zestaw uczący i odpowiadają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· f0(ini)

4. Dla wszystkich jednostek j w kolejnych warstwach sieci (schodząc warstwami od przedostatniej do pierw- szej):

• Oblicz błąd : errj:=P

lwj,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

2.3.3 Dowód algorytmu

Zauważmy, że jest to algotyrm spadku gradientowego z funkcją błędu

Error( ¯W ) =1 2

p

X

k=1 d

X

i=1

(oi(Ek) − Cik)2,

gdzie

• P — ilość przykładów uczących,

• d — wymiar wyjścia z sieci (d = 1 — neuron zwraca jedną liczbę),

• Ck — oczekiwana odpowiedź (wektor długości d),

• Out(Ek) — wynik sieci na przykładzie uczącym Ek (wektor długości d),

(27)

• stała 1/2 jest kosmetyczna, jej znaczenie się wyjaśni w dowodzie, w implementacji jest ukryta w stałej uczenia.

Jeżeli ustalimy przykład uczący na (E, C), to w sumie w Error() pozostaje tylko jeden niezerowy skład- nik powiązany właśnie z bieżącym przykładem. W dalszej części będziemy rozważać tylko funkcję błędu na przykładzie (E, C) i już z wyzerowanymi pozostałymi składnikami:

Error( ¯W ) = 1 2

d

X

i=1

(Outi(E) − Ci)2.

Załóżmy, że neuron i-ty w pewnej warstwie zwrócił odpowiedź oi= σ(Ini) = σ(P

kwkiok), gdzie k przebiega neurony w poprzedniej warstwie. Załóżmy, że powinien zwrócić odpowiedź wartość ci, (jeżeli neuron jest w warstwie wyjściowej, to ci= Ci, dla innych warstw, patrz część następna dowodu).

Policzmy zatem pochodną błędu po wagach wki, dla k = 1..l — po wagach neuronu oraz pochodną błędu po ini. Pokażemy, że:

∂Error

∂ini

= −δi

oraz

∂Error

∂wj,i = −ojδi

Dla ostatniej warstwy mamy:

∂Error

∂ini = ∂in

i

1 2

Pd

j=1(Outj(E) − Cj)2

= ∂in

i

1

2(Outi(E) − Ci)2

= ∂in

i

1

2(σ(ini) − Ci)2

= 12· 2 · (σ(ini) − Ci)∂in

i(σ(ini) − Ci)

= (oi− Ci)∂σ(in∂ini)

i

= (oi− Ci0(ini)

= −δi. Oraz:

∂Error

∂wji = ∂w

ji

1 2

Pd

j=1(Outj(E) − Cj)2

= ∂w

ji

1

2(Outi(E) − Ci)2

= ∂w

ji

1

2(σ(ini) − Ci)2

= 12· 2 · (σ(ini) − Ci)∂w

ji(σ(ini) − Ci)

= (oi− Ci)∂σ(in∂ini)−Ci

i

∂ini

∂wji

= (oi− Ci0(ini)∂w

ji

P

kwkiok

= −δi

∂wjiwjioj

= −δioj. Co kończy dowód kroku trzeciego.

Krok czwarty: indukcja po numerze warstwy od ostatniej do pierwszej. Podstawa indukcji została pokazana powyżej. Krok indukcyjny: załóżmy że w jesteśmy w warstwie l-tej i że zależności jak powyżej zachodzą dla powyższych warstw (tzn. l+1 szej).

Zauważmy, że zachodzi:

inm=X

j

ojwjm=X

j

σ(inj)wjm

Cytaty

Powiązane dokumenty

Zadanie dostępne są to zadania, które już dotarły do maszyny i jeszcze nie

Dodatkowe szybkie LB dla powstających węzłów Zachłanna strategia przeglądania

1969 język BCPL; Martin Richards z University Mathematical Laboratories w Cambridge; dla pierwszej instalacji systemu operacyjnego UNIX 1970 język B zdefiniowany dwa lata

4 Uczenie perceptronu Zagadnienie uczenia Algorytmy uczenia Dowód algorytmu

Wstęp do sieci neuronowych, wykład 05 Algorytm wstecznej propagacji

podczas dynamiki osiągane jest minimum (być może lokalne!) funkcji energetycznej w skończonym czasie. Wykorzystamy dynamikę asynchroniczną sieci do znajdowania rozwiązania

Sieci rekurencyjne Autoasocjator Hopfielda Zadania Przeliczenia.. Wstęp do sieci neuronowych, wykład 10

podczas dynamiki osiągane jest minimum (być może lokalne!) funkcji energetycznej w skończonym czasie. Wykorzystamy dynamikę asynchroniczną sieci do znajdowania rozwiązania