Tadeusiewicz – Sieci neuronowe 1

Tadeusiewicz – Sieci neuronowe 1
Spis treści

Sieci neuronowe (1)

ENTER 1, Styczeń 1995

Ryszard Tadeusiewicz

Moda czy metoda?

Moda na sieci neuronowe przejawia się w ogromnej liczbie publikacji naukowych, jakie ukazują się na ten temat na świecie, niezliczonych konferencjach, na których prezentowane są wyniki prac naukowych i prób zastosowań, a także znajduje swój wyraz w liczbie uczonych, którzy uważają się za autorytety w tej dziedzinie. Liczba ta ostatnio lawinowo wzrasta.

Czas trwania takiej mody na ogół trwa od kilku miesięcy do kilku lat – na ogół do czasu, aż kolejna fascynacja nie ściągnie rzeszy “poszukiwaczy złota” w zupełnie nowe rejony. Przykładów można wymienić bez liku, m. in. masowy “atak” na nadprzewodniki wysokotemperaturowe, mijająca już fala mody na fraktale i chaos lub nawracające okresowo (jak epidemie dżumy!) fascynacje teorią zbiorów rozmytych.

JeśIi coś jest modne, to czasem warto się do tej mody przyłączyć, gdyż w ten sposób łatwiej zdobyć uznanie, skutecznie zaprezentować swój dorobek, zapewnić sobie możliwość publikacji oraz zyskać zamówienia na programy lub fundusze na badania. Dlatego modne tematy warto i nalezy poznać. Można takze ignorowad modę i trzymać się na uboczu, ale wtedy także warto wiedzieć, z czego się rezygnuje. Niezależnie wiec od tego, Drogi Czytelniku, czy pragniesz włączyć sieci neuronowe do swoich prac, czy zamierzasz je wyniośle ignorować – powinieneś je poznać.
Ten artykuł, a także następne, które po nim nastąpią, mają na celu pokazanie, na czym ta modna dziedzina polega, jakie są jej realne atuty przyciągające badaczy, a także, jakie są jej ograniczenia, o których entuzjaści z reguły zapominają. Kto zastosował sieci neuronowe i rozwiązał ciekawy problem oraz, kto się na tym srodze poparzył. Ten cykl artykułów publikowanych na łamach ENTER-a powinien dać Ci pewien calościowy obraz problematyki sieci neuronowych, dzięki czemu będziesz mógł sam wybrać – czy przyłączysz się do grona entuzjastów tej nowej techniki, czy obdarzysz ją swoją wyniosłą wzgardą – wiedząc jednak dokładnie, dlaczego tak postępujesz.

Cykl będzie wyczerpujący, to znaczy postaram się zaprezentować wszystko to, co w sieciach najważniejsze i najnowsze. Będzie on jednak pozbawiony (celowo) tych licznych, drobnych, ale uciążliwych szczegółów, w które obfituje każda dziedzina techniki obliczeniowej, a które dają się zwykle wyrazić wyłącznie przy użyciu formuł matematycznych. Potraktowałem bowiem poważnie zasadę zapisaną na okładce wspaniałej książki Stephena W. Hawkinga “Krótka historia czasu”, głoszącą, że każde równanie zamieszczone w tekście zmniejsza liczbę Czytelników o połowę. Zależy mi na tym, by ten tekst przeczytały liczne osoby, wśród których znajdą się zapewne takie, które uznają sieci neuronowe za fajne i pożyteczne narzędzie. Dlatego nie zamieszczę w tekście ani jednego równania, jeśli bowiem choć jednego Czytelnika może to zniechęcić, to uważałbym to za niepowetowaną stratę. Natomiast szczególnie zainteresowa-nych informuję, że wszystkie szczegóły na temat teorii i zastosowań sieci neuronowych zawarłem w mojej książce pod tytułem “Sieci neuronowe”, wydanej przez Akademicką Oficynę Wydawniczą RM w 1993 roku. Jest tam tyle wzorów, że gdyby reguła Hawkinga miała obowiązywać w sposób dokładny i gdyby chociaż jedna osoba miała przeczytać książkę do końca – liczba potencjalnych czytelników na początku powinna być większa od liczby neuronów w mózgu (i wielokrotnie większa od liczby ludzi, jacy żyli od początku dziejów). Mam jednak nadzieję, że obliczenia wielkiego astrofizyka są w tym miejscu niedokładne i znajdę chociaż kilka osób, które podejmą także trud przeczytania poważnej książki.

  1. stanowią wygodną i tanią propozycję wieloprocesorowego systemu o bardzo wielu elementach przetwarzających równolegle dostarczane informacje;
  2. nie wymagają programowania, tylko wykorzystują proces uczenia.

