Perceptronu przygód ciąg dalszy

Przypomnienie z wcześniejszego wpisu
Przypomnienie z wcześniejszego wpisu
W zeszłym tygodniu opisałem, jak doszło do zbudowania pierwszego działającego elektronicznego modelu mózgu - maszyny zwanej Perceptronem. Zapowiedziałem też, że opiszę osobno różne przygody, jakie się z tym Perceptronem wiązały, bo w pierwszym wpisie te anegdoty już się po prostu nie zmieściły. Dzisiaj chcę więc te przygody zrelacjonować, gdyż uważam je za ciekawe, pouczające i ... zabawne. Opowieści te pokażą, jak fascynująco bogatym tworem jest ludzki mózg, skoro nawet tak ubogi jego model, jak opisywany Perceptron, wykazywał tak bardzo zadziwiające właściwości.

Jeśli powyższą zapowiedzią zdołałem skusić do czytania tego tekstu kogoś, kto nie czytał wcześniejszego wpisu o genezie i o strukturze Perceptronu - to zachęcam, żeby zacząć od przeczytania tego wcześniejszego wpisu, bo wtedy dzisiejszy będzie bardziej zrozumiały.

Frank Rosenblatt, twórca Perceptronu, miał rozmaite niezwykłe pomysły. O pierwszym wspominałem w tekście - struktura połączeń sztucznych neuronów wchodzących w skład Perceptronu wybierana była losowo. Perceptron był więc pierwszą (chyba) maszyną w historii, która została zbudowana bez żadnego planu i bez żadnej myśli przewodniej. Było to nagromadzenie przypadkowo połączonych elementów. I ta maszyna złożona z losowo powiązanych elementów wykazywała sensowne, celowe działanie!

Uświadommy sobie, co to znaczy. To tak jakby konstruktor rzucił na stół garść śrubek, kół zębatych i sprężyn - a z tych elementów całkiem sam zrobił się... budzik.

Warta przytoczenia jest pewna anegdota związana z tą przypadkową strukturą Perceptronu. Chodzi o to, że w warunkach laboratoryjnych wcale nie jest łatwo zrobić coś naprawdę przypadkowo. Z każdą działalnością człowieka wiążą się jakieś preferencje, które tą pełną losowość zaburzają. Jeśli ktoś nie umiejący grać siądzie do pianina i przypadkowo (jak mu się zdaje) tłucze w klawisze - to okaże się, że "melodia" jaka z tego powstanie, wcale nie będzie w pełni przypadkowa. Przy jej analizie można będzie wykryć, że dominować w niej będą dźwięki o średniej wysokości z wyraźnym niedoborem dźwięków szczególnie niskich lub szczególnie wysokich (bo wygodniej tłucze się w środek klawiatury), że więcej będzie dźwięków wydobywanych prawą ręką niż tych z ręki lewej, że będzie to wprawdzie kakofonia, ale jednak rytmiczna, bo odstępy czasowe między dźwiękami będą prawie jednakowe, a nie przypadkowo zmienne...

Naprawdę, nie jest łatwo uzyskać "na zawołanie" całkowitą przypadkowość! Dzisiaj służą do tego komputerowe generatory liczb pseudolosowych oparte na matematycznej teorii chaosu, ale w czasach Rosenblatta jeszcze nawet nie słyszano o ich istnieniu.

Jak więc sobie Rosenblatt sobie tę przypadkową strukturę perceptronu wytworzył?

Otóż podobno używał on rekwizytów jak z Las Vegas: rzucał monetą, wyciągał z talii karty, puszczał koło ruletki - i w zależności od tego, co wyszło z tych przypadkowych procesów - łączył określone elementy Perceptronu.
Podkreślam jeszcze raz z naciskiem: Nikt nigdy tak nie postępował budując jakąkolwiek maszynę. Kłóciło się to z inżynierskim doświadczeniem i ze zwykłym zdrowym rozsądkiem. A jednak ta bez sensu zbudowana maszyna potrafiła skutecznie rozpoznawać różne obrazy, przy czym umiejętność tę nabywała w wyniku procesu uczenia, a nie w wyniku programowania, co także było nader oryginalne. Przebieg uczenia był opisany w przedwczorajszym wpisie i jest przypomniany (w ogólnym zarysie) na rysunku otwierającym ten wpis.

