Sieci neuronowe
Nazwą tą określa się symulatory (programowe lub sprzętowe) modeli matematycznych realizujące pseudorównoległe przetwarzanie informacji, składające się z wielu wzajemnie połączonych neuronów i naśladujący działanie biologicznych struktur mózgowych.
Symulatory takie nazywane są również Neural nets (networks) lub AI (Artifical Inteligence - sztuczna inteligencja)
choć nie do końca słusznie gdyż sieci neuronowe są podzbiorem AI.
SSN (sztuczne sieci neuronowe) powstały z interdyscyplinarnej syntezy nauk tradycyjnych obejmujących biologię, fizykę i matematykę. Ich dynamiczny rozwój nastąpił dopiero w ostatnich latach w wyniku współczesnych możliwości obliczeniowych informatyki i elektroniki.
Podstawową cechą różniącą SSN od programów realizujących algorytmiczne przetwarzanie informacji jest zdolność generalizacji czyli uogólniania wiedzy dla nowych danych nieznanych wcześniej, czyli nie prezentowanych w trakcie nauki. Określa się to także jako zdolność SSN do aproksymacji wartości funkcji wielu zmiennych w przeciwieństwie do interpolacji możliwej do otrzymania przy przetwarzaniu algorytmicznym. Można to ująć jeszcze inaczej. Np. systemy ekspertowe z reguły wymagają zgromadzenia i bieżącego dostępu do całej wiedzy na temat zagadnień, o których będą rozstrzygały. SSN wymagają natomiast jednorazowego nauczenia, przy czym wykazują one tolerancję na nieciągłości, przypadkowe zaburzenia lub wręcz braki w zbiorze uczącym. Pozwala to na zastosowanie ich tam, gdzie nie da się rozwiązać danego problemu w żaden inny, efektywny sposób.
Ze względu na specyficzne cechy i niepodważalne zalety obszar zastosowań sieci neuronowych jest rozległy:
i zapewne wiele innych.
Przedmiotem moich zainteresowań są wielowarstwowe nieliniowe sztuczne sieci neuronowe jednokierunkowe uczone metodą wstecznej propagacji błędów (multilayer nonlinear artifical neural nets with backpropagation) - realizowane programowo. Nazwa ta jest tylko z pozoru szalona, gdyż poszczególne jej człony spełniajš funkcje zgodnie ze swoją nazwą
Podstawowym elementem składowym sieci neuronowej jest:
Neuron
Jego schemat został opracowany przez McCullocha i Pittsa w 1943 roku i oparty został na budowie komórki nerwowej.
Jego działanie jest następujące:Do wejść doprowadzane są sygnały dochodzące z neuronów warstwy poprzedniej. Każdy sygnał mnożony jest przez odpowiadającą mu wartość liczbową zwaną wagą. Wpływa ona na percepcję danego sygnału wejściowego i jego udział w tworzeniu sygnału wyjściowego przez neuron. Waga może być pobudzająca - dodatnia lub opóźniajšca - ujemna; jeżeli nie ma połączenia między neuronami to waga jest równa zero. Zsumowane iloczyny sygnałów i wag stanowią argument funkcji aktywacji neuronu.
W tym miejscu warto porównać model neuronu realizowany programowo z jego odpowiednikiem elektronicznym zrealizowanym na elementach dyskretnych. Wejścia wzbudzenia odpowiadają dendrytom a Bias - neurytowi. Długość impulsu układu - około 6 ms, czas całkowania układu - 2 ms, czas regeneracji - około 10 ms (odpowiada to w przybliżeniu stałym czasowym żywej komórki nerwowej, z wyjątkiem długości impulsu - ten w żywej komórce jest krótszy). Dla odwzorowania prostych funkcji wzroku do wejść układu podłącza się elementy fotoelektryczne. Umożliwia to zademonstrowanie zjawiska scalania obrazów impulsowych przez narząd wzroku, co jest praktycznie wykorzystywane w kinie i telewizji, a także - zjawiska wzajemnego hamowania komórek w jednej sieci (występuje to u niektórych zwierząt i polega na tym, że komórka odtwarzająca bodźce świetlne o większej intensywności hamuje wyzwalanie impulsów komórek sąsiednich; dzięki temu zwiększa się lokalnie kontrastowość układu i zwierzę widzi wyraźniej). Szeregowe połączenie takich komórek stanowi przybliżoną analogię włókien nerwowych.
Wybór funkcji aktywacji zależy od rodzaju problemu jaki stawiamy przed siecią do rozwiązania. Dla sieci wielowarstwowych najczęściej stosowane są funkcje nieliniowe, gdyż neurony o takich charakterystykach wykazują największe zdolności do nauki. Polega to na możliwości odwzorowania dowolnej zależności pomiędzy wejściem a wyjściem sieci ale w sposób płynny. Umożliwia to otrzymanie na wyjściu sieci informacji cišgłej a nie tylko postaci: TAK - NIE.
Wymagane cechy funkcji aktywacji to:Pojemność informacyjna pojedynczego neuronu nie jest duża. Powiększenie pojemności i zwiększenie zdolności przetwarzania uzyskuje się poprzez odpowiednie połączenie wielu neuronów. Powstaje wówczas:
Jej schemat jest następujący:
Projektowanie sieci neuronowej zaczyna się już na poziomie analizy sformułowanego problemu. Inaczej mówiąc, jakie i ile danych chcemy lub możemy podać na wejścia sieci (zdeterminuje to wielkość warstwy wejściowej) oraz jaką odpowiedź chcemy uzyskać ( ilość wyjść sieci). Pozostanie zatem do określenia ilość warstw ukrytych i neuronów w tych warstwach. Jest to natrudniejszy moment tego etapu pracy. Przyjmuje się, że sieć z jedną warstwš ukrytą powinna nauczyć się rozwiązywania większości postawionych problemów. Nie znane są problemy wymagające do rozwiązania sieci z więcej niż trzema warstwami ukrytymi. Nie ma natomiast dobrej recepty na dobór właściwej ilości neuronów w warstwie ukrytej. Można próbować według wzoru:
gdzie:
Nwu - ilość neuronów w warstwie ukrytej Nwwe - ilość neuronów w warstwie wejściowej Nwwy - ilość neuronów w warstwie wyjściowejGeneralnie jednak uczenie rozpoczyna się z małą ich ilością a następnie, obserwując postępy tego procesu, doświadczalnie zwiększa się ich ilość.
Działanie SSN polega na tym, że sygnały pobudzające (wektor wejściowy) podawane na wejścia sieci, przetwarzane sš w poszczególnych neuronach. Po tej projekcji na wyjściach sieci otrzymuje się wartości liczbowe, które stanowiš odpowiedź sieci na pobudzenie i stanowią rozwiązanie postawionego problemu. Jednak aby takie rozwiązanie uzyskać, należy przejść żmudną drogę uczenia sieci. Jedna z metod to:
Uczenie metodą wstecznej propagacji błędów
Jest to uczenie z nadzorem lub inaczej - z nauczycielem.
Pierwszą czynnością w procesie uczenia jest przygotowanie dwóch ciągów danych: uczącego i weryfikującego. Ciąg uczący jest to zbiór takich danych, które w miarę dokładnie charakteryzują dany problem. Jednorazowa porcja danych nazywana jest wektorem uczącym. W jego skład wchodzi wektor wejściowy czyli te dane wejściowe, które podawane są na wejścia sieci i wektor wyjściowy czyli takie dane oczekiwane, jakie sieć powinna wygenerować na swoich wyjściach. Po przetworzeniu wektora wejściowego, nauczyciel porównuje wartości otrzymane z wartościami oczekiwanymi i informuje sieć czy odpowiedź jest poprawna, a jeżeli nie, to jaki powstał błąd odpowiedzi. Błąd ten jest następnie propagowany do sieci ale w odwrotnej niż wektor wejściowy kolejności (od warstwy wyjściowej do wejściowej) i na jego podstawie następuje taka korekcja wag w każdym neuronie, aby ponowne przetworzenie tego samego wektora wejściowego spowodowało zmniejszenie błędu odpowiedzi. Procedurę taką powtarza się do momentu wygenerowania przez sieć błędu mniejszego niż założony. Wtedy na wejście sieci podaje się kolejny wektor wejściowy i powtarza te czynności. Po przetworzeniu całego ciągu uczącego (proces ten nazywany jest epoką) oblicza się błąd dla epoki i cały cykl powtarzany jest do momentu, aż błąd ten spadnie poniżej dopuszczalnego. Jak to już było zasygnalizowane wcześniej, SSN wykazują tolerancję na nieciągłości, przypadkowe zaburzenia lub wręcz niewielkie braki w zbiorze uczącym. Jest to wynikiem właśnie zdolności do uogólniania wiedzy.
Jeżeli mamy już nauczoną sieć, musimy zweryfikować jej działanie. W tym momencie ważne jest podanie na wejście sieci wzorców z poza zbioru treningowego w celu zbadania czy sieć może efektywnie generalizować zadanie, którego się nauczyła. Do tego używamy ciągu weryfikującego, który ma te same cechy co ciąg uczący tzn dane dokładnie charakteryzują problem i znamy dokładne odpowiedzi. Ważne jest jednak, aby dane te nie były używane uprzednio do uczenia. Dokonujemy zatem prezentacji ciągu weryfikującego z tą różnicą, że w tym procesie nie rzutujemy błędów wstecz a jedynie rejestrujemy ilość odpowiedzi poprawnych i na tej podstawie orzekamy, czy sieć spełnia nasze wymagania czyli jak została nauczona.
Wagi początkowe, z którymi sieć rozpoczyna naukę z reguły stanowią liczby wygenerowane przypadkowo. Po nauczeniu sieci zawsze warto dla sprawdzenia otrzymanych wyników powtórzyć całą procedurę od wygenerowania wag początkowych.
Dla dużych sieci i ciągów uczących składających się z wielu tysięcy wektorów uczących ilość obliczeń wykonywanych podczas całego cyklu uczenia jest gigantyczna a więc i czasochłonna. Nie zdarza się także aby sieć została dobrze zbudowana od razu. Zawsze jest ona efektem wielu prób i błędów. Ponadto nigdy nie mamy gwarancji, że nawet prawidłowa sieć nie utknie w minimum lokalnym podczas gdy interesuje nas znalezienie minimum globalnego. Dlatego algorytmy realizujące SSN wyposaża się mechanizmy dające nauczycielowi możliwość regulacji szybkości i jakości uczenia. Są to tzw współczynniki: uczenia i momentum. Wpływają one na stromość funkcji aktywacji i regulują szybkość wpływu zmiany wag na proces uczenia.
Jednak zawsze istotnym jest zoptymalizowanie algorytmu przetwarzającego lub posiadanie szybkiego komputera, a najlepiej jest mieć te obie rzeczy na raz.
Przedstawiam cztery przykładowe praktyczne realizacje sztucznych sieci neuronowych rozwiązujących: