Professional Documents
Culture Documents
Ćwiczenie nr 3:
Badanie algorytmów i struktur sieci neuronowych
Opracowanie:
dr inż. Andrzej Kaczmarek
1. Wprowadzenie
Neuron może posiadać dowolną liczbę wejść, z których każde ma przypisaną odpowiednią wagę.
W ogólności wielkości te mogą być zmienne w czasie, mówimy wtedy o adaptacyjnych sieciach
neuronowych. Wartości wag wpływają pośrednio na stan neuronu, co określane jest mianem jego
aktywności:
s wi xi
i
W takim przypadku do treningu sieci neuronowej konieczne jest przygotowanie odpowiednio dużego
zbioru danych wraz z oczekiwanymi odpowiedziami sieci. Istnieje wiele algorytmów
minimalizujących błąd trenowanej sieci, jednak nawet dla zbioru uczącego, nie zawsze odpowiedź
sieci jest w 100% poprawna. Charakter odpowiedzi sieci określa się analizując pobudzone neurony na
jej wyjściu. Przykładowo, jeżeli sieć posiada 5 neuronów w warstwie wyjściowej, z których każdy
może znajdować się w 2 możliwych stanach (pobudzony/niepobudzony), liczba klas które mogą
zostać w ten sposób opisane sięga 32. Częściej jednak, stosuje się podejście, gdzie każdy z neuronów
warstwy wyjściowej przyporządkowany jest do odpowiadającej mu klasy. Stworzona w ten sposób
sieć staje się bardziej rozbudowana, jednak znacznie upraszcza to proces analizy odpowiedzi.
Ze względu na topologie, sieci neuronowe można podzielić na 2 grupy. Pierwsza grupa to sieci ze
sprzężeniem zwrotnym, gdzie występują połączenia wsteczne między warstwami. Druga grupa to sieci
jednokierunkowe, gdzie dany sygnał przechodzi przez każdy neuron jednokrotnie. Taka właśnie sieć
jest przedmiotem badań w omawianym ćwiczeniu.
Celem ćwiczenia jest zbadanie, jak struktura sieci neuronowej i parametry treningu wpływają
na skuteczność rozpoznawania przez sieć neuronową dźwięków dziesięciu instrumentów muzycznych.
W ćwiczeniu wykorzystywane są dwa skrypty w Matlabie. Pierwszy z nich o nazwie trening.m służy
do treningu sieci neuronowej zgodnie z parametrami zdefiniowanymi w nagłówku tego skryptu.
Wytrenowana sieć jest zapisywana w pliku siec.mat. Skrypt trening.m wywołuje przed swoim
zakończeniem skrypt testuj.m (może on być również wywoływany niezależnie), który na podstawie
danych z pliku siec.mat wyświetla na ekranie wyniki klasyfikacji. Parametry dźwięków instrumentów
muzycznych wykorzystywane w procesie klasyfikacji są zapisane w pliku parametry.mat. Liczba
instrumentów wynosi 10, zatem liczba neuronów w warstwie wyjściowej też wynosi 10. Na wejście
sieci podawane są wektory składające się z 48 parametrów, wobec czego sieć neuronowa posiada 48
wejść. Wartości parametrów są normalizowane do przedziału [-1, 1]. Na wyjściu sieci znajduje się 10
neuronów, każdy odpowiadający jednemu rozpoznawanemu instrumentowi, stąd jednoznacznie
wynika struktura sieci bez warstwy ukrytej.
Wektory zapisane w pliku parametry.mat dzielone są na dwie części: wektory uczące i testowe
parametr podział w skrypcie trening.m oznacza jaka część tej bazy danych jest używana do treningu.
Wstępnie jest ustalony jako 0.5. W procesie treningu oczekiwaną odpowiedź sieci stanowi wektor
zawierający same zera i jedną jedynkę na wyjściu neuronu skojarzonego z rozpoznawaną klasą
instrumentów. Wynikiem klasyfikacji jest instrument skojarzony z neuronem o największej wartości
na wyjściu sieci. Ustawienie w nagłówku skryptu testuj.m wartości zmiennej wykresy na 1 sprawi, ze
będą rysowane wykresy przedstawiające odpowiedzi neuronów wyjściowych sieci na wszystkie
wektory testujące.
UWAGA 1: Ze względu na losowy charakter inicjacji wag sieci neuronowej, przy wszelkich
badaniach sieć neuronową należy trenować trzykrotnie, a następnie brać pod uwagę średni wynik
(średnia arytmetyczna lub mediana – wybór należy uzasadnić; wyboru należy dokonać po próbach z
siecią bez warstw ukrytych).
UWAGA 2: Katalog roboczy należy ustawić jako c:\isd\cw7. Do tego katalogu należy zapisać
potrzebne skrypty i dane, które są dostępne na portalu katedralnym (Instrukcje do zajęć) w pliku isd-
7.zip.
UWAGA 4: Wykres wykonany kolorem niebieskim oznacza błąd średniokwadratowy dla zbioru
treningowego (uczącego), natomiast wykonany kolorem zielonym oznacza błąd średniokwadratowy
dla zbioru testowego.
UWAGA 5: Trening kończy się po 1000 krokach (obliczeń gradientu), które tutaj noszą nazwę
epok, lub po 10 krokach wzrastającego błędu dla zbioru testowego, lub po osiągnięciu określonej
wartości błędu (np. 0.0001).
UWAGA 6: Trainrp - funkcja służąca do treningu, wykorzystana w niniejszym ćwiczeniu uaktualnia
wartości wag zgodnie z algorytmem propagacji wstecznej. Może służyć trenowaniu jakiejkolwiek
sieci przy założeniu że wejścia sieci, wagi i funkcje aktywacji są różniczkowalne. Każda z wartości
obliczana jest na podstawie poniższej zależności:
dX deltaX. * sign( gx)
gdzie wszystkie wartości deltaX inicjalizowane są wielkością delta0, a gX oznacza wartość gradientu.
W każdym kroku iteracji elementy deltaX zostają zmodyfikowane. Jeżeli w kolejnym kroku iteracji gX
zmienia znak na przeciwny, element deltaX zostaje zmniejszony o wartość delta_dec. W sytuacji
kiedy znak elementu gX nie uległ zmianie, wartość wagi deltaX jest powiększana o delta_inc.
3. Zadania
znaleźć dwie najlepsze funkcje aktywacji warstwy wyjściowej dla sieci bez warstwy
ukrytej
do tych dwóch sieci dodać warstwę ukrytą z 24 neuronami i dobrać do nich dwie
najlepsze funkcje aktywacji (spośród 6) – funkcje te należy wykorzystać w następnych
krokach (wyniki mogą się różnić od wyników z poprzedniego kroku)
dla najlepszej sieci z poprzedniego punktu zbadać wpływ liczby neuronów w warstwie
ukrytej na wyniki (2 próby: w dół i w górę o kilka neuronów)
do najlepiej wytrenowanej sieci dodać drugą warstwę ukrytą z 15 neuronami i dobrać do
niej funkcję aktywacji (spośród dwóch uzyskanych w kroku 2)
dla najlepszej sieci znaleźć optymalną liczbę neuronów w drugiej warstwie ukrytej (2
próby: w dół i w górę o kilka neuronów)
3.2 Zmodyfikować domyślne parametry treningu najlepszej sieci z zadania 1 (bez warstwy
ukrytej, z jedną warstwą lub z dwoma) w celu dalszej poprawy osiąganych wyników.
Modyfikacji podlegają dwa parametry: delt_inc, delt_dec. (4 próby, zmiany rzędu 0.1 przy
zachowaniu warunków: delt_inc>1.0, delt_dec<1.0). Ich znaczenie, jak również
wykorzystywany algorytm treningu umieszczono w sekcji uwag.
3.3 Dla najlepszej sieci z poprzednich zadań sprawdzić, jak na wyniki klasyfikacji wpływa
sposób wyboru wektorów do klasyfikacji (tylko sprawdzające, tylko uczące, uczące i
sprawdzające razem). W tym celu należy uruchamiać skrypt testuj.m z odpowiednio
ustawioną wartością zmiennej tryb w nagłówku tego pliku. Po zakończeniu ustawić
tryb = 2.
3.4 Dla najlepszej sieci z zadań 3.1 i 3.2 zbadać, jak stopień udziału wektorów uczących w
wektorach ogółem wpływa na skuteczność treningu. Badania przeprowadzić dla trzech
wartości parametru podział: 0.1, 0.5 i 0.9 (skrypt trening.m).
4. Opracowanie
4.2 Dlaczego takie, a nie inne wartości zbadanych parametrów (w szczególności funkcje
aktywacji) okazały się optymalne?
4.3 Jak liczba warstw (neuronów) w sieci i liczba wektorów uczących wpływają na czas
trwania treningu sieci?
4.4 Dlaczego sam proces klasyfikacji (skrypt testuj.m) trwa znacznie krócej, niż trening sieci?
(opisać sposób działania sieci neuronowej, czyli w jaki sposób po podaniu na jej wejście
wektora X uzyskuje się na jej wyjściu wektor Y).
5. Literatura
[1] Hertz J. et al, 1995, “Wstęp do teorii obliczeń neuronowych”, WNT, Warszawa 1995.
[2] Korbicz J., Obuchowicz A., Uciński D., 1994, “Sztuczne sieci neuronowe. Podstawy i
zastosowania”, Akademicka Oficyna Wydawnicza PLJ, Warszawa 1994.
[3] Tadeusiewicz R., 1993, “Sieci neuronowe”, Akademicka Oficyna Wydawnicza RM,
Warszawa, 1993.
[4] Żurada J., Barski M., Jędruch W., 1996, “Sztuczne sieci neuronowe”, PWN,
Warszawa 1996.