W wyniku uczenia Perceptron przy kolejno pokazywanych obrazach popełniał coraz mniej błędów, co ilustruje poniższy wykres (przedstawiony także i omówiony w przedwczorajszym wpisie).
Na wykresie tym widać, że początkowo całkiem zdezorientowany Perceptron popełniał prawie 100% błędów (bo jeszcze nic nie umiał i jeśli nawet czasem coś mu się udało prawidłowo rozpoznać, to było to na zasadzie przypadku). Potem jednak procent błędów malał - najpierw dość szybko (Perceptron uczył się rozróżniać najbardziej oczywiste obrazy, na przykład rozróżniać obraz litery I od obrazu litery O), a potem coraz wolniej (bo do nauczenia pozostawały już wyłącznie trudne rozróżnienia, na przykład obrazu litery B od obrazu litery D). Na koniec błąd przestawał maleć mimo dalszego uczenia (dzisiaj w takich okolicznościach mówimy o błędzie rezydualnym). Na przedstawionym rysunku poziom tego błędu oszacować można na 10%.

Kluczową postacią przy uczeniu Perceptronu był nauczyciel. To on pokazywał maszynie kolejne obrazy i ustalał, czy Perceptron podał poprawne, czy błędne rozwiązanie - wysyłając w pierwszym przypadku sygnał "nagrody", a w drugim - sygnał "kary". Neurony wchodzące w skład Perceptronu same zmieniały swoje wagi w taki sposób, żeby unikać "kary" i dążyć do zdobycia "nagrody" - i dzięki temu maszyna jako całość stopniowo doskonaliła swoje działanie.

Obecnie znamy wiele maszyn i programów komputerowych uczących się, więc takie działanie nie wydaje się niczym nadzwyczajnym - ale Perceptron był pierwszą taką maszyną, więc jego działanie wzbudzało zainteresowanie, a nawet niedowierzanie. Charakterystyczny był pośpiech, z jakim budowano pierwszy radziecki perceptron Alfa. Twórcą tego perceptronu był profesor Instytutu Cybernetyki Akademii Nauk ZSRR Wiktor Głuszkow, który opisał go w wydanej także w Polsce książce "Wstęp do cybernetyki". Badania radzieckie potwierdziły prawdziwość doniesień Rosenblatta, ale nic nowego nie wniosły, dlatego dość szybko o nich zapomniano.

Natomiast Rosenblatt miał ustawicznie nowe pomysły i ustawicznie zaskakiwał świat naukowy nowymi wynikami. Pierwszy pomysł polegał na tym, że postanowił sprawdzić, co się stanie, gdy Perceptron będzie uczony przez złego nauczyciela - takiego który się czasem myli i nagradza za złe odpowiedzi albo karze za odpowiedzi dobre. Eksperyment przeprowadzono bardzo starannie, poziom błędów złego nauczyciela był ściśle kontrolowany, a same błędy nauczyciela miały charakter całkowicie przypadkowy. To ostatnie było bardzo istotne, bo gdyby nauczyciel mylił się systematycznie, na przykład stale wymuszając na Perceptronie rozpoznanie litery B gdy w rzeczywistości pokazywana była litera A - to by po prostu skutecznie wyuczył Perceptron nieprawdziwej wiedzy. W życiu tacy nauczyciele też się zdarzają. Ale Rosenblatta interesował przypadek nauczyciela mylącego się losowo - i w efekcie po raz kolejny "wyciągnął królika z cylindra". Dostał bowiem taki przebieg krzywej uczenia, jaki (przykładowo) pokazano na rysunku poniżej.
Jak się dobrze przyjrzeć - to wynik jest szokujący! Po pierwsze widać, że Perceptron uczony przez złego nauczyciela także zdobywa wiedzę, ponieważ czerwona linia pokazująca liczbę błędów popełnianych przez źle uczony Perceptron ma także tendencję malejącą, chociaż to malenie jest wolniejsze, niż w przypadku Perceptronu uczonego przez dobrego (sprawiedliwego) nauczyciela - linia zielona. Na czerwonej linii widoczne są zafalowania, których brak na linii zielonej. Oznacza to, że w trakcie uczenia przez złego nauczyciela liczba błędów Perceptronu może okresowo wzrastać (zamiast ustawicznie maleć, jak to ma miejsce przy dobrym nauczycielu). Łatwo zrozumieć przyczynę tych zafalowań - po prostu zły nauczyciel niesprawiedliwymi karami lub nieuzasadnionymi nagrodami może wprowadzać w błąd swojego ucznia. To wszystko można łatwo zrozumieć i łatwo wytłumaczyć.

