Model neuronowy - krok po kroku.

W procesie budowy modelu neuronowego wyróżnić możemy kilka etapów:

1. Określenie prognozowanej zmiennej (wyjściowej, objaśnianej)
Podstawowym pytaniem, które musimy sobie zadać podczas budowania modelu jest, co chcemy prognozować, czy to ma być np. kurs EURUSD, czy stopa bezrobocia w USA. Pytanie to jest o tyle istotne, że wpływa na budowę całego modelu neuronowego i będzie towarzyszyło nam w dalszej części artykułu. Po podjęciu decyzji co chcemy prognozować należy zastanowić się nad charakterem prognozowanych wartości i odpowiedzieć sobie na następujące pytania:
- czy wartość prognozowana ma mieć charakter numeryczny przyjmujący konkretne wartości liczbowe?
- czy wartość prognozy ma mieć charakter binarny przyjmujący wartości zero jedynkowe, gdzie zero może oznaczać spadek kursu, a jedynka wzrost kursu?
- czy wartość prognozy ma mieć charakter procentowej prognozy wzrostu czy spadku waloru, gdzie 10% może oznaczać wzrost o 10%, a -10% spadek od aktualnej ceny rynkowej?
- jaka jest skala czasowa prognozy czy chcemy prognozować przyszłość w z wyprzedzeniem minutowym, godzinnym, czy też dni, tygodnie

2. Określenie zmiennych uczących (wejściowych, objaśniających)
Wybór odpowiednich zmiennych wejściowych jest równie istotny jak wybór zmiennej przewidywanej. Wyobraźmy sobie najprostszą sytuacje w której decydujemy się na zastosowanie jednej zmiennej wejściowej np. tego samego kursu EURUSD który próbujemy szacować na wyjściu z tym że na wejście sieci podamy sygnały z poprzedniego dnia. W tej sytuacji oczekujemy aby sieć przetwarzała informacje według algorytmu z jedną zmienną, od razu powiem że takie przekształcenie możemy zrobić z wykorzystaniem prostego algorytmu matematycznego, a zadawanie takich obliczeń sieci neuronowej nie ma najmniejszego sensu. Wyobraźmy sobie drugą sytuacje na wejście sieci podajemy 250 zmiennych objaśniających np. wskaźniki analizy technicznej lub kurs EURUSD, z czego każde wejście to wartość przesunięta o 1 kolejny dzień wstecz (250 dni wstecz). Można powiedzieć że jest to bardziej sensowne rozwiązanie z punktu widzenia sieci neuronowej, ale czy prawidłowe i skuteczne. Sieci mają właściwości autoasocjacji, dzięki czemu automatycznie mogą ignorować sygnały nie istotne nie zmienia to jednak faktu, że jeśli będziemy mieli 250 wejść, z czego 100 będzie istotnych, a 150 mniej istotnych mamy prawidłowy model neuronowy. Każde wejście nawet mniej istotne obarczone jest pewnym błędem który po zsumowaniu daje wartości zakłócające funkcjonowanie całej sieci dlatego bardzo istotny jest dobór odpowiednich zmiennych wejściowych. Do prawidłowego doboru zmiennych wejściowych stosuje się najczęściej niezależne metody od sieci neuronowej np. metodę badania korelacji poszczególnych wejść z wyjściem i odrzucenie nieskorelowanych zmiennych, równie dobrze można posłużyć się metodami logiki rozmytej lub metodami empirycznymi gdzie najczęstsze zastosowanie maja metoda konstruktywna i destruktywna. Innym problemem jest kwestia danych ilościowych i jakościowych gdzie trudno jest porównywać i wykorzystywać do nauki sieci dane ciągłe ilościowe powszechnie dostępne w analizie technicznej z danymi niesystematycznymi, jakościowymi takimi jak wskaźniki analizy fundamentalnej.

3. Wstępne przetwarzanie danych
Różnorodny charakter potencjalnych danych wejściowych służących do nauki sieci neuronowej sprawia, że nawet przy wybraniu najbardziej skorelowanych zmiennych wejściowych ze zmienną prognozowaną nie daje nam pewności co do trafności wyboru zmiennych wejściowych. Każda zmienna obarczona jest pewnym błędem, który w tak skomplikowanym i nieprzejrzystym w swym działaniu modelu neuronowym uniemożliwia osiągnięcie prawidłowych wyników dlatego stosuje się wstępne przetwarzanie danych mające na celu lepsze dostosowanie danych do wymogów sieci neuronowej. Do podstawowych i niepożądanych czynników dla sieci neuronowych należą trendy oraz zmienności sezonowe. Na pewno zdziwi to każdego tradera, który uwielbia trendy wzrostowe, ponieważ wtedy może zarabiać pieniądze, ale sieci neuronowe wręcz przeciwnie nie lubią trendów i zmienności sezonowych, które wprowadzają dodatkowe zakłócenia w nauce sieci, dlatego opracowano specjalne algorytmu niwelujące trendy i zmienności. Innym powodem potrzeby wstępnego przetwarzania danych jest konieczność dopasowania się do zakresu działania algorytmów obliczeniowych sieci neuronowej, gdzie stosuje się funkcje przejściowe sigmoidalne działające w zakresie 0 do 1 oraz tangensoidalne działające w zakresie -1 do 1.

4. Wyodrębnienie zbiorów uczących i testujących
Po wyodrębnieniu bardziej istotnych zmiennych wejściowych oraz wstępnym przetworzeniu powinniśmy zastanowić się ile zmiennych potrzebujemy do prawidłowej nauki sieci oraz jak prezentujemy zmienne podczas nauki. Zauważmy, że jeśli podamy sieci dane z jednego dnia i będziemy oczekiwali prawidłowego szacowania kursów w przyszłości to tak jak byśmy kazali doradcy inwestycyjnemu oszacować, jaki będzie kurs w najbliższym czasie na podstawi danych jednodniowych. Sprytny doradca powie kurs wzrośnie, ale może też spaść i tyle samo powie nam sieć neuronowa. Doświadczenia mówią, że na każde wejście powinno przypadać co najmniej seria 10 próbek uczących, gdzie jedna próbka ucząca zawiera po jednej wartości dla każdego wejścia sieci czyli posiadając 10 wejść sieci potrzebujemy 100 próbek uczących posiadając sieć o 250 wejściach potrzebujemy 2500 próbek uczących co daje nam 625000 niezależnych wartości uczących.

Zbiór uczący jest zestawem danych historycznych, w których mogą znaleźć się po pierwsze dane tak odległe, że nie są już istotne w aktualnej sytuacji z drugiej strony wśród tych danych mogą występować pewne anomalie zakłócające prawidłową naukę takie jak publikowane informacje fundamentalne, informacje polityczne, które stanowią chwilowe zaburzenia widoczne zarówno na wykresie kursu jak i wpływające niekorzystnie na proces uczenia sieci.

5. Wybór odpowiedniej architektury sieci
Architektura sieci to odpowiednio dobrana ilość wejść sieci, ilość wyjść, ilość warstw i liczba neuronów w warstwach oraz dobór odpowiednich funkcji przejściowych występujących w każdym z neuronów. Uwzględniając architekturę wyróżnić można wiele rodzajów sieci w śród których należy powiedzieć o sieciach samoorganizująących się, rekurencyjnych, probabilistycznych, o bazowych funkcjach radialnych, sieciach liniowych, ale my powinniśmy koncentrować się na sieciach jednokierunkowych wielowarstwowych, które ze względu na swą budowa oraz własności aproksymacyjne znalazły zastosowanie w prognozowaniu szeregów czasowych. Kolejną rzeczą, którą musimy wyznaczyć w modelu to ilość warstw, która najczęściej wynosi od trzech do czterech włączając w to warstwę wejściową i wyjściową. Odpowiedź na pytanie ile neuronów wejściowych oraz ile neuronów wyjściowych oszacowaliśmy już na pierwszych etapach budowy modelu, ponieważ liczba neuronów w warstwie wejściowej (pierwszej warstwie) równa jest liczbie wyznaczonych wejść, a ilość neuronów wyjściowych równa jest liczbie wyjść sieci. Natomiast do wyznaczenia ilości neuronów w warstwach ukrytych możemy posłużyć się wzorami na obliczanie postępu geometrycznego.

6. Wybór odpowiedniego algorytmu uczenia
Jest to chyba najprostsza decyzja, którą musimy podjąć przy projektowaniu sieci, ponieważ do nauki możemy zastosować dowolny algorytm uczący przystosowany do danego typu architektury sieci. Sam algorytm uczenia sieci nie wpływa na zdolności i możliwości prognozowania wartości wpływa natomiast istotnie na szybkość uczenia oraz możliwości zatrzymywania nauki w minimach lokalnych dając złudzenie zakończenia procesu uczenia.

Wśród algorytmów uczących najczęściej wykorzystywana jest wsteczna propagacja błędu, oprócz tego można wykorzystać metody delta-bar, gradient sprzężony, Quasi-Newton, Levenberg-Marquard.

7. Uczenie i testowanie
Proces uczenia polega na ciągłym pokazywaniu, zadawaniu na wszystkich wejściach wartości próbki uczącej, a na wyjściu (metoda nauki z tak zwanym nauczycielem) danych, które chcemy prognozować np. kurs waluty z wyprzedzeniem jednodniowym. Prezentacji danych dokonujemy iteracyjnie do czasu, kiedy sieć nie wskaże nam satysfakcjonującego rezultatu nauki (minimalnej wartości błędu nauki sprawdzonego na danych testowych). Nie bez znaczenie jest odpowiedni dobór prezentacji zmiennych podczas uczenia, gdzie możemy pokazywać dane od najbardziej odległych do najbliższych w czasie lub dokonywać losowego prezentowania danych uczących. Ocena skuteczności działania polega na przetestowani danych na zbiorze danych testowych, który powinniśmy wyznaczyć, przy czym zaleca się nie stosowanie do testów tych samych próbek danych, które były wykorzystywane podczas nauk.

8. Zastosowanie
Po opracowaniu architektury sieci oraz zakończeniu nauki przy otrzymaniu satysfakcjonującego rezultatu możemy przystąpić do wykorzystania sieci w praktyce co polega na zadawaniu na wejścia sieci aktualnych danych zgodnych ze wcześniejszym wyborem zmiennych wejściowych (objaśniających) i oczekiwaniu rezultatu prognozy na wyjściu.

 

Podsumowując...

Podczas projektowanie modelu sieci neuronowej musimy odpowiedzieć sobie na szereg pytań, z których każde ma znaczenie, jest powiązane i wpływa na pozostałe parametry modelu. Wybierając zmienną prognozowaną (wyjściową, objaśnianą) musimy zdecydować, co chcemy prognozować w jakie skali czasowej i jaki format ma przyjmować prognozowana wartość. Zapewne każdy inwestor chciałby otrzymać dokładną prognozę w postaci wartości liczbowej z dokładnością do 1 pipsa, w przedziale czasowym co do jednej minuty, a nawet ticku. W tym miejscu muszę ostudzić co niejednego gracza ponieważ sztuczne sieci neuronowe z samej swej natury nie potrafią być precyzyjne, a jedynie szacują wartości prognozowane. Wybierając wartości, którą chcemy prognozować musimy dokonać wyboru odpowiednich zmiennych wejściowych sieci oraz odpowiednio je przetwarzać w celu dopasowania do możliwości sieci neuronowej. Wybór architektury sieci oraz metoda nauki wpływa na dalsze możliwości adaptacyjne i skuteczność prognozowania. Większość czytelników na pewno już zauważyła jak skomplikowany jest proces budowy oraz sam model neuronowy, który nie potrafi precyzyjnie określić wartości. Pytanie nasuwa się samo - po co zadawać sobie tyle trudu na budowę takiego modelu? Odpowiedź jest prosta, gdyż sieci neuronowe należą do działu sztucznej inteligencji bazującego na zdolnościach biologicznych mózgu ludzkiego, a jak wiadomo działania człowieka nie da się opisać wprost zwykłymi wzorami matematycznymi dlatego też same sieci neuronowe po mimo wykorzystywania w swych obszarach funkcji matematycznych stanowią w całości niekonwencjonalny algorytm obliczeniowy i stąd te przybliżone wyniki obliczeniowe. Główną zaletą, której nie posiadają inne techniki obliczeniowe takie jak wskaźniki analizy technicznej, funkcje matematyczne, statystyczne czy nawet modele ekonometryczne jest to, że sieć neuronowa potrafi dokonywać obliczeń na funkcjach wielowymiarowych, czyli obliczyć wartość wyjściową na podstawie bardzo dużej liczby zmiennych. Inaczej mówiąc potrafi dokonać obliczeń i znaleźć prawidłową wartość (przybliżoną) np. dla 50 wskaźników analizy technicznej, które opisują kurs waloru.

 

Marcin Michalczyk

Używamy informacji zapisanych za pomocą cookies w celu dostosowania naszych serwisów do indywidualnych potrzeb użytkowników. Więcej… Zgadzam się i akceptuję