Pierwszy atut sieci, polegający na możliwości realizacji w nich postulatu “masowego równoległego przetwarzania” (massive parallel processing) wynika z faktu, że sieć neuronowa zbudowana jest z bardzo wielu (od kilkuset do kilkudziesięciu tysięcy) równocześnie pracujących i wspólnie przetwarzających informacje elementów zwanych neuronami. Ich pierwowzorem są komórki nerwowe składające się na mózg człowie-ka, ale w istocie elementy używane w technicznych sieciach neuronowych są skrajnie uproszczone i zawierają tylko podstawowe (nie do końca wiadomo, czy najważniejsze) właściwości swoich biologicznych pierwowzorów. Niżej je dokładniej opiszę, teraz jednak istotne jest tylkoto, że neurony są bardzo proste w swojej budowie i działaniu, w związku z czym łatwo jest je symulować za pomocą komputera, a specjalistyczne układy scalone (są już takie) mogą zawierać setki takich elementów w jednym “chipie”.

Z takich neuronów (czyli procesorów zawierających zarówno elementy pamięci, jak i pewne możliwości przetwarzania informacji) buduje się sieć, łącząc je ze sobą według pewnych prostych reguł. Przy wyborze sposobu połączeń i struktury sieci ponownie spotykamy maksymalne uproszczenia, gdyż generalnie w sieciach neuronowych wierność biologicznemu oryginałowi poświęca się na rzecz prostoty. Używane sieci najczęściej buduje się jako struktury złożone z pewnej liczby warstw neuronów, połączonych między sobą w sąsiednich warstwach na zasadzie “każdy z każdym”. Jest to biologicznie nie uzasadnione i bardzo daleko idące uproszczenie. Struktura warstwowa występuje wprawdzie w pewnych rejonach mózgu (np. w korze wzrokowej), jednak z pewnością nie jest tak prosta i regularna, jak struktura budowanych sztucznie sieci – nie mówiąc już o tym, że inne fragmenty mózgu mają zupełnie inną budowę, na przykład bardziej zbliżoną (lokalnie) do topologii gwiazdy. Ponieważ jednak przyjęcie struktury warstwowej ułatwia techniczne operowanie siecią i zapewnia możliwość jej zdefiniowania przy minimalnym wkładzie pracy zarówno w rozwiązaniach symulacyjnych (wystarczy kilka prostych pętli w programie, by “obsłużyć” całą sieć), jak i przy wykonaniach sprzętowych (obwód drukowany, na którym rozmieszcza się chipy z modelami neuronów ma prostą i łatwą do wykonania strukturę) – wszyscy tak postępują, nie martwiąc się ani przesłankami biologicznymi, ani dowodami wskazującymi, że architektura sieci bardziej wymyślnie dostosowanej do charakteru zadania może znacznie lepiej realizować stawiane zadania.

