Paweł Cichosz
Date: 2001/2002
Wykład prezentuje wybrane metody uczenia się aproksymacji funkcji, a więc znajdowania zależności wybranego atrybutu ciągłego traktowanego jako funkcja docelowa od innych atrybutów (najczęściej również ciągłych), przy czym głównym celem jest możliwie dokładne, a niekoniecznie czytelne dla człowieka, reprezentowanie tej zależności.
Aproksymacja, nazywana czasem klasyfikacją z ciągłymi klasami, polega na poszukiwaniu zależności wybranego atrybutu ciągłego, nazywanego funkcją docelową, od innych atrybutów, najczęściej również ciągłych. Zależność ta służyć ma nie tyle prezentacji i interpretacji przez człowieka, co raczej przewidywaniu nieznanych wartości funkcji docelowej dla nowych danych, więc główny nacisk kładzie się na dokładne, a niekoniecznie czytelne, reprezentowanie zależności. W przypadku zależności dotyczących atrybutów ciągłych dokładność jest szczególnie trudna do pogodzenia z czytelnością. Wtedy, gdy czytelność ma priorytet nad dokładnością, sięga się po metody odkrywania równań.
Mówiąc o aproksymacji funkcji jak zwykle będziemy rozważać pewną
dziedzinę
, na której jest określona funkcja docelowa
oraz pewna liczba atrybutów. Na ogół będziemy
zakładać, że wszystkie z nich są ciągłe, i dla podkreślenia tego
założenia stosować inną niż dotąd terminologię i notację: zamiast o
atrybutach będzie mowa o cechach, oznaczanych
. Niekiedy okaże się przydatne
założenie, że dodatkowo jest zawsze określona cecha
taka, że
dla każdego
. Przez
oznaczać będziemy
cały wektor
(lub
) cech przykładu
.
Ponieważ wektory cech są wektorami liczb rzeczywistych, a wartości aproksymowanej funkcji są również liczbami rzeczywistymi, operacje wykonywane przez algorytmy aproksymacji funkcji często mogą być bezpośrednio wyrażone matematycznie, przy czym zazwyczaj odpowiednie równania najprościej jest zapisać wektorowo. Elementy wszystkich wektorów będą numerowane od 0 i oznaczane za pomocą indeksów dolnych. Przy wektorowym zapisie operacji algebraicznych wektory muszą być niekiedy traktowane jako macierze złożone z jednej kolumny lub jednego wiersza. Tu przyjmiemy, że wektory są kolumnowe, czyli traktuje się je jako macierze złożone z jednej kolumny.
Wiele algorytmów aproksymacji do wyznaczenia hipotezy dobrze przybliżającej funkcję docelową może wymagać wielokrotnego przetwarzania całego zbioru trenującego, oczywiście jeśli jest on skończony i znany w całości. Możemy więc powiedzieć, że proces uczenia się dla takich algorytmów w naturalny sposób jest podzielony na pewną liczbę cykli, z których każdy obejmuje jednokrotne przetwarzanie każdego przykładu trenującego. Jest to właściwość, z którą nie mieliśmy wcześniej do czynienia.
Możliwe są różne postaci informacji trenującej, służącej do uczenia
się aproksymacji funkcji. Oczywiście najbardziej naturalną postacią
przykładu trenującego jest para
dla pewnego
, analogiczna do przykładu etykietowanego do uczenia się
pojęć. W większej części praktycznych zastosowań uczenia się
aproksymacji do odkrywania wiedzy tak właśnie będzie. Niekiedy
jednak, ze względu na specyficzne wymogi zastosowania uczącego się
aproksymatora, wygodniej jest jako drugi element pary trenującej,
zamiast wartości funcji, przekazywać błąd wartości aktualnej hipotezy
ucznia. Przykładem trenującym jest wówczas para
dla pewnego
, przy czym
oznacza
aktualną hipotezę ucznia, podlegającą zmianom w trakcie uczenia się.
W każdym przypadku będziemy dla wygody mówić o zbiorze trenującym
jako o pewnym podzbiorze dziedziny
, zakładając, że należącym do
niego przykładom towarzyszą etykiety odpowiedniej postaci.
Do najczęściej stosowanych uczących się aproksymatorów funkcji należą
metody oparte na reprezentacji parametrycznej. Wymagają one, aby
przykłady (argumenty aproksymowanej funkcji) były opisywane za pomocą
wektorów rzeczywistoliczbowych cech oraz zakładają, że hipoteza jest
reprezentowana w postaci wektora również rzeczywistych parametrów,
często nazywanych wagami. Uczenie się polega na modyfikowaniu
wag na podstawie przykładów trenujących w sposób prowadzący do
zmniejszenia błędu reprezentowanej przez nie hipotezy w stosunku do
nieznanej funkcji docelowej. Prezentując metody parametryczne będziemy
tym zakładać, że dla każdego
określona jest dodatkowa cecha
.
Dla przykładu
i pewnej hipotezy
reprezentowanej przez
wektor wag
wartość
jest obliczana na podstawie
i
. Możemy napisać:
| (1) |
Dla każdego uczącego się aproksymatora największe znaczenie ma
wykorzystywany przez niego mechanizm uczenia się. W przypadku metod
parametrycznych chodzi o sposób modyfikowania wektora wag
na
podstawie przykładu trenującego
dla
pewnego
, przy czym
jest wartością funkcji docelowej dla
przykładu
, a
jej przybliżeniem obliczanym na podstawie
wektora
w przedstawiony wyżej sposób.
Załóżmy, że dany jest ustalony zbiór
etykietowanych błędami
przykładów trenujących. Najprostsze sformułowanie celu uczenia się
polega na zażądaniu znalezienia takiego wektora wag, dla którego
względny bądź średniokwadratowy błąd próbki na zbiorze trenującym
będzie możliwie najmniejszy. Błędy te będą minimalizowane wtedy, kiedy
kiedy minimalizowana będzie nieco inna, dogodniejsza ze względów
analitycznych wielkość:
, |
(2) |
| (3) |
. |
(4) |
Różniczkując
względem wagi
otrzymujemy, jak
łatwo się przekonać,
, |
(5) |
, |
(6) |
. |
(7) |
Zauważmy, że powyższą regułę, zgodnie z którą modyfikacja wag następuje na podstawie sumy pewnych wartości obliczonych dla poszczególnych przykładów trenujących, możemy również przedstawić w następującej postaci:
, |
(8) |
| (9) |
Najprostszą konkretyzację przedstawionej ogólnej reguły uczenia się
aproksymatorów opartych na reprezentacji parametrycznej uzyskujemy dla
aproksymatorów liniowych, czyli takich, w których opisywana przez
zależność wartości
od
ma charakter liniowy, a
wektor wag
tę zależność parametryzuje. Można wówczas przyjąć, że
wektor
liczy tyle elementów, ile cech jest używanych do opisu
przykładów, czyli
(z uwzględnieniem dodatkowej cechy o numerze
stale równej
), a wartości funkcji są obliczane zgodnie ze
wzorem:
, |
(10) |
| (11) |
Nietrudno się przekonać, że dla aproksymatorów liniowych
, |
(12) |
| (13) |
. |
(14) |
| (15) |
, |
(16) | |
| (17) |
, |
(18) | |
. |
(19) |
Stosujące regułę LMS liniowe aproksymatory parametryczne są także nazywane prostymi perceptronami i mogą być traktowane jako szczególny, najprostszy rodzaj sieci neuronowych.
Aproksymatory liniowe mają szereg bardzo atrakcyjnych z praktycznego
punktu widzenia właściwości. Uczą się stosunkowo szybko, mechanizm
uczenia się jest prosty analitycznie i implementacyjnie oraz tani
obliczeniowo, w dodatku posługiwanie się regułą spadku gradientu w
przypadku liniowej zależności
od
nie grozi
znalezieniem lokalnych minimów funkcji
, różnych
od poszukiwanego minimum globalnego. Te niewątpliwe zalety są okupione
jedną poważną wadą. Wiele funkcji docelowych, zwłaszcza tych
interesujących ze względu na realne zastosowania, nie może być z
dostatecznie dużą dokładnością reprezentowanych jako jedynie liniowa
kombinacja cech przykładów. Wówczas zasadne jest sięgnięcie po
aproksymatory nieliniowe.
Najlepiej znanym parametrycznym aproksymatorem nieliniowym jest perceptron wielowarstwowy, czyli najbardziej popularny i najczęściej stosowany rodzaj sieci neuronowych. Do uczenia się aproksymacji za pomocą perceptrona wielowarstwowego najczęściej stosuje się algorytm propagacji wstecznej błędu. Metody te mają bogatą literaturę i nie będziemy o nich mówić.
W konkretnych zastosowaniach mogą być wykorzystywane specyficzne aproksymatory nieliniowe, z funkcją odwzorowania zaprojektowaną z uwzględnieniem dostępnej wiedzy o dziedzinie. W każdym przypadku można wyprowadzić odpowiednią konkretyzację uogólnionej reguły delta. W szczególności dla najprostszego rodzaju aproksymatorów nieliniowych, w których wartość hipotezy oblicza się według wzoru:
, |
(20) |
. |
(21) |
Przedstawione reguły aktualizacji wag dla liniowych i nieliniowych
aproksymatorów parametrycznych są konkretyzacjami reguły spadku
gradientu, zgodnie z którą kierunek i wielkość zmiany wag zależą od
gradientu błędu, w tym przypadku średniokwadratowego. Przedstawiona
wersja tych metod wykorzystuje regułę spadku gradientu do addytywnej
modyfikacji wektora wag: po wyznaczeniu wartości błędu
jest
on dodawany do wektora wag zgodnie z operacją podstawienia
lub, dla pojedynczej wagi,
.
Niedawno zaproponowano alternatywne i niekiedy bardziej skuteczne
podejście, polegające na multiplikatywnej modyfikacji wag. Punktem
wyjścia do tej koncepcji jest zapisanie addytywnej reguły modyfikacji
dla logarytmów wag:
| (22) |
| (23) |
Pod pewnymi warunkami powyższa multiplikatywna reguła może być
stosowana z wartościami błędów
, wyznaczanymi tak samo
jak w przypadku klasycznej modyfikacji addytywnej. W szczególności
niezbędne jest wówczas, aby wszystkie wagi były liczbami dodatnimi.
Tymczasem jest oczywiste, że w celu reprezentowania pewnych funkcji
może zachodzić potrzeba wykorzystywania również ujemnych wag. Prostym
rozwiązaniem tego problemu w przypadku aproksymatorów liniowych może być
ograniczenie się do dodatnich wag, lecz powielenie wektora cech ze
znakiem minus. Oznacza to reprezentowanie każdego przykładu
za
pomocą wektora cech
| (24) |
Metody parametrycznej aproksymacji funkcji w nieco innym ujęciu są także nazywane metodami regresji. Regresja oznacza dopasowywanie zbioru parametrów pewnej formuły matematycznej, nazywanej modelem regresyjnym, do dostępnych danych, tak aby uzyskany w ten sposób model jak najdokładniej opisywał te dane. Parametryczny aproksymator funkcji może być więc traktowany jako model regresyjny, a wektor wag stanowi jego parametry, które powinny być dobrane tak, aby funkcja docelowa była jak najlepiej przybliżana na zbiorze trenującym. To, co odróżnia klasyczną regresję od interesujących nas tutaj aproksymatorów funkcji, to właśnie sposób wyznaczania wag. Zamiast rozważanych przez nas reguł aktualizacji, których wielokrotne stosowanie z odpowiednio małym rozmiarem kroku przybliża wagi do wartości minimalizujących błąd, mówiąc o regresji ma się na ogół na myśli analityczne wyznaczanie właściwego wektora wag. Nie jest to jednak różnica rozwiązywanego problemu, a tylko najczęściej stosowanych technik jego rozwiązania. Nie ma więc żadnych przeszkód, aby uczące się parametryczne aproksymatory funkcji nazywać algorytmami regresji, wyróżniając regresję liniową, w której funkcja odwzorowania jest liniowo zależna od cech, oraz różne formy regresji nieliniowej.
Tradycyjne rozwiązanie problemu regresji liniowej sprowadza się do znalezienia minimalnokwadratowego rozwiązania układu równań, powstałego przez zapisanie równania:
![]() |
(25) |
| (26) |
| (27) |
| (28) |
Niestety, złożoność obliczeniowa odwracania macierzy ogranicza możliwość stosowania takiej metody do stosunkowo niewielkich zbiorów trenujących -- dla większej liczby przykładów bardziej opłacalna jest iteracyjna modyfikacja wag za pomocą reguły delta.
Aproksymator liniowy, który charakteryzuje się dużą szybkością uczenia się oraz niskim kosztem obliczeniowym, nie może być bezpośrednio stosowany zbyt szeroko, gdyż w wielu dziedzinach występują zależności o zdecydowanie nieliniowym charakterze. Z kolei uniwersalne parametryczne aproksymatory nieliniowe, jakimi są perceptrony wielowarstwowe, uczą się wolniej i są narażone na lokalne minima funkcji błędu. Jeden z pomysłów na zwiększenie zakresu stosowania aproksymatora liniowego polega na zastosowaniu go do odpowiednio zmodyfikowanych przestrzeni cech.
Podstawowa koncepcja rozszerzonej reprezentacji jest niezwykle prosta. Podczas gdy aproksymatory nieliniowe starają się uzyskać zwiększenie mocy reprezentacji przez wykorzystanie nieliniowej zależności wartości hipotezy od wektora wag i cech przykładu, metody rozszerzonej reprezentacji dążą do osiągnięcia tego samego celu, pozostawiając liniową zależność, lecz rozszerzając w zamian, na ogół znacznie, zestaw cech opisujących przykłady. Jeśli postępowanie takie przypomina konstruktywną indukcję, to rzecz jasna podobieństwo nie jest przypadkowe. W jednym i drugim przypadku chodzi o ,,poprawienie'' opisu przykładów, tak aby nie zmieniony algorytm uczenia się mógł uzyskiwać lepsze wyniki.
Aby nieco sformalizować naszkicowany pomysł, założymy, że dla każdego
przykładu
jego
-elementowy wektor cech
zostaje w
pewien sposób przekształcony w
-elementowy rozszerzony wektor cech
, przy czym na ogół
. W obu przypadkach może być
oczywiście dodana specjalna cecha
dla
każdego
, lecz często nie jest to konieczne -- rozszerzenie
reprezentacji może eliminować powody, dla których w przypadku zwykłych
aproksymatorów parametrycznych taka cecha była potrzebna. Nie będziemy
więc brać jej pod uwagę w poniższej dyskusji.
Wektor
stanowi rozszerzoną reprezentację przykładu
.
Możemy na nią patrzeć jak na przyporządkowanie przykładowi pewnego
punktu w
-wymiarowej przestrzeni, podczas gdy oryginalna
reprezentacja
lokowała ten przykład w przestrzeni o znacznie
mniejszej wymiarowości. Wartość hipotezy reprezentowanej przez wektor
wag
jest wówczas obliczany dla przykładu
tak jak przez
aproksymator liniowy działający w rozszerzonej przestrzeni, czyli
, |
(29) |
Podstawowe znaczenie dla oceny przydatności metod aproksymacji
wykorzystujących rozszerzoną reprezentację mają przesłanki, na których
opiera się oczekiwanie, że zwiększanie wymiarowości przestrzeni cech
przyniesie pożytek. Kryje się za nim nadzieja, że odwzorowanie
nieliniowe w oryginalnej przestrzeni cech może się stać liniowe lub
możliwe do dobrego przybliżenia za pomocą odwzorowania liniowego w
rozszerzonej przestrzeni. Nie jest trudno przekonać się, biorąc pod
uwagę proste przykłady funkcji docelowych, że istotnie może się tak
zdarzyć, jeśli cechy
zostaną w odpowiedni sposób dobrane. W
szczególności dla każdej funkcji docelowej można wskazać takie
rozszerzone cechy
, dla których funkcja ta może być
reprezentowana liniowo. O najprostszym wariancie tego podejścia, w
którym
i
dla pewnej nieliniowej
funkcji
była już mowa wyżej. W niektórych zastosowaniach
klasa funkcji docelowej jest w istocie znana i tego typu proste
podejście może dać zaskakująco dobre efekty w porównaniu z
aproksymatorami ,,prawdziwie'' nieliniowymi. Nas jednak najbardziej
interesować będzie maksymalnie ogólny przypadek, kiedy wystarczająca
wiedza na temat funkcji docelowej nie jest dostępna i rozszerzoną
reprezentację należy dobrać w ten sposób, aby była możliwie
uniwersalna i mogła być użyta do skutecznego uczenia się różnych
funkcji docelowych.
Najprostszym uniwersalnym i przy tym zadziwiająco skutecznym sposobem
rozszerzania reprezentacji jest stosowanie reprezentacji
randomizowanej. Dla ustalonego
wartości cech rozszerzonej
przestrzeni wyznacza się na podstawie cech oryginalnych, stosując
pewne przekształcenie zależne od losowych parametrów. Przekształcenia
takie mogą być określane nie tylko dla przykładów opisywanych przez
cechy ciągłe, jakimi zajmowaliśmy się dotychczas, lecz także przez
dowolne atrybuty dyskretne. Można sobie wyobrazić bardzo wiele
różnych szczegółowych przekształceń randomizowanych. Poniższy przykład
to jedna z najprostszych możliwości.
Wygodnie będzie w poniższej dyskusji założyć, że przeciwdziedziną
każdej cechy
dla
jest przedział
.
Jeśli pierwotne cechy określone na rozważanej dziedzinie nie spełniają
tego warunku, to można je poddać odpowiedniej normalizacji, o ile ich
przeciwdziedziny są przedziałami obustronnie ograniczonymi.
Przyjmiemy teraz, że pierwotne cechy
zostały już w razie potrzeby znormalizowane i każda z nich może
przyjmować wartości z przedziału
. Wówczas rozszerzone cechy
mogą być wyznaczane na podstawie cech pierwotnych dla każdego
przykładu
według następującej formuły stosowanej dla
wszystkich
:
, |
(30) |
![]() |
(31) |
Dużą skuteczność z efektywnością obliczeniową znakomicie łączy
konstruowanie rozszerzonej reprezentacji za pomocą rozproszonego
przybliżonego kodowania. W podejściu tym rozszerzona przestrzeń cech
jest na ogół bardzo duża, lecz dla każdego przykładu
jedynie
stosunkowo niewielka liczba rozszerzonych cech
ma
wartości różne od 0. Dzięki temu obliczenie
nie wiąże się
z dużymi kosztami, gdyż wszystkie cechy o zerowych wartościach mogą
zostać pominięte. Również proces znajdowania tych
, dla których
, może być zazwyczaj przeprowadzony bardzo
efektywnie. Ma to decydujące znaczenie dla praktycznej atrakcyjności
rozproszonego przybliżonego kodowania.
W metodach, o których mowa, na ogół przyjmuje się, że cechy
rozszerzonej przestrzeni są binarne. Dla każdego przykładu
oraz
mamy więc
, przy czym
liczba jedynek w wektorze
jest znacznie mniejsza od liczby
zer. Obliczenie
sprowadza się wówczas do
zsumowania tych (niewielu) wag, dla których odpowiadające im cechy
mają wartość
. Również aktualizacja funkcji dla danego przykładu
trenującego sprowadza się do modyfikacji tylko tych wag, które
odpowiadają cechom przyjmującym dla tego przykładu niezerową wartość.
Oszczędzamy więc na obliczeniach zarówno podczas odtwarzania wartości
aproksymowanej funkcji, jak i przy ich aktualizacji.
Jedną z konktryzacji tej koncepcji jest aproksymator CMAC
(Cerebellar Model Articulation Controller). Wykorzystuje on
pokrycia
-wymiarowej przestrzeni wartości pierwotnych cech
-wymiarowymi hiperprostopadłościanami, które nazwiemy kratkami (dla
dwóch wymiarów będą to prostokąty, dla trzech -- prostopadłościany,
itd.). Takie kratkowanie powstaje przez podzielenie zakresu wartości
każdej cechy na pewne przedziały -- niekoniecznie równomiernie i
niekoniecznie jednakowo dla każdej cechy. W aproskymatorze CMAC
wykorzystuje się pewną liczbę
takich kratkowań, przesuniętych
względem siebie wzdłuż wszystkich (w najprostszym wariancie) lub
niektórych (w bardziej wyrafinowanych wariantach) wymiarów. Każdy
przykład
reprezentowany przez wektor wartości cech
,,trafia'' wówczas w jedną kratkę każdego z przesuniętych względem
siebie kratkowań. Jeśli wyobrazimy sobie, że wszystkie kratki mają
swoje numery od
do
, to dla każdego przykładu
dostajemy
numerów ,,trafionych'' przez niego kratek. Niech
oznacza
zbiór tych numerów. Wówczas można przyjąć:
![]() |
(32) |
Metody pamięciowe reprezentują paradygmat ,,leniwego uczenia się'': uczenie się polega zasadniczo tylko na zapamiętaniu danych trenujących. Ich przetwarzanie odkładane jest do czasu, gdy zachodzi potrzeba odpowiedzi na zapytanie -- zastosowania hipotezy do nowego przykładu, i koncentruje się na przykładach trenujących podobnych do niego. W ten sposób można się uczyć zarówno aproksymacji, jak i klasyfikacji, jednak właśnie do aproksymacji podejście to jest stosowane częściej.
U podstaw koncepcji pamięciowych metod aproksymacji funkcji leży przeświadczenie, że przy współczesnym stanie techniki można i warto poświęcić dla dokładności aproksymacji i szybkości procesu uczenia się pamięciową i czasową efektywność obliczeniową. Może to wyglądać na kierowanie się technologiczną brutalną siłą, lecz o ocenie omawianych metod nie decyduje ich finezja, lecz skuteczność, a ta okazała się dość znaczna. Zobaczymy zresztą także, że nawet takie brutalne podejście pozostawia sporo miejsca na pomysłowe rozwiązania, wpływające na jakość aproksymacji i nakład obliczeń.
Aproksymatory pamięciowe wymagają przykładów trenujących etykietowane
wartościami funkcji docelowej, gdyż tylko pod tym warunkiem będzie
możliwe wykorzystanie ich do wyznaczenia odpowiedzi na zapytanie.
Przyjmiemy, że wszystkie takie przykłady, jakie otrzymał aproksymator,
składają się na zapamiętany przez niego zbiór trenujący
.
Zawartością tak rozumianej pamięci są więc pary
dla
. Będziemy zakładać, że przykłady są
opisywane przez
cech, gdyż dodatkowa cecha
o stałej
wartości nie będzie w tym przypadku potrzebna.
Istotnym założeniem, na którym opierają się metody pamięciowe, jest
dostępność metryki określonej na dziedzinie
, mierzącej odległość
między dowolnymi dwoma przykładami. Jest to pewna funkcja
, która nie musi w zasadzie
spełniać żadnych szczególnych warunków (nawet standardowych aksjomatów
odległości), a jedynie dobrze odzwierciedlać nasze rozumienie
podobieństwa przykładów z dziedziny, w której jest przeprowadzana
aproksymacja funkcji. Najczęściej jest stosowana standardowa metryka
euklidesowa z opcjonalnym skalowaniem, zgodnie z którą odległość
między przykładami
jest obliczana następująco:
, |
(33) |
Potrafiąc mierzyć stopień podobieństwa przykładów, mamy możliwość
odpowiadania na zapytania na podstawie zawartości pamięci
aproksymatora. Najczęściej bowiem dla zadanego w zapytaniu przykładu
wyznacza się wartość
, mającą być przybliżeniem
wartości funkcji docelowej
, biorąc pod uwagę zapamiętane
przykłady trenujące
dla
i
uzależniając ich wpływ na obliczenie
od odległości
, zdefiniowanej w odpowiedni dla dziedziny sposób.
Różne rodzaje aproksymatorów pamięciowych są wyróżniane przede
wszystkim ze względu na stosowane do tego strategie, z których
przejrzymy teraz najbardziej podstawowe.
Najprostszym i najbardziej znanym podejściem do aproksymacji funkcji
na podstawie zapamiętywania jest metoda najbliższego
sąsiada,
często nazywana krótko NN (nearest neighbor).
Jak nazwa sugeruje, w celu wyznaczenia odpowiedzi na zapytanie
dotyczące przykładu
bierze się pod uwagę najbliższy mu, według
przyjętej metryki, przykład trenujący. Jeśli przykładem tym jest
dla pewnego
, to przyjmuje się
. Formalnie można to zapisać następująco:
| (34) |
Zaletą algorytmu NN jest jego prostota i uniwersalność. Uniwersalność
umożliwia stosowanie go do zupełnie dowolnych dziedzin i określonych
na nich odwzorowań. Można również powiedzieć, że charakteryzuje się on
bardzo dużą (w istocie maksymalną) szybkością uczenia się, jeśli
zgodzimy się rozumieć przez to, że do uzyskania
dla
pewnego przykładu
wystarczy jednokrotna prezentacja przykładu
trenującego
. Dokładność uzyskiwanej
aproksymacji zależy oczywiście od ilości dostępnych danych trenujących
i jakości metryki, jaka jest wykorzystywana do znajdowania
najbliższych sąsiadów.
Oczywistym mankamentem najprostszej wersji algorytmu NN jest łatwo
zrozumiała tendencja do nadmiernego dopasowywania się do zaszumionych
danych trenujących. Jeśli dla przykładu, którego dotyczy zapytanie,
najbliższym sąsiadem będzie przykład o niepoprawnej wartości funkcji
docelowej, to błąd odpowiedzi na to zapytanie może być arbitralnie
duży. Inny problem to ,,schodkowość'' realizowanego przez
aproksymator odwzorowania
, którego wartości zmieniają się
nieciągle na dziedzinie wokół poszczególnych przykładów trenujących.
Często stosowanym uogólnieniem algorytmu NN, który w pewnym stopniu
neutralizuje te wady, jest algorytm
NN, używający
najbliższych
sąsiadów. Polega on na znalezieniu w zbiorze zapamiętanych przykładów
ustalonej liczby
przykładów najbliższych przykładowi
, którego dotyczy zapytanie, i wyznaczeniu
na podstawie
wartości funkcji docelowej dla tych
przykładów. Standardowym
podejściem jest obliczenie średniej arytmetycznej tych wartości. Jeśli
więc przez
oznaczymy zbiór
przykładów ze zbioru
najbliższych przykładowi
według pewnej
metryki
, to formalnie algorytm
NN możemy opisać
następująco:
. |
(35) |
Inne podejście do pamięciowej aproksymacji funkcji prezentuje metoda
lokalnych średnich ważonych, nazywana też regresją rdzeniową
lub interpolacją Shepparda. Przezwycięża ona niektóre słabości
algorytmu
NN kosztem większego nakładu obliczeń podczas wyznaczania
odpowiedzi na zapytania i mniejszej szybkości uczenia się. Istotą
omawianego podejścia jest obliczanie wartości aproksymowanej funkcji
dla przykładu
jako ważonej średniej wartości funkcji dla
zapamiętanych przykładów trenujących. W ogólnym przypadku możemy
zapisać:
, |
(36) |
Do wyznaczenia wagi
dla wartości
używanej do
obliczenia
stosowane są pewne malejące funkcje zależne od
, nazywane funkcjami wygładzającymi lub
ważącymi, gdyż decydują one o wpływie wartości
dla
różnych
na wartość
. Do najbardziej typowych
wykorzystywanych w tym celu funkcji należy funkcja gaussowska, zgodnie
z którą
![]() |
(37) |
, |
(38) |
![]() |
(39) |
Niezależnie od konkretnej definicji funkcji wygładzającej metoda
regresji rdzeniowej wymusza gładkość odwzorowania
. Oznacza to siłą
rzeczy, że można za jej pomocą aproksymować węższą klasę funkcji niż
za pomocą metody najbliższego sąsiada, chociaż umożliwia lepszą
interpolację między rzadko rozrzuconymi przykładami trenującymi oraz
niwelowanie szumu. W ten sposób zwiększa możliwość generalizacji i
zmniejsza ryzyko nadmiernego dopasowania.
Ostatnią grupą pamięciowych metod uczenia się aproksymacji funkcji, o jakiej tu wspomnimy, są metody lokalnej regresji. Nazwa sugeruje, że można je dobrze określić przeciwstawiając globalnej regresji. Globalna regresja to regresja o której była mowa dotychczas, polegająca na znajdowaniu wektora wag (jednego, wspólnego dla całego zbioru trenującego) zapewniającego możliwie maksymalną dokładność parametrycznej reprezentacji funkcji docelowej. Różnica między regresją globalną a regresją lokalną polega na tym, że ta ostatnia zamiast jednego, wspólnego dla całej dziedziny wektora wag (modelu globalnego), stara się dopasować do danych trenujących wiele różnych wektorów wag dla różnych fragmentów dziedziny (modeli lokalnych). Każdy z nich jest wyznaczany w trakcie przetwarzania zapytania na podstawie przykładów trenujących najbliższych przykładowi, którego to zapytanie dotyczy, uwzględnianych w stopniu określonym przez ich odległość od niego.
W najprostszym wariancie lokalna regresja polega na wybraniu ustalonej
liczby
najbliższych sąsiadów przykładu
, którego dotyczy
zapytanie, i wyznaczenie wag (przy założonej konkretnej funkcji
odwzorowania reprezentacji parametrycznej) tylko na podstawie tych
przykładów. Ponieważ będzie ich niewiele (na ogół kilkanaście lub
kilkadziesiąt), może być zastosowana podana wcześniej analityczna
metoda wyznaczania wag w regresji liniowej. Następnie uzyskany wektor
wag służy do wyznaczenia wartości hipotezy aproksymatora
.
Na podobnej w pewnym sensie do lokalnej regresji koncepcji opierają się metody aproksymacji symbolicznej. Jest to określenie nieco na wyrost, gdyż faktycznie popularność zdobyły jak dotąd tylko aproksymatory drzewiaste, łączące lokalną regresję z drzewami decyzyjnymi, ale można sobie bez trudu wyobrazić działające na podobnej zasadzie aproksymatory regułowe. Podstawowy pomysł jest taki, aby opisać w pewien sposób, charakterystyczny dla symbolicznej reprezentacji hipotez stosowanej do klasyfikacji, zestaw warunków dotyczących wartości cech (albo ogólnie atrybutów, gdyż można dopuścić tu ich różne typy), a następnie dla przykładów spełniających te warunki wyznaczać wektor wag metodą regresji (najczęściej, chociaż niekoniecznie) liniowej.
Aby naszkicowaną koncepcję nieco bardziej skonkretyzować, weźmy pod
uwagę pewien zbiór modeli
. Każdy
model jest pewną hipotezą umożliwiającą obliczenie dla
dowolnego przykładu
wartości mającej być przybliżeniem
wartości funkcji docelowej dla tego przykładu. Nie oczekujemy
od każdej z nich dokładnego przybliżania funkcji docelowej na całej
dziedzinie, a jedynie na jej pewnym podzbiorze. Za wyznaczenie
podziału dziedziny na podzbiory, którym są przypisane poszczególne
modele, odpowiada hipoteza modelowania
. Każdemu
przykładowi
przyporządkowuje ona pewien model
, który
może być użyty do wyznaczenia przybliżonej wartości funkcji docelowej
dla tego przykładu. Wówczas wartość hipotezy reprezentowanej przez
rozważany aproksymator może być dla dowolnego przykładu
zapisana jako
, czyli wynik zastosowania do przykładu
hipotezy, jaką przyporządkowuje mu hipoteza modelowania.
Zauważmy że w trywialnym przypadku każdy model ze zbioru
może być
reprezentowany przez pewną ustaloną liczbę. Wówczas hipoteza
modelowania bezpośrednio przypisywałaby przykładom wartości funkcji
docelowej, co oznaczałoby najbardziej naiwne zastosowanie algorytmów
uczenia się pojęć do aproksymacji funkcji. W ogólnym przypadku
modele, czyli hipotezy ze zbioru
, mogą być w zasadzie dowolnymi
hipotezami do aproksymacji funkcji, lecz przyjmiemy, że są to
hipotezy odpowiadające aproksymatorom parametrycznym, najczęściej
liniowym, dla których wektor wag może być zazwyczaj wyznaczony -- ze
względu na niewielką liczbę przykładów -- bezpośrednio analitycznie.
Hipoteza modelowania może być z kolei dowolnie
reprezentowaną hipotezą do uczenia się pojęć, która do tej samej
,,kategorii'' zalicza przykłady, co do których istnieje duża szansa,
że można do nich dopasować jeden wspólny model, w tym przypadku
liniowy, uzyskując dużą dokładność. Najprostsza konkretyzacja
tego ogólnego sformułowania polegałaby na tym, aby do tego samego
modelu były przypisywane przykłady o
dostatecznie mało zróżnicowanych wartościach funkcji docelowej. Jako
miarę zróżnicowania można wykorzystać standardowe
odchylenie wartości funkcji docelowej.
Hipoteza modelowania nie musi być w zasadzie reprezentowana symbolicznie, lecz ten przypadek jest najciekawszy i tylko przy takiej reprezentacji sugerowane podejście do aproksymacji funkcji jest rzeczywiście atrakcyjne. Decyduje o tym duża szybkość uczenia się dla hipotez symbolicznych oraz ich czytelna postać, co w zastosowaniach do odkrywania wiedzy ma duże znaczenie. Aproksymatorami symbolicznymi będziemy więc nazywać aproksymatory wykorzystujące symbolicznie reprezentowane hipotezy modelowania. Uczenie się w aproksymatorze symbolicznym obejmuje dwa związane ze sobą procesy: uczenie się hipotezy modelowania, wyznaczającej podział dziedziny na obszary o zbliżonych wartościach funkcji docelowej, oraz uczenie się hipotez, przybliżających tę funkcję w każdym z tych obszarów.
Konkretną realizacją przedstawionej koncepcji są drzewa modelowania, w których do reprezentacji hipotezy modelowania służy drzewo decyzyjne. Algorytm ich konstruowania, bezpośrednio oparty na standardowym algorytmie zstępującego konstrukowania drzew decyzyjnych, jest znany pod nazwą M5'. Drzewem modelowania jest drzewo decyzyjne, którego węzły w zwykły sposób testują wartości atrybutów określonych na dziedzinie, za pomocą testów odpowiednich dla różnych typów, jakie mogą wystąpić, a liście określają model dla związanych z nimi przykładów. Aby miało to sens, drzewo nie powinno być pogłębiane aż do osiągnięcia jednoelementowych zbiorów przykładów -- przyjmiemy , że z każdym liściem jest związany pewien podzbiór zbioru trenującego, o którego rozmiarze oraz zróżnicowaniu wartości funkcji docelowej decyduje kryterium stopu przyjęte podczas konstruowania drzewa. Z kolei kryterium wyboru testu przy tworzeniu każdego nowego węzła drzewa powinno wskazać test, który najlepiej podzieli zbiór przykładów związanych z tym węzłem na podzbiory, charakteryzujące się możliwie niewielkim zróżnicowaniem wartości funkcji docelowej. Do budowy drzewa decyzyjnego może być użyty bez żadnych zmian standardowy schemat zstępującej konstrukcji drzewa, używający odpowiednio sformułowanych kryteriów stopu i wyboru testu.
Kryterium stopu służy do podjęcia decyzji, kiedy zamiast kolejnego
węzła drzewa należy utworzyć liść, zaprzestając w ten sposób dalszego
podziału aktualnego zbioru przykładów na podzbiory. Skoro zależy nam
na tym, aby przykłady w liściach miały możliwie mało zróżnicowane
wartości funkcji docelowej, naturalne jest zatrzymywanie
rekurencyjnego pogłębiania drzewa, kiedy warunek ten zostanie
spełniony. Jeśli więc
oznacza aktualny zbiór przykładów, to
odpowiednie kryterium stopu można zapisać następująco:
| (40) |
Wybór testu dla tworzonego węzła drzewa decyzyjnego ma na celu podział
aktualnego zbioru przykładów na podzbiory charakteryzujące się
możliwie małym zróżnicowaniem wartości funkcji docelowej. Potrzebujemy
więc funkcji oceny testów formalizującej w pewien sposób takie
kryterium preferencji. Weźmy pod uwagę pewien test
.
Jego zastosowanie dzieli aktualny zbiór przykładów
na podzbiory
odpowiadające różnym wynikom testu
. W każdym z
takich podzbiorów miarą zróżnicowania wartości funkcji docelowej
jest wartość
. Za wartość funkcji oceny testu
względem zbioru przykładów
możemy przyjąć uśrednioną miarę
zróżnicowania dla wszystkich wyznaczanych przez ten test podzbiorów,
czyli
, |
(41) |
, |
(42) |
Nawet przy bardzo starannie dobranym kryterium stopu trudno konstruując drzewa modelowania w opisany sposób uniknąć nadmiernego dopasowania i do uzyskania dobrych efektów jest na ogół niezbędne przycinanie. Przebiega ono tak jak dla zwykłych drzew decyzyjnych i polega na zastępowaniu niektórych węzłów drzewa liśćmi, jeśli nie doprowadzi to do pogorszenia szacowanego błędu rzeczywistego. Przycinanie musi poprzedzać wyznaczenie modeli dla poszczególnych liści, ale także dla węzłów, dla których będzie brane pod uwagę przycięcie. Tylko wtedy można ocenić błąd poddrzewa o korzeniu w takim węźle na podstawie modeli dla wszystkich jego liści oraz błąd liścia, jaki powstałby po jego przycięciu, na podstawie modelu dla tego węzła. Najłatwiej jest dokonać takiej oceny, kiedy dysponujemy zbiorem przycinania niezależnym od zbioru trenującego. Wystarczy wówczas porównać błąd próbki uzyskiwany dla całego poddrzewa oraz dla liścia, jaki miałby je zastąpić, gdyż błąd próbki jest najbardziej prawdopodobną wartością błędu rzeczywistego.
Wartość rozmiaru kroku w aproksymatorach parametrycznych wpływa na ich
szybkość uczenia się oraz na możliwą do uzyskania
dokładność ich hipotez, a przy trybie inkrementacyjnym także na ich
stabilność. Małe wartości parametru
umożliwiają uzyskanie
dużej dokładności, czyli najlepszego możliwego dopasowania wag do
przykładów trenujących, a przy inkrementacyjnym uczeniu się dużej
stabilności, czyli niewielkich wahań wartości hipotezy po każdorazowej
modyfikacji wag. Zmienianie wag w małych krokach powoduje jednak, że
wymagana może być duża liczba takich kroków, co oznacza małą szybkość
uczenia się. W związku z tym odpowiedni
dobór tego parametru jest
zawsze pewnym kompromisem między szybkością a dokładnością oraz
stabilnością i na ogół musi być dokonany eksperymentalnie, przez
wypróbowanie wartości z pewnego zakresu, na ogół od
do
.
Różne wartości mogą okazać się najlepsze dla różnych aproksymatorów,
dziedzin i funkcji docelowych, trudno więc podać jakiekolwiek
uniwersalne wskazówki.
Często lepsze efekty można osiągnąć,
stosując zmienne wartości rozmiaru kroku, zależne na przykład od
etapu, na którym znajduje się proces uczenia się. Najprostsza
zdroworozsądkowa strategia polegałaby na rozpoczęciu od stosunkowo
dużej wartości
i redukowaniu jej po każdym
cyklu. Proponowane były również bardziej wyrafinowane strategie
adaptacji rozmiaru krokui, umożliwiające jego zmniejszanie i
zwiększanie na podstawie obserwacji gradientu i wartości funkcji błędu.
Większość przedstawionych w tym rozdziale aproksymatorów jest przeznaczona do stosowania w dziedzinach opisywanych za pomocą atrybutów ciągłych, co jest zgodne z potrzebami występującymi najczęściej w praktycznych zastosowaniach. Modyfikacje umożliwiające stosowanie także dla dyskretnych lub mieszanych przestrzeni atrybutów są najprostsze dla metod pamięciowych. W ich przypadku wystarczy odpowiednio dobrać metrykę, za pomocą której mierzy się odległość między przykładami. W najprostszym przypadku można posłużyć się w tym celu uogólnioną metryką euklidesową:
, |
(43) |
![]() |
(44) |
W metodach opartych na rozszerzonej reprezentacji
muszą być określone transformacje rozszerzające przestrzeń atrybutów z
uwzględnieniem ich typów, co może być kłopotliwe. Stosowane
rozwiązania są najczęściej projektowane ad hoc do konkretnych
zastosowań i nie ma dobrego rozwiązania uniwersalnego, np. dyskretnego odpowiednika aproksymatora CMAC. Użycie podstawowych metod
parametrycznych z atrybutami dyskretnymi jest możliwe przez
zastąpienie ich liczbowymi cechami. W przypadku atrybutów porządkowych
można po prostu zastąpić ich wartości kolejnymi liczbami całkowitymi,
w kolejności zgodnej z ustaloną dla nich relacją porządku. W przypadku
atrybutów nominalnych wprowadzanie w ten sposób sztucznej, nie mającej
żadnej rozsądnej interpretacji relacji porządku mogłoby być niewłaściwe,
najczęściej więc każdy atrybyt nominalny
zastępuje się
cechami
dla wszystkich wartości
, określonymi dla
dowolnego przykładu
następująco:
![]() |
(45) |
Niezależnie od sposobu organizacji pamięci w aproksymatorach pamięciowych, o którym będzie jeszcze mowa dalej, jej rozmiar musi być ograniczony. Przy stosowaniu aproksymatora w trybie inkrementacyjnym, kiedy liczba przykładów trenujących może okazać się dowolnie duża, należy liczyć się z całkowitym zapełnieniem pamięci. Pomijanie wówczas dalszych przykładów najczęściej jest niedopuszczalne, choćby dlatego, że inkrementacyjny tryb uczenia się jest często stosowany dla niestacjonarnych, zmiennych w czasie funkcji docelowych, wskutek czego nowe przykłady zawsze muszą być uwzględniane. Nie pozostaje wówczas nic innego, jak usunąć z pamięci niektóre ze starych przykładów i w ten sposób zrobić miejsce dla nowych. Pozostaje określić strategię wybierania przykładów do usunięcia.
Można wskazać trzy zasadnicze strategie usuwania, których wykorzystanie wydaje się rozsądne. Pierwsza i najprostsza to strategia losowa, zgodnie z którą w razie potrzeby z pamięci usuwa się równomiernie losowo wybrany przykład. Chociaż może to wyglądać na podejście bardzo prymitywne, nie powinno być lekceważone. Po pierwsze, nie wymaga ono żadnych dodatkowych obliczeń ani przechowywania dodatkowych danych. Po drugie, przez losowy wybór unika ono, być może, szkodliwego obciążenia, jakie mogłoby się wiązać z usuwaniem przykładów według ustalonej strategii deterministycznej. Taka strategia deterministyczna może w najprostszym przypadku polegać na usuwaniu z pamięci ,,najstarszego'' przykładu, czyli najdawniej w niej umieszczonego. Podejście to jest szczególnie uzasadnione przy uczeniu się niestacjonarnych funkcji docelowych, kiedy stopniowo stare przykłady są wypierane przez nowe, zawierające bardziej aktualne wartości funkcji. Aby jednak stosowanie go nie wprowadzało wspomnianego szkodliwego obciążenia, kolejne przykłady dostarczane uczniowi powinny być niezależnie losowane z dziedziny. Jeśli między kolejnymi przykładami występują pewne zależności, co często się zdarza w zastosowaniach, kiedy stanowią one kolejne obserwacje dotyczące pewnego procesu, usuwanie najstarszych przykładów może być niebezpieczne. Lepszą strategią powinno być wtedy usuwanie przykładów najrzadziej używanych do wyznaczenia wartości hipotezy aproksymatora dla przykładów, których dotyczą kierowane do niego zapytania. Dla każdego przechowywanego przykładu należałoby zatem utrzymywać także statystykę, określającą względną częstość jego wykorzystywania do odpowiadania na zapytania, czyli stosunek liczby zapytań, przy jakich był użyty, do ogólnej liczby zapytań zadanych aproksymatorowi od czasu, kiedy został on wprowadzony do pamięci.
W praktyce czasem oczekujemy od aprksymatorów funkcji, aby ich hipoteza była stosunkowo ,,gładka'' -- zmieniała wartości w niewielkim stopniu przy małych zmianach wartości cech. W drzewie modelowania, jeśli zmiana wartości cechy spowoduje dotarcie do innego liścia, może nastąpić duża skokowa zmiana wartości hipotezy. Będzie tak zwłaszcza dla drzew budowanych na podstawie niewielu przykładów. Aby tego uniknąć, stosuje się proces wygładzania. Realizuje się go przez tworzenie modeli regresyjnych nie tylko dla liści drzewa, lecz także dla każdego węzła wewnętrznego. Następnie po wyznaczeniu dla przykładu liścia i wartości związanego z nim modelu, następuje cofanie się po ścieżce od liścia do korzenia i wyznaczanie wartości modeli z odwiedzanych po drodze węzłów, które służą do modyfikacji wartości otrzymanej w liściu. W każdym węźle zmodyfikowaną wartość wyznacza się jako średnią ważoną wartości otrzymanej ,,z dołu'' (od potomka) i wartości otrzymanej z modelu w tym węźle, przy czym ważenie jest proporcjonalne do liczby przykładów trenujących związanych z każdym z węzłów. Tak obliczona wartość jest propagowana ,,w górę'' do kolejnego węzła, aż do osiągnięcia korzenia, w którym uzyskuje się ostateczną wartość hipotezy aproksymatora.
Do istoty rozproszonego przybliżonego kodowania należy duży rozmiar rozszerzonej przestrzeni cech, której tylko niewielka część jest aktywna dla każdego przykładu. Mimo więc, że do obliczania i aktualizacji hipotezy każdorazowo używa się niewielkiej liczby wag, często zaledwie kilku lub kilkunastu, łączna liczba wag jest zazwyczaj bardzo duża -- czasem zbyt duża w stosunku do możliwości pamięciowych.
Prosta i uniwersalna technika, jaka może złagodzić problem dużego
rozmiaru wektora wag, to kodowanie mieszające,
polegające w tym przypadku na odwzorowaniu obliczanych w
zwykły sposób logicznych numerów wag z zakresu od 0 do
na ich
fizyczne numery, będące liczbami z zakresu od 0 do
dla
. Przy takim podejściu jeden numer fizyczny odpowiada
pewnej liczbie numerów logicznych, przeciętnie
. Jest
to na ogół możliwe bez istotnego pogorszenia dokładności aproksymacji
dzięki temu, że zazwyczaj istnieje wiele rozszerzonych cech, które są
stosunkowo rzadko aktywne dla dostarczanych aproksymatorowi przykładów
i w związku z tym odpowiadające im wagi nie są w zasadzie używane.
Dzięki temu jedna fizycznie przechowywana waga może odpowiadać pewnej
liczbie różnych cech rozszerzonych. W praktyce zupełnie dobre efekty
dają wartości
równe od
nawet do
, co oznacza
redukcję rozmiaru wektora wag od
do
razy.
Odwzorowania numeru logicznego wagi
na numer fizyczny
powinno charakteryzować się możliwie dużą
równomiernością, czyli przypisywać każdemu numerowi fizycznemu taką
samą liczbę numerów logicznych. Na ogół przyjmuje się po prostu
| (46) |
We wszystkich przedstawionych metodach pamięciowych występuje wspólny
problem znalezienia wśród przechowywanych w pamięci przykładów
trenujących takich par
, dla których przykład
jest dostatecznie bliski według przyjętej metryki przykładowi
, będącemu przedmiotem zapytania. Naiwna implementacja poszukiwania
najbliższych sąsiadów wymaga obliczenia odległości
dla
każdego zapamiętanego przykładu
. Jeśli przykłady
są reprezentowane za pomocą
cech, to koszt tych obliczeń wynosi
. Tymczasem rozmiar zbioru zapamiętywanych przykładów
jest w metodach pamięciowych na ogół liczony co najmniej w
tysiącach, a często liczba przykładów przechowywanych w pamięci
nieustannie się zwiększa, co może uczynić koszt takiego bezpośredniego
podejścia do znajdowania najbliższych sąsiadów nieakceptowalnym.
Znacznie efektywniejszą implementację można uzyskać, wykorzystując
specjalne struktury danych nazywane
-d
drzewami, czyli drzewami
-wymiarowymi.
Struktura nazywana
-d drzewem jest szczególnego rodzaju
drzewem binarnym, zbudowanym z węzłów, z których każdy ma dwa węzły
potomne i reprezentuje podział pewnego regionu
-wymiarowej hiperprzestrzeni na dwa mniejsze regiony.
Ściślej rzecz biorąc, regiony te są hiperprostopadłościanami o
ścianach równoległych do hiperpłaszczyzn układu współrzędnych. Każdy
węzeł odpowiada pewnemu hiperprostopadłościanowi, a jego dwa węzły
potomne odpowiadają dwóm mniejszym hiperprostopadłościanom, na które
macierzysty hiperprostopadłościan jest dzielony. Podział ten
jest wyznaczany wzdłuż jednego z
wymiarów przez określoną wartość
progową współrzędnej (w naszym przypadku cechy) odpowiadającej temu
wymiarowi. W każdym węźle jest przechowywany numer wymiaru, wzdłuż
którego dokonuje on podziału, oraz odpowiednia wartość progowa.
Liście
-d drzewa odpowiadają dostatecznie małym regionom i w każdym
z nich przechowuje się zbiór punktów
-wymiarowej przestrzeni,
należących do odpowiedniego regionu. Umożliwia to efektywny dostęp do
punktów należących do określonego regionu.
This document was generated using the LaTeX2HTML translator Version 2K.1beta (1.48)
Copyright © 1993, 1994, 1995, 1996,
Nikos Drakos,
Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999,
Ross Moore,
Mathematics Department, Macquarie University, Sydney.
The command line arguments were:
latex2html -split 0 -no_navigation mow-w13.tex
The translation was initiated by Pawel Cichosz on 2004-02-12