You are on page 1of 6

KATEDRA SYSTEMÓW MULTIMEDIALNYCH

Inteligentne Systemy Decyzyjne

Ćwiczenie nr 3:
Badanie algorytmów i struktur sieci neuronowych

Opracowanie:
dr inż. Andrzej Kaczmarek

1. Wprowadzenie

Sieci neuronowe są narzędziem matematycznym służącym do modelowania procesów i


przetwarzania informacji. Ich stworzenie zostało zainspirowane biologicznym systemem nerwowym.
Choć znane już w pierwszej połowie XX wieku, popularność zyskały wraz z rozwojem komputerów.
Sieci neuronowe najczęściej stosowane są w zadaniach związanych z predykcją i klasyfikacją danych.
Podstawową i elementarną częścią sztucznej sieci neuronowej jest pojedynczy neuron (Rys. 1).

Rys. 1. Elementarny model neuronu.

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

Aktywność neuronu to wartość pośrednio związana z jego wartością wyjściową. Zależność ta


przedstawia się w postaci funkcji f nazywanej funkcją aktywacji neuronu. Funkcje te można podzielić
na trzy zasadnicze grupy:
 progowe – wartość na wyjściu przybiera jeden z dwóch poziomów (0/1 lub -1/1)
 liniowe – wartości wyjściowe zmieniają się proporcjonalnie względem wartości wejściowych
 nieliniowe – wartości funkcji zmieniają się nieliniowo

Rys. 2. Przykładowe funkcje aktywacji neuronu.

Modelowanie złożonych zadań, odbywa się poprzez zwielokrotnianie pojedynczych neuronów.


Neurony te formują tak zwane warstwy, z których połączenia powstaje sieć. Najprostsza sieć
neuronowa składa się z warstwy neuronów wejściowych i warstwy neuronów wyjściowych, gdzie
każde z wyjść warstwy wejściowej połączone jest z wejściami warstwy wyjściowej. Jednak typowe
sieci neuronowe składają się z co najmniej jednej dodatkowej warstwy pośredniczącej, zwanej
warstwą ukrytą.
Aby sieć neuronowa pełniła żądaną przez jej twórcę funkcję, oprócz specyficznej dla konkretnego
zadania struktury, każdy neuron powinien posiadać przypisaną wagę. Ustalanie odpowiednich
wartości wag dla wszystkich neuronów, a tym samym ustalenie żądanych odpowiedzi sieci
neuronowej na konkretne pobudzenia odbywa się w procesie treningu sieci. Metody treningu można
podzielić na dwie zasadnicze grupy: z nauczycielem/nadzorem i bez nauczyciela/nadzoru. Sieci
wykorzystujące trening bez nauczyciela określane są często mianem samoorganizujących. Prostsza w
użyciu, a tym samym bardziej popularna jest metoda treningu z nadzorem (Rys. 3).

Rys. 3. Schemat metody treningu sieci neuronowej z nadzorem.

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.

2. Cel i przebieg ćwiczenia

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 3: Po każdej modyfikacji skrypt należy zapisać. Pierwszą niezbędną modyfikacją, po


której możliwy będzie trening sieci jest wpisanie jednej z 6 dostępnych funkcji aktywacji (poslin,
purelin, satlin, satlins, logsig lub tansig) w wierszu:
funkcja_wyjsciowa = {}; %np. { 'funkcja3' }

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

3.1 Określić optymalną strukturę sieci neuronowej, zapewniającą najlepszą skuteczność


klasyfikacji dźwięków instrumentów muzycznych. Modyfikacji podlegają: liczba warstw
ukrytych sieci, liczba neuronów w każdej warstwie ukrytej oraz funkcje aktywacji
neuronów w warstwach ukrytych i wyjściowej. Badania należy ograniczyć do sieci bez
warstwy ukrytej, z jedną warstwą ukrytą i z dwiema warstwami ukrytymi. Badaniu
podlegają następujące funkcje aktywacji neuronu: poslin, purelin, satlin, satlins, logsig i
tansig, które zobrazowano na Rys. 2. Eksperymenty należy przeprowadzić według kroków:

 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.1 W sprawozdaniu należy zamieścić wyniki przeprowadzonych eksperymentów, opisać


wpływ zbadanych parametrów struktury sieci i parametrów treningu na skuteczność
klasyfikacji oraz przedstawić wartości parametrów pozwalające uzyskać najlepsze wyniki
rozpoznawania.

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

4.5 Dlaczego właściwym sposobem pracy z sieciami neuronowymi jest wykorzystywanie


innych wektorów do treningu sieci, a innych do testowania skuteczności klasyfikacji?

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.

You might also like