Wykorzystanie algorytmów sieci neuronowych w aplikacjach
Transkrypt
Wykorzystanie algorytmów sieci neuronowych w aplikacjach
V Konferencja PLOUG Zakopane Październik 1999 Wykorzystanie algorytmów sieci neuronowych w aplikacjach bazy danych Oracle Andrzej Łukianiuk e-mail: [email protected] PIW Postinfo, ul. Świętokrzyska 36 m.48, 00-116 Warszawa Bartłomiej Beliczyński e-mail: bbeliczyń[email protected] Politechnika Warszawska, Instytut Sterowania i Elektroniki Przemysłowej, ul. Koszykowa 75, 00-662 Warszawa Autorzy: Mgr inż. Andrzej Łukaniuk – analityk, projektant systemów informatycznych dla telekomunikacji. Dr inż. Bartłomiej Beliczyński – adiunkt na Wydziale Elektrycznym Politechniki Warszawskiej. Główne obszary zainteresowania: modelowanie układów dynamicznych, sieci neuronowe. Streszczenie W referacie omówiono sposób dołączenia do systemu Oracle i wykorzystania efektywnego zewnętrznego pakietu neuronowego do aproksymacji dynamiki układu reprezentowanego za pomocą danych zawartych w bazie. Zaprezentowano sposób jego użycia na przykładzie danych telekomunikacyjnych. 1 Wprowadzenie Dla wielu zjawisk ze współczesnej nauki, techniki, ekonomii, biologii nieznane są fenomenologiczne modele matematyczne, dla wielu istniejących modeli, rozwiązania interesujące użytkownika są nieznane lub ich wyznaczanie z trudem poddaje się procesowi algorytmizacji. Wymienić tu trzeba problemy klasyfikacji, rozpoznawania, aproksymacji i optymalizacji. Z niektórymi zagadnieniami tego typu radzą sobie natomiast znakomicie struktury obliczeniowe oparte na wielokrotnie powtórzonym prostym elemencie – inspirowanym biologicznie sztucznym neuronie. Piękno idei sieci neuronowych, opracowanie ich podstaw teoretycznych a następnie sukcesy różnorodnych zastosowań sprawiły, że obliczenia neuronowe stały się powszechnie uznaną techniką. Z biologii i psychologii pozostały terminy takie jak "neuron", "uczenie", „uczenie na przykładach”, „generalizacja” itp., które nabrały nowego bardzo technicznego znaczenia. Wiele opracowywanych współcześnie pakietów obróbki danych posiada opcje neuronowe. Ogromne ilości danych są przechowywane w bazach danych i nie są to tylko proste dane ewidencyjne, ale często także obrazy i dźwięki. Samo ich udostępnianie przestaje być wystarczające. Całkiem naturalne są potrzeby ich syntezy i zaawansowanego przetwarzania. Właśnie algorytmy wykorzystujące architekturę sieci neuronowych mogą stanowić podstawę dodatkowej funkcjonalności aplikacji bazodanowych. System Oracle pozwala na podłączanie zewnętrznych procedur, które mogą być napisane w języku C, a następnie w postaci dynamicznie linkowanej biblioteki dołączone do serwera i używane tak jak inne procedury wbudowane PL/SQL’a. Stwarza to możliwości zastosowania dowolnie skomplikowanego algorytmu, w szczególności wykorzystującego operacje macierzowe czy optymalizację. Byłoby to dość niezręczne w języku PL/SQL, a jeszcze nie dość efektywne w języku Java. Artykuł dotyczy jednego z obszarów zastosowań algorytmów neuronowych w aplikacjach bazodanowych, t.j. aproksymacji funkcji i dynamiki systemu. Aproksymacja funkcji jest dziedziną, w której podstawy teoretyczne sieci neuronowych są w miarę dobrze ugruntowane i gdzie opracowano efektywne algorytmy obliczeniowe. Jest ona potrzebna również przy modelowaniu systemów dynamicznych, w predykcji lub sterowaniu. Coraz powszechniejsze są systemy hurtowni danych, gromadzące dane historyczne opisujące działalność firmy, zachowania jej klientów itp. Można na ich podstawie, wykorzystując sieci neuronowe, konstruować nieliniowe modele dynamiczne służące do klasyfikacji, prognozowania i inne. W niniejszym artykule zaprezentujemy elementy konstrukcji zewnętrznego pakietu neuronowego do aproksymacji dynamiki systemu i jego dołączenie do Oracle'a .Jako ilustracja omawianych zagadnień podany zostanie przykład obliczeniowy, w którym przedstawiono prognozę wykorzystywania telefonu przez statystycznego jego użytkownika w zależności od wysokości opłaty za minutę rozmowy i poziomu inflacji. Ramy tego przykładu są typowe dla operatora telekomunikacyjnego, jednak użyte dane są hipotetyczne. Niniejszy artykuł jest zorganizowany następująco. W punkcie 2 scharakteryzujemy krótko wymagania obliczeniowe dla struktur neuronowych i uzasadnimy potrzebę użycia zewnętrznych względem Oracle’a procedur. W punkcie 3 zasygnalizujemy sposób tworzenia i wykorzystania procedur oraz towarzyszące temu ograniczenia. Punkty 4 i 5 zawierają informacje o aproksymacji funkcji za pomocą sieci neuronowej i aproksymacji dynamiki systemu. W punkcie 6 scharakteryzujemy stworzony przez nas pakiet do aproksymacji systemu dynamicznego, a w punkcie 7 zademonstrujemy przykładowe jego wykorzystanie. Punkt 8 zawiera uwagi końcowe i wnioski. 2 2 Potrzeba zewnętrznych obliczeń neuronowych Proste przetwarzanie danych obejmujące elementarne operacje algebraiczne, czy nawet pewną obróbką statystyczną, może dokonać się w bazie danych. Jednak omawiane tu algorytmy neuronowe wymagają szeregu zaawansowanych procedur matematycznych takich jak operacje algebry macierzowo-wektorowej z dynamicznie deklarowanymi wymiarami, minimalizacje funkcji wielu zmiennych, rozkład macierzy względem wartości szczególnych itp. Niezbędne staje się posiadanie bądź to odpowiedniego pakietu specjalistycznego, bądź zestawu procedur ze zbioru „Numerical receipts”. 3 Zewnętrzne procedury w Oracle’u, rozszerzenie funkcjonalności serwera Oracle 8.x umożliwia z poziomu PL/SQL korzystanie z zewnętrznych procedur napisanych w języku 3GL np. języku C, tworzących dynamicznie linkowaną bibliotekę („DLL”, „shared objects”). Procedury te odpowiednio zarejestrowane mogą być następnie używane tak jak inne procedury składowane serwera. Pozwala to w sposób stosunkowo nieskomplikowany rozszerzać funkcjonalność serwera o obliczenia numeryczne np. FFT, sprzęganie z obiektami zewnętrznymi, wykonywanie skomplikowanych przetwarzań i operacji np. animacji. Zasady tworzenia i dołączania procedur zewnętrznych do serwera są bardzo dobrze opisane w dokumentacji [6], toteż w referacie tym ograniczymy się tylko do ich krótkiej prezentacji, ilustrującej tylko skalę trudności do pokonania. Oto czynności, które należy wykonać podłączając zewnętrzną procedurę : • • • • utworzenie procedury w dowolnym języku, która musi wywoływalna z poziomu języka C, utworzenie dynamicznie linkowanej biblioteki w sposób odpowiedni dla używanego języka, kompilatora i systemu operacyjnego, skonfigurowanie środowiska serwera, w szczególności tnsnames.ora oraz listener.ora, utworzenie biblioteki skojarzonej z DLL poprzez instrukcję CREATE LIBRARY, np. CREATE LIBRARY mojedll as ‘/lib/moje.dll’ • zarejestrowanie zewnętrznej procedury jako procedury PL/SQL , tak jak innych procedur składowanych, ale bez ciała procedury tylko z odpowiednią klauzulą EXTERNAL, np. CREATE FUNCTION ext_fun( x IN BINARY_INTEGER, y IN VARCHAR2) RETURN BINARY_INTEGER AS EXTERNAL LIBRARY mojedll NAME „fun” LANGUAGE C; /* funkcja int fun(int x, char* y) j•zyka C umieszczona w bibliotece dynamicznie linkowanej */ • wywoływanie funkcji ext_minim tak jak innych funkcji PL/SQL np.: a:=ext_minim(b,c) Najbardziej istotne elementy, na które należy zwrócić uwagę to określenie kolejności i typów parametrów oraz obsługa błędów. Sposoby przekazywania parametrów, mapowania typów oraz zasady korzystania z interfejsu OCI (Oracle Call Interface) nie powinny nastręczać większych trudności. Problem jednakże, który autorzy mieli do pokonania, to przekazywanie tablic (wektorów danych - macierzy) jako parametrów, nie wspierane w używanej wersji systemu. Struktury macierzowe są bardzo charakterystyczne dla rozwiązywanego zagadnienia. Zdecydowano się na dekodowanie wartości binarnych 3 elementów macierzy i przekazywanie ich jako odpowiednio zorganizowanego łańcucha znakowego. Korzyści ze stosowania zewnętrznych procedur wynikają z dwóch czynników. Po pierwsze wiele algorytmów nie może być w sposób efektywny zakodowanych, a następnie uruchomionych i przetestowanych w PL/SQL ani nawet w Javie, jeżeli brać pod uwagę serwer 8i. Po drugie zachowane są wszystkie zalety składowanych procedur - wydajność, dostępność i zarządzanie nimi. 4 Sieci neuronowe jako uniwersalne aproksymatory funkcji W wielu zastosowaniach występuje potrzeba aproksymacji funkcji, dla której znamy tylko skończoną liczbę realizacji zwanych "przykładami". Jest to zagadnienie wyraźnie różne od tradycyjnych zadań aproksymacji, gdzie znana, ale nieimplentowalna funkcja jest przybliżana za pomocą innych funkcji (np. przy projektowaniu filtrów). Przykłady są więc kolumnami liczb umieszczonymi w plikach czy tablicach bazy danych. Zadaniem aproksymacji jest wyznaczenie wartości funkcji dla wartości zmiennych niezależnych nie występujących w przykładach. Aproksymowana funkcja jest z reguły funkcją wielu zmiennych i tradycyjne metody bądź nie mogą być zastosowane, bądź stają się bardzo nieefektywne. Koncepcja sieci neuronowych jest tu znakomitą ofertą. Matematycznie, aproksymacja funkcji za pomocą sieci neuronowych może być uważana za aproksymację w przestrzeniach ze zmiennymi, adaptacyjnie dobieranymi bazami. Bazy przestrzeni aproksymującej dobiera się do aproksymowanej funkcji. Efektywność aproksymacji w stosunku do rozwiązań ze stałymi bazami, bardzo na tym zyskuje. Stosunkowo niedawno, bo w latach 1989-1993 za sprawą autorów takich jak Cybenko [1], Hornik ze współpracownikami [2], Funahashi [4] i Leszno ze współpracownikami [3] dosyć jednoznacznie rozstrzygnięto możliwości aproksymacyjne sieci. Unikając szczegółów można powiedzieć, że trójwarstwowa struktura (inaczej nazywana siecią z jedną warstwą ukrytą) przedstawiona na Rys.1 pozwala na aproksymację dowolnej funkcji d zmiennych z dowolną dokładnością. W warstwie wejściowej występują węzły zaczepowe, nie spełniające żadnych funkcji logicznych czy matematycznych. Warstwa ukryta składa się z funktorów g1,..,gn, które mogą być bardzo różne, ale koniecznie nieliniowe (z g1 nieliniowością niewielomianową). x1 Najczęściej są to takie same funkcje w1 różniące się parametrami tj. g2 fn w 2 g(x,p1),...,g(x,pn). Bardzo często, tak x2 wn będzie i w przypadku naszego . przykładu g(x,ai,bi)=tanh(aiTx+bi), . gdzie ai=[ai1,...,aid]T i bi jest skalarem, . gn i=1,...,n. W warstwie wyjściowej xd używany jest element liniowy realizujący ważoną sumę sygnałów Warstwa Liniowy Warstwa wchodzących. Parametry w1,...,wn są wejściowa ukryta Element wyjściowy wagami w warstwie wyjściowej. Rys.1 Uniwersalna trójwarstwowa architektura sieci neuronowej dla aproksymacji funkcji. 4 Aproksymacja funkcji za pomocą takiej uniwersalnej struktury polega na dobraniu odpowiedniej liczby n funktorów warstwy ukrytej oraz (d+1)n ich parametrów. Oznacza to w praktyce potrzebę optymalizacji w przestrzeni kilkudziesięciu i więcej parametrów. Ten proces wyznaczania parametrów uniwersalnej struktury, zwany uczeniem bywa czasochłonny. Istnieje również niebezpieczeństwo, że w trakcie uczenia system osiągnie lokalne minimum i proces uczenia zostanie zatrzymany. W naszym rozwiązaniu zastosowaliśmy tzw. aproksymację przyrostową. Proces uczenia sieci przebiega iteracyjnie. Liczba neuronów w warstwie ukrytej nie jest ustalana z góry, a w każdej iteracji dodawany jest tylko jeden neuron do warstwy ukrytej, wyznaczane są jego parametry, a następnie określa się wagi warstwy wyjściowej. Możliwa jest jednoczesna aproksymacja kilku funkcji tych samych argumentów. Taki schemat aproksymacji przedstawiony jest na Rys.2. x1 g1 f1 g1 x1 f1 x1 xd f2 fm f1 g2 g2 x2 g1 x2 f2 fm xd x2 xd f2 gn fm Rys.2 Schemat aproksymacji przyrostowej jednocześnie m-funkcji. W każdej iteracji wyznaczane są parametry jednego neuronu oraz wszystkie wagi w warstwie wyjściowej. W aproksymacji przyrostowej każdorazowy proces wyznaczania parametrów jest wykonywany w przestrzeni (d+1) parametrów , a więc znacznie mniejszej niż w przypadku aproksymacji nieprzyrostowej. Ponadto łatwo jest wykazać, że funkcja błędu uczenia jest ściśle monotoniczna, a więc nie istnieje problem lokalnych minimów [5]. Taki wyjątkowo efektywny proces aproksymacji funkcji został zastosowany w prezentowanym rozwiązaniu. 5 Model dynamiki systemu System dynamiczny może być matematycznie zapisany w wielu różnych postaciach. Z punktu widzenia „ uczenia na przykładach”, najwygodniejsze są tzw. postaci wejścia/ wyjścia. Dla potrzeb tego pakietu przyjęto model dynamiki systemu w następującej formie y(t)=f(x(t-1),...,x(t-n)) gdzie t oznacza czas dyskretny, x(.) jest wektorem wejść, y(.) jest wektorem wyjść, f jest funkcją nieznaną. Bazując na przykładach realizacji funkcji f wyznaczana jest jej aproksymacja za pomocą sieci neuronowej. 5 6 Tworzenie pakietu do aproksymacji dynamiki systemu Rozwiązywane zagadnienie wymagało bardzo intensywnych i zaawansowanych operacji numerycznych. Autorzy wykorzystywali do tego celu specjalizowane środowisko, które umożliwiało efektywne tworzenie, uruchamianie programu, śledzenie, prezentacje wyników. Opracowanie pakietu do obliczeń neuronowych w Oracle’u obejmowało następujące kroki: • utworzenie algorytmu na podstawie matematycznych teorii (jest to najtrudniejsze i najbardziej czasochłonne zadanie), [kroki w środowisku badawczym ] • zakodowanie w środowisku badawczym – napisanie procedur w specjalizowanym języku, • uruchomienie i testowanie w środowisku badawczym, • translacja procedur obliczeniowych z języka specjalizowanego do języka C, [kroki w środowisku systemu operacyjnego/kompilatora] • oprogramowanie specyficznego interfejsu wg. wymagań i ograniczeń Oracle, • kompilacja i linkowanie – utworzenie dynamicznie linkowanej biblioteki, [ kroki w środowisku Oracle’a ] • rejestracja procedur zewnętrznych na serwerze Oracle’a, • napisanie procedur sprzęgających dane i tabele oraz obliczenia, • przeprowadzenie testów w środowisku Oracle’a. Opisany mechanizm zastosowany z powodzeniem przez autorów wskazuje na możliwość stosunkowo łatwej integracji wielu środowisk informatycznych, łączenia i przenikania różnych technologii. • • • • • • • Pakiet posiada następujące funkcje: określenie zakresu danych ( załadowanie, stworzenie perspektywy, e.t.c ), edycja/wybór parametrów sieci i modelu, uczenie sieci – stworzenie modelu dynamicznego, wybór modelu, określenie zakresu danych do odtworzenia, odtworzenie wyjścia dla wybranego modelu – aproksymacja, analiza wyników. Dla ustalenia uwagi, bez szkody dla ogólności rozważań, przyjmijmy, że modelowany przykładowy system dynamiczny posiada trzy wejścia oraz jedno wyjście y. Potencjalnym zastosowaniem wyznaczonego modelu jest predykcja wyjścia dla wartości wejściowych nie występujących w zestawie danych uczących. Nowowprowadzone wartości wejść są odróżnialne od wartości zestawu uczącego. Obliczone wyjścia modelu yp są zapamiętane do przeprowadzenia szczegółowych analiz. Stosowany model systemu dynamicznego wymaga podania trzech parametrów : tolerancji ( dopuszczalnego błędu) , maksymalnej liczby neuronów, opóźnienia sygnałów wejściowych w modelu dynamicznym. Wyznaczany model jest de facto trójwarstwową siecią neuronową (siecią z jedną warstwą ukrytą), ze skalowaniem wejścia i opóźnieniem. Jest on charakteryzowany przez szereg wartości : wektor skalujący xsc, elementy warstwy pierwszej w1,b1 , elementy warstwy drugiej w2,b2. Do realizacji przyjęto prosty schemat składający się z trzech tabel : DANE, PARAMETRY, MODELE. Odpowiedni diagram przedstawiono na Rys.3. 6 MODELE DANE T ID_MODELU V NDELAY X MSC Y NSC PREDICT XSCALE YP MW1 NW1 W1 MB1 NB1 B1 MW2 PARAMETRY NW2 W2 KOD_PARAM TOLERANCJA MB2 MODEL_PARM_FK NB2 MAXNOD B2 NDELAY PARM_KOD_PARAM Rys.3. Schemat tabel użytych w aplikacji. Stworzono pakiet składowany składający się z czterech funkcji : model ( ...) – deklaracja do procedury zewnętrznej wyznaczającej model dynamiczny systemu wy_modelu(...) – deklaracja do procedury zewnętrznej wyznaczający wyjście sieci neuronowej ( modelu) uczenie (..) – procedura w PL/SQL przekazująca dane do funkcji model i zapamiętująca wyniki odtwarzanie (...) – procedura w PL/SQL przekazująca/odbierająca dane/wyniki z funkcji wy_modelu. Szczegóły deklaracji pakietu pokazano na Rys.4. PACKAGE SNEUR_PKG IS /* Pakiet do aproksymacji systemu dynamicznego w aplikacjach ORACLE’a */ /* AUTORZY : Andrzej Łukianiuk, Bartłomiej Beliczyński - Wrzesień 1999 */ /* Uwaga! m?, n? – oznaczaja rozmiary macierzy */ FUNCTION model ( mx IN binary_integer, nx IN binary_integer, xx IN varchar2, --wartości sygnałów wejściowych -- wartości wektora wyjść systemu y IN varchar2, tol IN double precision, maxnod IN binary_integer, ndelay IN binary_integer, -parametry -modelu/sieci mw1 OUT binary_integer, nw1 OUT binary_integer, w1 OUT varchar2, -- wartości wektora w1 mb1 OUT binary_integer, nb1 OUT binary_integer, b1 OUT varchar2, -- wartości wektora b1 mw2 OUT binary_integer, nw2 OUT binary_integer, w2 OUT varchar2, -- wartości wektora w2 mb2 OUT binary_integer, nb2 OUT binary_integer, b2 OUT varchar2, -- wartości wektora b2 msc OUT binary_integer, nsc OUT binary_integer, xsc OUT varchar2,-- wartości wektora skal. -- wartość opóźnienia ndel OUT binary_integer, dmax IN binary_integer) -- maksymalny rozmiar zadeklarowanych wektorow -- zwraca 0 lub kod błędu RETURN binary_integer; /* Deklaracja dla procedury zewnętrznej wyznaczającej model dynamiczny systemu */ FUNCTION wy_modelu ( mx IN binary_integer, nx IN binary_integer, xx IN varchar2, -- wartości sygnałów wejść. msc IN binary_integer, nsc IN binary_integer, xsc IN varchar2, -- wartości wektora skal. ndel IN binary_integer, -- wartość opóźnienia mw1 IN binary_integer, nw1 IN binary_integer, w1 IN varchar2, -- wartości wektora w1 mb1 IN binary_integer, nb1 IN binary_integer, b1 IN varchar2, -- wartości wektora b1 mw2 IN binary_integer, nw2 IN binary_integer, w2 IN varchar2, -- wartości wektora w2 mb2 IN binary_integer, nb2 IN binary_integer, b2 IN varchar2, -- wartości wektora b2 my OUT binary_integer, dy OUT varchar2, -- wartości wektora wyjść modelu 7 dmax IN binary_integer) -- maksymalny rozmiar zadeklarowanych wektorow -- zwraca 0 lub kod błędu RETURN binary_integer; /* deklaracja do procedury zewnętrznej wyznaczający wyjście sieci neuronowej ( modelu) */ FUNCTION uczenie ( zest_par IN varchar2) –- kod zestawu parametrow, dla których sieć jest uczona RETURN Number; -- zwraca 0 lub kod błędu /* procedura uczenia sieci z danych w tabeli DANE i parametrow o identyfikatorze zest_par */ FUNCTION odtwarzanie ( id_mod IN Number ) –- identyfikator modelu, dla którego przeprowadzona jest aproksymacja RETURN Number; -- zwraca 0 lub kod błędu /*procedura do aproksymacji danych z tabeli DANE i modelu o identyfikatorze id_mod */ END SNEUR_PKG; Rys.4. Deklaracja pakietu PL/SQL do aproksymacji systemu dynamicznego. 7 Przykładowe wykorzystanie aplikacji neuronowej stworzonej za pomocą narzędzi Oracle’a 7.1 Interpretacja danych Jako przykładowe dane wzięto ilość jednostek licznikowych przypadających na statystycznego abonenta w zależności od czasu, ceny za jednostkę oraz wskaźnika inflacji. Ich przebiegi są zilustrowane na Rys. 5. Są one hipotetyczne, nie odpowiadające żadnej rzeczywistości, ale odzwierciedlające dynamikę podobnych, prawdziwych danych. W rozpatrywanym okresie kilkudziesięciu miesięcy generalnie wzrastało wykorzystanie telefonów, ale po każdorazowej podwyżce opłat za jednostkę licznikową zaznaczał się spadek, po czym ponowny jego wzrost. Taki zbiór danych posłużył do nauczenia sieci neuronowej. Wektor wejściowy zawierał więc dwie zmienne tj. cenę i wskaźnik inflacji, wektor wyjściowy ilość jednostek licznikowych na abonenta. Przebiegi danych wejsciowych 2000 1800 il. jednostek na abonenta 1600 1400 1200 1000 800 cena 600 400 inflacja 200 0 0 10 20 30 40 50 czas Rys. 5. Przebiegi danych wejściowych do uczenia sieci. Hipotetyczne dane dotyczące ilości jednostek licznikowych przypadających na abonenta, ceny jednostki licznikowej i inflacji w kolejnych miesiącach. 8 7.2 Omówienie wyników W celu łatwiejszego użytkowania pakietu stworzono prosty formularz, który realizuje funkcjonalność przedstawioną w poprzednim rozdziale. Widok jego podstawowego okna przedstawiono na Rys. 6. Blok danych z lewej strony służy do przeglądania danych uczących, blok danych z prawej strony służy do wprowadzania wartości nowych danych i przeglądania wyników aproksymacji. Kolumny T,V,X należy interpretować odpowiednio jako kolejne miesiące, cenę i wskaźnik inflacji, Y oznacza ilość jednostek na abonenta, natomiast YP jako obliczane wartości z wybranego modelu. Widoczne przyciski służą odpowiednio do : • Edycji/wyboru parametrów modelu • Wywoływania procedury uczenia sieci – odwołującej się do procedury zewnętrznej • Wyboru modelu, wg którego ma być wykonana aproksymacja • Wykonania obliczeń aproksymacji – odwołujące się do procedury zewnętrznej • Oglądania wykresów Dla zestawu danych uczących można wykonać szereg obliczeń modeli zmieniając parametry np. tolerancję lub opóźnienie. Dane charakteryzujące modele są zapamiętywane. Można je wykorzystywać w różnych eksperymentach aproksymacyjnych i na ich podstawie wybrać model, który najlepiej rozstrzyga konflikt pomiędzy dokładnością aproksymacji a jakością generalizacji. Rys 6. Widok formularza przykładowej aplikacji do aproksymacji dynamiki systemu. Przeprowadzono szereg eksperymentów i obliczeń dla wybranego zestawu danych. Przykładowe wyniki dla jednego z eksperymentów przedstawiono na Rys. 7. Aby uzyskać predykcję ilości impulsów (a docelowo przychodów) po kolejnej podwyżce, wprowadzono niewielki wzrost ceny za jednostkę oraz pewne wskaźniki inflacji. Odpowiedzią modelu 9 było krótkotrwałe obniżenie ilości jednostek na abonenta, po czym ich stopniowe wzrastanie. Celowo wybrano model, dla którego aproksymacja nie jest najdokładniejsza, aby osiągnąć lepsze własności generalizacji. Rys. 7. Przebieg ilości jednostek na abonenta w czasie (dane i ich aproksymacja) – wykres górny oraz założonej zmiany ceny –wykres dolny. W badanym przypadku, na typowym serwerze NT, dla fazy uczenia, osiągano czasy przetwarzania rzędu 15 sekund (dla sieci złożonej z dwudziestu węzłów warstwy ukrytej). Przy oszacowaniu pominięto czas potrzebny na załadowanie biblioteki dynamicznej przy pierwszym odwołaniu do jej procedur. Kolejne odwołania nie wymagają już jej ładowania, zatem jest to czas pomijalny. Na efektywność rozumianą szerzej wpływają nie tylko czasy samego przetwarzania, ale również czas przygotowania pakietu i jego uruchamiania. Wydaje się, że przyjęte algorytmy i metodologia dają znakomite rezultaty. 8 Uwagi końcowe i wnioski W niniejszym artykule zaprezentowano sposób dołączenia i wykorzystania pakietu neuronowego do aproksymacji dynamiki systemu, reprezentowanego przez dane zawarte w bazie. Wydaje się, że wykorzystanie zewnętrznych procedur, które mogą być z kolei generowane poprzez specjalizowane pakiety matematyczne, neuronowe etc. jest efektywnym sposobem rozszerzenia funkcjonalności systemu bazy danych o możliwości zaawansowanego przetwarzania danych. 10 Literatura [1] G.Cybenko, „Approximations by superpositions of a sigmoidal functions”, Math. Contr. Signals, Syst., vol.2, pp.303-314, 1989. [2] K.Hornik, M.Stinchcombe, and H.White, „Multi-layer feedforward networks are universal approximators”, Neural Networks, vol.2, pp.359-366, 1989. [3] M.Leshno, V.Lin, A.Pinkus, and S.Schocken, „Multilayer feedforward networks with a nonpolynomial activation function can approximate any function”, Neural Networks, vo.6, pp.861-867, 1993. [4] K. Funahashi. „On the approximate realization of continuous mappings by neural networks”, Neural Networks,2, 1989. [5] B. Beliczynski, „Incremental approximation by one-hidden-layer neural networks.”, Proceedings of the IEEE International Symposium on Industrial Electronics, IEEE Service Center, 1996. [6] Oracle Documentation Library.Oracle 8 Server, Release 8.0.5. 11