Sztuczne sieci neuronowe – część 1

Sztuczne sieci neuronowe – część 1

czyli

ogólne wprowadzenie w temat

Autor tekstu: Bart

Swego czasu zajmowałem się trochę tematem sztucznych sieci neuronowych. Otwarcie bloga to dobry pretekst, by ów wątek odświeżyć. Na początek odpowiedzmy sobie na jedno pytanie:

Czym jest sieć neuronowa?

Jednym zdaniem – jest to system symulujący pracę mózgu.

A jak pracuje mózg?

To będzie już nieco dłuższy akapit. W mowie potocznej często spotykamy się z określeniem mózgu jako „żywego komputera”. Jest to błędne porównanie, gdyż mózg pracuje na zgoła odmiennych zasadach, niż tradycyjny komputer. W dużym uproszczeniu: w zwykłym komputerze procesor wykonujący obliczenia jest oddzielony od pamięci. W mózgu zaś rolę pamięci spełnia sama jego budowa. Można powiedzieć, że mózg sam w sobie jest pamięcią. Ale o tym później…

Skąd nazwa?

Mózg składa się z komórek nerwowych zwanych neuronami. Pomiędzy nimi znajdują się cieniutkie połączenia – tzw. aksony. W powiększeniu fragment mózgu wygląda jak drobna sieć, której węzłami są neurony.

Po co sieć neuronowa – nie wystarczy zwykły komputer?

Rzeczywiście – klasyczny komputer w porównaniu z mózgiem jest szybki, wydajny, i skuteczny, tym nie mniej są zadania, w których mózg góruje nad komputerem bezdyskusyjnie. Chodzi przede wszystkim o wszelkiego rodzaju rozpoznawanie i kojarzenie. Weźmy na przykład niemowlę – potrafi rozpoznać twarz matki w jednej chwili, bez względu na oświetlenie, czy kąt patrzenia. Dla klasycznych algorytmów komputerowych nawet nieznaczna zmiana rozpoznawanego obrazu, jak mały obrót głowy, czy inne oświetlenie, stanowi dużą trudność. Podobnie jest z rozpoznawaniem dźwięku, jak choćby ludzkiego głosu.

Kogo to może zainteresować?

Oczywiście informatyków. Sztuczne sieci neuronowe (dalej będę używał skrótu SSN) mogą być skutecznym i przydatnym narzędziem programisty. O tym, do czego można je wykorzystać, przeczytacie poniżej. Szczególnie istotny jest fakt, iż aby móc wykorzystywać SSN we własnych programach, nie trzeba się wcale zagłębiać w zaawansowaną matematykę – po przeczytaniu paru kolejnych wpisów na ten temat każdy powinien mieć wystarczająco dużo wiedzy, aby potrafić zaprojektować odpowiednią dla własnych potrzeb SSN w jednym z umożliwiających to pakietów inżynierskich (jak np. MatLAB).

Jeśli nie jesteś informatykiem…

… to nic nie szkodzi! Zachęcam do dalszego czytania. A dlaczego? Najpierw mała dygresja. Otóż jednym z najszczęśliwszych momentów w karierze naukowej (opieram się na tym, co podsłuchałem i przeczytałem, jako że sam naukowcem nie jestem 😉 ) jest chwila, w której okazuje się, że opracowana teoria przewiduje rzeczywiście występujące zjawiska. Najlepiej, żeby przewidziała je, zanim zostaną w ogóle zaobserwowane. Taka sytuacja zachodzi właśnie w przypadku SSN. Badając nawet proste układy możemy zaobserwować ciekawe zjawiska z dziedziny… psychologii i socjologii (!). Jeśli zatem kiedykolwiek interesował Cię własny mózg, jego budowa, działanie i mechanizmy uczenia się, zapraszam do czytania! W kolejnych wpisach pojawią się konkretne przekłady, a poza tym będę się starał, aby nie były one nudne i przeładowane matematyką.

