artykuły

Neural Science

9:47
Fri, 10 October 2003
W oparciu o sieci neuronowe działał Terminator i cały SkyNet. Z pomocą tego artykułu i programu EasyNN, czytelnik stworzy w swoją pierwszą sieć neuronową w swoim domu.

Wstęp

Spojrzenie w przyszłość

Na pewno nieraz pragnęliście aby to właśnie Wasz sprzęt był wyjątkowy. Wielu z was zapewne pamięta czasy gdy komputer u znajomego był najciekawszym elementem rozrywkowym i to właśnie on stanowił główne centrum naszego zainteresowania. Nie wiedząc zbyt wiele o oprogramowaniu czy sprzęcie wyobrażaliście sobie idealnego qmpla (fachowo zwaną) sztuczną inteligencję - SI, o której wiedzieć będziecie tylko Wy. Wbrew pozorom nie przesadzam z laniem wody na wstępie. Niektórym przyjdą na myśl wspomnienia, innym posłużenie się przyciskiem "Back", ale w głębi zawsze chcieliśmy żeby... no właśnie co? Żeby to właśnie nasz komp pierwszy uzyskał świadomość? - to niedorzeczne ;). Nie chcę tu opisywać moich kompleksów ;), ale jedynie zwrócić uwagę na fakt, iż ludzkość od pewnego czasu dąży w kierunku jeszcze niezbyt zbadanego obszaru - próby skopiowania ludzkiego mózgu.
Pozwoliłem sobie przytoczyć dość obszerny, ale bardzo pomocny cytat z artykułu pana "Kopper'a" (magazyn PTiKuś #2).

"Na pewno każdy oglądał taki film co się Terminator nazywał. I taki T800 to jest w sumie to do czego dążę podczas moich badań (ale ja nie będę pracował dla wojska). No dobra żarty na bok bo to poważna sprawa. To że ludzki umysł wygrywa z komputerem w prawie wszystkich dziedzinach nie jest chyba dla nikogo nowością. Oczywiście żaden z nas nie podtrafi udzielić odpowiedzi na pytanie ile jest 8934.12*34.45/(cos(45.12)+2), komputer zrobi to bez problemu. Ale np. jeśli się nie określi dokładnie np. operatora + (to znaczy dodawanie) to się komputer wyłoży. A nam nikt nie implementował operatora +. My na podstawie wzorców uczących wyłapaliśmy, że jak mamy przed oczami 2+2=4 albo 1+5=6 albo wiele innych to taki plusik coś może oznaczać i nasz mózg się go zaczął uczyć. Ze wszystkich wzorców jakie mu zapodaliśmy na wejście wyłapał regułę z jaką działa taki plusik i teraz nasz mózg potrafi dodawać wszystkie liczby, a nie tylko te które pojawiły się w zbiorze uczącym. Sztuczne sieci neuronowe próbóją robić to co nasz mózg. To znaczy nie mają dokadnie określonego algorytmu działania... Najpierw dostają na wejście jakieś wzorce (tzw. zbiór uczący), a póżniej w czasie normalnej pracy dostają na wejście sygnał który nie był w zbiorze uczącym. I jeśli sieć jest dobrze nauczona to go poprawnie zklasyfikuje (to znaczy zrobi z nim to co powinna-tak jak my pięknie potrafimy dodawać)."

Nikt z naukowego punktu widzenia nie powie nam czym jest świadomość, co sprawia, że umiemy żyć i kierować własnym życiem w logiczny i sensowny sposób? Po tym "wstępie" zostali pewnie Ci najwytrwalsi :)), dlatego chciałbym wzbudzić Waszą ciekawość poprzez wskazanie Wam niezwykle interesującego (moim zdaniem) tematu. Chodzi mi o ten pierwszy krok, jaki nauka zrobiła w kierunku SI - sieci neuronowe. Nie sądzę, że wiem z tego tematu więcej niż ktokolwiek, ale poznałem kilka fascynujących programów, które pokazały mi, o co właściwie chodzi w sieciach neuronowych. Specjalnie do napisania tego artykułu, ale także z własnej ciekawości (nie ukrywam) pobrałem i przetestowałem kilka programów do budowania własnych sieci neuronowych. Przyznam się, że tylko jednym z nich umiałem się skromnie posłużyć. Przedstawiam Wam program o nazwie "Easy Neural Networks" (w skrócie "Easy NN"). Znalazłem go na FTP'ie www.chip.pl.