Pierwszy szok przeżywamy w punkcie oznaczonym na rysunku gwiazdką z literą A. W tym miejscu czerwona linia, oznaczająca liczbę błędów popełnianych przez źle uczony Perceptron schodzi poniżej fioletowej przerywanej linii oznaczającej poziom błędów popełnianych przez nauczyciela (na rysunku jest to poziom 17%). Okazuje się, że w tym momencie "uczeń przerósł mistrza"- źle uczony Perceptron zaczyna rozwiązywać stawiane mu zadania lepiej (z mniejszą liczbą błędów) niż uczący go nauczyciel!

Nie dość na tym.

Obserwując dalszy przebieg czerwonej linii docieramy do miejsca oznaczonego gwiazdką z literą B - i tu czeka nas kolejne zaskoczenie. Otóż Perceptron uczony przez złego (niesprawiedliwego, mylącego się nauczyciela) osiąga docelowo lepszy wynik (ma mniejszy błąd rezydualny) niż Perceptron uczony przez nauczyciela idealnego: nie mylącego się, sprawiedliwego, kompetentnego. Gorszy nauczyciel lepiej uczy!

Dzisiaj dysponujemy teorią pozwalającą dokładnie zrozumieć i uzasadnić opisane fenomeny, natomiast gdy Rosenblatt je odkrył empirycznie - towarzyszyło temu zdumienie i niedowierzanie. Doświadczenia ze złym nauczycielem przeprowadzano setki razy, zanim stwierdzono ponad wszelką wątpliwość, że nie jest to wynik nieporozumienia czy wyjątkowego zbiegu okoliczności, tylko że rzeczywiście natrafiono na nieoczekiwaną prawidłowość, mającą doniosłe znaczenie teoretyczne i istotne znaczenie praktyczne.

Rosenblatt nie zaniechał dalszych szokujących eksperymentów - i tak jak zadziwił świat budując Perceptron, tak po raz kolejny wywołał powszechne zdziwienie ... rozwalając go. Każdy normalny badacz po zakończeniu serii eksperymentów wyłącza aparaturę, demontuje ją i wykorzystuje do innych prac, a czasem, gdy badania miały szczególnie doniosłą wartość - przekazuje do muzeum (nawiasem mówiąc Perceptron znajduje się w muzeum Smithsonian Institution w Waszyngtonie). Natomiast Rosenblatt nauczył swój Perceptron rozpoznawania określonej klasy obrazów - po czym zaczął go rozwalać. Dosłownie! Tu wyrwał jakiś kabel, tam zniszczył cały neuron, jeszcze gdzie indziej przerwał połącznie...

Nie był to bynajmniej napad szału badacza, któremu od sukcesów przewróciło się w głowie. Był to najbardziej zuchwały eksperyment, który miał wyjaśnić jeden z najbardziej zdumiewających procesów, które toczą się w naszym własnym mózgu.

Nie mam dostępu do wyników, jakie uzyskał Rosenblatt w tym dramatycznym doświadczeniu, więc za chwilę pokażę rysunki ilustrujące wyniki doświadczenia jakie ja sam przeprowadziłem w moim laboratorium (z magistrantką Izabelą Figurą). Najpierw jednak opowiem, co się działo w laboratorium Rosenblatta, bo ja szedłem drogą wytyczona przez niego. Otóż gdy zaczął on demolować swój Perceptron wszyscy spodziewali się, że to doświadczenie zakończy się po wyrwaniu pierwszego kabla lub po zniszczeniu pierwszego neuronu. Tak przecież jest zawsze, gdy mamy do czynienia z typową aparaturą elektroniczną - jak się zepsuje jeden element, to całe urządzenie przestaje działać. Tak się zachowuje każdy telewizor, telefon, komputer itp.

