Jerzy Myc - Sztuczna inteligencja sprawozdanie, WI, Semestr III N2, Metody sztucznej inteligencji


Jerzy Myc

Sprawozdanie z Metod sztucznej inteligencji

Temat: Aproksymacja funkcji przy pomocy wielowarstwowej sieci perceptronowej

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

0x01 graphic

  1. 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:

  1. Eksperymenty obliczeniowe:

    1. 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:

0x01 graphic

Z wykresów można wnioskować że doszło do przeuczenia sieci i 10 perceptronów jest to liczba zbyt duża.

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

    2. Ilość

      Wynik działania

      1

      0x01 graphic

      2

      0x01 graphic

      3

      0x01 graphic

      4

      0x01 graphic

      5

      0x01 graphic

      6

      0x01 graphic

      7

      0x01 graphic

      8

      0x01 graphic

      9

      0x01 graphic

      10

      0x01 graphic

      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.

        1. Dobieranie optymalnej liczby iteracji. W poprzednim zadaniu ustalone zostało że optymalna liczba neutronów to 3 przy 3000 iteracji (wykres poniżej).

      0x01 graphic

      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:

      0x01 graphic

      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:

      0x01 graphic

      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:

      0x01 graphic

      Wygląd funkcji się nie zmienił więc przeprowadzona został jeszcze jedna próba - środek przedziału pomiędzy 1500 a 1850, czyli 1675:

      0x01 graphic

      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.

        1. 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:

        2. Współczynnik uczenia

          Wynik

          0.1

          0x01 graphic

          0.0001

          0x01 graphic

          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:

          0x01 graphic

          Następny próg został wybrany jako 0,375 (środek przedziału między 0,25 a 0,5).:

          0x01 graphic

          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>

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

          0x01 graphic

          `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

          0x01 graphic

          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.



          Wyszukiwarka