Z kolei pomysł jednorodnego “pełnego” schematu połączeń między elementami poszczególnych warstw zapewnia minimalizację wysiłku związanego z definiowaniem sieci, chociaż odbywa się to kosztem dużego nakładu (np. pamięci w modelu symulacyjnym czy potencjalnych połączeń w strukturze chipu), niezbędnego dla zapewnienia możliwości odwzorowania w sieci wszystkich niezbędnych przy takim założeniu połączeń. Warto zauważyć, że bez przyjęcia (arbitralnie!) jednorodności struktury sieci samo tylko opisanie topologii jej połączeń wymaga podania setek tysięcy parametrów, co skutecznie udaremnia wszelkie próby stosowania takich struktur o nadmiernie wymyślnych architekturach połączeń. Natomiast decyzja o przyjęciu połączeń typu “każdy z każdym” stanowi elementarny i nie wymagający żadnego głębszego zastanowię-nią akt woli konstruktora sieci. Tak jest łatwiej i dlatego (prawie) wszyscy tak robią. Możliwość wygodnego (czytaj: bez-4 myślnego) stosowania tego typu uproszczenia wynika z faktu, że w trakcie procesu uczenia sieć “sama” wybierze z dostęp nych jej początkowo wszystkich połączeń te, które są naprawdę potrzebne, odrzucając (zerując) pozostałe.

Podsumowując tę część rozważań możemy stwierdzić, że sieć składa się z bardzo wielu prostych (i tanich!) elementów zdolnych do równoczesnego przetwarzania informacji, których wspólne i równoczesne działanie tworzy efekt w postaci przetwarzania informacji wejściowej, podawanej do pierwszej warstwy neuronów (dane) na sygnały pojawiające się na wyjściach wszystkich neuronów sieci. Niektóre z nich, tworzące ostatnią warstwę sieci, dostarczają rozwiązania postawionego zadania (wyniki). Dzięki równoczesnej pracy wszystkich neuronów sieć może dostarczać rozwiązań o wiele szybciej niż jakikolwiek inny system komputerowy – oczywiście pod warunkiem realizacji elementów sieci w postaci specjalizowanych bloków elektronicznych lub optoelektronicznych (bywają i takie). Ponieważ widziałem wiele zawiedzionych min różnych naiwniaków, czuję się w obowiązku podkreślić oczywisty fakt, że chętnie stosowane symulowanie sieci na zwykłych komputerach nie zwiększa ich szybkości – chociaż może przyczyniać się do efektywniejszego rozwiązywania problemów dzięki zastąpieniu skomplikowanego algorytmu numerycznego prostszą obliczeniowo “sieciową aproksymacją”.

Tutaj warto jedynie uwypuklić kilka ogólnych zagadnień wiążących się z tym tematem.

Po pierwsze, możliwość uczenia sieci usuwa jeden z najtrudniejszych problemów wiążących się z techniką systemów wieloprocesorowych. Ogólnie wiadomo, że sensowne zaprogramowanie systemu złożonego z kilku jednostek mających równocześnie przetwarzać informacje (np. systemu wielotransputerowego) wymaga o wiele większego wysiłku, niż napisanie programu dla konwencjonalnej maszyny jednoprocesorowej. Gdyby trzeba było “ręcznie” programować sieć złożoną z kilkudziesięciu tysięcy równocześnie pracujących procesorów (neuronów) – byłby to prawdziwy horror. Tymczasem twórca sieci nie musi nawet palcem kiwnąć – sieć sama się zaprogramuje w wyniku procesu uczenia. Metody tego uczenia i samouczenia się sieci będą opisane (na tyle, na ile to będzie możliwe bez używania zaawansowanej matematyki) w następnych odcinkach cyklu.

