Wydział Elektrotechniki i Automatyki

Transkrypt

Wydział Elektrotechniki i Automatyki
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ż.
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.
Wagi
Sygnały
wejściowe
p1
w1,1
p2
.
.
.
pj
.
.
.
pR
w1,2
.
.
.
Funkcja
pobudzania
(propagacji)
g()
ns
Funkcja
aktywacji
Sygnał
odpowiedzi
f()
as
Wyjście
w1,j
.
.
.
bs
Próg
Sygnał
pobudzenia
w1,R
gdzie:
R- ilość wejść,
S- ilość neuronów w
warstwie,
Rys 1. Schemat sztucznego modelu neuronu.
2
Rys. 2 pokazuje jak taki neuron jest przedstawiany w dokumentacji Matlab’a wraz z
przyjętymi oznaczeniami wejść, wag, progu oraz wyjścia.
Wejście
Neuron
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:
p   p ; W  w ; b  b ; a  a 
W przypadku gdy na wejście neuronu podawane jest wiele sygnałów, neuron oraz jego
schemat wygląda następująco:
Wejście Neuron z wieloma wejściami
gdzie:
R- ilość wejść,
Rys 3. Schemat neuronu z wieloma (R) wejściami.
Wejście Neuron z wieloma wejściami
gdzie:
R- ilość wejść,
Rys 4. Schemat neuronu z wieloma (R) wejściami. Symbole i notacja przyjęta w
Matlabie.
3
Wymiary macierzy opisujących neuron są dla tego przypadku następujące:
 p1 
p 
p   2  ; W  w1 , w2 ,  wR ; b  b ; a  a 
  
 
 pR 
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.
4
Tablica 1. Funkcje aktywacji (przejścia) dostępne
w przyborniku Neural Network ver. 4.0.2, Matlaba.
Relacja wejście/wyjście
Nazwa funkcji
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
Poniżej na Rys. 8 przedstawiono przykład neuronu z symetryczną funkcją aktywacji
(perceptron progowy) i dwoma wejściami.
Wejścia Neuron dwu-wejściowy
Rys 8. Neuron z przekaźnikową, symetryczna funkcją aktywacji z dwoma wejściami–
perceptron progowy.
5
Wymiary macierzy dla tego neuronu są następujące:
p 
p   1  ; W  w1,1 w1,2 ; b  b ; a  a 
 p2 
Sztuczne sieci neuronowe – warstwa neuronów
Na rysunkach Rys 9 i 10 zilustrowano pojedynczą warstwę sieci neuronowej, wraz z
opisem jej parametrów.
Wejścia Sieć złożona z S neuronów
gdzie:
R- ilość wejść,
S- ilość neuronów w warstwie,
Rys 9. Schemat warstwy sieci neuronowej.
Wejście
Warstwa z funkcją przekaźnikową
Rys 10. Neuron z przekaźnikową, niesymetryczna funkcją aktywacji – perceptron
progowy. Symbole i notacja przyjęta w Matlabie.
6
Wymiary macierzy dla warstwy neuronów są następujące:
 w1,1
 p1 
w
p 
2 ,1
p   2 W 
 
  

 
 pR 
 wS ,1
w1,2  w1,R 
 b1 
 a1 

a 


w2 ,2  w2 ,R 
b
b   2 a   2




 

 
 