medical-abstract-swirls-2-1151077

Czas na drugie ważne pytanie:

Do czego służy sieć neuronowa?

Jednym zdaniem – do wszelkiego rodzaju rozpoznawania, kojarzenia, przewidywania, sterowania… Jednak trudno zmieścić to wszystko w jednym zdaniu! A zatem po kolei:

Rozpoznawanie

Czy zastanawialiście się kiedyś nad tym, w jaki sposób błyskawicznie rozpoznajecie twarze znanych wam osób? Przeważnie dzieje się to tak szybko i jest dla nas tak naturalne, że nie widzimy w tym nic dziwnego – po prostu rozpoznajemy twarze (budynki, litery, głosy…) i już. Cudów jednak nie ma. Nie możemy rozpoznać twarzy, której nasz mózg się nie nauczył. Musi ona być już gdzieś zapamiętana, aby nie została uznana za obcą. W klasycznym komputerze wzorce poszczególnych twarzy wypełniałyby jakąś bazę danych, a algorytm porównywałby każdą ujrzaną twarz z tymi, które są mu znane. Oczywiście przy takiej ilości twarzy, jaką pamięta przeciętny człowiek, praca owego algorytmu trwałaby bardzo długo, ale nie w tym rzecz. Otóż komputer zapamiętuje obraz w ten sposób, że zamienia go na ciąg liczb. W uproszczeniu: obraz jest dzielony na małe punkciki (pixele) i każdemu z nich zostaje przyporządkowana liczba zależna od jego koloru (mam nadzieję, że graficy zechcą mi wybaczyć te nieścisłości). Co się zatem dzieje, gdy wprowadzimy do bazy danych dwa zdjęcia tej samej twarzy wykonane pod nieco innym kątem i przy innym oświetleniu? Mówiąc slangiem, w tym momencie program się wykłada – nie potrafi dostrzec podobieństwa między owymi zdjęciami. Podobieństwa, które my, za pomocą naszej „sieci neuronowej”, dostrzegamy w ułamku sekundy. Zobaczywszy kogoś potrafimy go później rozpoznać mimo makijażu, innej fryzury, innej pory dnia i innych niedogodności. Dla klasycznego algorytmu jest to niezmiernie trudne.

Kojarzenie

Jest ono w zasadzie bardzo zbliżone do rozpoznawania. Czym jest bowiem rozpoznawanie? Niczym innym, jak kojarzeniem tego, co próbujemy rozpoznać z tym, co już znamy. I znowu: dwa obiekty (obrazki, dźwięki) mogą dla człowieka być podobne, natomiast klasyczny algorytm nie stwierdzi między nimi podobieństwa. Dla niego są to dwa różne ciągi znaków. Można oczywiście programowo „obejść” to utrudnienie – „powiedzieć” komputerowi, jakie cechy obiektu są najbardziej znaczące i mogą zaważyć na podobieństwie (lub niepodobieństwie) dwóch (lub więcej) obiektów. Jest to jednak dla programisty wysoce trudne zadanie. Natomiast w przypadku SSN nie ma potrzeby nakazywania sieci brania pod uwagę tej czy innej cechy – odnajdzie je sama. Więcej – może zauważyć takie zależności, o których programista nawet nie wie. Ciekawy jest fakt, iż potrafimy zaprojektować skomplikowaną sieć, skutecznie jej użyć, ale nie mamy pewności co do tego, w jaki sposób dokładnie działa, co się dzieje w jej głębi.

Przewidywanie

