Zadanie 2.: Perceptron wielowarstwowy

Podobne dokumenty
IMPLEMENTACJA SIECI NEURONOWYCH MLP Z WALIDACJĄ KRZYŻOWĄ

Sztuczna Inteligencja Tematy projektów Sieci Neuronowe

ALGORYTMY SZTUCZNEJ INTELIGENCJI

Optymalizacja ciągła

Wstęp do sieci neuronowych, wykład 02 Perceptrony c.d. Maszyna liniowa.

Zastosowania sieci neuronowych

Wstęp do sieci neuronowych, wykład 02 Perceptrony c.d. Maszyna liniowa.

Uczenie się pojedynczego neuronu. Jeśli zastosowana zostanie funkcja bipolarna s y: y=-1 gdy z<0 y=1 gdy z>=0. Wówczas: W 1 x 1 + w 2 x 2 + = 0

Wstęp do sieci neuronowych, wykład 6 Wsteczna propagacja błędu - cz. 3

WYKORZYSTANIE SIECI NEURONOWEJ DO BADANIA WPŁYWU WYDOBYCIA NA SEJSMICZNOŚĆ W KOPALNIACH WĘGLA KAMIENNEGO. Stanisław Kowalik (Poland, Gliwice)

Sieci neuronowe w Statistica

Metody Sztucznej Inteligencji II

Zadanie 3.: Klasyfikacje

Temat: Sieci neuronowe oraz technologia CUDA

Techniki Optymalizacji: Stochastyczny spadek wzdłuż gradientu I

Inteligentne systemy decyzyjne: Uczenie maszynowe sztuczne sieci neuronowe

8. Neuron z ciągłą funkcją aktywacji.

Podstawy Sztucznej Inteligencji (PSZT)

Wstęp do sieci neuronowych, wykład 02 Perceptrony c.d. Maszyna liniowa.

Sieci neuronowe w Statistica. Agnieszka Nowak - Brzezioska

wiedzy Sieci neuronowe

Prognozowanie kierunku ruchu indeksów giełdowych na podstawie danych historycznych.

METODY INŻYNIERII WIEDZY

Podstawy sztucznej inteligencji

SIEĆ NEURONOWA DO OCENY KOŃCOWEJ PRZEDSIĘWZIĘCIA (PROJEKTU)

Projekt Sieci neuronowe

Oprogramowanie Systemów Obrazowania SIECI NEURONOWE

Algorytm wstecznej propagacji błędów dla sieci RBF Michał Bereta

Zastosowania sieci neuronowych

Systemy uczące się Lab 4

Zastosowanie optymalizacji rojem cząstek (PSO) w procesie uczenia wielowarstwowej sieci neuronowej w problemie lokalizacyjnym, kontynuacja badań

Inteligentne systemy przeciw atakom sieciowym

Układ RLC z diodą. Zadanie: Nazwisko i imię: Nr. albumu: Grzegorz Graczyk. Nazwisko i imię: Nr. albumu:

Wstęp do sieci neuronowych laboratorium 01 Organizacja zajęć. Perceptron prosty

1. Historia 2. Podstawy neurobiologii 3. Definicje i inne kłamstwa 4. Sztuczny neuron i zasady działania SSN. Agenda

METODY INŻYNIERII WIEDZY

Instrukcja realizacji ćwiczenia

Algorytmy decyzyjne będące alternatywą dla sieci neuronowych

Uczenie sieci neuronowych i bayesowskich

Sztuczne siei neuronowe - wprowadzenie

Rozdział 1 Sztuczne sieci neuronowe. Materiały do zajęć dydaktycznych - na podstawie dokumentacji programu Matlab opracował Dariusz Grzesiak

Wprowadzenie do Sieci Neuronowych Laboratorium 05 Algorytm wstecznej propagacji błędu


Uczenie sieci typu MLP

Wstęp do sieci neuronowych, wykład 04. Skierowane sieci neuronowe. Algorytmy konstrukcyjne dla sieci skierowanych

Sieć przesyłająca żetony CP (counter propagation)

Temat: Sztuczne Sieci Neuronowe. Instrukcja do ćwiczeń przedmiotu INŻYNIERIA WIEDZY I SYSTEMY EKSPERTOWE

Analiza korespondencji

Testowanie modeli predykcyjnych

synaptycznych wszystko to waży 1.5 kg i zajmuje objętość około 1.5 litra. A zużywa mniej energii niż lampka nocna.

Priorytetyzacja przypadków testowych za pomocą macierzy

P R Z E T W A R Z A N I E S Y G N A Ł Ó W B I O M E T R Y C Z N Y C H

Obliczenia inteligentne Zadanie 4

NEURAL NETWORK ) FANN jest biblioteką implementującą SSN, którą moŝna wykorzystać. w C, C++, PHP, Pythonie, Delphi a nawet w środowisku. Mathematica.

ALGORYTM RANDOM FOREST

Algorytmy sztucznej inteligencji

wiedzy Sieci neuronowe (c.d.)

Podstawy Sztucznej Inteligencji

Metody sztucznej inteligencji Zadanie 1: Perceptron Rosenblatt a w wersji nieliniowej

Analiza Danych Sprawozdanie regresja Marek Lewandowski Inf 59817

3. FUNKCJA LINIOWA. gdzie ; ół,.

SZTUCZNA INTELIGENCJA

Optymalizacja systemów

Klasyfikator. ˆp(k x) = 1 K. I(ρ(x,x i ) ρ(x,x (K) ))I(y i =k),k =1,...,L,

RAPORT z diagnozy umiejętności matematycznych

Najprostsze modele sieci z rekurencją. sieci Hopfielda; sieci uczone regułą Hebba; sieć Hamminga;

Elementy inteligencji obliczeniowej

Wstęp do teorii sztucznej inteligencji Wykład III. Modele sieci neuronowych.

Zagadnienia optymalizacji i aproksymacji. Sieci neuronowe.

Liczby zmiennoprzecinkowe i błędy

Inteligentna analiza danych

Zapisywanie algorytmów w języku programowania

METODY INŻYNIERII WIEDZY

PRÓBNY SPRAWDZIAN SZÓSTOKLASISTY Z OPERONEM

Programowanie w Baltie klasa VII

ĆWICZENIE 5: Sztuczne sieci neuronowe

ZACHODNIOPOMORSKI UNIWERSYTET TECHNOLOGICZNY W SZCZECINIE

Pomorski Czarodziej 2016 Zadania. Kategoria C

Widzenie komputerowe

Rozdział 2 PROGRAMOWANIE LINIOWE CAŁKOWITOLICZBOWE

6. Perceptron Rosenblatta

Porównywanie populacji

0 + 0 = 0, = 1, = 1, = 0.

Wymagania edukacyjne na poszczególne oceny To się liczy! Branżowa Szkoła I stopnia, klasa 1 po szkole podstawowej

1 Moduł Modbus ASCII/RTU 3

PROGNOZOWANIE OSIADAŃ POWIERZCHNI TERENU PRZY UŻYCIU SIECI NEURONOWYCH**