Po drugie, użytkownik może na własną rękę sieć dowolnie “douczać” adaptując jej zachowanie do swoich szczegółowych wymagań. Wysiłek włożony w ten “trening” może być naprawdę minimalny (w skrajnych przypadkach sieć może douczać się sama, obserwując wyniki swojego działania i korygując ewentualne błędy). Żeby było jeszcze atrakcyjniej – twórca sieci może nie mieć pojęcia, jak należy rozwiązać postawione zadanie, a sieć potrafi sama znaleźć to rozwiązanie i zapamiętać “odkrytą” przez siebie metodę! Na tej właśnie zasadzie działają między innymi systemy wykorzystujące sieci neuronowe do prognoz giełdowych – my nie wiemy, od czego naprawdę zależy zwyżka lub zniżka cen określonych akcji, ale możemy zmusić sieć, by próbowała te zmiany przewidywać na podstawie analizy wcześniejszych zmian notowań traktowanych jako materiał do uczenia sieci. Najzabawniejsze jest, że sieć naprawdę potrafi to zrobić! Znane są przykłady znakomitego prognozowania za pomocą sieci notowań giełdowych, kursów walut, zapotrzebowania na energię elektryczną i wielu innych na pozór przypadkowych przebiegów, przy czym twórcy sieci nawet po ich wytrenowaniu nie potrafili dojść, “jak ona to robi”.

Zaskakujących analogii z ludzkim umysłem jest w dziedzinie sieci neuronowych więcej. Sieć nie daje się na przykład “wyprowadzić w pole” – jeśli uczący ją nauczyciel popełnia błędy lub jest niekonsekwentny, sieć uzyskuje możliwość realizacji stawianego zadania lepiej niż nauczyciel, który ją naucza. Obserwacje, za pomocą których sieć “trenujemy” mogą być także obarczone błędami, a także decyzje nauczyciela, na których sieć ma się wzorować, bywają błędne (zdarza się to zwłaszcza w zadaniach rozpoznawania obrazów). Okazuje się, że sieć potrafi te losowe zjawiska “uśrednić”, uzyskując zwykle bardziej klarowny obraz rozpoznawanego wzorca, niż by wynikało z podawanych w trakcie uczenia przykładów.

Sieć wykazuje też zwiększoną odporność na uszkodzenia -potrafi zwykle działać poprawnie nawet w przypadku, kiedy część jej elementów jest uszkodzona, połączenia zerwane, a informacje zawarte w strukturze sieci (to one zawierają właśnie zgromadzoną w toku uczenia “wiedzę” sieci) bezpowrotnie stracone. Takich właściwości nie ma żaden z komputerów, natomiast są one dobrze znane neurologom, gdyż mózg człowieka wykazuje właśnie zdumiewające zdolności poprawnego działania, mimo bardzo obszernych niekiedy uszkodzeń.

Podsumowując tę część rozważań należy stwierdzić, że sieci neuronowe są zdolne do samoprogramowania w wyniku procesu uczenia, a także wykazują pewne cechy podobne do cech rzeczywistego mózgu, a wyraźnie odmienne od cech klasycznych komputerów. Wszystkie te możliwości słusznie uznawane są za ważne i wysoce przydatne atuty, dlatego liczba zastosowań sieci neuronowych jest już bardzo długa i zapewne będzie w najbliższym czasie dalej wydłużana.