Jeśli znacie dobrze jakieś zjawisko, to wiedząc, jaki jest jego stan w danej chwili, potraficie mniej więcej określić, jak się będzie zachowywać w najbliższej przyszłości, nieprawdaż? Otóż SSN mogą służyć do tego samego. Stosuje się je głównie do opracowywania prognoz ruchów na giełdzie i do przewidywania pogody. Tak, nawet, zdawałoby się, tak przypadkowe zmiany, jak zmiany giełdowe, podlegają jakimś prawom. Doświadczony gracz potrafi przewidzieć, czy dana operacja zakończy się powodzeniem. Nazywamy to przeczuciem, szóstym zmysłem, lecz jest to jedynie podświadome korzystanie z wiedzy nabytej również nieświadomie przez lata obserwacji procesów giełdowych. A trzeba pamiętać, że mózg człowieka, choć ogromny (w porównaniu z SSN), zajmuje się przecież niezliczoną ilością innych zadań, jak choćby utrzymywanie ciała w równowadze, itd. itp. Sieć natomiast jest przeznaczona wyłącznie do jednego zadania i jemu poświęca cały swój potencjał. Podobnie jak dobry gracz, sieć potrafi trafnie prognozować ruchy giełdowe, choć nie wiemy dokładnie, w jaki sposób to robi (tak, jak nie wiemy, na czym polega intuicja gracza).

Sterowanie

Naukowcy próbujący stworzyć robota o postawie humanoidalnej borykają się głównie z problemem jego ruchu. Dość trudno jest zaprojektować i oprogramować robota w taki sposób, by utrzymywał równowagę. Niedoścignionym wzorem w tej dziedzinie jest mózg. Człowiek, pies, kot – mogą wyczyniać najprzeróżniejsze ewolucje nie tracąc przy tym równowagi. Aby obliczyć wielkości i kierunki sił, z jakimi balansować musi organizm podczas gwałtownego ruchu, potrzeba matematyki na dość wysokim poziomie. Mózg zaś daje sobie radę z tymi obliczeniami w ułamku sekundy wykonując w tym czasie dziesiątki innych czynności. Odpowiednio zaawansowana sieć neuronowa mogłaby czynić to samo. Właśnie SSN są wykorzystywane do sterowania robotami przeznaczonymi do pracy w najtrudniejszych warunkach. Ach, te sieci neuronowe! Same zalety? Nie, tak różowo nie jest 🙂

Teraz trzecie pytanie:

Jakie są zalety i wady sieci neuronowej?

Jednym zdaniem – suma zalet przewyższa sumę wad (bo inaczej nie było by warto zajmować się SSN).

Zalety

Powyżej wymieniłem zadania, które SSN rozwiązuje znacznie lepiej, niż zwykły algorytm, więc nie będę się powtarzał. Wspomnę natomiast o jednej z najważniejszych zalet SSN z punktu widzenia programisty. Otóż SSN nie wymagają programowania! Wystarczy stworzyć sieć, a ona uczy się sama. Rola programisty ogranicza się do zaprojektowania takiej struktury sieci, która najlepiej będzie nadawała się do rozwiązania danego problemu, a następnie do umiejętnego pokierowania procesem uczenia sieci. Z czymś wam się to kojarzy? Oczywiście – analogicznie jest w przypadku każdego z nas. Aby być w jakiejś dziedzinie fachowcem, trzeba po pierwsze mieć wrodzone uzdolnienia w danej dziedzinie (odpowiednią strukturę własnej sieci neuronowej, jaką jest mózg), a po drugie – mieć dobrego nauczyciela. Czytając kolejne wpisy odkryjecie jeszcze wiele analogii w działaniu mózgu i jego modelu, którym jest SSN.

Inna zaleta: jak pewnie wiecie, w zwykłym programie najmniejszy błąd może doprowadzić do wadliwego działania systemu, utraty danych, oraz do innych nieszczęść. Sieć neuronowa natomiast nawet w przypadku poważnego uszkodzenia działa nadal, jak gdyby nigdy nic! Oczywiście do pewnego stopnia. I znowu analogia: nasz mózg działa nadal po wypadku, w którym odniesie niewielki uszczerbek, działa pomimo niszczenia neuronów przez alkohol lub proces starzenia, działa długo bez „awarii”, choć jego struktura wciąż jest naruszana. Dopiero po przekroczeniu pewnego progu uszkodzeń mózg odmawia posłuszeństwa. Stąd choroba Alzheimera, dalsze stopnie choroby alkoholowej, psychozy ponarkotykowe i podobne przypadłości.