SIEĆ NEURONOWA DO OCENY KOŃCOWEJ PRZEDSIĘWZIĘCIA (PROJEKTU)

Sieć Hopfielda. Sieci rekurencyjne. Ewa Adamus. ZUT Wydział Informatyki Instytut Sztucznej Inteligencji i Metod Matematycznych.

Maciej Piotr Jankowski

RAPORT ZBIORCZY z diagnozy umiejętności matematycznych

Programowanie celowe #1

SIECI NEURONOWE Liniowe i nieliniowe sieci neuronowe

Zastosowanie optymalizacji rojem cząstek (PSO) w procesie uczenia wielowarstwowej sieci neuronowej w problemie lokalizacyjnym

Algorytmy wstecznej propagacji sieci neuronowych

Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015

Optymalizacja optymalizacji

Aproksymacja funkcji a regresja symboliczna

Metody numeryczne I Równania nieliniowe

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Transkrypt:

Informatyka, studia dzienne, inż. I st. semestr VI Inteligentna Analiza Danych 21/211 Prowadzący: dr inż. Arkadiusz Tomczyk wtotek, 8:3 Data oddania: Ocena: Marek Rogalski 15982 Paweł Tarasiuk 15121 Zadanie 2.: Perceptron wielowarstwowy 1. Cel Zadanie polegało na przygotowaniu własnej implementacji perceptronu wielowarstwowego przy wykorzystaniu metody wstecznej propagacji jako metody nauki. Istotną własnością przygotowanego projektu jest jego elastyczność - wszystkie konfigurowalne własności sieci neuronowej, czyli liczba oraz liczność warstw, współczynnik nauki, momenetum oraz obecność neuronów obciążających są przekazywane w postaci argumentów, dzięki czemu po jednorazowym skompilowaniu projektu można badać zachowanie różnych konfiguracji. Sieć neuronowa może być trenowana zapisanymi w pliku tekstowym wzorcami, a wyniki treningu (ukształtowane wagi) mogą być zapisywane do postaci tekstowej, aby później nauka mogła zostać wznowiona od zapamiętanej postaci. Po ukończonym treningu lub po wczytaniu wag z pliku, można także zbadać zachowanie sieci dla wczytanych z pliku testów (bez nauki). Wszystkie tryby pracy umożliwiają tworzenie logów umożliwiających analizę działania perceptronu, a nawet (po prostym przetworzeniu) sporządzenie wykresów. 2. Wprowadzenie Implementowana sieć neuronowa posiada jedną warstwę neuronów kopiujących, dowolną (w sensie możliwości sprzętu symulującego sieć neuronową; może to być także liczba ) liczbę warstw ukrytych, oraz warstwę wyjściową. SVN: https://serce.ics.p.lodz.pl/svn/labs/iad/atmp_sr83/marpab@586 1

Neurony warstw ukrytych oraz warstwy wyjściowej są neuronami nieliniowymi - w naszym przypadku zawsze oznacza to zastosowanie logistycznej funkcji aktywacji. Oznacza to, że dla neuronu mającego n wejść: s = n w k i k k=1 o = logsig(s) Gdzie s - suma ważona wejść, i k - wartość k-tego wejścia, w k - waga k-tego wejścia, x R logsig(x) = 1 - logistyczna funkcja aktywacji, o - wyjście 1+e x neuronu. Istotną zaletą logistycznej funkcji aktywacji jest łatwość obliczania jej pochodnej, jeżeli w pamięci przechowuje się jedynie jej wartość (nawet nie dysponując argumentem dla którego została ona obliczona) - okazuje się, że: logsig (x) = logsig(x) (1 logsig(x)) Powyższe wzory wyjaśniają sposób generowania wyjść poszczególnych warstw, czyli proces pozwalający obliczyć wyjścia wszystkich warstw oraz samo wyjście sieci na podstawie zadanego wejścia. Ciekawszym procesem jest przebieg metody propagacji wstecznej. Na początku dla każdego neuronu obliczany jest błąd, począwszy od warstwy wyjściowej. Dla neuronów warstwy wyjściowej błąd definiuje się jako różnicę między wyjściem otrzymanym, a wyjściem oczekiwanym dla danego wejścia pomnożoną przez wartość pochodnej funkcji aktywacji dla wyjścia otrzymanego. Dla neuronów warstw ukrytych można obliczać błędy, gdy dysponuje się obliczonymi błędami dla całej warstwy następującej po nim (bliższej warstwie wyjściowej). Niech warstwa następna (dla której obliczyliśmy wszystkie błędy) ma m neuronów, v j oznacza wagę jaką ma wyjście bieżącego neuronu w j-tym neuronie warstwy następnej, t j - błąd obliczony dla j-tego neurony warstwy następnej, zaś o - wyjście bieżącego neuronu. Wówczas błąd dla bieżącego neuronu wynosi: ( m ) err = logsig (o) v j t j Gdy mamy już obliczone wartości błędów dla wszystkich neuronów nieliniowych w sieci, dla każdego neuronu możemy dokonać dostosowania wag. Dla neuronu mającego n wejść, wagi zmienią się w następujący sposób (dla k = 1... n): j= w k η err i k w k w k + w k Gdzie i k - wyjście k -tego neuronu warstwy poprzedniej, err - błąd wyznaczony dla bieżącego neuronu, η - współczynnik nauki. Jeżeli chcemy wykorzystać człon momentum, algorytm zmieni się nieznacznie - wówczas potrzebne nam będzie zapamiętywanie wartości w k na potrzeby kolejnych iteracji (przy inicjalizacji sieci zostaną one ustawione jako ). Zmiana wag z wykorzystaniem członu momentum przebiega w następujący sposób: 2

