Jerzy Myc
Sprawozdanie z Metod sztucznej inteligencji
Temat: Aproksymacja funkcji przy pomocy wielowarstwowej sieci perceptronowej
Próbki zostały przygotowane wg niżej podanej funkcji:
X=[0:10]; %%próbki uczące Y=sin(X./1.5); %%wartości próbek uczących Xt=0:0.1:10; %% próbki testowe Yt=sin(Xt./1.5); %% wartości próbek testowych |
Wyliczone w ten sposób próbki zostały przedstawione na wykresie poniżej.
Organizacja sieci. Sieć została zainicjowana zgodnie z podanymi danymi:
net=newff(X,Y,10,{},'traingd'); |
Po zainicjowaniu sieć perceptoronowej danymi wymienionymi poniżej, sieć przyjęła następujące parametry:
Ilość warstw (net.numLayers) - 2
Przejścia na poszczególnych warstwach
net.layers{1}.transferFcn - tansig
net.layers{2}.transferFcn - purelin
Wartość współczynnika uczenia (net.trainParam.lr) - 0.0100
Liczba iteracji (net.trainParam.epochs) - 1000
Eksperymenty obliczeniowe:
Przykładowy trening. Po przeprowadzeniu treningu podanego w zadaniu zostały ustalone poniższe fakty:
Trening nie ukończył się po ustalonej ilości iteracji
divideFcn - jest to fukcja która służy do dzielenia wektorów wejściowych i wyjściowych w procesie uczenia. Dzieli wektory na 3 grupy: uczące, walidujące i testujące
Po wykonaniu treningu próbkami treningowymi zostały sprawdzone odpowiedzi układu na próbki uczące i testujące. Opdowiedzi u formowały następujące wykresy:
Z wykresów można wnioskować że doszło do przeuczenia sieci i 10 perceptronów jest to liczba zbyt duża.
Zgodnie z instrukcjami z podpunktu drugiego w punkcie 3 została stworzona pętla do wyliczenia optymalnej liczby perceptronów. Ze względu na długi czas obliczeń ilość iteracji została zmniejszona do 3000. Czerwonymi gwiazdkami został oznaczone odpowiedzi układu na próbki uczące, a czarnymi kółkami na testujące.
Ilość |
Wynik działania |
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
Porównując wykresy do wykresu naszej funkcji można wywnioskować że optymalna ilością perceptronów jest liczba 3. Dla mniejszej liczby pojawia się zjawisko niedouczenia sieci, a większej przeuczenia sieci.
Dobieranie optymalnej liczby iteracji. W poprzednim zadaniu ustalone zostało że optymalna liczba neutronów to 3 przy 3000 iteracji (wykres poniżej).
Następnie będzie dobierana odpowiednia liczba iteracji od 0 do 3000. W tym przypadku przyjąłem że każda próba to będzie połowa przedziału. Pierwszym kroku będzie to 1500:
Liczba iteracji 1500 okazała się nie wystarczającą liczbą aby osiągnąć cel. Następny przedział został wybrany jako połowa przedziału pomiędzy 1500 a 3000 czyli 2200:
Taka liczba iteracji dała zadowalający wynik. Aby sprawdzić czy możliwa jest mniejsza liczba iteracji został wybrany środek przedziału między 1500 a 2200 czyli 1850:
Wygląd funkcji się nie zmienił więc przeprowadzona został jeszcze jedna próba - środek przedziału pomiędzy 1500 a 1850, czyli 1675:
Taka liczba okazała się jednak nie wystarczająca. Więc optymalną liczbą iteracji jest liczba spomiędzy przedziału 1850 a 2200. Wybranie liczby spomiędzy tego przedziału gwarantuje optymalną ilość iteracji do osiągnięcia zamierzonego wyniku.
Wyznaczenie współczynnika uczenia się dla ustalonej liczby iteracji i liczby perceptronów. W związku z eksperymentami b i c liczba perceptronów została ustawiona na 3, a liczba iteracji na 2000. Jako że początkowa wartość współczynnika uczenia się wynosi 0.0100, postanowiłem sprawdzić wynik dla wartości 0.1 i 0.001:
Współczynnik uczenia |
Wynik |
0.1 |
|
0.0001 |
|
Po przeprowadzonych badaniach wnioskuje że zmniejszenie współczynnika prowadzi do przeuczenia. Jedyny zakres w którym rozsądnie się poruszać to od 0,001 wzwyż. Jako że 0,1 daje dobry wynik test został przeprowadzony dla 0,5 jako że jest to połowa przedziału między 1 a 0,1. Co nie dało żadnego wyniku. Następnie została wypróbowana wartość 0,25 ( jako środek pomiędzy 0,1 a 0,5). Wynik był następujący:
Następny próg został wybrany jako 0,375 (środek przedziału między 0,25 a 0,5).:
Z wyników tego badania można wnioskować że optymalną wartością współczynnika uczenia dla 2000 iteracji i 3 perceptronów jest wartość z przedziału <0,25 , 0,375>
Dla powyżej wyznaczony parametrów została wykonany trening sieci preceptronowej dla metod `traingda' i `traingdm'. Oto jakie parametry zostały ustawione dla sieci w obydwu metodach:
Metod |
TrainParams |
|
`traingda' |
show: 25 showWindow: 1 showCommandLine: 0 epochs: 2000 time: Inf goal: 0 max_fail: 6 lr: 0.3750 lr_inc: 1.0500 lr_dec: 0.7000 max_perf_inc: 1.0400 min_grad: 1.0000e-010 |
|
`traingdm' |
show: 25 showWindow: 1 showCommandLine: 0 epochs: 2000 time: Inf goal: 0 max_fail: 6 lr: 0.3750 mc: 0.9000 min_grad: 1.0000e-010 |
|
Traingdm -. Ustawia biasy i wagi na podstawie prędkości spadku gradientu.
Traingda - Ustawia wagi i biasy na podstawie spadku gradientu z adaptacyjnym stopniem nauczania.
W przypadku naszego zadania z powyższych funkcji najbardziej odpowiednia jest funkcja `traingda'. Gdyż mamy doczynienia z funkcja sinusoidalną gdzie następują nagłe spadki wartości i potrzebna jest metoda która zmienia stopień nauczania zgodnie z spadkiem gradientu.