W pomocy do programu znajdziemy samouczek, który pokaże nam jak wykonać swoją pierwszą sieć neuronową. Ale może zanim zaczniemy, chciałbym przybliżyć wam temat sieci neuronowych dla niewtajemniczonych. Naprawdę wyśmienitym artykułem w tej dziedzinie popisał się kolega "Kopper" (PTiKuś #2) w dziele "Ogólnie o sieciach neuronowych...", przedstawił tam tak skomplikowane tematy iż wtedy odłożyłem ten artykuł na później. Dziś wiem nieco więcej, ale ów artykuł nawet do połowy nie odkrywa dla mnie swojej treści. Może Wam to przybliżyć jak rozległy i skomplikowany jest ten temat. Tym którzy są obyci już z tematem zachęcam do lektury tego wspaniałego dzieła.

Na szczęście do budowy prostej sieci nie trzeba wiele wiedzieć. Wystarczy ten skromny artykuł.

Nie będę ukrywał, że przykładowa sieć neuronowa została zaczerpnięta z help'a programu. Wyrobimy jej intuicję dotyczącą przypadku mieszania barw. Tzn. podamy jej kilka przykładów dotyczących tego jakie barwy (żółty, cyjan, magneta) powstają po zmieszaniu określonych barw (czerwony, zielony, niebieski). Będziemy chcieli, aby sieć na tyle dobrze załapała zasadę mieszania barw, aby mogła wydedukować jaka barwa powstanie po zmieszaniu kolorów dla przykładu którego nie podaliśmy jej jako przykład. Sieć jest prosta i właśnie to zdecydowało o jej umieszczeniu. Osobiście próbowałem konstruować różne sieci, które w mniejszym lub większym stopniu się udawały. Często to jednak nie chciało działać, jednak ostateczny, pozytywny wynik wynagradzał wszystkie "cierpienia" ;)

Tworzenie nowej sieci neuronowej

W celu stworzenia nowej sieci kliknij menu "File" i wybierz polecenie "New". W nowym dokumencie, na pustej siatce, widzimy poziomą linię. Wskazuje ona aktualną pozycję do edycji (wiersz i kolumnę). Klikamy teraz dwukrotnie na wyżej wspomnianą linię. Wyskakuje zapytanie od programu "Create new Example row"/"Czy stworzyć nowy wiersz?". Odpieramy atak okienka klikając na "Yes"/"Tak" Ku naszemu zaskoczeniu ;) pojawia się okno edycji komórki.

Wprowadzanie danych

Teraz musimy nazwać kolumnę, wiersz i wprowadzić wartość oraz podać jej typ (typ wartości). Typy wartości: Real - liczby rzeczywiste Integer - liczby całkowite Bool (Boolean) - wartość logiczna True/False Prawda/Fałsz, bądź 1/0. Text string - wartość tekstowa

Pole "Value + Norm" - Wprowadzamy tutaj wartość każdej komórki. Pole "Example Name + Type" - Tutaj wpisujemy nazwę wiersza. Pole "In/Out Name + Type" - Tutaj wprowadzamy nazwę kolumny. Do pola "Value + Norm" wprowadź wartość 1. Do pola "Example Name + Type" wpisz nazwę wiersza (przykładowo "Para 1"). Do pola "In/Out Name + Type" wpisz nazwę kolumny - Czerwony Zamknij okno klikając na OK. Kliknij teraz nieco na prawo od bieżącej komórki, bądź naciśnij strzałkę w prawo (na klawiaturze) Zauważ, że pozioma linia przeniosła się na pole sąsiadujące. Oto nam chodziło więc dwukrotnie na nią klikamy.

Sieć rozpoznająca kolory w EasyNN

Do pola "Value + Norm" wprowadź wartość 1. Zauważ, że pole "Example Name + Type" mamy już domyślnie uzupełnione przez program. Do pola "In/Out Name + Type" wpisz nazwę kolumny - Zielony Zamknij okno klikając na OK.

Naciśnij strzałkę w prawo i posłuż się Enterem. Do pola "Value + Norm" wprowadź wartość 0. Do pola "In/Out Name + Type" wpisz nazwę kolumny - Niebieski Zamknij okno klikając na OK.

Teraz czas na Wyjścia, które w gotowej sieci będą nam zwracać wartości. Naciśnij strzałkę w prawo i posłuż się Enterem. Do pola "Value + Norm" wprowadź wartość 1. Do pola "In/Out Name + Type" wpisz nazwę kolumny - Żółty W części "In/Out Name + Type" zmień wybór z Real na Bool oraz z Input na Output Zamknij okno klikając na OK.

Naciśnij strzałkę w prawo i posłuż się Enterem. Do pola "Value + Norm" wprowadź wartość 0. Do pola "In/Out Name + Type" wpisz nazwę kolumny - Cyjan W części "In/Out Name + Type" zmień wybór z Real na Bool oraz z Input na Output Zamknij okno klikając na OK.

Naciśnij strzałkę w prawo i posłuż się Enterem. Do pola "Value + Norm" wprowadź wartość 0. Do pola "In/Out Name + Type" wpisz nazwę kolumny - Magneta W części "In/Out Name + Type" zmień wybór z Real na Bool oraz z Input na Output Zamknij okno klikając na OK.

Naciśnij strzałkę w prawo i posłuż się Enterem. Do pola "Value + Norm" wprowadź wartość 0. Do pola "In/Out Name + Type" wpisz nazwę kolumny - Cyjan W części "In/Out Name + Type" zmień wybór z Real na Bool oraz z Input na Output Zamknij okno klikając na OK.

