Wstęp do Sieci Neuronowych

Transkrypt

Wstęp do Sieci Neuronowych
Wstęp do Sieci Neuronowych
T. Schreiber, M. Czoków, J. Piersa
29 listopada 2010
Streszczenie
Dokument poniższy nie jest skryptem do wykładu w roku akademickim 2010/2011. Co najwyżej podsumowanim najważniejszych z poruszanych zagadnień. Nie zwalnia on z obowiązku myślenia i chodzenia na
zajęcia.
1
Organizacja przedmiotu
1.1
Organizacja przedmiotu
• przedmiot: Wprowadzenie do sieci neuronowych w sem. zimowym 2010/2011,
• prowadzący: mgr Maja Czoków, mgr Jarosław Piersa (po 15h wykładu),
• forma: wykład + laboratoria (30h + 30h),
• wymagania programowe: umiejętność logicznego i samodzielnego muślenia, umiejętność programowania
np. Kurs Programowania I oraz II, Algorytmy i Struktury Danych, podstawowa wiedza z algebry, analizy
matematycznej, rachunku prawdopodobieństwa,
• egzamin: po semestrze zimowym, forma pisemna (z sytuacji, gdy będzie mało zdających — egzamin
ustny),
• dla ambitnych: wybitna praca na laboratoriach i uzyskanie oceny bdb+ do dnia 2011-02-16 jest podstawą
do zwolnienia z egzaminu.
1.2
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.
1.3
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. Sieci rekurencyjne, podstawowe informacje,
7. Sieć Hopfielda, model, dynamika, zastosowania w optymalizacji grafowej i graficznej,
8. Maszyny Boltzmanna i symulowane wyżarzanie,
1
9. (?) Łańcuchy Markowa, informacje, własności, zastosowania,
10. (?) Regresja liniowa, walidacja danych,
11. (?) Wielowartościowe sieci neuronowe, sieci zespolone, SVM.
1.4
Wymagania na bdb+ na laboratoriach
• zadania za 6 punktów,
• oddane przynajmniej jedno do końca października, dwa zadania do końca listopada, trzy zaadania w
styczniu,
• zadania z pięciu działów: perceptrony proste i maszyny liniowe, algorytmy konstrukcyjne dla sieci sierowanych, propagacja wsteczna, samoorganizacja i PCA, sieci Hopfielda i maszyny Boltzmanna,
2
Spis treści
1 Organizacja przedmiotu
1.1 Organizacja przedmiotu
1.2 Literatura . . . . . . . .
1.3 Program . . . . . . . . .
1.4 Wymagania na bdb+ na
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
1
1
2
2 Perceptron Prosty
2.1 Neuron biologiczny . . . . . . . . . . . . . . . . . . . . . .
2.2 Perceptron prosty . . . . . . . . . . . . . . . . . . . . . . .
2.2.1 Postacie funkcji aktywującej . . . . . . . . . . . . .
2.2.2 Dynamika działania . . . . . . . . . . . . . . . . .
2.2.3 Interpretacja geometryczna . . . . . . . . . . . . .
2.3 Ograniczenia perceptronu prostego . . . . . . . . . . . . .
2.4 Uczenie perceptronu . . . . . . . . . . . . . . . . . . . . .
2.4.1 Simple perceptron learning algorithm (SPLA) . . .
2.4.2 Pocket learning algorithm (PLA) . . . . . . . . . .
2.4.3 Pocket algorithm with ratchet . . . . . . . . . . . .
2.4.4 Poprawność algorytmów . . . . . . . . . . . . . . .
2.5 Zagadnienia klasyfikacyjne . . . . . . . . . . . . . . . . . .
2.5.1 Konstrukcja Kesslera . . . . . . . . . . . . . . . . .
2.6 Inne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6.1 Radialne Funkcje Bazowe / Radial Basis Functions
2.6.2 Adaline . . . . . . . . . . . . . . . . . . . . . . . .
2.6.3 Algorytm Spadku Gradientowego . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
— RBF
. . . . .
. . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
4
4
5
6
6
6
8
8
8
9
9
10
11
12
12
12
15
3 Sieci skierowane
3.1 Algorytmy konstukcyjne . . .
3.1.1 Algorytm wieżowy . .
3.1.2 Aglorytm piramidalny
3.1.3 Algorytm kafelkowy .
3.1.4 Algorytm upstart . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
15
16
16
18
18
19
. . . . . . . .
. . . . . . . .
. . . . . . . .
laboratoriach
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4 Ciąg dalszy nastąpi...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
20
3
2
Perceptron Prosty
2.1
Neuron biologiczny
Dendryty
Jądro neuronu
Ciało komórki
Przewężenie Ranviera
Komórka Schwanna
Otoczka mielinowa
Akson
Zakończenia aksonów
Rysunek 1: Schemat komórki neuronowej. Rysunek za http://pl.wikipedia.org/.
Krótkie wprowadzenie nie objęte egzaminem
• informacje o neuronach jako podstawowych jednostkach „obliczeniowych” mózgu,
• budowa anatomiczna neuronu (rys. 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 (1011 neuronów, 1015 połączeń synaptycznych),
• angdotki historyczne...
2.2
Perceptron prosty
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
Dynamika perceptronu prostego.
Mając n wejść x1 ...xn liczbowych perceptron zwraca wartość
n
X
out = φ(
xi wi )
i=1
4
(1)
out
Rysunek 2: Schemat działania perceptronu
2.2.1
Postacie funkcji aktywującej
• Identyczność φ(s) = s — taka jednostka liczy po prostu sumę ważoną wejść,
• Afiniczna φ(s) = c1 · s + c2 ,
• Funkcja progowa (bipolarna)
0
1
φ(s) =
s<p
s≥p
Wartość p jest w tym przypadku dodatkowym parametrem opisującym perceptron. Ten typ funkcji modeluje wysyłanie impulsu po przekroczeniu pewnego progu, które to zachowanie z pewnym przybliżeniem
charakteryzuje komórki neuronowe.
• funkcja znakowa (polarna)
−1
+1
φ(s) =
s<p
s≥p
Funkcja podobna do poprzedniej z tą różnicą, że wartość −1 nie jest elementem neutralnym dodawania i
„odpowiedź negatywna” może mieć pewien wpływ.
1.5
1
0.5
0
-0.5
-1
-1.5
-3
-2
-1
0
1
2
3
Rysunek 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)
5
1.5
1
0.5
0
-0.5
-1
-1.5
-4
-2
0
2
4
Rysunek 4: Funkcja sigmoidalna z parametrami β = 1, β = 3, β = 10.
2.2.2
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
xi · wi ≥ p
i=1
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
xi · w i ≥ 0
i=0
co jest równoważne
n
X
xi · wi ≥ −w0 = p
i=1
2.2.3
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 x1 w1 + x2 w2 = p.
Dla n = 3 zauważamy, że zborór rozdzielający jest płaszczyzną R2 w przestrzeni R3 .
w1 x1 + w2 x2 + w3 x3 − p = 0
Przechodząc z n do wyższych wymiarów zauważamy, podział również przebiega wzdłuż pewnej hiperprzestrzeni opisanej przez równanie
n
X
xi · wi − p = 0
i=1
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.
Z punktu widzenia wektora wag w = (w1 ..wn )t zbiór separujący jest hiperpłaszczyzną (podprzestrzenią),
p
.
która jest prostopadła do wektora wag oraz dodatkowo przesunięta o |w|
2.3
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 R3 oraz hiperpłaszczyznę w wyższych wymiarach.
Takie problemy nazywamy liniowo separowalnymi.
6
6
4
2
0
-2
-4
-6
-6
-4
-2
0
2
4
6
Rysunek 5: Zbiór uczący na R2 z dwiema kategoriami oraz prosta rozdzielająca. Parametry perceptronu:
w1 = 2.45, w2 = −1, p = −w0 = −1
Definicja Dwa zbiory punktów A oraz B w Rn nazywamy liniowo
Pn separowalnymi jeżeli istnieje n + 1 liczb
w1 ...wn , pP
∈ R, które spełniają: dla każdego (x1 ..xn ) ∈ A zachodzi i=1 xi , wi ≥ p oraz dla każdego (x1 ..xn ) ∈ B
n
zachodzi i=1 xi , 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.
2
1.5
1
0.5
0
-0.5
-1
-1
-0.5
0
0.5
1
1.5
2
Rysunek 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ą odporoność na szum.
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?
7
2.4
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) .
2.4.1
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.
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.
2.4.2
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,
8
• 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.
2.4.3
Pocket algorithm with ratchet
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 rekordzisty 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,
4. Wracamy do 2.
Algorytm kończymy po odpowiedniej ilości iteracji. Uwaga. Wydajnosc algorytmow PLA i PAwR jest porównywalna, ponieważ plusem PAwR jest brak błędnych uaktualnień rekordzisty, natomiast minusem — czas
realizacji modyfikacji (dodatkowy koszt obliczeń).
2.4.4
Poprawność algorytmów
W algorytmach pocket i pocket with ratchet zachodzi zbiezność wedłóg prawdopodobieństwa ilości dobrze sklasyfikowanych przykładow do wartości optymalnej (na podstawie pracy Marco Muselli On Convergence Properties
of Pocket Algorithm).
lim P (ε(w(t)) − εmin < η) = 1,
t→∞
Dla każdej η > 0, gdzie ε jest to funkcja błędu (ilość źle klasyfikowanych przykladów dla perceptronu z bipolarną
funkcją aktywacji, por rys. 7), natomiast w(t) to wagi w t-tej iteracji algorytmu)
W przypadku prostej nauki mamy
Twierdzenie Rozważmy separowalny zbiórPprzykładów ((E (n) , C (n) ))N
n=1 i załóżmy, że istnieje układ wag
(w1∗ , ..., wk∗ ) i prłg θ∗ oraz σ > 0 takie, że | wj∗ Ej∗ − θ∗ | > σ dla wszystkich przykładów. Niech ponadto
długość przykładów
bedzie wspólnie ograniczona przez K. Wówczas algorytm prosty osiagnie cel po wykonaniu
P
najwyżej K 2 ( (wi∗ )2 + (θ∗ )2 )/σ 2 iteracji.
9
Dowód Możemy bez straty ogólności wyzerować próg wydłużajac 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 < w, E >. Policzmy
< w∗ , wt+1 >=< w∗ , wt + E (n) >≥< w∗ , wt > +σ
Z kolei
< w∗ , wt+1 >≥< w∗ , wt−1 + E (n) > +σ ≥< w∗ , wt−1 > +2σ
Stąd
< w∗ , wt+1 >≥ tσ
Z drugiej strony
|wt+1 |2 =< wt + E(k), wt + E(k) >= |wt |2 + 2 < wt , E(k) > +|E(k)|2 ≤ |wt |2 + |E(k)|2 ≤ |wt |2 + K 2
Stąd
|wt |2 ≤ tK 2
Zestawiając te dwie nierówności dostajemy
tσ ≤ |w∗ |K
p
(t)
co, po prostych przekształceniach, kończy dowód.
theta = 0.50
4
3.5
3
2.5
2
Error
1.5
1
0.5
0
-4
-4
-2
w2
-2
0
0
2
2
4
w1
4
Rysunek 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.
2.5
Zagadnienia klasyfikacyjne
(n)
Załóżmy teraz, że dany jest pewien zestaw przykładów ((E (n) , C (n) ))N
nie są już w zbiorze
n=1 , gdzie C
−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
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,
10
• 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 odpowiednich odmian dla perceptronu prostego.
2.5.1
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.
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 zmodyfikowanego problemu dla pojedynczej jednostki mamy dwa przykłady uczące
E‘ = [−E1 , −E2 , −E3 , E1 , E2 , E3 , 0, 0, 0], C 1 = 1
E“ = [0, 0, 0, E1 , E2 , E3 , −E1 , −E2 , −E3 ], C 1 = 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 nastepują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 Exper Systems.
11
2.6
Inne
2.6.1
Radialne Funkcje Bazowe / Radial Basis Functions — 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 na stałe losowe wagi oraz funkcje radialne:
φ(x) = f (||x||)
Zazwyczaj korzystamy z normy euklidesowej tj:
v
u n
uX
||x||2 = t
x2i
i=1
Taka jednostka zwraca wartość:
n
X
out(x) =
wi φ(x)
i=1
Przykłady RBF
• φ(x) = ||x − x0 ||
2
0 ||
• φ(x) = exp(− ||x−x
)
2c
• φ(x) = (||x − x0 ||2 + c2 )d , gdzie 0 < d < 1
• φ(x) = (||x − x0 ||2 + c2 )d , gdzie d < 0
• φ(x) = c||x − x0 ||2 ln(c · ||x − x0 ||), gdzie c > 0
10
5
25
20
y
RBF15
0
10
5
-5
0
-10
10
-5
x
5
0
-10
0
5
-5
-10
y
10 -10
-5
0
5
10
x
Rysunek 8: Wykres funkcji f (x) =
p
1/2(x − 1)2 + (y − 1)2 + 1
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ą.
2.6.2
Adaline
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ć identycznościową, tj. odpowiedź jednostki:
n
X
S(x1 , .., xn ) =
wi · xi
i=1
12
f(x) = exp(- (x - x0)2 / (2 sigma2))
4
2
2
f(x) = exp(- (x - x0) / (2 sigma ))
3
2
1
1
y
0.8
RBF0.6
0
0.4
-1
0.2
-2
0
-4
-3
-3
-2
x
-1
0
1
2
3
4 -4
-3
-2
-1
0
2
1
4
3
-4
-4
y
-3
-2
-1
0
1
2
3
4
x
Rysunek 9: Wykres funkcji f (x) = exp
−||x−(0,1)||22
2
out
Rysunek 10: Przykładowa warstwa ukryta.
Jednostka zwraca odpowiedź rzeczywistą, co za tym idzie pozwala na aproksymację funkcji ciągłych.
Zagadnienie uczenia Adaline.
Dane: Lista m danych wejściowych E i = (ei1 , .., ein ), gdzie i = 1..m oraz odpowiadających im poprawnych
odpowiedzi C i ∈ R.
Wynik:
Wartości wag wj maszyny, która będzie minimalizowała funkcję błędu:
ERROR =
m
X
(S(ei1 , .., ein ) − C i )2
i=1
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
13
w i ei
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.
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
n
X
(
wi eji − C j )2
j=1 i=1
Chcemy znaleźć wagi, które minimalizują wartość tej funkcji. Policzmy pochodne cząstkowe funkcji błędu po
wagach, przy ustalonym przykładzie (S, C):
X
∂
∂ X
∂ X
(S − C)2 =
(
wi ei − C)2 = 2(
(
wi ei − C)
wi ei − C)
∂wj
∂wj i
∂wj i
i
Zauważmy, że
X ∂
∂
∂ X
(
wi ei − C) =
wi ei −
C = ej
∂wj i
∂w
∂w
j
j
i
Czyli pochodna cząskowa upraszcza się do:
X
∂
(S − C)2 = 2(
wi ei − C)ej = 2(S − C)ej
∂wj
i
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).
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ć):
2
E(w∗ ) = (w∗ E − C)2 = ((w + ρ(C − S)E)E − C) = (wE − C) + ρ(C − S)|E|2
2
=
2
= E(w)1/2 − ρE(w)1/2 |E|2 = E(w) − 2ρE(w)|E|2 + ρ2 E(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<ρ<
14
2
|E|2
2.6.3
Algorytm Spadku Gradientowego
∂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
(2)
∂f
(a0 )? Przy kilku założeniach, intuicyjnie może być interpretowana jako kierunek, w którą stronę
Czym jest ∂x
1
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. 11.
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
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.
50
40
30
20
10
06
4
2
0
-2
-4
-6 -6
-4
-2
0
2
4
6
Rysunek 11: Postęp GDA do obliczania minimum funkcji.
3
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. Okazauje się, że problemy nie do przeskoczenia dla pojedynczego
neuronu może rozwiązać sieć współpracujących ze sobą perceptronów.
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:
15
• skierowane (ang. feed-forward) — nie dopuszczane są cykle skierowane, w takiej sieci przepływ informacji 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 12: 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 obliczeniem 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ć funkcje 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.
Sieci warstwowe (Multi Layer Perceptron) Szczególnym typem sieci skierowanych są sieci warstwowe.
Wszystkie perceptrony podzielone są na rozłączne warstwy 14. 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 przeskakują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.
3.1
Algorytmy konstukcyjne
Zagadnienie: mając zadany zestaw uczący E = (E 1 , .., E m ), gdzie E j = (E1j , .., Enj ) oraz odpowiadający im
zestaw oczekiwanych odpowiedzi C 1 , ..., C m 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.
3.1.1
Algorytm wieżowy
Algorytm konstrukcyjny patrz również rys. 13(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,
16
...
...
...
...
(a) Sieć wieżowa.
(b) Sieć piramidalna.
Rysunek 13: Porównanie sieci wieżowej i poramidalnej, w tej drugiej dodatkowo dochodzą połączenia od pośrednich neuronów do wszystkich wyższych
• 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ł poprawnie o (przynajmniej) jeden przykład uczący niż poprzedni. Przyjmijmy oznaczenia:
• Oj — jednostka j-ta,
• Oj+1 — jednostka +1j-ta, tą będziemy uczyli,
• E k — 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+1 stowarzyszone z danymi wejściowymi,
• wj,j+1 — waga neuronu Oj+1 stowarzyszona wejściem pochodzącym z jednostki Oj ,
Przypiszmy:
• wi,j+1 :=C k Eik
• wj,j+1 :=p − ε
• θj+1 := − 21 C k
Obliczmy wynik na wejściu E k (ε ≤ klasyfikowane przez Oj ):
X
Ij+1 =
C k Eik Eik + (p − ε)Oj = C k · p + p(−C k ) − ε(−C k )
i
= εC k
Zauważmy, że ten wynik w połączeniu z progiem da poprawną klasyfikację przykładu E k .
Jak zadziała sieć na innych przykładach E l (l 6= k)?
X
Ij+1 (E l ) = (p − ε)Oj +
C k Eik Eil
i
Zauważmy, że | i C
= |C
= ±p, jeżeli ∀i Eik = ±Elk . Jeżeli E k = E l oraz C k = C l to są,
to te same przykłady i E będzie klasyfikowany poprawnie. Jeżeli E k = E l oraz C k = −C l to są, to dane są
sprzeczne.
P
W pozostałych wypadkach mamy |C k i Eik Eil | ≤ p − 1
P
k
Eik Eil |
l
k
k l
i Ei Ei |
P
17
3.1.2
Aglorytm piramidalny
Algorytm konstrukcyjny patrz również rys. 13(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ć.
3.1.3
Algorytm kafelkowy
Algorytm konstrukcyjny, por. rys 14.
out
Rysunek 14: Sieć kafelkowa
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.
18
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ę).
6
6
4
4
2
2
0
0
-2
-2
-4
-4
-6
-6
-8
-10
-5
0
5
-8
-10
10
6
6
4
4
2
2
0
0
-2
-2
-4
-4
-6
-6
-8
-10
-5
0
5
-8
-10
10
-5
0
5
10
-5
0
5
10
(a) Podział danych przez neurony w kaflu
(0 1 1)
(1 1 1)
(0 0 1)
(1 0 1)
(0 1 0)
(1 1 0)
(0 0 0)
(1 0 0)
(b) Problem po przekształceniu przez pierwszy kafel
Rysunek 15: 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.1.4
Algorytm upstart
Algorytm:
19
Rysunek 16: Architektura upstart
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.
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ą,
– odkładamy
Ui+ na stos z następującym
zbiorem
uczącym:
k
E : Uik = −1, CUk i = +1 ∪ E k : CUk i = −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:
E k : Uik = +1, CUk i = −1 ∪ E k : CUk i = +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ć.
4
Ciąg dalszy nastąpi...
20

Podobne dokumenty