Kolejną ważną zaletą SSN jest zdolność uogólniania zdobytej wiedzy. Znaczy to dokładnie tyle, że jeśli sieć nauczy się, powiedzmy, rozpoznawać kolory: czerwony i żółty, to rozpozna również różowy i bladożółty, czyli kolory podobne do już jej znanych.

Wymienione zalety to oczywiście tylko część tego, czym SSN może nam zaimponować. Inne plusy sieci będzie można wyczytać pomiędzy wierszami w kolejnych tekstach z tego cyklu. Aby jednak sprawiedliwości stało się zadość, trzeba wspomnieć, że SSN mają także…

Wady

Nie ma rzeczy doskonałych. Sieci neuronowe nie przydadzą się przede wszystkim tam, gdzie potrzeba jasnych i precyzyjnych wyników – czyli przy rozmaitych skomplikowanych obliczeniach, obsłudze kont bankowych, itp. Wynika to z faktu, iż SSN jest odbiciem ludzkiego mózgu, ten zaś nie jest przystosowany do precyzyjnego operowania liczbami. Kiedy opisujemy kogoś, nie mówimy, że ma 188.34 cm wzrostu, tylko że jest wysoki. I to nie tyle dlatego, że dokładność tej informacji jest wystarczająca, lecz dlatego, że bez odpowiedniej aparatury pomiarowej (jak choćby metr krawiecki 😉 ) nasz mózg nie jest w stanie precyzyjnie ocenić pewnych wielkości. SSN zatem operuje tzw. pojęciami rozmytymi: wysoki, niski, duży, mały, średni, jasny… Często jeśli oczekujemy od sieci odpowiedzi „tak” lub „nie”, ona odpowie: „raczej tak”, lub: „chyba nie”… Ta ostatnia skłonność sieci może być zarówno wadą, jak i zaletą – zależy, jak na to patrzeć.

SSN nie zdaje egzaminu także wtedy, gdy specyfika problemu wymaga zastosowania wieloetapowego rozumowania. Kiedy trzeba mozolnie dochodzić do pewnych wniosków na podstawie efektów wcześniejszego rozumowania, a z tych wniosków wyciągać kolejne – sieć „odpada”. Ona „woli” rozwiązać zadanie na raz, w jednym kroku. Jeśli nawet pojawiają się jakieś wnioski pośrednie, to i tak nie ma do nich dostępu. Ta ostatnia cecha może się wydać dziwna komuś, kto oswoił się już z myślą, że SSN symuluje działanie mózgu. Przecież człowiek rozumuje krok po kroku, z jednych wniosków wyciągając następne. To fakt, ale rozumowanie można podzielić na pojedyncze etapy, w których działamy „na raz”. Mamy jakieś dane i wyciągamy z nich wniosek. Ten wniosek posłuży do wyciągnięcia następnego, również w takim jednorazowym procesie. Takiemu modelowi rozumowania odpowiadałby raczej cały zespół różnych sieci neuronowych, i to niekoniecznie połączonych liniowo. Dane z wyjścia pewnej sieci mogłyby trafiać na wejście to tej, to innej sieci. Każda z nich zaś, powtarzam, działa jednoetapowo.

Podsumowanie

Kończymy wiadomości ogólne o SSN. Wiemy już, że symulują one pracę mózgu, że mogą wyręczać klasyczne algorytmy w pewnych zadaniach, choć w innych radzą sobie gorzej. Generalnie, są to takie systemy „z ludzką twarzą”. „Myślą” podobnymi kategoriami, jak my, są dość odporne na uszkodzenia, potrafią się uczyć… Zapowiada się chyba ciekawie. Wkrótce ciąg dalszy!

Comments

comments

Autor wpisu: Bart

Naczelny czasu traciciel