w k w k + η err i k + µ w k w k η err i k Gdzie µ - współczynnik momentum. Nauka sieci odbywa się poprzez wielokrotnego obliczenia wyjść dla wejścia ze zbioru uczącego, a następnie porównania wyjścia z wyjściem oczekiwanym, propagacji błędu i aktualizacji wag. Sieć uczona jest w oparciu o wszystkie testy z zestawu, jednak kolejność może być losowana. Zastosowanym przez nas rozwiązaniem jest opcjonalne losowanie permutacji testów ze zbioru uczącego, tak aby każdy z nich był używany jednakowo często. Użycie do nauki całej permutacji elementów zbioru testowego nazywamy epoką. Dla każdego testu obliczany jest globalny błąd sieci, jako połowa sumy kwadratów między wejściami oczekiwanymi a otrzymanymi. Za wartość miarodajną w kwestii postępów w nauce sieci uznajemy maksymalny globalny błąd sieci dla pojedynczego testu w danej epoce. Warunkiem zakończenia nauki jest zatem dla nas osiągnięcie odpowiedniej epoki lub maksymalnego globalnego błędu w epoce poniżej zadanej wartości. Aby zniwelować problemy z różnicami w rzędach wielkości danych na wejściu oraz na wyjściu sieci (drugi z problemów jest istotny, gdyż duże liczby miałyby bez porównania większy wpływ na obliczane błędy i sieć uczyłaby się głównie dostosowania do wyjść o dużych nominałach), zastosowaliśmy prostą optymalizację. Dla całego zbioru testowego obliczane są minimalne oraz maksymalne wartości danych otrzymywanych na poszczególnych wejściach oraz oczekiwanych na poszczególnych wyjściach, a następnie budowane są funkcje liniowe będące bijekcjami [min, max] [, 1]. Dzięki temu sieć operuje na wejściach i oczekiwanych wyjściach z przedziału [, 1], wszystkie wejścia/wyjścia są tak samo ważne, a wskazywany błąd ma charakter względny. Na potrzeby wyświetlania wyników działania sieci tworzone są odwrotne funkcje liniowe, pozwalające wrócić do skali stosowanej w zestawie treningowym/testowym. Gdy stan sieci jest zapamiętywany po treningu, zapamiętywane są także te współczynniki, pozwalające później testować sieć na ograniczonych zestawach testowych, w których wartości wejść i wyjść wyrażone są w tych samych jednostkach, co w zestawie treningowym. 3. Opis implementacji Implementacja została wykonana w języku C++, z wykorzystaniem biblioteki getopt do przetwarzania listy argumentów uruchomienia. Znaczenie argumentów jest przeważnie takie samo jak w schemacie proponowanym w instrukcji do ćwiczenia. Jedyne różnice to: Dodanie argumentu -u/--uklad, w którym musi zostać podany napis składający się z rozdzielonych spacjami liczb oznaczających liczności kolejnych warstw budowanej sieci neuronowej (np. -u"4 2 4"). 3

Argumenty --lt oraz --ln odnoszą się do ostatecznego przetworzenia nie poddanego permutacji zestawu treningowego, bez nauki. Pozwala to odczytać ostateczny błąd, oraz poszczególne błędy na różnych zestawach treningowych (oraz wyjścia poszczególnych warstw). W przypadku zestawu testowego, dane o wyjściach warstw wypisywane są zawsze (nie widzimy innego sensu używania zestawów testowych), natomiast stan sieci po uczeniu wypisany przy wykorzystaniu opcji --ln jest prawidłowy, gdyż i tak później już nie następuje nauka. Stworzona implementacja stanowi kompromis pomiędzy czytelnością kodu a wydajnością zastosowanego rozwiązania. Istnieje klasa Layer, co stanowi pewną wygodę w operowaniu na poszczególnych warstwach, jednakże za wszystkie obliczenia związane z działaniem sieci neuronowej odpowiada klasa Network. Poszczególne neurony nie są wyróżnione (gdyż według założeń tego konkretnego ćwiczenia, wszystkie neurony mają być takie same - zatem przechowywanie informacji o funkcji aktywacji, bądź wskaźników do warstw poprzedniej/następnej byłoby zbędną nadmiarowością), lecz zastosowane struktury danych pozwalają z łatwością odczytać informację o stanie każdego z nich (na potrzeby logowania komplet informacji na temat sieci wypisuje metoda describe klasy Network). W projekcie obecne są klasy pomocnicze, takie jak klasa Logger pozwalająca formułować komunikaty w sposób znany z funkcji printf przy dodatkowej możliwości jednoczesnego wypisywanie ich do pliku oraz na standardowe wyjście oraz klasa DataManager - odpowiedzialna za normalizację danych, dostęp do znormalizowanych testów, oraz powrót do pierwotnej skali przy podawaniu wyznaczonych wyjść sieci. 4. Materiały i metody Pierwsza część badań dotyczyła uczenia sieci tożsamościowego przekształcania wierszy macierzy jednostkowej o wymiarze 4. Przeprowadzone testy 1. i 2. miały za zadanie rozstrzygnąć wpływ stosowania obciążenia na zdolność sieci do nauki. Zostały one wykonane przy losowaniu kolejności wprowadzania testów do sieci w danej epoce. Zastosowano współczynnik uczenia o wartości, 6 i pominięto człon momentum (jak wynika ze wzorów z poprzedniej sekcji, jest to po prostu równoważne przyjęciu współczynnika momentum równego ). 5. Wyniki Test 1. - identyczność bez biasu../project/bin/app -u"4 2 4" -n.6 -e25 -s1 -d../data/data1.in -r --lt --ln -z identity1.weights -l identity1.log W teście 1. otrzymaliśmy następującą zależność błędu sieci od liczby epok: 4

.45.4 5.25.2 5.5 5 1 15 2 25 Otrzymana w wyniku nauki sieć miała następujące wagi: ( -1.69-3.69 +4.98-1.69 ) # Neuron 2.1 ( -1.69 +4.99-3.81-1.69 ) # Neuron 2.2 ( -1.73-1.73 ) # Neuron 3.1 ( -13.31 +2.66 ) # Neuron 3.2 ( +2.61-13.28 ) # Neuron 3.3 ( -1.73-1.73 ) # Neuron 3.4 Zaś przebieg zestawu treningowego w wykształconej sieci (bez uczenia) został zamieszczony poniżej. Kolejne linie oznaczają: wejście, oczekiwane wyjście, obliczone wyjście, oraz przebieg generowania wyjść w sieci operującej na danych znormalizowanych. ( +1. +. +. +. ) -> ( +1. +. +. +. ) # oczekiwano ( +4 +.9 + +4 ) # otrzymano ( ( +.94 +.6 +.6 +.6 ) ( +7 +7 ) ( +6 +5 +5 +6 ) ) Globalny błąd sieci:.21786 ( +. +1. +. +. ) -> ( +. +1. +. +. ) # oczekiwano ( + +.96 -.7 + ) # otrzymano ( ( +.6 +.94 +.6 +.6 ) ( +.3 +.99 ) ( +5 +.9 +. +5 ) ) Globalny błąd sieci:.986 ( +. +. +1. +. ) -> ( +. +. +1. +. ) # oczekiwano ( + -.7 +.95 + ) # otrzymano ( ( +.6 +.6 +.94 +.6 ) ( +.99 +.3 ) ( +5 +. +.9 +5 ) ) Globalny błąd sieci:.985 ( +. +. +. +1. ) -> ( +. +. +. +1. ) # oczekiwano 5

