Strona początkowa
Start Sieci jednokierunkowe Sieci rekurencyjne Słowniczek Linki O autorach

***
Jednym zdaniem... - Neuron liniowy - Neuron nieliniowy

***

Uczymy neuron

Jednym zdaniem...

... rzadko będziesz używał zaledwie jednego neuronu, jednak zrozumienie niuansów procesu jego uczenia pozwoli Ci w następnym rozdziale zrozumieć zasadę uczenia całej sieci.

Neuron liniowy

Dlaczego wracam do neuronu liniowego, skoro nieliniowy jest o tyle lepszy? Odpowiedź brzmi: dla celów poglądowych. Chcę dokładnie pokazać Ci, jak przebiega proces uczenia. Musisz uważnie obejrzeć "wnętrzności" neuronu i prześledzić proces zmiany jego wag. Aby łatwiej było się w tym połapać, muszę użyć neuronu, który po pierwsze: ma niewiele wejść, a po drugie: nie ma wiele materiału do opanowania (w moim applecie będzie to zaledwie jeden obiekt wejściowy). Gdyby miał to być neuron nieliniowy, niczego byś się nie nauczył, gdyż taki neuron przy małej ilości wejść i obiektów wejściowych uczy się zbyt szybko. Wystarczyłby jeden krok uczenia na rozwiązanie zadania. Neuron liniowy natomiast potrzebuje na naukę więcej czasu, jest zatem bardziej wdzięcznym obiektem badań dla początkujących. Zresztą zaraz po eksperymentach z neuronem liniowym, dostaniesz "do ręki" nieliniowy.

Na "ekranie" poniższego appletu widzisz wszystkie dane dotyczące neuronu i nie tylko. Neuron ma pięć wejść. Są pokazane ich wagi, które na początku możesz dowolnie ustalić, lub pozostawić wartości wygenerowane losowo. Podobnie jest z wartościami wejść i oczekiwaną wartością wyjścia. Mamy zatem dany obiekt i chcemy, aby neuron zareagował na niego w określony sposób. Przypominam, że jest to neuron liniowy - na wyjściu może się pojawić dowolna wartość, nie tylko 1 lub -1. Każde naciśnięcie przycisku "Oblicz korekty" spowoduje wykonanie następujących czynności:

  • obliczane jest wyjście neuronu dla aktualnych wartości wag i wejść;
  • obliczany jest błąd popełniany przez neuron (oblicza się go przez odjęcie od oczekiwanej wartości wyjścia odpowiedzi wygenerowanej przez neuron);
  • ustalana jest korekta wag, czyli wartość, o którą zostanie zmieniona waga każdego z wejść;
  • każda z owych wartości jest wyświetlana w odpowiednim okienku.

Po naciśnięciu klawisza "Popraw wagi" na miejscu starych wartości wag pojawiają się nowe, obliczone poprzez dodanie do poprzednich wartości wyliczonych w tym kroku uczenia korekt. Kiedy błąd będzie bliski zeru (wartość na wyjściu będzie bliska oczekiwanej), można uznać, że neuron jest nauczony. Jeśli będziesz chciał w trakcie uczenia sprawdzić, jak neuron reaguje na rozmaite sygnały wejściowe, naciśnij przycisk "Egzamin". "Zamrażasz" wtedy proces uczenia i przechodzisz do dolnej części okienka. Tam wyświetlone są parametry wzorcowego obiektu i wzorcowa dla niego odpowiedź. w pola wejściowe wpisz parametry dowolnego obiektu wejściowego, a odpowiedź neuronu na to wejście pojawi się poniżej. Nacisnąwszy przycisk "Ucz dalej" wrócisz do przerwanego procesu uczenia, aby nadal poprawiać wagi neuronu. Po rozpoczęciu procesu uczenia nie możesz zmienić ani wartości wejść ani wag. Do stanu początkowego powracasz po naciśnięciu klawisza "Nowy neuron".