wS ,2  wS ,R 
aS 
bS 
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.
Wejścia
Pierwsza warstwa
Druga warstwa
Trzecia warstwa
gdzie:
R- ilość wejść,
1
s - ilość neuronów w warstwie pierwszej,
2
s - ilość neuronów w warstwie drugiej,
3
s - ilość neuronów w warstwie trzeciej,
Rys 11. Schemat wielowarstwowej, jednokierunkowej sieci neuronowej.
7
Wejście
Pierwsza warstwa
Druga warstwa
Trzecia warstwa
gdzie:
R- ilość wejść,
1
S - ilość neuronów w warstwie pierwszej,
2
S - ilość neuronów w warstwie drugiej,
3
S - ilość neuronów w warstwie trzeciej,
Rys 12. Schemat wielowarstwowej, jednokierunkowej sieci neuronowej. Symbole i
notacja przyjęta w Matlabie.
8
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
Krótki opis instrukcji
Tworzenie sieci
Instrukcja
newlin
newlind
newp
tworzy dowolną sieć neuronową (użytkownika)
tworzy warstwę z funkcją współzawodnictwa
tworzy kaskadową jednokierunkową sieć wielowarstwową uczoną metodą propagacji
wstecznej błędu
tworzy kaskadową jednokierunkową sieć wielowarstwową uczoną metodą propagacji
wstecznej błędu
tworzy kaskadową jednokierunkową sieć wielowarstwową z wejściami opóźniającymi,
uczoną metodą propagacji wstecznej błędu
tworzy warstwę z liniową funkcją aktywacji
tworzy warstwę z liniową funkcją aktywacji
tworzy perceptron progowy
netprod
netsum
Funkcja iloczynu wejść
Funkcja sumy wejść
initlay
Funkcja inicjalizująca wagi i progi sieci za pomocą metody inicjalizacji przypisanej dla
każdej z warstw tej sieci sieci
mae
mse
msereg
Funkcja określająca średni błąd bezwzględny
Funkcja określająca błąd średniokwadratowy
Funkcja określająca błąd średniokwadratowy i średnią kwadratów wartości wag i
progów
Funkcja określająca sumę błędów średniokwadratowych
Metody uczenia
metoda uczenia
metoda uczenia Gradient descent
metoda uczenia Gradient descent with momentum
metoda uczenia LVQ2 Instar
metoda uczenia LVQ1
metoda uczenia LVQ2
metoda uczenia Outstar
zmiany wag i progów przy pomocy metody Rosenblatt’a
zmiany wag i progów przy pomocy znormalizowanej metody uczenia perceptronu
zmiany wag i progów przy pomocy metody Widrowa-Hoffa
network
newc
newcf
newff
newfftd
Funkcje pobudzania sieci
Funkcje inicjalizujące parametry sieci
Funkcje określające jakość działania sieci
sse
learncon
learngd
learngdm
learnis
learnlv1
learnlv2
learnos
learnp
learnpn
learnwh
Obróbka danych wejściowych i wyjściowych
prestd
poststd
trastd
premnmx
postmnmx
tramnmx
normalizuje dane tak aby miały odchylenie standardowe równe 1 oraz średnią równą 0
odwraca działanie instrukcji prestd
przekształca dane do postaci adekwatnej do tych wygenerowanych przez funkcję
prestd
normalizuje dane tak aby ich maksymalna i minimalna wartość wynosiła odpowiednio 1
oraz -1
odwraca działanie instrukcji premnmx
przekształca dane do postaci adekwatnej do tych wygenerowanych przez funkcję
premnmx
9
prepca
trapca
postreg
analiza danych wejściowych metodą PCA (Principal Component Analysis)
przekształca dane do postaci adekwatnej do tych wygenerowanych przez funkcję prepc
analiza mtodą regresji liniowej jakości nauczania sieci
trainb
trainbfg
trainbr
trainc
traincgb
traincgf
traincgp
traingd
traingdm
Proces zmian wag i progów (uczenie) w trybie “wsadowym”
Proces zmian wag i progów (uczenie) metodą propagacji wstecznej quasi-Newtona
Proces zmian wag i progów (uczenie) metodą regularyzacji Bayesiana
Cyclical order incremental training w/learning functions
Proces zmian wag i progów (uczenie) metodą propagacji wstecznej Powell-Beale
Proces zmian wag i progów (uczenie) metodą propagacji wstecznej Fletcher-Powella
Proces zmian wag i progów (uczenie) metodą propagacji wstecznej Polak-Ribiere’a
Proces zmian wag i progów (uczenie) metodą propagacji wstecznej Gradient descent
Proces zmian wag i progów (uczenie) metodą propagacji wstecznej Gradient descent
with momentum
Proces zmian wag i progów (uczenie) metodą propagacji wstecznej Gradient descent z
adaptacją współczynnika szybkości uczenia
Proces zmian wag i progów (uczenie) metodą propagacji wstecznej Gradient descent
with momentum z adaptacją współczynnika szybkości uczenia
Proces zmian wag i progów (uczenie) metodą propagacji wstecznej LevenbergMarquardta
Proces zmian wag i progów (uczenie) metodą propagacji wstecznej One step secant
Proces zmian wag i progów (uczenie) metodą propagacji wstecznej Resilient (Rprop)
Proces zmian wag i progów (uczenie) metodą propagacji wstecznej Scaled conjugate
gradient
Metody uczenia
traingda
traingdx
trainlm
trainoss
trainrp
trainscg
Funkcje aktywacji
compet
hardlim
hardlims
logsig
poslin
purelin
radbas
satlin
satlins
tansig
Funkcja współzawodnictwa
Funkcja przekaźnikowa unipolarna (niesymetryczna)
Funkcja przekaźnikowa bipolarna (symetryczna)
Funkcja sigmoidalna logarytmiczna unipolarna (niesymetryczna)
Funkcja liniowa dodatnia
Funkcja liniowa
Funkcja Gaussa (Radial Basis)
Funkcja liniowa z nasyceniem niesymetryczna
Funkcja liniowa z nasyceniem symetryczna
Funkcja sigmoidalna tangensa hiperbolicznego bipolarna (symetryczna)
Funkcje ułatwiające analizę
errsurf
maxlinlr
Powierzchnia błędu neuronu z pojedynczym wejściem
Maksymalny współczynnik szybkości uczenia dla sieci liniowej
Funkcje inicjalizujące parametry warstwy
initnw
initwb
Funkcja inicjalizująca wagi i progi warstwy za pomocą metody Nguyen-Widrow’a
Funkcja inicjalizująca wagi i progi warstwy za pomocą metody przypisanej dla tej sieci
sieci
cell2mat
concur
con2seq
combvec
mat2cell
minmax
nncopy
normc
normr
seq2con
sumsqr
zamienia elementy tablicy blokowej (cell array) w jedną macierz
tworzy równoważne wektory progów
zamienia elementy wektora na tożsamą sekwencję wektorów
tworzy wszystkie możliwe kombinacje wektorów
zamienia macierz w tablicę blokową
wyznacza zakresy (min i max) wierszy macierzy
tworzy kopie macierzy (w pionie i w poziomie)
normalizuje kolumny macierzy do zakresu [-1; 1]
normalizuje wiersze macierzy do zakresu [-1; 1]
zamienia sekwencję wektorów na tożsame wektory
wyznacza sumę kwadratów elementów macierzy
Operacje na wektorach
Operacje na sieciach
sim
init
symuluje sieć neuronową
inicjalizuje sieć neuronową
10
adapt
train
uczenie adaptacyjne sieci neuronowej
uczenie sieci neuronowej
hintonw
hintonwb
plotes
plotpc
wykreśla wagi neuronów na „grafie Hintona”
wykreśla wagi i progi neuronów na „grafie Hintona”
wykreśla powierzchnię błędu dla neuronu z jednym wejściem
wykreśla proste decyzyjne na wykresie plotpv problemu klasyfikacji przy użyciu
perceptrona
wykreśla wejścia oraz wartości docelowe zagadnienia klasyfikacji przy użyciu
perceptrona
pokazuje aktualną wartość wag i progów na powierzchni błędu wykreślonej poleceniem
plotes
wykreśla jakość odpowiedzi sieci w trakcie uczenia
wykreśla wektory w postaci linii
wykreśla wektory rozróżniając je kolorami
Wykresy
plotpv
plotep
plotperf
plotv
plotvec
Inne
nntool
gensim
Graficzny Interfejs Użytkownika dla przybornika Neural Network Toolbox
Generuje sieć neuronową do środowiska Simulink
11
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
12
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)
13
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;
14