Rosenblatt wiedział jednak, co robi.

Perceptron nie był zwykłym urządzeniem elektronicznym. On był zbudowany "na obraz i podobieństwo" naszego mózgu. A w naszym mózgu niestety toczą się ustawicznie procesy neurodegeneracyjne.
Neurony giną, połączenia się rwą, zasobu neuronowego stale ubywa.
A jednak funkcjonujemy przez wiele lat nie dostrzegając istotnego ubytku naszych zasobów intelektualnych. Oznacza to, że struktury nerwowe są niewiarygodnie odporne na uszkodzenia!

Rosenblatt chciał sprawdzić, czy zbudowany z elementów elektronicznych "sztuczny mózg", jakim był Perceptron, też okaże się odporny na uszkodzenia.

I okazało się, że był odporny! Rosenblatt niszczył go i demolował - a Perceptron stale działał i stale umiał to, czego go nauczono przed tą masakrą (demolowana maszyna była bez przerwy egzaminowana przez nauczyciela). Dopiero po zniszczeniu większej części jego elementów Perceptron najpierw zaczął się mylić i zapominać nauczoną wiedzę - a potem przestał działać. Ale dopiero po zniszczeniu ponad połowy jego elementów!

Nie znalazłem żadnych ilustracji pokazujących związek pomiędzy demolowaniem Perceptronu a bardzo powolnym spadkiem jego "możliwości intelektualnych" - więc odtworzyłem to doświadczenie w moim laboratorium. Perceptron zbudowałem w formie programu symulującego jego działanie na typowym komputerze (przypominam, że programy umożliwiające każdemu chętnemu przeprowadzenie podobnych doświadczeń na domowym komputerze udostępniłem w tym serwisie), nauczyłem go rozpoznawania irysów trzech gatunków (setosa, versicolor i virginica) na podstawie popularnego zbioru danych uczących dostępnego w Internecie - i zabrałem się za masakrowanie :-) tego mojego perceptronu. Piszę tutaj "perceptron" z małej litery, bo chodzi o model zbudowany przeze mnie, a nie ten słynny Perceptron Rosenblatta!

Najpierw sprawdziłem, czy mój perceptron się dobrze nauczył. Wynik pokazuje rysunek poniżej. Na rysunku tym widocznych jest sześć sygnalizatorów. Przedni rząd sygnalizatorów (prezentujących procent rozpoznań w formie piramidy w kolorze zielonym) dotyczy rozpoznawania obrazów używanych do egzaminowania perceptronu. Są to inne obrazy niż te, za pomocą których perceptron był uczony, bo chodziło także o sprawdzenie, czy maszyna potrafi uogólniać wiedzę - uczyć się na jednych przykładach, a rozpoznawać inne przykłady - oczywiście tych samych gatunków irysów (opis z prawej strony: "target"). Drugi, tylny rząd sygnalizatorów (piramidy w kolorze żółtym) pokazuje skuteczność rozpoznawania tych obrazów, przy pomocy których perceptron był uczony (opis z prawej strony: "train" jest skrótem od "training images" a nie oznacza pociągu :-) ). W każdym rzędzie są trzy sygnalizatory, odpowiednio pokazujące, jak często perceptron sygnalizował rozpoznanie irysów z gatunku odpowiednio setosa, versicolor i virginica. Na rysunku pokazana jest statystyka zebrana przy pięćdziesięciokrotnym pokazaniu różnych obrazków irysów z gatunku setosa. Widać, że perceptron starannie "odrobił lekcje": w 100% przypadków sygnalizował rozpoznanie setosa - i to zarówno dla tych obrazków, które znał (spotkał się z nimi podczas uczenia), jak i obrazków, które widział po raz pierwszy. Sygnalizatory innych gatunków nie zostały użyte ani raz, więc perceptron nie popełnił ani jednego błędu.
Przytoczony wyżej diagram ilustrował działanie mojego percepronu dla irysów gatunku setosa, ale powielając doświadczenie trzykrotnie dla wszystkich trzech gatunków dostajemy obraz będący trzykrotnym powieleniem obrazu pokazanego wyżej.
Na diagramie tym można między innymi zauważyć, że perceptron został "przyłapany" na jednym błędzie, jaki popełnił - o dziwo w zbiorze uczącym! - uznając pokazany irys gatunku versicolor za kwiat gatunku virginica (warto odszukać na rysunku tę małą żółtą piramidkę, żeby zobaczyć, jak się manifestują błędy rozpoznawania).