Po rozpoczęciu eksperymentu zaniepokoić Cię może fakt, iż wartości wejść, które ustaliłeś, są przez applet bezceremonialnie zmieniane bez Twojej zgody. Niestety nie można było tego uniknąć. Proces ten to tak zwana normalizacja mocy sygnałów wejściowych. Koryguje on wszystkie sygnały wejściowe tak, aby były mniejsze niż 1, zachowując jednak właściwe między nimi proporcje. Gdybym nie zastosował tej techniki, proces uczenia często szedłby w kierunku odwrotnym do zamierzonego. Jeśli chcesz zaobserwować podobny efekt do tego, jaki byłby wynikiem braku normalizacji, ustaw wartość współczynnika uczenia na 3 lub więcej (jego wartość jest w polu oznaczonym: "WSP").

A'propos współczynnika uczenia: na czas pierwszych paru eksperymentów zostaw mu wartość domyślną, potem możesz poeksperymentować. Zapraszam do zabawy!

Neuron nieliniowy

Teraz zajmiesz się czymś bardziej zaawansowanym, ale wcześniej małe przypomnienie. W czwartym z kolei applecie miałeś okazję zaobserwować, jak neuron o dwóch wejściach i jednym wyjściu dzieli przestrzeń wejść linią prostą. Punkty znajdujące się po jednej stronie linii były przez neuron akceptowane, a punkty z drugiej strony - odrzucane, co oznacza, że dla wartości wejść neuronu równym współrzędnym danego punktu odpowiedź neuronu wynosiła odpowiednio: 1 lub -1. Wyobraź sobie sytuację odwrotną: najpierw umieszczasz w przestrzeni wejść kilka punktów (przy każdym ustalasz pożądaną odpowiedź neuronu), a potem starasz się tak ustawić parametry neuronu (czyli wartości jego wag), żeby wyznaczona przezeń linia oddzieliła punkty "pozytywne" od "negatywnych". Popatrz na poniższy rysunek:

Rozmiar: 2070 bajtów

Punkty niebieskie oznaczają wejścia, które neuron ma rozpoznawać jako pozytywne (odpowiedź = 1). Punkty czerwone - wiadomo, odwrotnie: neuron ma je odrzucać. Rozwiewając wszelkie wątpliwości podaję tabelkę opisującą wizualizowane powyżej wejścia i odpowiedzi neuronu:

Wejście X Wejście Y Wyjście
-3 2 1
-2 3 1
-1 1 1
-1 -1 -1
1 2 -1

Myślę, że teraz wszystko jest jasne. Teraz włączymy do rysunku neuron, a dokładniej - jego charakterystykę, czyli prostą, według której selekcjonuje on różne dane wejściowe. Neuron ten ma całkiem przypadkowe wartości wag i nic jeszcze "nie wie" o punktach, które dla niego przygotowaliśmy.

Rozmiar: 2912 bajtów

Jak widać, neuron nas zawiódł. Odpowiedział "1" na wejścia oznaczone przez punkty A, B i C, na pozostałe zaś - "-1". Prawdę mówiąc to z samego rysunku nie jesteśmy w stanie wywnioskować, na które z punktów neuron odpowiada pozytywnie, a na które negatywnie - może być odwrotnie, niż powiedziałem. Ale przyjmijmy moją wersję. Teraz musimy doprowadzić do takiej sytuacji:

Rozmiar: 2877 bajtów

Przebieg prostej zależy wyłącznie od wartości wag neuronu. Nie powiem tu nic nowego - wartości wag są zmieniane według tego samego algorytmu, co w przypadku neuronu liniowego. Obliczany jest błąd, ustalona korekta wag, zmieniane wagi, a co za tym idzie przebieg charakterystyki neuronu, i tak aż do skutku.

Przygotowałem applet, dzięki któremu będziesz mógł zaobserwować, jak neuron nieliniowy uczy się odróżniać dwie grupy punktów. Główna różnica między tym appletem a poprzednim polega na tym, iż teraz nie będziesz widział wartości wag, będziesz za to widział linię przez nie wyznaczoną. Na początku musisz oczywiście wyznaczyć owe punkty (w sumie nie więcej niż 20). Dla każdego punktu wpisujesz w odpowiednie pola jego współrzędne i żądaną odpowiedź neuronu, a następnie naciskasz "OK". Pracujesz w pierwszej ćwiartce układu współrzędnych, a X i Y muszą być mniejsze niż 6.