NASA wykorzystuje sieci neuronowe do sterowania ramieniem robota, którego zadaniem jest chwytanie przedmiotów znajdujących się w dowolnym położeniu (dotyczy to między innymi manipulatora działającego w ładowni promów kosmicznych, gdzie w warunkach nieważkości szczególnie trudno jest utrzymać manipulowane obiekty w stałym położeniu, a pewność chwytu jest uzależniona od stopnia zgodności orientacji przestrzennej osi przedmiotu i elementów chwytaka.

Również do zadania sterowania ramienia robota dedykowana jest sieć neuronowa zbudowana przez uczonych z New York University Medical Center. Zastosowano sieci jako alternatywę dla złożonych tensorowych obliczeń dotyczących parametrów ruchu ramienia robota w celu znacznego przyspieszenia działania systemu sterowania, który dzięki zastosowaniu sieci może działać w czasie rzeczywistym. Zwykłe algorytmy realizowane na tych samych komputerach nie są w stanie osiągnąć wystarczającej szybkości przy wyznaczaniu wszystkich potrzebnych współrzędnych, przyspieszeń i wielkości wymaganych sił i momentów obrotowych.

Firma General Dynamics opracowała dla potrzeb US Navy oparty na sieciach neuronowych system klasyfikujący i rozpoznający sygnały sonarowe. System ten pozwala rozpoznawać
szumy charakterystyczne dla napędów różnych typów statków i okrętów. Udało się tak dokładnie wytrenować sieć, że jest ona zdolna do rozróżniania między sobą szumów różnych okrętów tego samego typu, co pozwala na identyfikację nazwy jednostki, a także potrafi rozpoznawać za pomocą hydrofonów niektóre dźwięki nadwodne, na przykład szum wytwarzany przez helikopter unoszący się nad powierzchnią oceanu.

Podobne osiągnięcia, ale w zakresie identyfikacji samolotów uzyskali naukowcy z University of Pensylvania współpracujący z firmą TRW. Zbudowana przez nich sieć neuronowa potrafi rozpoznawać samoloty z taką dokładnością, że podstawą do bezbłędnej identyfikacji może być detal wielkości 18 cali zaobserwowany z odległości 50 mil.

W szpitalu Anderson Memoriał Hospital w Południowej Karolinie wykorzystano sieci neuronowe do realizacji procesu optymalizacji leczenia, zyskując (jak podają publikacje) miliony dolarów oszczędności i ratując życie kilkudziesięciu ludzi. Niestety, bliższe dane na temat tego ciekawego przedsięwzięcia nie są znane.

Wielki producent rakiet, firma General Devices Space Systems Division użyła sieci neuronowych do sterowania pracą 150 zaworów doprowadzających paliwo i tlen do silników rakiety Atlas. Okazało się, że odpowiednio wytrenowana sieć potrafiła w oparciu o dane na temat aktualnych fluktuacji mocy silnika sterować zaworami trafniej, niż poprzednio stosowany, kosztowny, zawodny i złożony system automatyki oparty na wykorzystaniu danych z setek sensorów.

Bardzo znanym zastosowaniem sieci neuronowej jest wykorzystany przez firmę Eaton Corporation układ sterowania pozwalający na wspomaganie kierowcy dużej ciężarówki (pięć osi, osiemnaście kół) przy wykonywaniu niektórych szczególnie trudnych manewrów (cofanie z naczepą).

Sieci neuronowe często stosowane są w energetyce, zwłaszcza do prognozowania zapotrzebowania na moc elektryczną. Jedno z bardziej znanych wdrożeń w tym zakresie dotyczy elektrowni BC Hydro w Vacouver, szczególnie trudnej do sterowania, ponieważ jej cztery turbiny mają wyraźnie różniące się charakterystyki i zadanie ich włączania i wyłączania w odpowiedzi na zmienne zapotrzebowanie na moc elektryczną ze strony odbiorców energii jest wyjątkowo złożone i niewdzięczne.
Takich i podobnych doniesień o udanych zastosowaniach sieci neuronowych znaleźć można w najnowszym piśmiennictwie bez liku. Żeby nie przedłużać nadmiernie tego wątku wymienię jeszcze tylko kilka dalszych zastosowań w skrócie.

Amerykańskie siły powietrzne (US Air Force) stosują sieci neuronowe do rozwoju symulatorów lotu.

Do sieci neuronowych odwołał się koncern Ford Motor Company przygotowując nowy system diagnostyczny dla swoich silników.

Firma Halliburton stosuje sieci neuronowe do identyfikacji typu skał napotykanych podczas prowadzenia odwiertów poszukiwawczych przy poszukwaniu złóż ropy i gazu.

Linie TWA stosują sieci neuronowe do poszukiwania bomb w swoim terminalu na lotnisku JFK w Nowym Yorku.

Pierwsza klasa zadań, przy rozwiązywaniu których trzeba całkowicie zrezygnować z sieci, związana jest z manipulacjami na symbolach. Wszelkie formy przetwarzania informacji w postaci symbolicznej są niesłychanie trudne do przeprowadzenia przy użyciu sieci neuronowych, dlatego obecność elementu polegającego na przetwarzaniu symboli powinno być sygnałem, że z użycia sieci trzeba będzie zrezygnować. Sprowadzając rzecz do krańcowego przykładu można powiedzieć, że nie ma elementarnego sensu budowanie edytora tekstu działającego w oparciu o koncepcję sieci neuronowej lub procesora wyrażeń algebraicznych wykorzystującego tę samą koncepcję.

Drugim “klasycznym” obszarem, w którym sieci neuronowej nie da się zastosować, jest problematyka obliczeń, przy których wymagana jest wysoka dokładność wyniku numerycznego. Sieć pracuje zawsze w sposób “jakościowy”, to znaczy dostarczane przez nią rozwiązania mają zawsze charakter przybliżony. Dokładność tego przybliżenia jest zadowalająca w wielu zastosowaniach: przy przetwarzaniu sygnałów, analizie obrazów, rozpoznawaniu mowy, prognozowaniu wartości notowań giełdowych, sterowaniu robotów, aproksymowaniu wartości złożonej funkcji itp. Absolutnie nie do przyjęcia jest jednak przybliżone 15 wykonywanie obliczeń charakterystyczne dla sieci neuronowej 3 w przypadku na przykład obsługi kont bankowych lub realizacji precyzyjnych obliczeń inżynierskich.
Trzeci wreszcie obszar, w którym trudno oczekiwać dobrych wyników przy stosowaniu sieci neuronowych, związany jest z zadaniami wymagającymi wieloetapowego rozumowania – na przykład wieloetapowego rozstrzygania o prawdziwości lub fałszywości pewnych sekwencji stwierdzeń logicznych. Sieć na ogół usiłuje rozwiązać postawiony problem jednokrokowo – jeśli się jej to uda, wynik jest dostępny natychmiast i jest to duży praktyczny sukces. Jeśli jednak trzeba przeprowadzić pewien ciąg rozumowania, a zwłaszcza jeśli trzeba podać dokumentację tego ciągu częściowych uzasadnień końcowego wniosku (na przykład w systemach ekspertowych) – sieć okazuje się tworem zupełnie nieprzydatnym i wszelkie próby jej zastosowania prowadzić muszą do frustrujących niepowodzeń.

Z tego, co wyżej napisano, nie należy wyciągać pochopnych wniosków: sieć nie może sama wykonywać obliczeń symbolicznych, ale może wspomagać systemy operujące na symbolach w zakresie czynności, z którymi one sobie nie radzą. Przykładem mogą być sieci Teuvo Kohonena lub klasyczna sieć NetTalk Terence Sejnowskiego, używane do zamiany tekstu ortograficznego na ciąg symboli fonematycznych służących do sterowania syntezatorem mowy. Podobnie, ze stwierdzenia, że sieci nie nadają się do obsługi pracy terminalu w okienku bankowym, nie wynika ich bezużyteczność dla banków jako takich – przeciwnie, okazały się wyjątkowo użyteczne w badaniach wiarygodności kredytobiorców lub przy ustalaniu warunków negocjowanego kontraktu. Podobne zastrzeżenia można mnożyć bez końca.

Ważny jest jednak jeden konkretny końcowy wniosek: sieć neuronowa nadaje się do wielu zastosowań, nie jest jednak tak uniwersalna jak klasyczny komputer. Dlatego entuzjastom łatwo jest wskazać zadania, których rozwiązania za pomocą sieci okazały się znacząco lepsze niż rozwiązania uzyskane przez klasyczne komputery, zaś malkontenci bez trudu wskażą zadania, dla których rozwiązania wykorzystujące sieci okazały się groteskowo niepoprawne. Prawda – jak zwykle – leży pośrodku.

Spróbujemy jej poszukać w kolejnych artykułach cyklu, opisując dokładniej technikę sieci neuronowych, metody ich uczenia, a także dostępne programy symulacyjne i systemy hardware’owe, pozwalające każdemu “pomacać własnymi rękami”, ile to wszystko jest warte.

Autor jest profesorem Akademii Górniczo-Hutniczej w Krakowie.