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

Podobne dokumenty