Po wprowadzeniu odpowiedniej ilości punktów musisz uaktywnić neuron. Od tej chwili nie możesz już dodać żadnego punktu. Pojawi się za to (lub też nie) linia wyznaczająca preferencje neuronu. Zaznaczyłem, że linia owa może się nie pojawić, gdyż na ekranie widzisz tylko mały wycinek układu współrzędnych i rzeczona linia może nawet w ogóle przez niego nie przechodzić. Kiedy naciśniesz przycisk "Ucz", neuron wykona tyle kroków uczenia, ile ma zapisane w odpowiednim polu, po czym zostanie wykreślona na nowo jego charakterystyka (linia prosta). Jeśli na początku nie widać linii, nie przejmuj się - uzbroiwszy się w cierpliwość naciskaj przycisk "Ucz", a linia w końcu się pojawi. Potem obserwuj, jak neuron stara się znaleźć rozwiązanie. Kiedy mu się uda (linia oddzieli punkty niebieskie od czerwonych), to po następnym naciśnięciu przycisku "Ucz" linia zmieni kolor na zielony i eksperyment zostanie zakończony. W każdej chwili możesz rozpocząć pracę z następnymi punktami i innym neuronem klikając przycisk "Nowe punkty".

Może się zdarzyć, że linia podzieli dwie grupy punktów, a neuron będzie uparcie kontynuował naukę. Powód tego jest taki, że najprawdopodobniej neuron wykonał zadanie odwrotne do zleconego - zaakceptował punkty, które miał odrzucić i odrzucił te, które miał zaakceptować. Znalazły się one po niewłaściwych stronach jego charakterystyki. Teraz prosta będzie musiała obrócić się o około 180 stopni, aby właściwie podzielić przestrzeń wejść.

W polu "Ilość kroków" określasz, ile kroków uczenia ma wykonać neuron po naciśnięciu przycisku "Ucz". Podczas prób będziesz mógł zauważyć, że o ile na początku neuron uczy się dość szybko i lepiej wtedy mieć ustawioną małą ilość kroków, o tyle pod koniec procesu uczenia zmiany wartości wag (czyli położenia prostej) są raczej niewielkie. Wtedy sensowne jest ustawienie większej ilości kroków. Pole "Suma kroków" pokazuje, ile kroków neuron w tym procesie uczenia już wykonał. Zachęcam ponadto do następujących eksperymentów:

  • ustaw punkty tak, żeby wszystkie były skupione blisko siebie, oprócz jednego, który umieść na przeciwległym brzegu ekranu;
  • ustaw dwa odmienne punkty bardzo blisko siebie, na przykład w odległości 0.1 jednostki;
  • ustaw punkty tak, żeby nie dało się ich podzielić linią prostą;
  • utwórz takie same punkty dwa lub trzy razy pod rząd aby sprawdzić, jak na proces uczenia wpływają "naturalne uzdolnienia" neuronu (jego wagi są dobierane losowo).

Powinieneś zaobserwować, że proces uczenia wydłuża się, kiedy zastosujesz się do dwóch pierwszych z listy zamieszczonej ponad appletem. Ciekawszy jest jednak wniosek płynący z ostatniego z polecanych doświadczeń. Okazuje się, że zasada tabula rasa nie jest w stu procentach prawdziwa. Głosi ona bowiem, że wrodzone preferencje są niczym, zaś zdobyta wiedz - wszystkim. Tutaj zaś widziałeś, że neurony startujące z różnych wartości wag cechują spore rozbieżności czasu procesu uczenia. Ten sam efekt możesz zaobserwować, jeśli wrócisz do początku tej strony - do pierwszego z przykładów. Jeśli jednak nie chcesz, a wolisz zamiast tego zająć się uczeniem całej sieci, to zapraszam dalej.

Kliknij aby przejść dalej
Start Sieci jednokierunkowe Sieci rekurencyjne Słowniczek Linki O autorach