Wprowadzenie do sieci neuronowych
STATISTICA Neural Networks PL
Podstawy pracy w STATISTICA Neural Networks PL
Wprowadzenie do sieci neuronowych
W ostatnich latach bardzo gwałtownie wzrosło zainteresowanie sieciami neuronowymi. Są one z powodzeniem stosowane w rozwiązywaniu niezwykle szerokiego zakresu problemów, w tak różniących się od siebie dziedzinach jak: finanse, medycyna, zastosowania inżynierskie, geologia czy fizyka. W rzeczywistości sieci neuronowe mogą być zastosowane wszędzie tam, gdzie pojawiają się problemy związane z predykcją, klasyfikacją czy sterowaniem.
Sieci neuronowe są bardzo wyrafinowaną techniką modelowania, zdolną do odwzorowywania nadzwyczaj złożonych funkcji. W szczególności sieci neuronowe mają charakter nieliniowy, co istotnie wzbogaca możliwości ich zastosowań. Zalety sieci neuronowych nie ograniczają się jedynie do tego, że umożliwiają one swobodne i łatwe (bez konieczności samodzielnego formułowania przez użytkownika skomplikowanych hipotez) tworzenie modeli nieliniowych. Sieci umożliwiają także kontrolę nad złożonym problemem wielowymiarowości, który przy stosowaniu innych metod znacznie utrudnia próby modelowana funkcji nieliniowych z dużą liczbą zmiennych niezależnych.
Sieci neuronowe w praktyce same konstruują potrzebne użytkownikowi modele, ponieważ automatycznie uczą się na podanych przez niego przykładach. Chociaż zatem użytkownik potrzebuje pewnej, w głównej mierze empirycznej wiedzy dotyczącej sposobu wyboru i przygotowania danych stanowiących przykłady, a także wyboru właściwego rodzaju sieci neuronowej oraz sposobu interpretacji rezultatów, to jednak poziom wymaganej od użytkownika wiedzy teoretycznej, niezbędnej do skutecznego zbudowania modelu, przy stosowaniu sieci neuronowych jest znacznie niższy niż w przypadku stosowania tradycyjnych metod statystycznych.
Do sieci neuronowych wprowadza się pewne zmienne wejściowe (czyli dane), jej wyjścia zaś definiują zmienne wyjściowe (czyli rozwiązania). Dlatego też mogą one być stosowane wszędzie tam, gdzie na podstawie pewnych znanych informacji wnioskuje się o pewnych nieznanych informacjach. Za przykłady zadań opisanego typu mogą posłużyć:
Predykcja na rynku akcji. Znane są wtedy na przykład ceny akcji pochodzące z ubiegłego tygodnia i bieżąca wartość indeksu. Sieć powinna określić jutrzejszą (prawdopodobną) cenę akcji.
Udzielanie kredytu. Sieć musi określić ryzyko związane z udzieleniem pożyczki osobie, która złożyła odpowiedni wniosek. Znane są dane dotyczące kredytobiorcy, na przykład dochody tej osoby, informacja dotycząca spłat wcześniej udzielonych kredytów, dane dotyczące biznesplanu itd. To są w rozważanym przypadku dane wejściowe, natomiast daną wyjściową może być zmienna klasyfikująca o wartościach: "bardzo wiarygodny", "mało wiarygodny" itd.
Sterowanie. Sieć musi odpowiedzieć na pytanie, jak sterować pewnym systemem, na przykład musi ustalić, czy poruszający się w sztucznym środowisku (labiryncie) robot powinien skręcić w lewo, czy w prawo, czy też iść prosto, aby osiągnąć zadany punkt przeznaczenia. W chwili podejmowania decyzji znany jest jedynie obraz rejestrowany aktualnie przez kamerę robota, natomiast nie jest dostępny plan labiryntu. Takie i podobne zadania rozwiązuje się z wykorzystaniem sieci neuronowych, przy czym bardzo często okazuje się, że rozwiązania uzyskane za pomocą sieci są znacznie lepsze, niż rozwiązania uzyskiwane za pomocą innych technik i innych metod. Szczególnie istotną cechą sieci neuronowych jest to, że nabywają one umiejętności opisu zależności wejścia - wyjścia w trakcie procesu uczenia. Istnieją dwa typy algorytmów stosowanych do uczenia sieci neuronowych, które stosowane są w zależności od rodzaju używanej sieci. Występuje uczenie z nauczycielem oraz uczenie bez nauczyciela, przy czym znacznie częściej stosowany jest pierwszy rodzaj uczenia. Chcąc zastosować uczenie z nauczycielem, użytkownik sieci musi najpierw zgromadzić zbiór danych uczących. Dane te zawierają przykłady wejść oraz odpowiadających im wartości wyjściowych. Można powiedzieć, że są to przykłady zadań wraz z rozwiązaniami. Sieć uczy się wnioskować na temat sposobu rozwiązywania stawianych jej zadań, dokonując analizy przykładowych danych wejściowych i wyjściowych, zmierzającej do ujawnienia natury występującej pomiędzy nimi zależności.
Dane uczące pochodzą najczęściej z zapisów historycznych. W powyżej przytoczonych przykładach mogłyby one zawierać wcześniejsze ceny akcji i wartości indeksu FTSE powiązane z informacją o kierunku zmian przyszłych notowań albo informacje obejmujące dane zawarte we wcześniejszych, pozytywnie rozpatrzonych wnioskach kredytowych, powiązane z informacją o ewentualnym wystąpieniu późniejszych zaniedbań w spłatach. W podobny sposób można rozpatrywać dane dotyczące przykładowych pozycji robota i właściwego sposobu reakcji na zarejestrowane sygnały sensoryczne, a także wiele innych danych gromadzonych i udostępnianych różnym sieciom neuronowym w charakterze ich zbiorów uczących.
Sieć neuronowa jest uczona w ten sposób, że jej parametry (współczynniki wag i progi neuronów) są w celowy sposób zmieniane przy użyciu wybranego algorytmu uczenia z nauczycielem. Najbardziej znanym przykładem takiego algorytmu jest algorytm wstecznej propagacji błędów (ang. backpropagation). Algorytm ten w oparciu o zgromadzone dane modyfikuje wagi i wartości progowe sieci w sposób zapewniający minimalizację błędu popełnianego przez sieć podczas wykonywania postawionych jej zadań (na przykład błędu predykcji) dla wszystkich danych wchodzących w skład zbioru uczącego.
Poprawnie nauczona sieć potrafi modelować zadaną funkcję (a priori nieznaną użytkownikowi, więc niemożliwą do bezpośredniego zaprogramowania), także w przypadku, gdy funkcja ta ma nieoczekiwanie złożoną, na przykład silnie nieliniową, postać. Taka samodzielnie "odkryta" przez sieć w trakcie uczenia skomplikowana funkcja, która wiąże zmienne wejściowe ze zmiennymi wyjściowymi, może zostać użyta do różnych celów, między innymi do predykcji nieznanych wartości wyjściowych.
Model podstawowy
Chcąc odwzorować jedynie podstawową istotę biologicznych systemów nerwowych, twórcy sztucznych sieci neuronowych zdecydowali, że sztuczny neuron zostanie zdefiniowany następująco:
Neurony wejściowe, ukryte i wyjściowe muszą zostać wzajemnie połączone, co stawia przed twórcą sieci problem wyboru jej struktury. Kluczową kwestią przy wyborze struktury sieci jest występowanie lub brak w tej strukturze sprzężenia zwrotnego. Zazwyczaj sieci mają strukturę jednokierunkową (tzw. feedforward): sygnał przepływa w nich tylko w jednym kierunku - od wejść, poprzez kolejne neurony ukryte, osiągając ostatecznie neurony wyjściowe.
Warto odnotować, że neurony tworzą w tej sieci wyraźną strukturę warstwową. Warstwa wejściowa służy do wprowadzenia do sieci wartości zmiennych wejściowych. Warstwy ukryte przetwarzają sygnały w ten sposób, że wypracowują pewne dane pośrednie (pomocnicze), stanowiące potem podstawę dla procesu wyznaczania ostatecznego rozwiązania. Natomiast samo to końcowe rozwiązanie, będące rezultatem pracy całej sieci, wyznaczane jest przez warstwę wyjściową. W ten sposób każda warstwa ma w sieci swoje określone miejsce i spełnia określone zadania.
Kolejnym problemem wymagającym wyjaśnienia jest kwestia, jak neurony sieci maja być ze sobą łączone. Jak wiadomo, struktura połączeń ma wpływ na działanie sieci, więc jej racjonalny wybór może znacznie przyspieszyć proces jej uczenia. Jaką jednak strukturę wybrać?
Jednym z ważnych powodów stosowania sieci neuronowych jest fakt, że dla zadań, które chcemy powierzyć do rozwiązania budowanej sieci, - nie znamy dostatecznie dobrej algorytmicznej metody ich rozwiązywania. Jednak skoro nie wiemy, jak postawione zadanie trzeba rozwiązywać (chcemy, żeby sieć sama to ustaliła na podstawie przykładów podawanych w trakcie uczenia), to zwykle nie wiemy również z góry, jakie drogi przesyłania sygnałów będą przy tym rozwiązywaniu potrzebne, a jakie nie. Nie potrafimy zatem a priori powiedzieć, które połączenia w sieci są potrzebne, a które nie. Dlatego stosuje się połączenia typu "każdy z każdym". Przy przyjęciu tej zasady każdy neuron ukryty i każdy neuron wyjściowy połączony jest z każdym neuronem z warstwy poprzedniej. Te połączenia, dla których proces uczenia ustali zerowe (lub ogólniej - bardzo małe) bezwzględne wartości współczynników wag, traktować można jako nieistniejące w sieci.
Pre- i postprocessing
Niezależnie od typu, każda sieć neuronowa korzysta z numerycznych wartości wejściowych i wyznacza numeryczne wartości wyjściowe. Stosowane typowo funkcje przejścia neuronu nie określają wprawdzie wymagań co do zakresu wartości wejściowych, generują jednak wartości wyjściowe należące do ściśle określonego zakresu. Na granicach tego dopuszczalnego przedziału wartości pojawia się w charakterystyce neuronu efekt "nasycenia". Ze względu na jego występowanie stwierdzenie, że wartości wejściowe mogą należeć do dowolnego przedziału, ma raczej akademicki charakter. W rzeczywistości właśnie z uwagi na występowanie efektu nasycenia neuron jest wrażliwy wyłącznie na wartości wejściowe, należące do ograniczonego przedziału.
Ograniczony zakres możliwych odpowiedzi sieci w powiązaniu z wymogiem korzystania wyłącznie z informacji w postaci numerycznej pociąga za sobą konieczność stosowania w aplikacjach neuronowych etapu wstępnego przetwarzania danych wejściowych przed ich podaniem na wejścia sieci (tzw. preprocessingu) i procesu algorytmicznego przekształcenia i odpowiedniej interpretacji danych wyjściowych otrzymywanych z sieci (tzw. postprocessingu).
Skalowanie. Wartości numeryczne podawane z zewnątrz muszą zostać przeskalowane do przedziału odpowiedniego dla sieci.
Wartości nominalne. Zmienne nominalne mogą mieć charakter dwustanowy (na przykład: Płeć = {Mężczyzna, Kobieta}) lub wielostanowy (występują wówczas więcej niż dwa stany). Dwustanowe zmienne nominalne w prosty sposób reprezentowane są w sieci poprzez zastosowanie przekształcenia do postaci numerycznej (na przykład: Mężczyzna = 0, Kobieta = 1). Operowanie na zmiennych wielostanowych jest trudniejsze. Mogą być one reprezentowane za pomocą pojedynczej wartości numerycznej, ale powoduje to (prawdopodobnie) fałszywe uporządkowanie wartości nominalnych, które może fałszować ich rzeczywiste znaczenie. Lepszym rozwiązaniem, znanym jako kodowanie typu jeden-z-N, jest użycie w sieci kilku zmiennych numerycznych do reprezentacji pojedynczej zmiennej nominalnej. Liczba zmiennych numerycznych jest wtedy równa liczbie możliwych wartości zmiennej nominalnej; jedna z tych N wartości przyjmuje wartość równą 1, zaś pozostałe wartość 0.
Perceptrony wielowarstwowe (MLP)
Istnieje wiele typów i rodzajów sieci neuronowych, różniących się między sobą strukturą i zasadami działania, ale najpopularniejsza obecnie architektura sieciowa związana jest z koncepcją wielowarstwowego perceptronu. Dokładne omówienie znajdują się w większości książek z dziedziny sieci neuronowych (np.: Tadeusiewicz, 1993; Bishop, 1995). W sposób skrótowy ten właśnie rodzaj sieci został przedstawiony (bez podawania nazwy) w poprzedniej sekcji.
Przypomnijmy: sieć składa się z wielu neuronów ułożonych w warstwy. Każdy z neuronów oblicza ważoną sumę swoich wejść, a wyznaczony w ten sposób poziom pobudzenia staje się argumentem funkcji przejścia (funkcji aktywacji), która oblicza wartość wyjściową neuronu. Neurony tworzą strukturę jednokierunkową, to znaczy przesyłanie sygnałów odbywa się w kierunku od wejścia do wyjścia - bez sprzężeń zwrotnych. Sieć można interpretować jako model typu wejście-wyjście, którego parametrami są wagi oraz wartości progowe. Sieć taka może modelować - przy odpowiedniej liczbie warstw i neuronów - funkcję o prawie dowolnej złożoności.
Po określeniu liczby warstw oraz liczby neuronów w każdej warstwie należy dobrać wartości wag oraz wartości progowe wszystkich neuronów. Parametry te wybiera się w sposób zapewniający minimalizację błędu działania sieci (co na przykład może wiązać się z najlepszym sposobem predykcji nieznanych danych za pomocą sieci). Zadanie to jest realizowane przez algorytm uczenia.
Podstawą do automatycznej modyfikacji wag i progów, zapewniającej minimalizację wspomnianego błędu, są zebrane przykłady, czyli dane wejściowe wraz z podanymi dla nich prawidłowymi rozwiązaniami (dla zadania predykcji źródłem takich przykładów są głównie przypadki historyczne). Proces uczenia jest równoważny dopasowywaniu parametrów modelu reprezentowanego przez sieć do dostępnych danych uczących.
Aby określić błąd sieci o określonej konfiguracji optymalizowanych parametrów (wag i progów), należy uruchomić sieć dla wszystkich przypadków uczących i porównać wartości otrzymywane na wyjściu sieci z wartościami zadanymi jako wzorce poprawnych rozwiązań. Sumaryczny błąd sieci wyznaczany jest za pomocą wybranej przez badacza funkcji błędu, która dokonuje agregacji wyznaczonych różnic dla poszczególnych rozpatrywanych przykładów. Najczęściej stosowaną funkcją błędu jest suma kwadratów, przy stosowaniu której wyznaczone dla poszczególnych przykładów różnice (wartości wyliczonej przez sieć i wartości poprawnej, zawartej w ciągu uczącym jako wzorzec) są podnoszone do kwadratu, a następnie sumowane.
W tradycyjnym podejściu do modelowania matematycznego różnych złożonych systemów (np. w modelowaniu liniowym wykorzystującym podejście statystyczne) stosowane są algorytmy określające taką konfigurację modelu, która zapewnia osiągnięcie minimum globalnego przez funkcję błędu. Oznacza to, że stworzony (na przykład za pomocą metody regresji) model matematyczny liniowy jest najlepszym możliwym odwzorowaniem posiadanego zbioru danych - ale najlepszym w klasie modeli liniowych. Prawdę powiedziawszy, prawie wszystkie złożone systemy, których modele chcemy budować, są w rzeczywistości w mniejszym albo większym stopniu nieliniowe. Decydujemy się jednak często na opisywanie ich za pomocą formuł (modeli) liniowych, ponieważ zarówno opisane wyżej wyznaczenie modelu liniowego, jak i jego wykorzystywanie, jest szczególnie łatwe, a przez to szczególnie wygodne. Czasem jednak niedokładność wnoszona przez model liniowy, nawet taki optymalnie wyznaczony, jest niedopuszczalnie duża.
Sieci neuronowe wnoszą do modelowania nową jakość. Sieć w trakcie procesu uczenia może samodzielnie znaleźć nieliniowy model rozważanego systemu, przy czym twórca sieci nie musi jej podawać żadnych założeń dotyczących kształtu modelu. Stosowanie modeli opartych na sieciach neuronowych, a zwłaszcza opartych na tej technice modeli nieliniowych, zwiększa zatem istotnie możliwości modelowania. Jednak ceną płaconą za tę wygodę jest brak pewności, że osiągnięty w trakcie uczenia sieci poziom błędu osiągnął swój poziom minimalny, co oznacza, że uzyskany model może być odległy od modelu optymalnego i użytkownik nigdy nie wie, jak bardzo uzyskany model "odstaje" od modelu optymalnego, jaki mógłby być uzyskany w tych samych warunkach.
Sieci o radialnych funkcjach bazowych (RBF)
W poprzedniej sekcji przedstawiono perceptron wielowarstwowy, który modeluje zadaną funkcję korzystając ze złożenia funkcji typu "urwisko sigmoidalne". W przypadku problemów klasyfikacyjnych odpowiada to podzieleniu przestrzeni sygnałów wejściowych (przestrzeni wzorców) za pomocą hiperpłaszczyzn. Użycie hiperpłaszczyzn do dokonania podziału przestrzeni jest podejściem odwołującym się do intuicji i bazuje na zasadniczej prostocie linii jako struktury geometrycznej i formuły algebraicznej. Równie pociągającym i intuicyjnym podejściem jest jednak także podział przestrzeni przy użyciu okręgów lub (bardziej ogólnie) hipersfer. Przy wyznaczaniu łącznego pobudzenia neuronów nie dokonuje się mnożenia składowych sygnałów przez wagi, tylko wyznaczana jest odległość wektora wag i wektora sygnałów wejściowych). Promień (lub inaczej odchylenie) jest przechowywany w neuronie jako tak zwana "wartość progowa". Warto podkreślić, że zarówno "wagi" jak i "wartość progowa" w neuronie radialnym są całkowicie czymś innym niż w neuronie liniowym (wykorzystywanym w perceptronie). Wagi radialne definiują punkt, zaś radialna wartość progowa jest w rzeczywistości odchyleniem - ale stosowane nazwy są te same, co w neuronach perceptronów wielowarstwowych.
Sieć o radialnych funkcjach bazowych (sieć RBF - Radial Basis Function network) posiada zwykle jedną warstwę ukrytą, zawierającą neurony radialne, z których każdy modeluje gaussowską powierzchnię odpowiedzi. Z uwagi na silnie nieliniowy charakter tych funkcji zazwyczaj wystarcza jedna warstwa ukryta do zamodelowania funkcji o dowolnym kształcie. Warunkiem utworzenia przez sieć RBF skutecznego modelu dowolnej funkcji jest jednak zapewnienie w strukturze sieci dostatecznej liczby neuronów radialnych. Jeśli jest ich wystarczająco dużo, można do każdego istotnego szczegółu modelowanej funkcji przypisać odpowiedni neuron radialny, co gwarantuje, że uzyskane rozwiązanie będzie odwzorowywało zadaną funkcję z całkowicie satysfakcjonującą wiernością.
Pozostaje jeszcze pytanie, w jaki sposób należy połączyć wyjścia ukrytych neuronów radialnych aby uzyskać wymaganą wartość wyjściową sieci. Okazuje się, że wystarczy po prostu zastosować kombinację liniową tych wartości wyjściowych (tzn. ważoną sumę wartości funkcji gaussowskich). Sieć RBF posiada więc warstwę wyjściową zawierającą neurony liniowe z liniową funkcją aktywacji. Prosta transformacja liniowa dokonywana w warstwie wyjściowej może być w całości zoptymalizowana przy użyciu tradycyjnych technik modelowania liniowego, które są szybkie i przy stosowaniu których nie pojawiają się takie problemy jak minima lokalne, które są plagą występującą w uczeniu sieci MLP. Z tego powodu sieci RBF mogą być uczone w bardzo krótkim czasie (różnica w szybkości uczenia dotyczy rzędów wielkości).
Probabilistyczne sieci neuronowe (PNN)
W przypadku problemów klasyfikacyjnych użyteczną interpretacją wartości wyjściowych sieci jest ich traktowanie jako prawdopodobieństw przynależności do klas. W takiej sytuacji sieć w trakcie uczenia w rzeczywistości uczy się estymować funkcję gęstości prawdopodobieństwa reprezentowaną przez zgromadzone dane.
Podobną przydatną interpretację probabilistyczną można przyjąć w problemach regresyjnych, przy założeniu, że wartość wyjściowa sieci traktowana jest jako wartość oczekiwana modelu w danym punkcie przestrzeni wejściowej. Ta wartość oczekiwana jest związana z łączną funkcją gęstości prawdopodobieństwa - zarówno wyjścia, jak i wszystkich wejść.
W sieci PNN występują przynajmniej trzy warstwy: wejściowa, radialna i wyjściowa. Neurony radialne mają parametry kopiowane bezpośrednio z danych uczących; każdy z nich odpowiada jednemu przypadkowi. Wygląda to w taki sposób, że każdy z neuronów radialnych modeluje funkcję Gaussa wycentrowaną nad "swoim" przypadkiem uczącym. Natomiast w warstwie wyjściowej każdej klasie odpowiada jeden neuron. Do każdego z tych neuronów wyjściowych docierają połączenia od tych neuronów radialnych, które zostały ustawione nad punktami (zestawami danych wejściowych) należącymi do danej klasy; nie występują natomiast połączenia neuronów wyjściowych z innymi neuronami radialnymi. Neurony wyjściowe sumują więc po prostu wartości wyjściowe pojawiające się na wyjściach neuronów radialnych, należących do klasy odpowiadającej danemu neuronowi wyjściowemu. Wartości wyjściowe neuronów wyjściowych są więc proporcjonalne do estymatorów jądrowych funkcji gęstości prawdopodobieństwa dla różnych klas i po zastosowaniu normalizacji zapewniającej ich sumowanie do jedności stanowią wprost oszacowania prawdopodobieństwa przynależności do poszczególnych klas.
Podstawowy model sieci PNN może być zmodyfikowany na dwa sposoby.
Pierwszy sposób polega na tym, że zmienia się sposób traktowania udziału reprezentacji poszczególnych klas w zbiorze uczącym. Podstawowe podejście zakłada, że udział przedstawicieli poszczególnych klas w zbiorze uczącym jest zgodny z rzeczywistym odsetkiem przypadków zaliczanych do tej klasy w modelowanej populacji (są to tak zwane prawdopodobieństwa a priori). Jeśli prawdopodobieństwo a priori różni się od udziału przypadków należących do danej klasy w ciągu uczącym, to oszacowania rozkładów wyznaczane przez sieć będą także nieprawidłowe. W celu zniwelowania wpływu takich problemów i związanych z nimi dysproporcji można w sieci jawnie wyspecyfikować prawdopodobieństwa a priori (jeśli są one znane), co spowoduje zmianę wartości wag neuronów wyjściowych sieci dla ich wejść odpowiadających neuronom ukrytym poszczególnych klas.
Drugi sposób zmodyfikowania modelu sieci PNN może polegać na odmiennym traktowaniu różnych rodzajów błędów pojawiających się w trakcie uczenia i eksploatacji sieci. Ogólnie wiadomo, że sieć dokonująca estymacji nieznanego rozkładu gęstości prawdopodobieństwa w oparciu o dane zniekształcone przez szumy odtworzy potrzebną funkcję z błędami, w wyniku czego będzie nieuchronnie klasyfikować podawane jej dane w pewnych przypadkach błędnie. Skutek takich błędów jest oczywiście zawsze zdecydowanie niekorzystny, bo jest zawsze rzeczą naganną, jeśli na przykład osoba w rzeczywistości chora zostanie uznana za zdrową. Jednakże pewne rodzaje błędnej klasyfikacji mogą być uznawane za "bardziej kosztowne" niż inne. W takich przypadkach, gdy zachodzi potrzeba zróżnicowania "cen błędów" można wprowadzić do programu procedurę "ważenia" surowych prawdopodobieństw wyznaczonych przez sieć. Dokonuje się tego poprzez zastosowanie w programie specjalnie ustalanych "czynników straty", które odzwierciedlają koszty błędnej klasyfikacji - ewentualnie różne w przypadku różnych możliwych typów błędów. W STATISTICA Neural Networks PL w sieci PNN można w tym celu zdefiniować formalnie dodatkową, czwartą warstwę sieci, która zawiera macierz zadawanych przez użytkownika strat wiązanych z poszczególnymi rodzajami błędów.
Na marginesie tych rozważań warto wspomnieć, że omówiona wyżej macierz strat, typowo rozważana w kontekście bayesowskich metod rozpoznawania i podejmowania decyzji, może również być w STATISTICA Neural Networks PL dołączona do innych typów sieci klasyfikujących, co stwarza bardzo ciekawe możliwości wzbogacania ich działania o czynnik różnicowania cen różnych decyzji.
Sieci neuronowe realizujące regresję uogólnioną (GRNN)
Sieci neuronowe realizujące regresję uogólnioną (sieci GRNN - Generalized regression neural networks) pracują w sposób podobny do sieci PNN, ale służą do rozwiązywania zadań o charakterze regresyjnym, a nie klasyfikacyjnym. Podobnie jak w sieciach PNN, gaussowskie funkcje jądrowe są lokowane w tej sieci w poszczególnych neuronach warstwy ukrytej w taki sposób, że dla każdego przypadku uczącego jest dostępny neuron, który "rozpina" ponad tym przypadkiem "dzwon" odpowiedniej funkcji gaussowskiej.
Metoda budowy przez sieć potrzebnej funkcji regresji polega na tym, że każdy przypadek zbioru uczącego może być rozważany jako "dowód" tego, że powierzchnia budowanej odpowiedzi sieci ma w tym punkcie przestrzeni wejść pewną ustaloną wysokość. Ten lokalny (punktowy) dowód jest następnie przez sieć rozmywany na okoliczne punkty przestrzeni sygnałów wejściowych, z progresywnie zmniejszającą się pewnością występowania podanej wartości - maksymalną w bezpośrednim sąsiedztwie punktu o lokalizacji wynikającej z ciągu uczącego i szybko malejącą przy oddalaniu się od niego.
Działanie sieci GRNN polega na tym, że przypadki uczące, przekopiowane do neuronów warstwy ukrytej sieci, służą do estymacji odpowiedzi sieci, zarówno dla samych punktów zbioru uczącego, jak i dla nowych punktów, które w zbiorze uczącym wcale nie występowały. Wartość wyjściowa dla tych nowych punktów jest szacowana przez sieć przy wykorzystaniu ważonej średniej wyjść dla przypadków uczących, gdzie wagi są uzależnione od odległości poszczególnych punktów uczących od punktu, dla którego przeprowadza się szacowanie.
Pierwsza warstwa ukryta w sieci GRNN zawiera tylko neurony radialne. Druga warstwa ukryta zawiera neurony pomagające oszacować średnią ważoną z wyjść neuronów poprzedniej warstwy. Stosowana jest przy tym specjalna procedura. Każdy neuron wyjściowy posiada w tej warstwie swój odpowiednik, który wyznacza ważoną sumę dla odpowiadającego wyjścia. Aby uzyskać ważoną średnią z ważonej sumy, ważona suma musi zostać podzielona przez sumę współczynników wagowych. Brzmi to w sposób skomplikowany, ale zasadniczy pomysł jest w miarę prosty. Pojedynczy, specjalizowany neuron w drugiej warstwie ukrytej wyznacza wartość ważonej sumy swoich wejść. Z kolei warstwa wyjściowa realizuje w rzeczywistości operację dzielenia (korzystając ze specjalizowanych neuronów realizujących operację dzielenia) w celu dokonania wymaganej normalizacji. Wynika z tego, że druga warstwa ukryta posiada zawsze dokładnie o jeden neuron więcej niż warstwa wyjściowa. W typowych problemach regresyjnych szacowana jest najczęściej jedna wartość wyjściowa, co powoduje, że druga warstwa ukryta posiada zwykle dwa neurony.
Sieci liniowe
Ogólna zasada stosowana w nauce głosi, że w przypadku, gdy istnieje możliwość wyboru pomiędzy modelem prostym i bardziej złożonym, należy zawsze preferować model prostszy - o ile oczywiście ten drugi nie dopasowuje się znacznie lepiej do posiadanych danych. Stosując terminy charakterystyczne dla aproksymacji funkcji, można stwierdzić, że najprostszym modelem aproksymującym matematycznie pewną zaobserwowaną praktyczną zależność jest model liniowy. W modelu takim funkcją dopasowywaną do posiadanych danych jest zawsze hiperpłaszczyzna, a zadanie polega na znalezieniu właściwego położenia i właściwego nachylenia tej hiper-płaszczyzny. W problemach klasyfikacyjnych wspomniana hiperpłaszczyzna jest umieszczana w takiej pozycji, aby oddzielać od siebie dwie rozważane klasy. Działa ona wtedy jako liniowa funkcja dyskryminująca. Z kolei w zagadnieniach regresyjnych umieszczana jest ona w taki sposób, aby dobrze reprezentowała generalną tendencję reprezentowaną przez dane, chociaż precyzyjne dopasowanie hiperpłaszczyzny do wszystkich subtelności zawartych w zgromadzonych danych jest zwykle raczej trudne, ze względu na sztywność jej formy, zarówno jako formuły matematycznej, jak i jako formy geometrycznej. Model liniowy jest zwykle reprezentowany przy użyciu macierzy współczynników kierunkowych o wymiarach N x N (ustalających położenie hiperpłaszczyzn tworzących model) i wektora wyrazów wolnych o wymiarach N x 1, definiującego przesunięcia hiperpłaszczyzn w stosunku do początku układu współrzędnych.
Stosując terminologię związaną z sieciami neuronowymi, można stwierdzić, że model liniowy jest reprezentowany przez sieć nie posiadającą warstw ukrytych, zaś znajdujące się w warstwie wyjściowej neurony są w pełni liniowe (tzn. są to neurony, w których łączne pobudzenie wyznaczane jest jako liniowa kombinacja wartości wejściowych i które posiadają liniową funkcję aktywacji). Wagi neuronów odpowiadają wzmiankowanej wyżej macierzy, zaś wartości progowe neuronów - wektorowi wyrazów wolnych. W trakcie działania sieci wykonywana jest operacja mnożenia wejść przez macierz wag, a następnie do uzyskanego wyniku dodawany jest wektor wyrazów wolnych, co łącznie tworzy wektor sygnałów wyjściowych.
Sieci Kohonena
Sieci Kohonena stosowane są całkowicie odmiennie niż wszystkie inne sieci dostępne w STATISTICA Neural Networks PL. Podczas gdy wszystkie inne sieci zostały zaprojektowane z myślą o uczeniu w trybie z nauczycielem, to sieć Kohonena została zaprojektowana w pierwszym rzędzie do uczenia się w trybie bez nauczyciela.
Podczas gdy w uczeniu z nauczycielem dane uczące zawierają przypadki opisujące zarówno zmienne wejściowe, jak i zmienne wyjściowe, to w uczeniu bez nauczyciela pojawiają się wyłącznie przypadki obejmujące same tylko zmienne wejściowe. Przy uczeniu z nauczycielem istota procesu uczenia polega na tym, że dane wejściowe są prezentowane w powiązaniu ze zmiennymi wyjściowymi i sieć musi nauczyć się związku istniejącego pomiędzy wejściami a wyjściami, natomiast w uczeniu bez nauczyciela dane uczące, zawierające wyłącznie zmienne wejściowe, pozwalają na wykrycie i wykorzystanie w procesie uczenia pewnych cech zawartych w sposób ukryty w danych (na przykład ich wzajemnego podobieństwa), nie ma natomiast z góry zdefiniowanego sygnału wyjściowego, oczekiwanego jako pożądana i oczekiwana reakcja sieci.
Na pierwszy rzut oka może to wyglądać dziwnie. Czego może nauczyć się sieć, w przypadku, gdy nie są znane pożądane wyjścia? Odpowiedź jest następująca: sieć Kohonena próbuje nauczyć się struktury danych. W związku z tym jednym z możliwych zastosowań sieci tego typu jest eksploracyjna analiza danych. Sieć Kohonena może się nauczyć na przykład rozpoznawania skupień występujących w wejściowych danych i może równocześnie nauczyć się kojarzenia podobnych klas danych - bez względu na to, jakie są kryteria podobieństwa danych (być może nawet nieznane a priori twórcy algorytmu), a także bez względu na to, ile ich jest.
Sieć Kohonena posiada tylko dwie warstwy: warstwę wejściową oraz warstwę wyjściową, składającą się z neuronów radialnych. Warstwa ta znana jest również jako warstwa tworząca mapę topologiczną, ponieważ takie jest jej najczęstsze zastosowanie. Neurony w warstwie tworzącej mapę topologiczną są rozważane w taki sposób, jakby były rozmieszczone w przestrzeni według jakiegoś ustalonego wzoru - zwykle wyobrażamy je sobie jako węzły dwuwymiarowej siatki o kwadratowych oczkach - chociaż STATISTICA Neural Networks PL umożliwia również tworzenie jednowymiarowych sieci Kohonena w postaci długich łańcuchów.
Sieci Kohonena uczone są przy wykorzystaniu algorytmu iteracyjnego. Rozpoczynając od początkowych, wybranych w sposób losowy centrów radialnych, algorytm stopniowo modyfikuje je w taki sposób, aby odzwierciedlić skupienia występujące w danych uczących. Występuje tutaj pewne podobieństwo do metod powtórnego próbkowania i metody k-średnich, które używane są do ustalania centrów w sieciach RBF i sieciach GRNN; i rzeczywiście algorytm Kohonena może być użyty do wyznaczenia centrów dla tych typów sieci. Jednakże algorytm ten może być wykorzystany również w inny sposób - i to jest jego główne zastosowanie. W tym podstawowym zastosowaniu iteracyjna procedura ucząca dodatkowo porządkuje neurony w taki sposób, że neurony reprezentujące centra położone blisko siebie w przestrzeni wejść są również usytuowane blisko siebie na mapie topologicznej.
Prognozowanie szeregów czasowych
Celem analizy szeregów czasowych jest ustalenie prognozy przyszłych wartości pewnej zmiennej (o wartościach zmieniających się w czasie). Najczęściej dążymy do obliczenia prognozy, korzystając z wcześniejszych wartości tej samej zmiennej, której wartość ma być przewidywana i/lub innych zmiennych, o których sądzimy, że mają wpływ na badaną zmienną.
Zwykle prognozowana zmienna jest ciągła, tak więc prognozowanie szeregów czasowych jest zwykle specjalizowaną formą regresji. Jednakże nie jest to wbudowane w STATISTICA Neural Networks PL jako sztywne ograniczenie, więc możliwe jest również prognozowanie szeregów czasowych w postaci ewoluujących w czasie zmiennych nominalnych. W tym ostatnim przypadku celem naszych prac jest zmienna, podlegająca prognozowaniu, klasyfikacja.
Zwykle prognozuje się następną wartość szeregu na podstawie określonej liczby wartości poprzedzających. W takim przypadku chodzi o wyznaczanie wartości oddalonej w czasie o jeden krok do przodu, jednak nic nie przeszkadza w podobny sposób rozważać proces prognoz długookresowych. STATISTICA Neural Networks PL może wyznaczać wartości oddalone o dowolną liczbę kroków, jednak praktyka pokazuje, że prognozy długookresowe są mniej pewne, a przez to mniej przydatne niż prognozy dotyczące najbliższego (następnego) interwału czasowego.
Wybór zmiennych oraz redukcja liczby wymiarów
W poprzedniej części przyjęto założenie, że warstwy wejściowa i wyjściowa sieci są ustalone; to znaczy, że z góry wiemy, jakie zmienne stanowić będą wejścia do sieci i jakie są w niej oczekiwane wartości wyjściowe. Istotnie, te drugie są zawsze znane, gdyż samo sformułowanie zadania dla sieci jednoznacznie wskazuje, czego od niej oczekujemy. Nieco ostrożniej można tę tezę sformułować w taki sposób, że przynajmniej w tych zagadnieniach, w których stosuje się uczenie z nauczycielem, nie powinno być wątpliwości, jakie sygnały pojawiają się na wyjściu sieci, ponieważ nauczyciel musi podawać dla tych sygnałów wyjściowych wzorce ich poprawnych wartości. Natomiast wybór zmiennych wejściowych dla sieci jest o wiele trudniejszy, a sformułowane zadanie często pozostawia w tym zakresie sporą dowolność.
Istota problemu polega na tym, że budując sieć, często nie wiemy, jaki zestaw (spośród wielu kandydujących zmiennych wejściowych) jest w rzeczywistości użyteczny dla skutecznego wyznaczania przez sieć potrzebnej wartości wyjściowej. Wybór dobrego zbioru wejść jest dodatkowo utrudniony z uwagi na konieczność rozważenia licznych, istotnych przesłanek:
| Powrót do spisu treści | ||||
W odpowiedzi na bardzo duże zainteresowanie tematyką sieci neuronowych i programem STATISTICA Neural Networks przygotowaliśmy dla Państwa polską wersję: STATISTICA Neural Networks PL. Program został całkowicie spolonizowany: interfejs użytkownika, pomoc elektroniczna (także pomoc elektroniczna na temat interfejsu programistycznego API) oraz dokumentacja. Polska wersja STATISTICA Neural Networks pozwoli nie tylko na wykorzystywanie nowoczesnych technik sieci neuronowych przez osoby, dla których barierą był język środowiska programu (szczególnie niewystarczająca znajomość specjalistycznej terminologii), ale także na pełniejsze i wygodniejsze wykorzystywanie możliwości programu przez dotychczasowych użytkowników programu w wersji angielskiej.
Polska wersja STATISTICA Neural Networks przygotowana została przez StatSoft Polska; podporami zespołu lokalizującego byli:
| Powrót do spisu treści | ||||
Podstawy pracy w STATISTICA Neural Networks PL
Środowisko użytkownika
STATISTICA Neural Networks PL ma charakterystyczne dla programów Windows środowisko użytkownika, dzięki czemu nawet początkujący użytkownicy nie mają najmniejszych problemów z jego obsługą. To co należy podkreślić to fakt, że program nie wymaga żadnych umiejętności programistycznych, choć osoby umiejące programować mogą skorzystać z interfejsu programistycznego API i wbudować we własne aplikacje algorytmy z programu STATISTICA Neural Networks PL.
Każda zmienna może zostać określona jako:
, wówczas STATISTICA Neural Networks PL zaproponuje typowe ustawienia dla bieżącego zbioru danych. Program zaproponuje tyle zmiennych wejściowych i wyjściowych ile jest zdefiniowanych w zbiorze danych z uwzględnieniem ew. kodowania zmiennych nominalnych. Tak utworzoną sieć można teraz dodać do zbioru danych lub zastąpić nią jedną z istniejących sieci.
Należy zwrócić uwagę, że pomimo iż tworzenie istniejącej sieci jest naprawdę trywialne, w praktyce lepszym rozwiązaniem jest zazwyczaj skorzystanie z Automatycznego projektanta sieci, który nie tylko zaproponuje nam wiele sieci dla danego problemu z automatycznie dobranymi parametrami, ale także wstępnie będzie je uczył i oceniał efektywność rozwiązania, a nawet poszuka optymalnego podzbioru zmiennych wejściowych.
Automatyczny projektant sieci
Automatyczny projektant sieci jest wyjątkowo użytecznym narzędziem, które wyręcza użytkownika w najbardziej żmudnym i pracochłonnym etapie konstruowania sieci neuronowych - testowaniu i wyborze różnych modeli. Automatyczny projektant sieci konstruuje i wstępnie ocenia zadane przez użytkownika architektury sieci neuronowych, przy różnych zestawach zmiennych wejściowych. Niektórych może dziwić fakt, że program dokonuje także selekcji zmiennych wejściowych, jednak szczególnie przy dużej ilości danych zmniejszenie ilości zmiennych wejściowych (np. pominięcie redundantnych danych) istotnie upraszcza model pozwalając na łatwiejsze nauczenie sieci. Bardzo często w rzeczywistych zastosowaniach cechy opisujące obiekty są ze sobą powiązane. W STATISTICA Neural Networks PL dostępne są także inne narzędzia służące do wyboru podzbioru zmiennych, np. oparte na algorytmach genetycznych czy krokowa metoda doboru zmiennych.
Proces uczenia i ocena wyników
Podczas procesu uczenia sieci użytkownik STATISTICA Neural Networks PL musi tylko wybrać jeden z dostępnych algorytmów i ewentualnie zmienić domyślne parametry uczenia. W większości typowych zastosowań domyślne parametry nie wymagają modyfikacji i doskonale się sprawdzają. W przypadku zmiany domyślnych ustawień niezbędna jest zazwyczaj znajomość danej metody.
Rys. 14. Wykres błędów dla poszczególnych przypadków zbioru danych
Automatyczny projektant sieci oraz zbiory sieci - najszybszy sposób konstruowania efektywnego rozwiązania
Narzędzia które najbardziej usprawniają pracę przy konstruowania efektywnych sieci neuronowych to Automatyczny projektant sieci oraz zbiory sieci przechowujące różne architektury sieci dla danego problemu. Aby poznać nieco bliżej te narzędzia przygotujmy rozwiązanie jakiegoś prostego problemu. Niech będzie to standardowy przykład (plik danych znajduje się wśród przykładów dostarczanych wraz z programem) oparty na klasycznym pliku danych zawierającym informacje o trzech typach kwiatów Irysa: Versicolor, Virginica i Setosa. Zbiór danych zawiera wyniki pomiarów czterech zmiennych (długość i szerokość listków oraz długość i szerokość płatka). Dane te mają kilka ciekawych właściwości:
Rys. 20. Wyniki działania sieci
| Powrót do spisu treści | ||||
| Poprzedni artykuł | Następny artykuł | |||