Politechnika Gdańska Wydział Elektrotechniki i Automatyki
Katedra Inżynierii Systemów Sterowania
Metody sztucznej inteligencji
Neuron, warstwa neuronowa, sieci neuronowe - powierzchnie odpowiedzi sieci neuronowych,
Zajęcia laboratoryjne – termin T1
Materiały pomocnicze do ćwiczeń
Opracowanie: Kazimierz Duzinkiewicz, dr hab. inż. Michał Grochowski, dr inż.
2
Podany niżej materiał zawiera przypomnienie wybranych fragmentów wykładu oraz dodatkowe informacje umożliwiające tworzenie struktur sztucznych sieci neuronowych w środowisku MATLAB’a z wykorzystaniem przybornika Neural Network ver. 4.0.2. W szczególności zawiera on opis podstawowych elementów neuronu, funkcje aktywacji (przejścia), opis głównych instrukcji dostępnych w przyborniku Matlaba oraz przykład utworzenia i nauczenia sieci neuronowej perceptronowej. W obecnej wersji Matlaba podstawowe funkcje i komendy tworzące sieć neuronową są inne - w znacznie większym stopniu samodzielnie (domyślnie) proponują sieć neuronową adekwatną do wykonywanego zadania. Jednak dla zrozumienia podstawowych mechanizmów rządzących sieciami neuronowymi, korzystniej jest na etapie początkowym korzystać z komend podstawowych, zamieszczonych w niniejszym materiale. Komendy z aktualnej wersji Matlaba (2012 -2013) są wymienione w Zadaniu6 instrukcji laboratoryjnej. Proszę się zapoznać z ich działaniem. Sztuczne sieci neuronowe – pojedynczy neuron Sieć neuronowa jest charakteryzowana przez:
1. funkcje według których neuron reaguje na docierające do niego pobudzenia, nazywane funkcjami pobudzania (propagacji) i funkcjami aktywacji;
2. strukturę połączeń pomiędzy neuronami, nazywaną architekturą sieci; 3. metodę określania wag tych połączeń, nazywaną algorytmem uczenia.
Sygnały
wejściowe
p1
p2
pR
.
.
.
w1,1
pj
.
.
.
w1,2
w1,j
w1,R
.
.
.
.
.
.
g()
Wagi
bs
Próg
ns f() Wyjście as
Funkcja
pobudzania (propagacji)
Funkcja
aktywacji
Sygnał
pobudzenia
Sygnał
odpowiedzi
gdzie:
R- ilość wejść, S- ilość neuronów w
warstwie,
Rys 1. Schemat sztucznego modelu neuronu.
3
Rys. 2 pokazuje jak taki neuron jest przedstawiany w dokumentacji Matlab’a wraz z przyjętymi oznaczeniami wejść, wag, progu oraz wyjścia.
Rys 2. Schemat neuronu z pojedynczym wejściem. Symbole i notacja przyjęta w Matlabie.
Dla tego przypadku wymiary macierzy opisujących neuron są następujące:
pp ; wW ; bb ; aa
W przypadku gdy na wejście neuronu podawane jest wiele sygnałów, neuron oraz jego schemat wygląda następująco:
gdzie:
R- ilość wejść,
Rys 3. Schemat neuronu z wieloma (R) wejściami.
gdzie:
R- ilość wejść,
Rys 4. Schemat neuronu z wieloma (R) wejściami. Symbole i notacja przyjęta w Matlabie.
Wejście Neuron z wieloma wejściami
Wejście Neuron z wieloma wejściami
Wejście Neuron
4
Wymiary macierzy opisujących neuron są dla tego przypadku następujące:
R
2
1
p
p
p
p ; Rwww ,, 21W ; bb ; aa
Funkcje aktywacji (przejścia) neuronu Na rysunkach Rys. 5-7 przedstawiono przykłady funkcji aktywacji, odpowiednio przekaźnikowej niesymetrycznej, liniowej oraz logarytmiczno- sigmoidalnej. Wszystkie dostępne w przyborniku instrukcje zamieszczone są w Tablicy 1.
Rys 5. Przekaźnikowa, niesymetryczna funkcja aktywacji. Gdzie: p – oznacza sygnał wejściowy do neuronu, n – oznacza sygnał pobudzenia
neuronu, a – oznacza sygnał wyjścia z neuronu, w – oznacza wartość wagi wejścia neuronu, natomiast b – oznacza wartość progu.
Rys 6. Liniowa funkcja aktywacji.
Rys 7. Logarytmiczno- sigmoidalna, niesymetryczna funkcja aktywacji.
5
Tablica 1. Funkcje aktywacji (przejścia) dostępne
w przyborniku Neural Network ver. 4.0.2, Matlaba.
Poniżej na Rys. 8 przedstawiono przykład neuronu z symetryczną funkcją aktywacji (perceptron progowy) i dwoma wejściami.
Rys 8. Neuron z przekaźnikową, symetryczna funkcją aktywacji z dwoma wejściami– perceptron progowy.
Nazwa funkcji Relacja wejście/wyjście Symbol Funkcja w
Matlabie
przekaźnikowa unipolarna
(niesymetryczna)
przekaźnikowa bipolarna
(symetryczna)
liniowa
liniowa z nasyceniem
niesymetryczna
liniowa z nasyceniem
symetryczna
sigmoidalna logarytmiczna
unipolarna (niesymetryczna)
sigmoidalna tangensa
hiperbolicznego bipolarna
(symetryczna)
liniowa dodatnia
współzawodnictwa
(rywalizacji) a=1 neuron z max n
a=0 wszystkie inne neurony
Wejścia Neuron dwu-wejściowy
6
Wymiary macierzy dla tego neuronu są następujące:
2
1
p
pp ; 2,11,1 wwW ; bb ; aa
Sztuczne sieci neuronowe – warstwa neuronów Na rysunkach Rys 9 i 10 zilustrowano pojedynczą warstwę sieci neuronowej, wraz z opisem jej parametrów.
gdzie:
R- ilość wejść, S- ilość neuronów w warstwie,
Rys 9. Schemat warstwy sieci neuronowej.
Rys 10. Neuron z przekaźnikową, niesymetryczna funkcją aktywacji – perceptron
progowy. Symbole i notacja przyjęta w Matlabie.
Wejścia Sieć złożona z S neuronów
Wejście Warstwa z funkcją przekaźnikową
7
Wymiary macierzy dla warstwy neuronów są następujące:
R
2
1
p
p
p
p
R,S2,S1,S
R,22,21,2
R,12,11,1
www
www
www
W
S
2
1
b
b
b
b
S
2
1
a
a
a
a
Sztuczne sieci neuronowe – siec wielowarstwowa Na Rys 11 i 12 zilustrowano wielowarstwową (trójwarstwową) jednokierunkową sieć neuronową. Jak można zauważyć wyjścia każdej z warstw sieci neuronowej stają się wejściami kolejnej z warstw.
gdzie:
R- ilość wejść, s
1- ilość neuronów w warstwie pierwszej,
s2- ilość neuronów w warstwie drugiej,
s3- ilość neuronów w warstwie trzeciej,
Rys 11. Schemat wielowarstwowej, jednokierunkowej sieci neuronowej.
Wejścia Pierwsza warstwa Druga warstwa Trzecia warstwa
8
gdzie:
R- ilość wejść, S
1- ilość neuronów w warstwie pierwszej,
S2- ilość neuronów w warstwie drugiej,
S3- ilość neuronów w warstwie trzeciej,
Rys 12. Schemat wielowarstwowej, jednokierunkowej sieci neuronowej. Symbole i
notacja przyjęta w Matlabie.
Wejście Pierwsza warstwa Druga warstwa Trzecia warstwa
9
Podstawowe instrukcje przybornika Matlaba Network Toolbox ver. 4.0.2 Poniżej w Tablicy 2 przedstawiono ważniejsze instrukcje zawarte w przyborniku Matlaba, Neural Network Toolbox ver. 4.0.2. Więcej instrukcji można uzyskać po wpisaniu polecenia help nnet, natomiast szczegóły konkretnej instrukcji, takie jak: zastosowanie, składnia, algorytm działania, przykład zastosowania, można uzyskać poleceniem help dowolna instrukcja np. help newp.
Tablica 2 Instrukcje przybornika Matlaba, Neural Network Toolbox ver. 4.0.2
Instrukcja Krótki opis instrukcji
Tworzenie sieci network tworzy dowolną sieć neuronową (użytkownika)
newc tworzy warstwę z funkcją współzawodnictwa
newcf tworzy kaskadową jednokierunkową sieć wielowarstwową uczoną metodą propagacji wstecznej błędu
newff tworzy kaskadową jednokierunkową sieć wielowarstwową uczoną metodą propagacji wstecznej błędu
newfftd tworzy kaskadową jednokierunkową sieć wielowarstwową z wejściami opóźniającymi, uczoną metodą propagacji wstecznej błędu
newlin tworzy warstwę z liniową funkcją aktywacji
newlind tworzy warstwę z liniową funkcją aktywacji
newp tworzy perceptron progowy
Funkcje pobudzania sieci netprod Funkcja iloczynu wejść
netsum Funkcja sumy wejść
Funkcje inicjalizujące parametry sieci initlay Funkcja inicjalizująca wagi i progi sieci za pomocą metody inicjalizacji przypisanej dla
każdej z warstw tej sieci sieci
Funkcje określające jakość działania sieci mae Funkcja określająca średni błąd bezwzględny
mse Funkcja określająca błąd średniokwadratowy
msereg Funkcja określająca błąd średniokwadratowy i średnią kwadratów wartości wag i progów
sse Funkcja określająca sumę błędów średniokwadratowych
Metody uczenia
learncon metoda uczenia
learngd metoda uczenia Gradient descent
learngdm metoda uczenia Gradient descent with momentum
learnis metoda uczenia LVQ2 Instar
learnlv1 metoda uczenia LVQ1
learnlv2 metoda uczenia LVQ2
learnos metoda uczenia Outstar
learnp zmiany wag i progów przy pomocy metody Rosenblatt’a
learnpn zmiany wag i progów przy pomocy znormalizowanej metody uczenia perceptronu
learnwh zmiany wag i progów przy pomocy metody Widrowa-Hoffa
Obróbka danych wejściowych i wyjściowych
prestd normalizuje dane tak aby miały odchylenie standardowe równe 1 oraz średnią równą 0
poststd odwraca działanie instrukcji prestd
trastd przekształca dane do postaci adekwatnej do tych wygenerowanych przez funkcję prestd
premnmx normalizuje dane tak aby ich maksymalna i minimalna wartość wynosiła odpowiednio 1 oraz -1
postmnmx odwraca działanie instrukcji premnmx
tramnmx przekształca dane do postaci adekwatnej do tych wygenerowanych przez funkcję premnmx
10
prepca analiza danych wejściowych metodą PCA (Principal Component Analysis)
trapca przekształca dane do postaci adekwatnej do tych wygenerowanych przez funkcję prepc
postreg analiza mtodą regresji liniowej jakości nauczania sieci
Metody uczenia trainb Proces zmian wag i progów (uczenie) w trybie “wsadowym”
trainbfg Proces zmian wag i progów (uczenie) metodą propagacji wstecznej quasi-Newtona
trainbr Proces zmian wag i progów (uczenie) metodą regularyzacji Bayesiana
trainc Cyclical order incremental training w/learning functions
traincgb Proces zmian wag i progów (uczenie) metodą propagacji wstecznej Powell-Beale
traincgf Proces zmian wag i progów (uczenie) metodą propagacji wstecznej Fletcher-Powella
traincgp Proces zmian wag i progów (uczenie) metodą propagacji wstecznej Polak-Ribiere’a
traingd Proces zmian wag i progów (uczenie) metodą propagacji wstecznej Gradient descent
traingdm Proces zmian wag i progów (uczenie) metodą propagacji wstecznej Gradient descent with momentum
traingda Proces zmian wag i progów (uczenie) metodą propagacji wstecznej Gradient descent z adaptacją współczynnika szybkości uczenia
traingdx Proces zmian wag i progów (uczenie) metodą propagacji wstecznej Gradient descent with momentum z adaptacją współczynnika szybkości uczenia
trainlm Proces zmian wag i progów (uczenie) metodą propagacji wstecznej Levenberg-Marquardta
trainoss Proces zmian wag i progów (uczenie) metodą propagacji wstecznej One step secant
trainrp Proces zmian wag i progów (uczenie) metodą propagacji wstecznej Resilient (Rprop)
trainscg Proces zmian wag i progów (uczenie) metodą propagacji wstecznej Scaled conjugate gradient
Funkcje aktywacji compet Funkcja współzawodnictwa
hardlim Funkcja przekaźnikowa unipolarna (niesymetryczna)
hardlims Funkcja przekaźnikowa bipolarna (symetryczna)
logsig Funkcja sigmoidalna logarytmiczna unipolarna (niesymetryczna)
poslin Funkcja liniowa dodatnia
purelin Funkcja liniowa
radbas Funkcja Gaussa (Radial Basis)
satlin Funkcja liniowa z nasyceniem niesymetryczna
satlins Funkcja liniowa z nasyceniem symetryczna
tansig Funkcja sigmoidalna tangensa hiperbolicznego bipolarna (symetryczna)
Funkcje ułatwiające analizę
errsurf Powierzchnia błędu neuronu z pojedynczym wejściem
maxlinlr Maksymalny współczynnik szybkości uczenia dla sieci liniowej
Funkcje inicjalizujące parametry warstwy
initnw Funkcja inicjalizująca wagi i progi warstwy za pomocą metody Nguyen-Widrow’a
initwb Funkcja inicjalizująca wagi i progi warstwy za pomocą metody przypisanej dla tej sieci sieci
Operacje na wektorach
cell2mat zamienia elementy tablicy blokowej (cell array) w jedną macierz
concur tworzy równoważne wektory progów
con2seq zamienia elementy wektora na tożsamą sekwencję wektorów
combvec tworzy wszystkie możliwe kombinacje wektorów
mat2cell zamienia macierz w tablicę blokową
minmax wyznacza zakresy (min i max) wierszy macierzy
nncopy tworzy kopie macierzy (w pionie i w poziomie)
normc normalizuje kolumny macierzy do zakresu [-1; 1]
normr normalizuje wiersze macierzy do zakresu [-1; 1]
seq2con zamienia sekwencję wektorów na tożsame wektory
sumsqr wyznacza sumę kwadratów elementów macierzy
Operacje na sieciach
sim symuluje sieć neuronową
init inicjalizuje sieć neuronową
11
adapt uczenie adaptacyjne sieci neuronowej
train uczenie sieci neuronowej
Wykresy
hintonw wykreśla wagi neuronów na „grafie Hintona”
hintonwb wykreśla wagi i progi neuronów na „grafie Hintona”
plotes wykreśla powierzchnię błędu dla neuronu z jednym wejściem
plotpc wykreśla proste decyzyjne na wykresie plotpv problemu klasyfikacji przy użyciu perceptrona
plotpv wykreśla wejścia oraz wartości docelowe zagadnienia klasyfikacji przy użyciu perceptrona
plotep pokazuje aktualną wartość wag i progów na powierzchni błędu wykreślonej poleceniem plotes
plotperf wykreśla jakość odpowiedzi sieci w trakcie uczenia
plotv wykreśla wektory w postaci linii
plotvec wykreśla wektory rozróżniając je kolorami
Inne
nntool Graficzny Interfejs Użytkownika dla przybornika Neural Network Toolbox
gensim Generuje sieć neuronową do środowiska Simulink
12
Przykład utworzenia i nauczenia sieci neuronowej, perceptronowej. Poniżej przedstawiono podstawowe komendy służące do utworzenia sieci neuronowej na przykładzie sieci perceptronowej. Proces tworzenia innych sieci jest podobny, zmieniają się jedynie parametry i niektóre instrukcje. Do utworzenia sieci perceptronowej służy instrukcja newp. Składnia siec = newp(pr,s,tf,lf) Parametrami tej instrukcji są:
PR – macierz o wymiarach Rx2 minimalnych i maksymalnych wartości R elementów macierzy wejść.
S - Liczba neuronów. TF – funkcja aktywacji (przejścia), domyślnie = 'hardlim'. LF – metoda uczenia, domyślnie = 'learnp'.
Nie jest konieczne podawanie parametrów TF oraz LF. Efektem wykonania tej instrukcji jest utworzenie sieci perceptronowej. Pod nazwą siec zostaje utworzona struktura w której zapisane są wszelkie informacje na temat utworzonej sieci.
Inicjalizacja sieci
Instrukcja newp inicjalizuje również (nadaje) początkowe (zerowe) wartości wag i progów (metodą ). Wagi łączące wejścia z siecią są zapisane w strukturze siec.IW. Progi sieci są zapisane w strukturze siec.b. Możemy, również samodzielnie dobierać wartości tych elementów, np.: siec.IW{1,1}=[2 4] siec.b{1}=[5] Aby przywrócić domyślne ustawienia wag i progów (inicjalizacja parametrów sieci) należy użyć np. instrukcji init. siec = init(siec); Symulacja sieci Aby zbadać odpowiedź sieci na wektor wejść musimy posłużyć się instrukcją sim. Składnie tej instrukcji uzyskamy po wpisaniu w oknie głównym Matlaba help sim, przeważnie wystarczające jest podanie w składni instrukcji sieci jaką chcemy symulować oraz wskazaniu wektora wejść, w tym przypadku P: Y = sim(siec,P); Symuluje odpowiedź sieci siec na wejście P
13
Zdefiniujmy teraz wektor wejściowy P jako: P = [0 0 1 1; 0 1 0 1]; Oraz wektor wzorców T: T = [0 1 1 1]; Rezultatem jest odpowiedź sieci: Y = 1 1 1 1 który nie jest zgodny z oczekiwaniami (wzorcami T). Aby osiągnąć porządane wartości wyjściowe (zgodne ze wzorcem) należy odpowiednio dobrać wartości wag i progów, czyli nauczyć sieć poprawnie odpowiadać. Przykład Zaprojektuj sieć perceptronową złożoną z jednego neuronu o dwóch wejściach. Pierwsze wejście powinno być w zakresie [0 ; 1] natomiast drugie wejście w zakresie [-2 ; 2]. Zapisz projektowaną strukturę pod nazwą siec. W odpowiedzi na wcześniej zdefiniowany wektor P, sieć powinna odpowiadać zgodnie z wektorem T. siec = newp([0 1; -2 2],1); Sprawdźmy odpowiedzi sieci na wektor P: Y = sim(siec,P) Y = 1 1 1 1 Uczenie sieci Jak widzimy sieć nie odpowiada zgodnie z wektorem T. Aby doprowadzić do poprawnych odpowiedzi, musimy zmienić wartości wag i progów, samodzielnie lub w procesie uczenia. Proces uczenia wywołujemy przy pomocy instrukcji train. Instrukcja ta wywołuje domyślną dla danej sieci metodę uczenia (modyfikacji wag i progów) tak aby dopasować je do wektora T. Więcej opcji instrukcji train, po wpisaniu help train. siec = train(siec,P,T); Po procesie uczenia, sprawdźmy ponownie odpowiedzi sieci. Y = sim(siec,P)
14
Y = 0 1 1 1 Jak widzimy sieć odpowiedziała poprawnie. To kończy zadanie. Możemy również sprawdzić przy jakich wartościach wag i progów zostało to osiągnięte: siec.IW{1,1} siec.IW{1,1} =[1 1] siec.b{1} =[-1] Zmiana domyślnych parametrów sieci Po utworzeniu dowolnej sieci, przypisane są im domyślnie różne parametry takie jak np. metoda uczenia, metoda inicjalizacji, metody badania jakości działania sieci, przebieg procesu uczenia sieci i wiele innych. Dla ich przeglądnięcia należy w oknie głównym Matlaba podać nazwę utworzonej sieci. Parametry te możemy również zmieniać. Dokonujemy tego zmieniając przy pomocy odpowiednich komend dowolne parametry. Poniżej zamieszczono podstawowe z nich (dla sieci perceptronowej utworzonej komendą newp). Funkcje: adaptFcn: 'trains' initFcn: 'initlay' performFcn: 'mae' trainFcn: 'trainc' Parametry: adaptParam: .passes initParam: (none) performParam: (none) trainParam: .epochs, .goal, .show, .time Zmiana domyślnych parametrów sieci (wartości przykładowe): net.trainParam.show = 50; net.trainParam.lr = 0.05; net.trainParam.epochs = 300; net.trainParam.goal = 1e-5;