Patryk DUŃSKI

Transkrypt

Patryk DUŃSKI
Patryk DUŃSKI
Wydział Informatyki, Zachodniopomorski Uniwersytet Technologiczny
w Szczecinie
E–mail: [email protected]
Algorytmiczne sieci neuronowe – idea działania,
słabe i mocne strony
Streszczenie: Głównym tematem referatu są algorytmiczne sieci neuronowe – abstrakcyjny twór z dziedziny sztucznej inteligencji, autorstwa referenta. W artykule przedstawiono definicję, sposób działania oraz podstawowe korzyści i wady płynące z ich zastosowania. Na koniec przytoczono kilka przykładów użycia sieci w problemach takich jak
rozpoznawanie tekstu, wspomaganie decyzji biznesowych, nauka matematyki przez automat i samoczynne programowanie.
1. Definicja
Algorytmiczne sieci neuronowe to niejednorodna struktura dostosowana do uczenia
ewolucyjnego, której celem jest realizowanie algorytmów zapisanych w formie dwuwymiarowych macierzy liczb rzeczywistych.
W skład tych sieci wchodzi neuron w ujęciu innym, niż do tej pory. Najprościej rzecz
ujmując są to elementy operujące na sygnałach, posiadające swoje wyjście oraz metodę
wywołania. W trakcie wywołania neuron może aktualizować swój stan (wyjście), jak
również wywoływać inne neurony.
Rys. 1. Przykładowy interfejs neuronu
Na rysunku 1 zaprezentowano przykładowy schemat interfejsu neuronu, który realizuje
neuron w tym ujęciu. Neurony w sieci ułożone są w jednowymiarową listę i podobnie
jak w przypadku neuronowych sieci komórkowych, każdy neuron sieci ma dostęp do
każdego neuronu (nie ma podziału na warstwy).
20
2. Sposób działania sieci
Sieć tego typu można zbudować w oparciu o kolejkę, w której znajdują się neurony,
które będą miały zostać zaktualizowane (kolejka wykonawcza sieci). Przy starcie sieci,
do kolejki dodawany jest neuron początkowy. Następnie w trakcie pracy sieci z kolejki
tej wyciągane i wywoływane są neurony, aż kolejka nie będzie pusta.
Jak wspomniano wcześniej algorytmiczne sieci to niejednorodne struktury, a więc składają
się z różnych rodzajów neuronów. Neurony te można podzielić na dwa podstawowe typy:
•
•
obliczeniowe,
sterujące.
Neurony obliczeniowe to takie, które uaktualniają swój stan na podstawie stanów innych
neuronów oraz swojego dotychczasowego (lub mówiąc prościej – operują na liczbach).
Do tego grona można zaklasyfikować neurony takie jak:
• McCullocha-Pitsa
Neuron dla n-neuronowej sieci posiada n wag, tak że dla każdego neuronu przypisana
jest osobna waga. Przy wywołaniu, neuron liczy sumę iloczynów stanów neuronów oraz
przypisanych im wag. Gdy obliczona suma jest większa od jedynki, stan neuronu
przyjmuje wartość „1”, w przeciwnym wypadku „-1”.
• Inkrementacyjny
Początkowo stan neuronu wynosi zero. Po każdym wywołaniu stan neuronu zwiększany
jest o jeden.
• Sumacyjny
Podobnie jak w wypadku neuronu McCullocha-Pitsa, neuron posiada n wag, z tym że
jego działanie jest inne. Stan wyjściowy neuronu, to suma stanów tych neuronów, dla
których przypisana waga jest większa od zera.
Przykładowo: dla neuronu sumacyjnego z wagami [1, -1, -1, 1], wyjście neuronu będzie
równe sumie neuronu pierwszego i czwartego sieci.
• Warunkowy
Neuron wykorzystuje 3 wagi. Każda z tych wag jest referencją wskazującą na neuron.
Podczas wywołania neuron przyrównuje do zera stan neuronu, na który wskazuje pierwsza waga. Gdy jest on większy od zera, stan tego neuronu zostanie skopiowany z neuronu,
na który wskazuje waga druga, w przeciwnym razie z tego, na który wskazuje waga trzecia. Przykładowo: dla neuronu warunkowego z wagami [2, 2, 0], neuron pobierze stan
neuronu drugiego. Gdy będzie on większy niż zero, zostanie on ustawiony na wyjściu tego
neuronu, w innym razie skopiowany na wyjście zostanie stan neuronu zerowego.
Natomiast neurony sterujące to takie neurony, które dodają do kolejki wykonawczej
neurony, które powinny zostać zaktualizowane. Można powiedzieć, że neurony te, pobudzają inne neurony.
W tym wypadku, do tej grupy należą neurony takie jak:
•
Neuron z listą wywołań
21
Dla n-neuronowej sieci, neuron ten korzysta z n wag. Neuron tego rodzaju dodaje do
kolejki wykonawczej te neurony, dla których przypisane wagi są większe od zera. Przykład: neuron o wagach [1, -1, -1, 1] wywoła pierwszy i czwarty neuron.
• Neuron pętli
Neuron ten zapamiętuje ile razy został wywołany. Gdy liczba wywołań jest mniejsza niż
ta, którą określa pierwsza waga tego neuronu, dodaje on do kolejki wykonawczej neuron, na który wskazuje waga druga, a następnie siebie samego.
Dodatkowymi typami neuronów w sieci są neurony wejściowe i wyjściowe. Ich zadaniem jest dostarczanie innym neuronom danych wejściowych i wyprowadzanie z sieci
wyniku. Zarówno wejścia, jak i wyjścia, to wektor liczb całkowitych.
Efektem takiego podziału jest to, że sieć sama steruje swoim wykonaniem, tj. zarówno
kolejność, jak i sposób wykonywania obliczeń jest określony za pomocą przypisanych
sieci wagom.
3. Uczenie sieci
Uczenie sieci polega na wynalezieniu takiej macierzy wag, która najlepiej odpowiada
wzorcowi. Wzorzec to zbiór połączonych wejść oraz odpowiadających im wyjść sieci.
Przy uczeniu wykorzystywany jest algorytm ewolucyjny. Uczenie może odbywać się
w dwóch trybach:
• Uczenie z prototypem
Przed samym uczeniem określany jest prototyp – opis z jakich neuronów i w jakiej
ilości powinna być zbudowana sieć. Uczenie w tym wypadku ogranicza się do odpowiedniego dobrania wag dla tego prototypu. Wagi oceniane są wedle następujących
kryteriów: 1 – procent poprawnych odpowiedzi, 2 – czas działania. W populacji algorytmu ewolucyjnego preferowane są sieci najlepiej spełniające powyższe kryteria,
tj. które mają największą poprawność i najkrótszy czas działania.
• Uczenie bez prototypu
Procedura ucząca sama określa strukturę sieci poprzez sukcesywne modyfikowanie
liczby i rodzajów neuronów. W tym wypadku dodatkowym kryterium oceny sieci jest
liczba neuronów. Preferowane są te sieci, które mają ich mniejszą liczbę, a jednocześnie
równie dobrze radzą sobie z rozwiązywaniem materiału uczącego. W ten sposób w sieci
pozostają tylko te neurony, które są jej niezbędne do poprawnego działania.
Przy odpowiednio dobranym prototypie, wybranie trybu uczenia nie ma wpływu na
wydajność działania sieci. Jednak w przypadku uczenia algorytmem ewolucyjnym
z prototypem, uczenie przebiega statystycznie szybciej, jednak w przypadku uczenia
bez prototypu, powstała sieć neuronowa zajmuje mniej pamięci RAM. Dzieje się tak, ze
względu na to, że przy ustalonym prototypie zwiększa się stosunek ilości poprawnych
macierzy wag w stosunku do wszystkich możliwych do wylosowania, a sieć neuronowa
i tak korzysta tylko z tych neuronów, które są jej konieczne do obliczeń (za pomocą
neuronów sterujących). Jednak w przypadku uczenia bez prototypu, sieć w swojej strukturze posiada tylko potrzebne neurony, co oszczędza pamięć operacyjną.
22
4. Wady i zalety
Za używaniem tego typu sieci przemawia wiele argumentów.
•
Nowe możliwości. Sieci te dają nowe możliwości. Potrafią one nauczyć się wzorców, z którymi nie radzą sobie inne sieci lub które przy uczeniu budują bardziej
skomplikowane struktury. Także w przypadku bardziej skomplikowanych problemów, ich uczenie przebiega szybciej.
• Wydajność działania. Sieci algorytmiczne są też wydajniejsze w obliczeniach (porównując je na przykład z sieciami komórkowymi). Dzieje się tak przez to, że wykonują się
tylko te neurony, które są potrzebne w danej chwili, dzięki mechanizmom sterującym
przebiegiem obliczeń (neuronom sterującym i kolejki aktualizacji neuronów).
• Deterministyczne działanie. Pod warunkiem, że w strukturze sieci nie ma żadnych
neuronów działających niedeterministycznie, to dla tej samej sieci (o tej samej
strukturze i wagach) oraz dla tych samych danych wyjściowych, wynik zawsze jest
jednakowy. Ułatwia to testowanie, uczenie i analizę działania sieci.
• Wykorzystanie dotychczasowej wiedzy. Dzięki specjalnym typom neuronów, sieć
może skorzystać z repozytoriów wiedzy, czyli zbioru innych sieci, które poprawnie
rozwiązują inne problemy. Sieć może wbudować je w swoją strukturę. Dzięki temu
przy opracowywaniu rozwiązania może zostać wykorzystany już działający model.
W ten sposób jeden bardziej złożony problem, można podzielić na podzbiory mniejszych problemów i rozwiązywać je niezależnie, przez co uczenie sieci jest szybsze.
Są też wady i nie w każdym przypadku są one najlepszym rozwiązaniem.
•
•
Ograniczenia w metodach uczących. Podstawową wadą tego typu struktur jest to,
że sposób działania sieci uniemożliwia zaimplementowanie wielu metod uczenia
i praktycznie jedyną metodą jest zastosowanie algorytmu ewolucyjnego. Przez to
w przypadku niektórych wzorców, uczenie przebiega bardziej optymalnie w strukturach innego typu.
Trudności w doborze materiału uczącego. Dodatkowo, aby uczenie przebiegało
sprawnie, ważne jest odpowiednie ułożenie materiału uczącego, co wymaga wprawy,
gdyż nie da się tego procesu sprowadzić do kilku prostych zasad, ze względu na dużą
różnorodność problemów jakie można sformułować.
5. Przykłady zastosowania
Oczywiście omawiane sieci można stosować wszędzie tam, gdzie były do tej pory stosowane sieci neuronowe. Kilka z tych dziedzin zostanie tutaj omówionych. Poza nimi
omówię kilka, z którymi większość typów sieci sobie nie radzi lub radzi bardzo słabo.
• Systemy wczesnego ostrzegania w przedsiębiorstwach
Idea działania jest taka, że program na podstawie danych z wnętrza firmy (a także
ewentualnie o ogólnym stanie gospodarki) ma określić czy firma ma się dobrze lub czy
23
też może coś złego się z nią dzieje i należałoby uruchomić środki nadzwyczajne. Sieci
algorytmiczne w tym przypadku na przykładowych danych z pełną skutecznością określały przyszły stan firmy.
• Wspomaganie podejmowania decyzji dla CMO
W tym wypadku chodzi o narzędzie do wspomagania podejmowania decyzji marketingowych w przedsiębiorstwach. Powstał program oparty na sieciach algorytmicznych,
który właśnie temu służy. Działa on w dwóch trybach: (a) Sugeruje optymalne parametry, (b) określa czy podawane mu decyzje są prawidłowe.
Został on przetestowany na dwóch symulatorach gospodarczych. Pierwszym z nich jest
działający w internecie SGE Strateg [1]. Program nie tylko nie doprowadził do bankructwa wirtualnej firmy, ale także zapewnił jej kilkukrotne zwycięstwo. W drugim przypadku został przetestowany w konkursie Eurel IMC [2], na symulatorze TOPSIM autorstwa firmy Simens, którego używa w szkoleniach swoich przyszłych menadżerów.
Niestety tutaj ze względu na zbyt małą ilość danych w pierwszym etapie nie został on
wykorzystany w takim stopniu jak w SGE, ale z pewnością rokuje dość dobrze. Po
zastosowaniu go post factum, okazuje się, że można by uniknąć wielu błędów, które
popełniła nasza drużyna.
• Rozpoznawanie tekstu
OCR (ang. Optical Character Recognition) to jeden z najpopularniejszych problemów,
w którym wykorzystuje się sieci neuronowe. W chwili obecnej wiele instytucji przeprowadza digitalizację swoich zbiorów bibliotecznych. Systemy OCR radzą sobie z tym
dosyć dobrze, jednak nie są idealne i nie zawsze są w stanie rozpoznać zapisane słowo.
Z tego powodu powstają takie programy jak Capatcha [3]. Słowa z którymi nie radzą
sobie najlepsze systemy OCR, są dodatkowo deformowane i używane w celu uniemożliwienia dostępu automatom do miejsc, gdzie dostępu mieć nie powinny. Przy okazji
ludzie wykorzystywani są do przepisywania zbiorów bibliotecznych na wersje cyfrowe.
Program ten jest dobrym wyzwaniem dla nowych systemów OCR.
Projekt budowy OCR na bazie algorytmicznych sieci neuronowych nie jest jeszcze
skończony, ale już w tym momencie sieci radzą sobie z ok. 10% słów.
• Automatyczna nauka matematyki
Tutaj algorytmiczna sieć neuronowa ma za zadanie nauczyć się w jaki sposób rozwiązywać formuły matematyczne.
Mówiąc prościej, sieci na przykładach „pokazujemy” czym są poszczególne znaki matematyczne i w jaki sposób je traktować, tak aby umiała ona rozwiązywać dowolne
formuły z tymi znakami.
W pierwszym kroku, jako że sieć na wejściu przyjmuje zespolone pary liczb całkowitych, trzeba ustalić konwencję zapisu równań.
Przykładowo możemy przyjąć, że:
(1, x) – to liczy całkowite (gdzie x to konkretna liczba),
(2, 1) – to dodawanie,
(2, 2) – odejmowanie,
(2, 3) – mnożenie, itd.
24
Następnie możemy zbudować pakiety uczące. Przykładowo:
•
„6 + 7 = 13”, czyli zgodnie z wcześniejszą konwencją (wejście sieci → wyjście):
(1, 6), (2, 1), (1, 7) → (1, 13)
• „6 ⋅ 7 = 42”, co przekładamy na:
(1, 6), (2, 3), (1, 7) → (1, 42)
• „2 + 2 ⋅ 2 = 6”: (1, 2), (2, 1), (1, 2), (2, 3), (1, 2) → (1, 6), itd.
Gdy ułożymy odpowiednio dużo takich przykładów jak powyżej (tak aby sieć miała
okazję „poznać” wszystkie przypadki szczególne), możemy rozpocząć uczenie w efekcie czego powstanie sieć, która będzie potrafiła policzyć dowolną formułę zawierającą
zdefiniowane znaki.
W przypadku gdy mamy do rozwiązania dużo zadań matematycznych, a dysponujemy
taką siecią, możemy jej tutaj użyć i w tym czasie pójść na kawę, podczas gdy osoba,
która sama potrafi policzyć tego typu zadania i nie potrzebuje automatu, będzie musiała
obejść się bez kawy.
• Automatyczne programowanie
Na sam koniec najbardziej złożony z omawianych tu problemów stawianych przed algorytmicznymi sieciami neuronowymi. Jest to tylko koncept, który nie został jeszcze do
końca zrealizowany. Chodzi o to, aby na podstawie definicji w formie materiału uczącego
(czyli powiązanych par wejść i wyjść) tworzyć algorytmy bez udziału programisty.
Na początek zdefiniujmy algorytm X, który realizuje określony problem. Przy założeniu, że
korzystając z skończonej ilości instrukcji da się zbudować każdy algorytm (tak jak
w architekturze RISC), a następnie da się go zapisać w postaci macierzy danych (tj. istnieje
taka macierz, która odpowiada algorytmowi X), to możliwe jest wylosowanie tej macierzy.
W przypadku algorytmicznych sieci neuronowych, każdy typ neuronu reprezentuje jakąś instrukcję, której sposób wykonania determinują wagi własne oraz stany innych neuronów,
a stany neuronów to wypadkowa wejścia sieci i ich wag, tak więc całe działanie sieci jest zdeterminowane przez macierz wag oraz dane wejściowe. Wagi, to nic innego jak zapis algorytmu, który wykonuje określone operacje na danych i przez losowanie możemy trafić w taki ich
zbiór, który realizuje postawiony problem. Gdyby w postaci neuronów dało się zapisać zbiór
takich instrukcji, z których można zbudować każdy możliwy algorytm, a postawione tutaj
założenia są poprawne, to sieć taka będzie realizowała automatyczne programowanie.
W tym momencie algorytmiczne sieci neuronowe nie radzą sobie jeszcze z każdym
typem algorytmów i potrzeba sporo pracy, aby to zmienić, oczywiście jeżeli jest to
w ogóle możliwe.
Literatura
1.
Strona „Symulacyjnej Gry Ekonomicznej Strateg”: http://sge-strateg.pl/
2.
Strona konkursu: http://www.eurel.org/imc
3.
Strona projektu: http://www.captcha.net/
25

Podobne dokumenty