( +4 +.9 + +4 ) # otrzymano ( ( +.6 +.6 +.6 +.94 ) ( +7 +7 ) ( +6 +5 +5 +6 ) ) Globalny błąd sieci:.2178 Test 2. - identyczność z biasem../project/bin/app -u"4 2 4" -n.6 -b -e25 -s1 -d../data/data1.in -r --lt --ln -z identity2.weights -l identity2.log W teście 2. otrzymaliśmy następującą zależność błędu sieci od liczby epok:.45.4 5.25.2 5.5 5 1 15 2 25 Otrzymana w wyniku nauki sieć miała następujące wagi (pierwsza waga w każdej liście oznacza wagę biasu): ( -.21 +1.77-2.73 +4.66-4.85 ) # Neuron 2.1 ( + -4.79 +4.46 +2.55-2.58 ) # Neuron 2.2 ( -1.7 +5.57-6.93 ) # Neuron 3.1 ( -3.33-5.21 +6.3 ) # Neuron 3.2 ( -6.94 +5.66 +4.12 ) # Neuron 3.3 ( +3.15-7.24-5.31 ) # Neuron 3.4 Zaś przebieg zestawu treningowego w wykształconej sieci (bez uczenia) wyglądał następująco: ( +1. +. +. +. ) -> ( +1. +. +. +. ) # oczekiwano ( +.99 -.7 +.2 +.1 ) # otrzymano ( ( +.94 +.6 +.6 +.6 ) ( +.78 +.2 ) ( +.92 +. +.8 +.7 ) ) Globalny błąd sieci:.217 ( +. +1. +. +. ) -> ( +. +1. +. +. ) # oczekiwano ( -.7 +.99 +.1 +.1 ) # otrzymano 6

( ( +.6 +.94 +.6 +.6 ) ( +.6 +.98 ) ( +. +.93 +.8 +.7 ) ) Globalny błąd sieci:.212 ( +. +. +1. +. ) -> ( +. +. +1. +. ) # oczekiwano ( +. +.1 +.98 -.7 ) # otrzymano ( ( +.6 +.6 +.94 +.6 ) ( +.98 +.92 ) ( +.6 +.7 +.92 +. ) ) Globalny błąd sieci:.216 ( +. +. +. +1. ) -> ( +. +. +. +1. ) # oczekiwano ( +.2 +.1 -.7 +.98 ) # otrzymano ( ( +.6 +.6 +.6 +.94 ) ( +.1 +2 ) ( +.8 +.7 +. +.92 ) ) Globalny błąd sieci:.214 Test 3. - identyczność z biasem, uczenie:, 9, bez momentum../project/bin/app -u"4 2 4" -n.9 -m. -b -e25 -s1 -d../data/data1.in -r --lt --ln -z identity3.weights -l identity3.log W teście 3. otrzymaliśmy następującą zależność błędu sieci od liczby epok:.45.4 5.25.2 5.5 5 1 15 2 25 Otrzymana w wyniku nauki sieć miała następujące wagi (pierwsza waga w każdej liście oznacza wagę biasu): ( -.22 +1.77-2.76 +4.75-4.93 ) # Neuron 2.1 ( +1-4.89 +4.51 +2.62-2.6 ) # Neuron 2.2 ( -1.8 +5.82-7.1 ) # Neuron 3.1 ( -3.39-5.38 +6.46 ) # Neuron 3.2 ( -7.24 +5.89 +4.33 ) # Neuron 3.3 ( +3.3-7.51-5.54 ) # Neuron 3.4 7

Zaś przebieg zestawu treningowego w wykształconej sieci (bez uczenia) wyglądał następująco: ( +1. +. +. +. ) -> ( +1. +. +. +. ) # oczekiwano ( +.99 -.7 +.1 +. ) # otrzymano ( ( +.94 +.6 +.6 +.6 ) ( +.78 +.2 ) ( +.93 +. +.7 +.7 ) ) Globalny błąd sieci:.198 ( +. +1. +. +. ) -> ( +. +1. +. +. ) # oczekiwano ( -.7 +1. +.1 +.1 ) # otrzymano ( ( +.6 +.94 +.6 +.6 ) ( +.6 +.99 ) ( +. +.93 +.7 +.7 ) ) Globalny błąd sieci:.198 ( +. +. +1. +. ) -> ( +. +. +1. +. ) # oczekiwano ( +. +. +.99 -.7 ) # otrzymano ( ( +.6 +.6 +.94 +.6 ) ( +.98 +.93 ) ( +.6 +.7 +.93 +. ) ) Globalny błąd sieci:.2 ( +. +. +. +1. ) -> ( +. +. +. +1. ) # oczekiwano ( +.1 +. -.7 +.99 ) # otrzymano ( ( +.6 +.6 +.6 +.94 ) ( +.1 +2 ) ( +.7 +.6 +. +.93 ) ) Globalny błąd sieci:.194 Test 4. - identyczność z biasem, uczenie:, 2, bez momentum../project/bin/app -u"4 2 4" -n.2 -m. -b -e25 -s1 -d../data/data1.in -r --lt --ln -z identity4.weights -l identity4.log W teście 4. otrzymaliśmy następującą zależność błędu sieci od liczby epok:.45.4 5.25.2 5.5 5 1 15 2 25 8

Otrzymana w wyniku nauki sieć miała następujące wagi (pierwsza waga w każdej liście oznacza wagę biasu): ( -9 +1.46-2.19 +4.6-4.46 ) # Neuron 2.1 ( + -4.26 +4.25 +1.89-2.24 ) # Neuron 2.2 ( -1.3 +4.17-6.2 ) # Neuron 3.1 ( -3.16-3.94 +5.62 ) # Neuron 3.2 ( -5.18 +4.57 +2.82 ) # Neuron 3.3 ( +2.44-6.12-3.91 ) # Neuron 3.4 Zaś przebieg zestawu treningowego w wykształconej sieci (bez uczenia) wyglądał następująco: ( +1. +. +. +. ) -> ( +1. +. +. +. ) # oczekiwano ( +.92 -.7 + +.4 ) # otrzymano ( ( +.94 +.6 +.6 +.6 ) ( +.74 +.3 ) ( +.86 +. +5 + ) ) Globalny błąd sieci:.97 ( +. +1. +. +. ) -> ( +. +1. +. +. ) # oczekiwano ( -.7 +.93 +.7 +.6 ) # otrzymano ( ( +.6 +.94 +.6 +.6 ) ( + +.98 ) ( +. +.88 +2 +2 ) ) Globalny błąd sieci:.722 ( +. +. +1. +. ) -> ( +. +. +1. +. ) # oczekiwano ( +.4 +.6 +.89 -.7 ) # otrzymano ( ( +.6 +.6 +.94 +.6 ) ( +.96 +.87 ) ( +.9 +1 +.84 +. ) ) Globalny błąd sieci:.89 ( +. +. +. +1. ) -> ( +. +. +. +1. ) # oczekiwano ( +.8 +.3 -.6 +.9 ) # otrzymano ( ( +.6 +.6 +.6 +.94 ) ( +.2 +6 ) ( +3 +.9 +.1 +.85 ) ) Globalny błąd sieci:.775 Test 5. - identyczność z biasem, uczenie:, 9, momentum:, 6../project/bin/app -u"4 2 4" -n.9 -m.6 -b -e25 -s1 -d../data/data1.in -r --lt --ln -z identity5.weights -l identity5.log W teście 5. otrzymaliśmy następującą zależność błędu sieci od liczby epok: 9