Wiersz "Para 1" jest już gotowy. Musimy jeszcze dodać dwa kolejne, z tym że program prawie wszystko teraz będzie uzupełniał za nas. My ograniczymy się do wpisywania wartości i (czasami) nazw wierszy "Para 2" i "Para 3".

Kliknij teraz dwukrotnie poniżej pierwszego wiersza, w pierwszej kolumnie o nazwie "Czerwony". Program zapyta się czy stworzyć nowy wiersz - kliknij TAK. W polu "Example Name +Type" wprowadź nazwę nowego wiersza "Para 2". W polu "Value + Norm" wprowadź wartość 0. Kliknij teraz OK i następne komórki w wierszu uzupełnij następująco: W komórce kolumny Wejścia o nazwie "Zielony" wprowadź wartość 1 W komórce kolumny Wejścia o nazwie "Niebieski" wprowadź wartość 1 W komórce kolumny Wyjścia o nazwie "Żółty" wprowadź wartość 0 W komórce kolumny Wyjścia o nazwie "Cyjan" wprowadź wartość 1 W komórce kolumny Wyjścia o nazwie "Magneta" wprowadź wartość 0

Stwórz nowy wiersz o nazwie "Para 3". W komórce kolumny Wejścia o nazwie "Czerwony" wprowadź wartość 1 W komórce kolumny Wejścia o nazwie "Zielony" wprowadź wartość 0 W komórce kolumny Wejścia o nazwie "Niebieski" wprowadź wartość 1 W komórce kolumny Wyjścia o nazwie "Żółty" wprowadź wartość 0 W komórce kolumny Wyjścia o nazwie "Cyjan" wprowadź wartość 0 W komórce kolumny Wyjścia o nazwie "Magneta" wprowadź wartość 1

To wszystko! Teraz zapisz sieć (File>Save).

Uczenie sieci neuronowej

Pozostało nam stworzyć połączenia sieci, ale nie martwcie się program robi to automatycznie :) Z menu "Action" wybieramy polecenie "New network" Otwiera się nieznane nam dotąd okno, w którym zaznaczamy opcję "Check Grow hidden layer 1" i kikamy na OK. Teraz klikamy menu "Action" i z rozwiniętego menu posługujemy się opcją "Change Controls" W nowo otwartym oknie zaznaczamy "Optymize" przy "Learning Rate" i "Momentum" i klikamy OK. Teraz musimy sieć nauczyć. Z menu "Action" wybieramy polecenie "Start Learning". Otworzy się okno. Gdy pasek tytułowy zacznie migać klikamy na Close.

Testowanie poprawności działania sieci (czy sieć dobrze wyłapała związki w danych uczących?)

Teraz ostatnia faza - sprawdzimy czy wszystko działa - na pewno ! Z menu "Action" wybieramy "Query". W nowo otwartym oknie posługujemy się przyciskiem "Add Query". W tabeli, po lewej stronie okna ustawmy pozycję Zielony na 1. Zaraz powinniśmy się dowiedzieć które kolory (Cyjan, Magneta, Żółty) należy zmieszać by go otrzymać. Klikamy na pozycję pierwszą (Czerwony) i w takim polu edycyjnym koło przycisku Set wpisujemy 0 i klikamy na przycisk "Set". To samo robimy z kolorem Niebieskim. Natomiast kolor Zielony ustawiamy na 1. Po prawej stronie okna w tabeli wyświetli nam się (o ile sieć jest dobrze nauczona) jakie kolory powinniśmy zmieszać aby otrzymać kolor zielony - okazuje się, że Żółty i Cyjan... i jest to jak najbardziej odpowiedź prawidłowa.

Zakończenie

Myślę, że temat Was "wciągnął" i zachęcił do budowania własnych sieci neuronowych. Możliwości są praktycznie nieograniczone. Ci, którym temat nie przypadł do gustu, powinni zapamiętać z artykułu, że sieci neuronowe stosujemy tam gdzie typowe komputerowe obliczenia wysiadają. Trzeba jednak pamiętać, że źle nauczona sieć neuronowa służąca poważnej funkcji może być źródłem wielu problemów. Do artykułu dołączam gotowiec powyższej sieci.

12345
Neural Science Autor opinii: Czytelnicy, data przesłania: 5

Skomentuj

Aby zamieścić komentarz, proszę włączyć JavaScript - niestety roboty spamujące dają mi niezmiernie popalić.






Komentarze czytelników

    • SharkTime
    • Sat, 13 March 2010, 1:25
    • Hej, napisałeś:
      >>Przyznam się, że tylko jednym z nich umiałem się skromnie posłużyć.

      Powinieneś zobaczyć:
      Sharky Neural Network
      http://www.sharktime.com/pl_SharkyNeuralNetwork.html

      Jest to bardzo fajny i prosty program do zabawy klasyfikującymi sieciami neuronowymi.

      Sieć neuronowa w akcji - klasyfikacja
      Wiecej na: SharkTime.com
Dexter