Ćwiczenie |
Uczenie warstwowych sieci neuronowych II |
Zagadnienia | Wykorzystanie zbioru weryfikującego, pre- i post-processing danych, interpretacja stanów wyjść sieci, odporność sieci na uszkodzenia, dobór parametrów sieci i algorytmu uczenia pod kątem maksymalizacji trafności klasyfikowania. |
Narzędzie |
Statistica NN |
Zbiory danych | IRIS, PIMA, BUPA |
Utwórz i naucz sieć na zbiorze PIMA (architektura 8-4-1).
Przeprowadź klasyfikowanie przykładów ze zbioru testującego (okno Statistics|Classification). Znajdź w tym oknie macierz pomyłek (ang. confusion matrix).
Otwórz okno Edit|Pre-Post Processing. Pola Accept i Reject definiują, jakie wartości muszą mieć neurony w warstwie wyjściowej, aby móc zinterpretować ich stan jako decyzję o przypisaniu przykładu do odpowiedniej klasy decyzyjnej. Choć nie jest to kontrolowane przez program, powinno zachodzić Accept >= Reject
Przy użyciu Excela sporządź wykres (trzy przebiegi na jednym
wykresie) zależności PROCENTU przypadków z JEDNEGO ze zbiorów
(uczącego, weryfikującego, lub testującego):
– poprawnie zaklasyfikowanych (do wszystkich klas decyzyjnych razem),
– niepoprawnie zaklasyfikowanych,
– niezaklasyfikowanych
w funkcji progu Accept., dla następujących wartości Accept i Reject:
Accept |
Reject |
0.5 |
0.5 |
0.6 |
0.4 |
0.7 |
0.3 |
0.8 |
0.2 |
0.9 |
0.1 |
1.0 |
0.0 |
Czy na podstawie otrzymanego wykresu można zasugerować jakąś optymalną wartość obu progów dla tego zbioru przykładów i tej sieci?
Skonstruuj sieć dwuwarstwową o architekturze 4-3-3 dla problemu IRIS i naucz ją.
Przeprowadź testowanie i zapisz trafność klasyfikowania.
Otwórz edytor sieci (Edit|Network). Wyszukaj (w obu warstwach: ukrytej i wyjściowej!) i usuń z sieci (tj. wyzeruj) wagę najmniejszą co do wartości bezwzględnej (pomiń wiersz Threshold, zawierający progi neuronów). Przeprowadź ponownie testowanie sieci i zapisz wynik.
Kroki z punku 3 powtórz ok. 10 razy, kolejno usuwając coraz większe wagi i notując trafność klasyfikowania. Sporządź wykres zależności trafności klasyfikowania w funkcji ilości usuniętych (najmniejszych) wag.
Czy odporność sieci na uszkodzenia (usunięcia wag) jest wysoka?
Czy jesteś w stanie na podstawie tak “zredukowanej” sieci powiedzieć małe-co-nieco (â Winnie-the-Pooh) o ważności poszczególnych atrybutów opisujących przykłady?
Czy w konsekwencji “przerzedzenia” sieci można usunąć niektóre neurony? Jak należy to zrobić ? (jest tu mały kruczek)
Dla zbioru PIMA przeprowadź eksperyment uczenia i testowania, zmieniając proporcje pomiędzy zbiorem uczącym i weryfikującym.
Wystartuj od następujących proporcji zbioru uczącego, weryfikującego i testującego 8:1:1.
Przeprowadź uczenie (liczba epok >=300). Przetestuj sieć, zapisz trafność klasyfikowania, błąd klasyfikowania i procent przykładów niezaklasyfikowanych.
Sukcesywnie zwiększaj rozmiar zbioru weryfikującego, zmniejszając rozmiar uczącego (pole Training w oknie (Edit|Data set), do proporcji 1:8:1 włącznie.
Sporządź wykres zależności trafności klasyfikowania, błędu klasyfikowania i procentu przykładów niezaklasyfikowanych w funkcji proporcji rozmiaru zbioru weryfikującego do liczby przykładów, jakie mamy do dyspozycji podczas uczenia (czyli rozmiar zbioru uczącego + rozmiar zbioru weryfikującego). Czy można znaleźć jakąś wartość optymalną?
Dla zbioru PIMA przeprowadź eksperyment uczenia i testowania, używając poza standardowym (vanilla) algorytmem backpropagation innych algorytmów uczenia (np. QuickPropagation, Delta-bar-Delta). Dla zapewnienia porównywalności wyników, w poszczególnych eksperymentach zachowaj tą samą konfigurację sieci i warunki stopu. Czy któryś z algorytmów jest wyraźnie lepszy? Porównaj liczbę epok uczenia.
Opis metody DeltaBarDelta znaleźć można na stronach Statsoftu i tutaj.
Metoda ta jest bardzo zbliżona do algorytmu RPROP (zazwyczaj krótko
omawianego na wykładzie), a dokładniej:
UWAGA! Algorytmy QuickProp i
DeltaBarDelta są dość trudne do parametryzacji. Poza tym jest chyba
jakaś
pluskwa w programie, bo po uruchomieniu QuickProp’a zdarzyło mi
się, że przestał działać zwykły Bprop.
Jeżeli dobór parametrów
algorytmów QuickProp i
DeltaBarDelta okaże się zbyt trudny, alternatywnie wykonaj
badanie wpływu członu bezwładności (momentum) na przebieg procesu
uczenia algorytmem wstecznej propagacji błędu, zmieniając odpowiedni
parametr np. w zakresie 0.0 - 0.5.
Zbuduj sieć RBF dla problemu IRIS.
Otwórz edytor sieci (Edit|Network). Zwróć uwagę na różnice w polach Act fn i PSP in w porównaniu z perceptronami.
Naucz sieć. Uczenie składa się z trzech etapów: ustalania centrów poszczególnych neuronów, ustalenia promieni (deviation), które decydują o stopniu “spłaszczenia” funkcji Gaussowskich, oraz obliczenia wag neuronu wyjściowego. Zwróć uwagę na czas uczenia.
Obejrzyj funkcję odpowiedzi wybranych neuronów w warstwie ukrytej i neuronów w warstwie wyjściowej (Run|Response Surface). Możesz zmieniać też zmienne niezależne (atrybuty). Zauważ różnice w stosunku do sieci z jednostkami logistycznymi.
Zastanów się, jakie konsekwencje ma niewłaściwy dobór promieni. Co będzie się działo, gdy promienie będą za duże? Co, gdy za małe? (związek z generalizacją).
Przetestuj sieć dla różnych metod uczenia, tj. dla różnych inicjalizacji centrów (Sample, K-means) i różnych sposobów ustalania odchyleń (Explicit, Isotropic, K-nearest). Najlepiej miej otwarty edytor sieci; obserwuj jakie konsekwencje ma wybranie poszczególnych sposobów uczenia.
Porównaj sieć RBF z siecią typu Multilayer Perceptron na trudniejszym zbiorze przykładów (PIMA lub BUPA).
Manipulując:
architekturą sieci,
prędkością uczenia (można zmieniać dynamicznie),
zakresem wartości używanych do inicjalizacji wag sieci,
warunkami stopu (statycznymi i/lub dynamicznymi),
rodzajem algorytmów,
spróbuj “wycisnąć” jak największą trafność klasyfikowania na zbiorze testującym dla problemu PIMA.
OPCJA: W miarę możliwości porównaj uzyskany wynik z trafnością otrzymaną przy użyciu drzew decyzyjnych.
UWAGA! Aby zapewnić porównywalność wyników pomiędzy poszczególnymi grupami (powtarzalność eksperymentu), nie zmieniaj oryginalnego przyporządkowania przykładów do zbioru testującego!