.5.45.4 5.25.2 5.5 5 1 15 2 25 Otrzymana w wyniku nauki sieć miała następujące wagi (pierwsza waga w każdej liście oznacza wagę biasu): ( -.5 +4.91-2.64-5.7 +1.56 ) # Neuron 2.1 ( -1 +2.91 +4.91-2.3-4.59 ) # Neuron 2.2 ( -7.53 +6.18 +4.42 ) # Neuron 3.1 ( -3.59-5.48 +6.81 ) # Neuron 3.2 ( +3.52-7.89-5.65 ) # Neuron 3.3 ( -1.7 +5.8-7.25 ) # Neuron 3.4 Zaś przebieg zestawu treningowego w wykształconej sieci (bez uczenia) wyglądał następująco: ( +1. +. +. +. ) -> ( +1. +. +. +. ) # oczekiwano ( +1. +. -.7 +. ) # otrzymano ( ( +.94 +.6 +.6 +.6 ) ( +.98 +.93 ) ( +.93 +.6 +. +.6 ) ) Globalny błąd sieci:.195 ( +. +1. +. +. ) -> ( +. +1. +. +. ) # oczekiwano ( +. +1. +. -.7 ) # otrzymano ( ( +.6 +.94 +.6 +.6 ) ( +.8 +.99 ) ( +.6 +.94 +.6 +. ) ) Globalny błąd sieci:.194 ( +. +. +1. +. ) -> ( +. +. +1. +. ) # oczekiwano ( -.7 +. +1. +. ) # otrzymano ( ( +.6 +.6 +.94 +.6 ) ( +.1 +4 ) ( +. +.6 +.93 +.7 ) ) Globalny błąd sieci:.19 ( +. +. +. +1. ) -> ( +. +. +. +1. ) # oczekiwano ( +. -.7 +. +1. ) # otrzymano 1

( ( +.6 +.6 +.6 +.94 ) ( +.78 +.2 ) ( +.7 +. +.6 +.94 ) ) Globalny błąd sieci:.193 Test 6. - identyczność z biasem, uczenie:, 2, momentum:, 9../project/bin/app -u"4 2 4" -n.2 -m.9 -b -e25 -s1 -d../data/data1.in -r --lt --ln -z identity6.weights -l identity6.log W teście 6. otrzymaliśmy następującą zależność błędu sieci od liczby epok:.5.45.4 5.25.2 5.5 5 1 15 2 25 Otrzymana w wyniku nauki sieć miała następujące wagi (pierwsza waga w każdej liście oznacza wagę biasu): ( +.4 +4.68-2.24-4.82 +1.25 ) # Neuron 2.1 ( -1 +2.47 +4.74-1.76-4.25 ) # Neuron 2.2 ( -6.6 +5.84 +3.46 ) # Neuron 3.1 ( -3.39-4.69 +6.29 ) # Neuron 3.2 ( +3.8-7.36-4.62 ) # Neuron 3.3 ( -1.11 +4.61-6.61 ) # Neuron 3.4 Zaś przebieg zestawu treningowego w wykształconej sieci (bez uczenia) wyglądał następująco: ( +1. +. +. +. ) -> ( +1. +. +. +. ) # oczekiwano ( +.96 +.3 -.7 +.2 ) # otrzymano ( ( +.94 +.6 +.6 +.6 ) ( +.98 +.89 ) ( +.9 +.8 +. +.8 ) ) Globalny błąd sieci:.289 ( +. +1. +. +. ) -> ( +. +1. +. +. ) # oczekiwano ( +.2 +.96 +.3 -.7 ) # otrzymano ( ( +.6 +.94 +.6 +.6 ) ( +2 +.98 ) ( +.8 +.9 +.9 +. ) ) 11

Globalny błąd sieci:.287 ( +. +. +1. +. ) -> ( +. +. +1. +. ) # oczekiwano ( -.7 +.3 +.96 +.5 ) # otrzymano ( ( +.6 +.6 +.94 +.6 ) ( +.1 +7 ) ( +. +.8 +.9 + ) ) Globalny błąd sieci:.354 ( +. +. +. +1. ) -> ( +. +. +. +1. ) # oczekiwano ( +.4 -.7 +.2 +.95 ) # otrzymano ( ( +.6 +.6 +.6 +.94 ) ( +.74 +.2 ) ( + +. +.8 +.9 ) ) Globalny błąd sieci:.357 Test 7. - zestaw irysów, sieć 4-3-3../project/bin/app -u"4 3 3" -n.2 -m.9 -b -e2 -s1 -d../data/iris.in -r --lt --ln -z iris1.weights -l iris1.log W teście 7. otrzymaliśmy następującą zależność błędu sieci od liczby epok:.8.7.6.5.4.2 2 4 6 8 1 12 14 16 18 2 Otrzymana w wyniku nauki sieć miała następujące wagi (pierwsza waga w każdej liście oznacza wagę biasu): ( -3.35 +1.59-2.21-9.2-4.71 ) # Neuron 2.1 ( -6.86 +5.4-8.79 +16.77 +15.55 ) # Neuron 2.2 ( -93.96-1.41-27.9 +79.75 +89.94 ) # Neuron 2.3 ( +2.72 +.95-5.43 +. ) # Neuron 3.1 ( -2.73 -.28 +5.22-5.34 ) # Neuron 3.2 ( -2.68-7.37 +9 +5.34 ) # Neuron 3.3 12

Przebieg zestawu treningowego był ciekawy, lecz zbyt długi, aby go tutaj w całości przytoczyć. Błąd sieci często był wypisywany jako i był bliski błędowi obliczeń zmiennoprzecinkowych - poniżej zamieszczam dwa testy generujące największy błąd: ( +6.3 +2.8 +5.1 +1.5 ) -> ( +. +. +1. ) # oczekiwano ( -. +.98 +.2 ) # otrzymano ( ( +.55 +5 +.67 +.57 ) ( +. +1. +.1 ) ( +.6 +.92 +.8 ) ) Globalny błąd sieci:.73471 ( +6. +3. +4.8 +1.8 ) -> ( +. +. +1. ) # oczekiwano ( -. +.29 +.71 ) # otrzymano ( ( +.48 +.43 +.63 +.68 ) ( +. +1. +.61 ) ( +.6 +1 +.69 ) ) Globalny błąd sieci:.6279 Test 8. - zestaw irysów, sieć 4-4-3../project/bin/app -u"4 4 3" -n.2 -m.9 -b -e2 -s1 -d../data/iris.in -r --lt --ln -z iris2.weights -l iris2.log W teście 8. otrzymaliśmy następującą zależność błędu sieci od liczby epok:.8.7.6.5.4.2 2 4 6 8 1 12 14 16 18 2 Otrzymana w wyniku nauki sieć miała następujące wagi (pierwsza waga w każdej liście oznacza wagę biasu): ( -6.61 +3.95-7.9 +14.84 +14.13 ) # Neuron 2.1 ( +67.8 +4.94 +34.1-14.59-113.26 ) # Neuron 2.2 ( -31.28-11.13-15.74 +19.2 +47.42 ) # Neuron 2.3 ( +38.77 +.56 +5.78-81.64 +25.62 ) # Neuron 2.4 ( +2.71-5.44 +.1 +.2 -. ) # Neuron 3.1 ( -36.66 +5.5 +13.4 +7.72 +2.9 ) # Neuron 3.2 ( +31.19 -.6-13.4-7.73-2.86 ) # Neuron 3.3 13