Mając perceptron dobrze nauczony - zacząłem się nad nim pastwić :-) . Zdecydowałem się uszkadzać najpierw niewielki odsetek połączeń neuronów wchodzących w skład sieci, a potem stopniowo coraz więcej. Uszkodzenia generował komputer automatycznie zgodnie z nakazaną mu skalą prowadzonej "rzezi niewiniątek" :-) . Wybierał on losowo połączenia do zniszczenia i niszczył je - oczywiście zachowując także kopię nietkniętego perceptronu do kolejnych eksperymentów. Każdy eksperyment z uszkodzonym (w założonym stopniu)perceptronem powtarzałem 10 razy, bo wiedziałem, że po procesie uczenia jedne połączenia neuronów w sieci są ważniejsze, a inne mniej są ważne. Jedne pełnią jedynie funkcję pomocniczą, a inne mają decydujący wpływ na realizowane przez perceptron rozpoznawanie. Ponieważ z góry nie wiadomo, które połączenia są ważniejsze, a które mniej ważne - więc nie chciałem się sugerować tym, że "wyskoczy" mi jakiś dziwny wynik w następstwie przypadkowego trafienia podczas przypadkowego niszczenia sieci takiego ważnego połączenia neuronów.

Na rysunku poniżej pokazany jest wynik bardzo delikatnego uszkodzenia perceptronu - nakazałem zniszczenie 1% połączeń neuronów. Rysunek jest zbudowany tak samo jako rysunek przytoczony wyżej, zresztą żółte i zielone piramidy obrazujące działanie nauczonego i nie uszkodzonego perceptronu pokazana są z przodu rysunku - a dalej rząd za rzędem są pokazane są w ten sam sposób wyniki egzaminu 10 wariantów perceptronu uszkodzonego.
Widać, że uszkodzenie nie zrobiło na perceptronie żadnego wrażenia, nadal działał praktycznie bezbłędnie. Postanowiłem doświadczyć go brutalniej. Nakazałem zniszczenie 5% połączeń neuronów. Wynik pokazany jest niżej.
W większości przypadków perceptron nadal działał dobrze, chociaż incydentalne błędy pojawiały się tu ówdzie, ale bez większego znaczenia. Natomiast pojawił się jeden poważny błąd (patrz - czerwona piramida). Uszkodzony perceptron nr 2 częściej się mylił przy rozpoznawaniu irysa setosa, niż dawał poprawne odpowiedzi. Właściwie groziła mu dyskwalifikacja! Jednak pozostałe uszkodzone w tym samym stopniu perceptrony dzielnie stawiały czoła swemu losowi.

Uznałem, że koniec pieszczot. Nakazałem zniszczyć 20% połączeń neuronów!

Wynik wcale nie był porażający - czerwonych piramid przybyło, ale prawie każdy uszkodzony perceptron przynajmniej jeden gatunek irysów rozpoznawał bezbłędnie.
No to rozsierdziłem się nie na żarty i kazałem zniszczyć 80% połączeń! Z mojego perceptronu pozostały smętne szczątki, większa część struktury została zdemolowana. A on jednak nadal działał! Oczywiście mylił się często, ale zachowywał się sensownie, co widać na poniższym rysunku.
Dlatego ja z optymizmem patrzę w przyszłość. Wprawdzie lat mam coraz więcej i neuronów w mózgu coraz mniej - ale może jednak wzorem mojego perceptronu nie poddam się procesowi destrukcji i przynajmniej tyle władz umysłowych zachowam - żeby za jakiś czas zaproponować Państwu jakiś nowy wpis na tym blogu?
Trwa ładowanie komentarzy...