Przebieg zestawu treningowego nie był ciekawy. Poniżej zamieszczam przebieg dla testu, który sprawił największy problem : ( +6.1 +2.8 +4.7 +1.2 ) -> ( +. +1. +. ) # oczekiwano ( -. +.92 +.8 ) # otrzymano ( ( +.5 +5 +.61 +.46 ) ( +1. +1. +. +.96 ) ( +.6 +.86 +4 ) ) Globalny błąd sieci:.533 Test 9. - zestaw irysów, sieć 4-3-4-3../project/bin/app -u"4 3 4 3" -n.2 -m.9 -b -e8 -s4 -d../data/iris.in -r --lt --ln -z iris3.weights -l iris3.log W teście 9. otrzymaliśmy następującą zależność błędu sieci od liczby epok:.8.7.6.5.4.2 1 2 3 4 5 6 7 8 Otrzymana w wyniku nauki sieć miała następujące wagi (pierwsza waga w każdej liście oznacza wagę biasu): ( -1.63 +9.69-16.4 +16.3-9.44 ) # Neuron 2.1 ( +2.55 +3.19 +2.93-23.78-11.2 ) # Neuron 2.2 ( +8.8 +29.86-9.3-19. -13.98 ) # Neuron 2.3 ( +18.66-15.29-11.7 +15.18 ) # Neuron 3.1 ( -5.36-6.29 -.7 -.5 ) # Neuron 3.2 ( -8.77-17.32 +1.9 +1.29 ) # Neuron 3.3 ( +6.7 +22.59-15.67-21.7 ) # Neuron 3.4 Warstwa 4.: ( -2.72 -. +3.11 +5.63 +.1 ) # Neuron 4.1 ( +11.37-8.62-3.9-5.65-5.54 ) # Neuron 4.2 ( -11.36 +8.63-1.33 +.2 +5.53 ) # Neuron 4.3 Przebieg zestawu treningowego nie był ciekawy. Poniżej zamieszczam przebieg dla testu, który sprawił największy problem : ( +5.5 +2.6 +4.4 +1.2 ) -> ( +. +1. +. ) # oczekiwano 14

( +. +1.6 -.6 ) # otrzymano ( ( +5 +.28 +.57 +.46 ) ( +.87 +.98 +.24 ) ( +.8 +. +. +.99 ) ( +.6 +.99 +.1 ) ) Globalny błąd sieci:.321 Test 1. - zestaw irysów, sieć 4-6-3../project/bin/app -u"4 6 3" -n.2 -m.9 -b -e8 -s4 -d../data/iris.in -r --lt --ln -z iris4.weights -l iris4.log W teście 1. otrzymaliśmy następującą zależność błędu sieci od liczby epok:.9.8.7.6.5.4.2 1 2 3 4 5 6 7 8 Otrzymana w wyniku nauki sieć miała następujące wagi (pierwsza waga w każdej liście oznacza wagę biasu): ( -3.33-11.9 +26.21 -.49-3.8 ) # Neuron 2.1 ( -38.9-2.26-17.38 +7.57 +63.77 ) # Neuron 2.2 ( +4.8 +14.61-3.1-1.47 +3.57 ) # Neuron 2.3 ( +25.33 +12.6 +4.74-16.9-37.78 ) # Neuron 2.4 ( +5.43-2.81 +7.41-12.93-12.74 ) # Neuron 2.5 ( +46.9 +26.72 +1.28-63.98-34.95 ) # Neuron 2.6 ( -2.55-1 -.7 -.8-1 +5.48 +.2 ) # Neuron 3.1 ( +2.78 +1.88-15.31 +9.9-24.89-6.4 +14.9 ) # Neuron 3.2 ( -2.9-1.77 +15.34-9.8 +24.93 +.91-14.89 ) # Neuron 3.3 Przebieg zestawu treningowego nie był ciekawy. Poniżej zamieszczam przebieg dla testu, który sprawił największy problem : ( +7.2 +3. +5.8 +1.6 ) -> ( +. +. +1. ) # oczekiwano ( -. -.7 +1.7 ) # otrzymano ( ( +.77 +.43 +.77 +.61 ) ( +.3 +.7 +.97 +.75 +. +.5 ) ( +.6 +. +1. ) ) Globalny błąd sieci:.371 15

Test 11. - zestaw irysów, sieć 4-4-4-4-4-3../project/bin/app -u"4 4 4 4 4 3" -n.2 -m.9 -b -e2 -s1 -d../data/iris.in -r --lt --ln -z iris5.weights -l iris5.log W teście 11. otrzymaliśmy następującą zależność błędu sieci od liczby epok:.8.7.6.5.4.2 2 4 6 8 1 12 14 16 18 2 Otrzymana w wyniku nauki sieć miała następujące wagi (pierwsza waga w każdej liście oznacza wagę biasu): ( -19.51-5.22-9.79 +24.5 +15.45 ) # Neuron 2.1 ( +12.84 +17.14-9.29-22.29-1.24 ) # Neuron 2.2 ( -7.36 +9.36 +9.52-18.87 +8.59 ) # Neuron 2.3 ( +3.89-5.98 +17.96-11.21-5.75 ) # Neuron 2.4 ( +7.55 +3.17-2.8 -.92-7.5 ) # Neuron 3.1 ( -3-6.5 +5.66 +1.82 +6.3 ) # Neuron 3.2 ( +1.76 +4.98-6.7-13.1-8.34 ) # Neuron 3.3 ( +.1-9.23 +1.41 +.4 +9.15 ) # Neuron 3.4 Warstwa 4.: ( +.9 +3.2-5.4 +4.56-8.56 ) # Neuron 4.1 ( -4.18 -.1-4.92 +11.8-5.68 ) # Neuron 4.2 ( +1.35 +4.58-4.17 +5.83-6.77 ) # Neuron 4.3 ( -1.33 +9.9-1.52 +3.76-3.5 ) # Neuron 4.4 Warstwa 5.: ( +1.2-1.58-12.8-1.24 +2.29 ) # Neuron 5.1 ( +1.9-2.59-2.21-2.72-9.87 ) # Neuron 5.2 ( +4.31-5.2-5.12-3.89 +4.27 ) # Neuron 5.3 ( +5.77-4.2-5.13-4.79 +1.96 ) # Neuron 5.4 Warstwa 6.: ( -2.71 +.3 +6.28 +.6 -.9 ) # Neuron 6.1 ( -2.47-2. -6.74 +2.59 +4.51 ) # Neuron 6.2 ( +2.47 +1.98 +.46-2.64-4.44 ) # Neuron 6.3 16

Przebieg zestawu treningowego był ciekawy, lecz zbyt długi, aby go tutaj w całości przytoczyć. Błąd sieci często był wypisywany jako i był bliski błędowi obliczeń zmiennoprzecinkowych. Poniżej zamieszczam dwa testy generujące największy błąd - jak zatem widać, tylko w jednym z testów błąd miał znaczenie i oznaczał nieprawidłową klasyfikację. ( +6. +2.7 +5.1 +1.6 ) -> ( +. +1. +. ) # oczekiwano ( +. +.2 +.98 ) # otrzymano ( ( +.48 +2 +.67 +.61 ) ( +.61 +.4 +. +.1 ) ( +1. +.3 +.99 +.1 ) ( +1. +1. +1. +1. ) ( +. +. +. +. ) ( +.6 +.8 +.92 ) ) Globalny błąd sieci:.73632 ( +6.3 +2.8 +5.1 +1.5 ) -> ( +. +. +1. ) # oczekiwano ( +. +.2 +.98 ) # otrzymano ( ( +.55 +5 +.67 +.57 ) ( + +3 +. +.2 ) ( +1. +.26 +.9 +.24 ) ( +.98 +.98 +1. +1. ) ( +. +. +.1 +. ) ( +.6 +.8 +.92 ) ) Globalny błąd sieci:.3 6. Dyskusja Testy 1. i 2. miały na celu badanie wpływu obecności biasu na możliwości nauki sieci. Okazało się, że w przypadku braku obciążenia (test 1.) sieć o strukturze 4-2-4 nie pozwala na dokonanie nauki wierszy macierzy jednostkowej o rozmiarze 4. Klarowne są w tym wypadku wnioski, jakie można wyciągnąć badając uzyskane wagi oraz wyjścia poszczególnych neuronów sieci po ukończonej (trwającej 25 epok). Otóż okazuje się, że w teście 1. nauczona sieć nie rozróżnia wejścia ( 1 ) od ( 1 ). Łatwo to uzasadnić, patrząc na możliwe konfiguracje wyjść warstwy ukrytej - jeden z dwóch neuronów może być wzbudzony bardziej od drugiego, lub oba mogą być wzbudzone w porównywalnym stopniu. Wygaszenie obu neuronów warstwy ukrytej nie jest sensowną rozróżnialną konfiguracją w przypadku sieci bez biasu, gdyż same przybliżone zera w całej pewnej warstwie dla sieci bez biasu oznacza także zera we wszystkich następnych (idąc w stronę wyjścia sieci) warstw. Powyższe rozumowanie znajduje odzwierciedlenie w teście 2. - tam nauka sieci powiodła się i w zależności od wyjść warstwy drugiej (jeden z neuronów wzbudzony i drugi wygaszony, oba wzbudzone lub oba wygaszone) możemy osiągnąć cztery różne wejścia. Dzięki obecności biasu, nawet przy małych wartościach bezwzględnych wyjść warstwy ukrytej, możemy zinterpretować taki wynik jako unikalny, niezerowy wektor wartości wyjściowych. W testach 2. - 6. badany był wpływ współczynników uczenia oraz momentum na przebieg procesu nauki sieci. Łatwym do przewidzenia wnioskiem jest to, że zwiększanie każdego ze współczynników (oczywiście, o ile nie osiągniemy ani nie przekroczymy wartości 1) powoduje wzrost szybkości procesu nauki. Najlepszą konfiguracją okazała się ta, w której wartości obu współczynników były wysokie - w teście 5. współczynnik nauki wynosił, 6, zaś 17

współczynnik momentum -, 9. Jak można odczytać z wykresu, już przeprowadzenie 5 do 1 epok nauki pozwalało osiągnąć zadowalająco niski współczynnik globalnego błędu sieci (czyli globalny błąd sieci uczącej się w oparciu o znormalizowane do przedziału [, 1] wyjścia oczekiwane). Należy jednakże pamiętać, że wniosek ten opisuje bardzo mały i prosty zestaw treningowy. Intuicja oraz literatura sugerują, że oparcie nauki na niewielkim współczynniku uczenia oraz dużym momentum pozwala uczynić naukę bardziej elastyczną, szczególnie w przypadku kiedy ważne jest dopasowanie się do dokładnie wszystkich testów z nieco liczniejszego zbioru treningowego (czyli jeżeli interesuje nas maksymalny globalny błąd sieci w danej epoce, nie zaś przeciętny). Jednocześnie, zgodnie z przytoczonymi we wprowadzeniu wzorami, jeżeli współczynnik nauki wyniesie, to niezależnie od wartości współczynnika momentum żadna nauka nie będzie miała miejsca. Ostatecznie, zdecydowaliśmy się używać współczynnika nauki o wartości, 2 oraz współczynnika momentum wynoszącego, 9. W przypadku uczenia sieci wierszy macierzy jednostkowej o wymiarze 4, konfiguracja ta nie wypada rewelacyjnie (test 6.), ale oczywiście bez porównania lepiej niż test 4., gdzie przy tym samym współczynniku uczenia nie jest wykorzystywany mechanizm momentum. Ważny jest jednak właśnie wpływ momentum na końcowy etap nauki, gdy chce się zminimalizować błąd bądź dostosować sieć do ostatnich problematycznych testów - dlatego uważamy momentum za bardzo przydatne przy testach wymagających większej liczby epok. Pozostawienie współczynnika uczenia na poziomie, 2 co prawda spowalnia początkowy proces nauki, ale chroni przed przedwczesnym przeuczeniem sieci (prawdopodobnie właśnie z tego powodu w przeprowadzonych 2-epokowych testach na zestawie iris nie doczekaliśmy się zjawiska przeuczenia). Testy 7. - 11. dotyczą zestawu Iris, w którym zbiór treningowy składa się ze 15 testów. Oczekiwanym wyjściem były odpowiednie wiersze macierzy jednostkowej o wymiarze 3, przyporządkowane poszczególnym wartością cechy nominalnej (gatunku irysa). W przypadkach, w których wystąpił problem, dotyczył on tego samego, co mogłoby być problemem dla człowieka rysującego krzywe podziału w zbiorze Iris - czyli odróżnianie specyficznych osobników gatunku virginica od versicolor. 18

Na powyższym wykresie zaznaczony na żółto przypadek verisacolor został zakwalifikowany jako virginica w teście 7., zaś zaznaczony na żółto przypadek virginica został zakwalifikowany w teście 11. jako verisacolor. Ponadto, przypadek verisacolor zaznaczony na szaro stanowił w teście 7. pewien problem, niepewność klasyfikacji (wynik znacząco różny do wektora jednostkowego, z zauważalną składową wskazującą na virginica) - jednakże został zaklasyfikowany poprawnie, gdyż składowa wskazująca na verisacolor była największa. Poza wnioskiem tak ogólnym jak powyższy, dotyczącym tego, co może sprawić problem sieci neuronowej dokonującej zadania klasyfikacji, przeprowadzenie aż pięciu testów służyło oczywiście porównaniu skuteczności i szybkości otrzymywania zadowalająco małych błędów globalnych sieci dla różnych liczebności warstw. Wszystkie próby były wykonywane z wykorzystaniem neuronów obciążających, przy losowym podawaniu testów w poszczególnych epokach. Aby uczynić wykresy porównywalnymi, różne konfiguracje testowano przez 2 epok, lub - jeżeli konfiguracja składała się z wielu neuronów i dawała dobre wyniki istotnie szybciej - 8 epok. Test 7. był próbą rozwiązania problemu za pomocą sieci o konfiguracji 4-3-3. Mimo obecności neuronów obciążających, sieć ta okazała się zbyt uboga aby dokonać poprawnej klasyfikacji. Po 2 epokach nauki, jeden z irysów pozostał klasyfikowany błędnie, zaś inny - był klasyfikowany zauważalnie mało zdecydowanie. Dodanie czwartego neuronu do warstwy ukrytej znacząco poprawiło szybkość nauki - dzięki temu w w teście 8. przy stosowanej metodzie przeprowadzania eksperymentów udało się nauczyć sieć klasyfikacji irysów już w nieco poniżej 12 epok. Patrząc na wagi drugiej i trzeciej warstwy można zaobserwować, że dla ostatnich trzech wyjść warstwy drugiej wagi w pierwszym neuronie warstwy trzeciej są bliskie zeru, a w warstwie drugiej są liczbami 19

przeciwnymi do wag w warstwie trzeciej. Neurony 2-4 różnią się między sobą, lecz z punktu widzenia warstwy wyjściowej wystarczyłoby rozważać pewną sumę ważoną ich wyjść i korzystać z pojedynczej liczby wspólnej dla wszystkich neuronów warstwy wyjściowej. Poza tą liczbą oczywiście potrzebny jest neuron 2.1 oraz bias. Może zatem konfiguracja 4-2-3 z biasem byłaby wystarczająca? Otóż jak pokazuje test 7., cztery neurony warstwy ukrytej są jednak potrzebne aby proces nauki mógł się odbyć, nawet jeśli w końcowym procesie nauczania znaczenie faktu, że neurony 2-4 są różne zostaje zatarte. Test 9. pokazuje sprawność naszej implementacji w przypadku dodania kolejnych warstw. Pomimo, że dane już w pierwszej warstwie ukrytej muszą być przepuszczone przez zaledwie trzy neurony, ze względu na rozmiar drugiej warstwy ukrytej proces uczenia nie sprawia problemu, an nawet trwa prawie dwa razy mniej epok niż w teście 8 (czyli niecałe 7 epok). Zatem dane przechodzące przez 3 neurony w pewnej warstwie ukrytej bez problemu mogą posłużyć do klasyfikacji irysów, mimo że nie udało się to w teście 7. Mimo znacznego zmniejszenia liczby epok w porównaniu do testu 8., należy pamiętać, że czas obliczeń potrzebnych do przebiegu epoki wzrósł ze względu na dodanie kolejnej warstwy neuronów. Aby osiągnąć przyspieszenie nauki sieci, zamiast dodawać kolejne warstwy, można także dodać nadmiarowe neurony w warstwie ukrytej. Sieć 4-6-3 (test 1.) nauczyła się klasyfikować irysy w mniej niż 4 epok, co stanowi najlepszy z uzyskanych wyników. Duża liczba neuronów nie pozostaje jednak bez wpływu na czas obliczeń, więc nadal można się zastanawiać, która ze struktur - niniejsza, zastosowana w teście 8., czy może w teście 9. - jest najlepszym rozwiązaniem problemu. Może to zależeć na przykład od tego, czy chcemy skoncentrować się na minimalizacji czasu obliczeń, czy może liczby neuronów i związanego z nią zużycia pamięci. Dla tak małych sieci znaczenie tego jest znikome, ale gdyby dwie liczne warstwy sąsiadowały ze sobą, zużycie pamięci wzrosłoby znacznie - wtedy może opłacić się rozważanie utworzenia dwóch warstw ukrytych. Test 11. stanowi eksperyment na temat tego, do czego może doprowadzić znaczna przesada z liczbą warstw ukrytych. Mimo upływu 2 epok i chwilowego zmniejszenia maksymalnego błędu globalnego w epoce, sieć ta nie zdołała nauczyć się całego zbioru danych - jeden z irysów pozostał klasyfikowany błędnie. Chwilowy spadek, a później - ponowny wzrost maksimum błędu (czyli błędu na problematycznym irysie) jest zjawiskiem podobnym do przeuczenia - jednakże w tym przypadku całkowite nauczenie sieci zbioru treningowego nie nastąpiło wcale. 7. Wnioski Podsumowując, na podstawie wyników i przedstawionej powyżej ich interpretacji wyciągnęliśmy następujące wnioski: 2

Jeżeli w sieci występują warstwy składające się z niewielkiej liczby neuronów, użycie obciążenia jest nie tylko ułatwieniem, ale wręcz koniecznością. Umiarkowane podwyższanie współczynnika nauki oraz momentum pozwala przyspieszać proces nauczania. W przypadku spodziewanej dużej liczby epok, dobrze sprawdza się umiarkowany współczynnik nauki i duży współczynnik momentum (np. nauka, 2 i momentum, 9) - właśnie przy takich współczynnikach udało nam się dokonać klasyfikacji zbioru Iris. Zastosowanie współczynnika momentum pozwala uniknąć występowania lokalnych minimów, oraz wygładza przebieg nauki dla dużych zbiorów testowych. Jego zastosowanie jest korzystne zwłaszcza podczas treningu sieci on-line, oraz w sytuacjach w których mogłoby dojść do przeuczenia sieci. Ze względu na charakter wpływu momentum na zmiany wag neuronu, często określa się je jako bezwładność wagi. Dla skomplikowanego zbioru treningowego często problemem może się okazać pewien pojedynczy test - nie jest to za każdym razem ten sam test, ale zawsze znajduje się on blisko płaszczyzn separacji, które można by sobie próbować wyobrazić. Nawet jeżeli stosowane jest obciążenie, to jeżeli któraś warstwa ukryta będzie zawierała zbyt mało neuronów, rozróżnienie wymaganej liczby unikalnych wyjść może okazać się niemożliwe. Odmienny od powyższego problem polega na tym, że sieć po prostu może być zbyt uboga, aby proces nauki przebiegał skutecznie. Nawet jeżeli po ukończonej nauce część neuronów okazuje się być nadmiarowa, są one potrzebne do prawidłowego przebiegu procesu nauki. Dodanie dodatkowej warstwy ukrytej może poprawić szybkość uczenia, ale jeszcze lepiej jest dodać równoległe neurony do istniejącej warstwy. Jedynym argumentem za dodatkowymi warstwami może być zużycie pamięci, które maleje gdy rozległa warstwa zostaje rozbita na dwie mniejsze (o ile nie okażą się one z kolei zbyt ubogie, aby rozróżnić wymaganą liczbę różnorodnych wyjść). Utworzenie zbyt wielu warstw ukrytych uniemożliwia dostosowanie sieci do kłopotliwych testów ze zbioru treningowego. Literatura [1] Ryszard Tadeusiewicz - Sieci neuronowe, Wyd. 2., Warszawa 1993 [2] Learning and neural networks [http://en.wikiversity.org/wiki/ Learning_and_neural_networks] [3] UCI Machine Learning Repository Iris Data Set 21