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

***
Jednym zdaniem... - Idea samouczenia - Przykład sieci samouczącej się - Właściwości procesu samouczenia - Konkurencja w sieci

***

Sieć uczy się sama

Jednym zdaniem...

... samouczenie to chyba najciekawszy aspekt SSN.

Idea samouczenia

Zasadę samouczenia opisałem już pokrótce trzy rozdziały temu, ale nic nie zaszkodzi, jeśli co nieco przypomnę, aby uściślić i usystematyzować Twoje wiadomości.

W przypadku uczenia nadzorowanego (z nauczycielem) sieć dla każdego wejścia otrzymuje informację o tym, jakie ma być prawidłowe wyjście. Ucząc się sama, informacji tej nie otrzymuje. Procedura samouczenia jest następująca:

  1. Wyznaczane są losowo wartości wag dla całej sieci.
  2. Sieć odbiera sygnał wejściowy i na jego podstawie wyznacza swoje wyjście.
  3. Sieć ocenia wartość na wyjściu każdego neuronu warstwy wyjściowej (czyli pierwszej, gdyż w samouczeniu przeważnie mamy do czynienia z siecią jednowarstwową).
  4. Wagi poszczególnych neuronów zmieniane są zgodnie z zasadami:
    • neurony, które silnie zareagowały na sygnał wejściowy (akceptacja), zostają nauczone tak, aby reagować na ten sygnał jeszcze silniej;
    • neurony, które zareagowały słabo (obojętność), nie są uczone;
    • neurony, które zareagowały silną odpowiedzią ujemną (odrzucenie), są uczone tak, aby jeszcze bardziej zdecydowanie odrzucały ten sygnał.
  5. Powrót do punktu drugiego.

Z tego wniosek, że samouczenie jest niczym innym, jak rozwijaniem "wrodzonych" preferencji sieci. Teraz jednak przejdźmy do praktyki - później poteoretyzujemy.

Przykład sieci samouczącej się

Podobnie, jak w kilku poprzednich appletach, mamy tu do czynienia z przestrzenią wejść. Sieć składa się z jednej warstwy o wybieranej przez Ciebie ilości neuronów, po dwa wejścia przy każdym. Nie stosuję tu biasu. Neurony są liniowe. Reprezentują je punkty, których współrzędne są równe wagom wejść danego neuronu. Przykładowe obiekty wejściowe również mogą być reprezentowane przez punkty w tym samym układzie współrzędnych. Współrzędne punktu oznaczającego wejście to po prostu... wartość tego wejścia. Im bliżej jest punkt oznaczający neuron od punktu oznaczającego wejście, tym bardziej pozytywna odpowiedź neuronu na to wejście.

Teraz trochę o obsłudze programu. Do jego uruchomienia służą dwa klawisze: "Sieć bez konkurencji" oraz "Sieć z konkurencją". Na razie zajmiemy się tym pierwszym przypadkiem. Nie martw się o tą konkurencję, to się potem wyjaśni. Kiedy naciśniesz wspomniany klawisz, na układzie współrzędnych pojawi się pewna ilość (wyświetlona w odpowiednim okienku) punktów oznaczających neurony. Układ ma skalę na obu osiach od -10 do 10, tak więc neuron opisany przez punkt znajdujący się na środku prawej górnej ćwiartki będzie miał wagi takie, jak współrzędne tego punktu, czyli około 5 dla każdej. Przy okazji upewnij się, że pamiętasz, jak w matematyce numeruje się ćwiartki układu współrzędnych: pierwsza to prawa górna, a dalej idziemy w kierunku przeciwnym do ruchu wskazówek zegara.

Ustaliłem, że sieć może zaobserwować cztery rodzaje obiektów wejściowych (każdy reprezentowany przez punkt leżący na środku jednej z ćwiartek układu). Wejścia te są sieci pokazywane w przypadkowym porządku. Kiedy wystartujesz applet, uaktywnią się dwa kolejne przyciski. Spróbuj użyć przycisku "Krok po kroku", a ja Ci opiszę, co się dzieje po każdym jego naciśnięciu.

Naciśnięcie pierwsze

W jednej z ćwiartek pojawia się obiekt wejściowy oznaczony białym kwadratem. Neurony reagują natychmiastowo. Swój stosunek do tego obiektu obwieszczają światu poprzez zmianę koloru. I tak: tradycyjnie niebieski to aprobata, czerwony - dezaprobata, oraz nowość: szary - obojętność.

Naciśnięcie drugie

Porobiło się! Neurony pokazują, co zamierzają zrobić w zaistniałej sytuacji. Jak wiesz, zmienią swoje wagi. Jeśli neuron (reprezentowany przez punkt, którego współrzędne są wagami neuronu) zmieni swoje wagi, to jego punkt się przesunie. To właśnie pokazały neurony: swoje nowe położenie (czarne punkty) i drogę, którą punkt "przebędzie" (szara kreska). Jeśli sprawdzasz to na bieżąco, to zapewne masz kłopoty - neurony zmieniają kolory, znika wejście, itd. Wynika to z faktu, iż ekran appletu jest odświeżany przy każdym pojawieniu się. Tak więc najpierw przeczytaj te informacje, a potem eksperymentuj. A wracając do naszej sieci - zauważ, że punkty, które pozytywnie zareagowały na wejście, zbliżą się do niego, punkty "negatywne" oddalą się, zaś punkty "obojętne" niemal nie ruszą się z miejsca. Zauważysz też zapewne, że punkty przybliżające się przesuwane są mocniej, niż oddalające się. To specjalny trik, zapobiegający do pewnego stopnia wychodzeniu punktów poza ekran.

Naciśnięcie trzecie

Skoro się powiedziało "A", trzeba... Teraz neurony wprowadzają swe plany w życie. Wyświetlane są punkty odpowiadające nowym wartościom wag. Kolejne naciśnięcie przycisku rozpocznie następną iterację.

Jeszcze parę wyjaśnień i będziesz mógł się zabrać do zabawy. Przycisk "Szybciej" służy do do przeskoczenia wyżej opisanych trzech kroków jednym susem. Tabeli zatytułowane "Pokazy" i "Neurony" opisują odpowiednio: liczbę obiektów pokazanych w poszczególnych ćwiartkach i liczbę neuronów w każdej z nich. Postaraj się zaobserwować, czy zachodzi między tymi wielkościami jakiś związek. Dla rozwiania ewentualnych wątpliwości zamieszczam tabelki:

Pokazy:
2 2
3 1
Neurony:
5 5
8 2

Z lewej tabelki wnioskujemy, iż w sumie zostało już w trakcie uczenia pokazanych 8 obiektów wejściowych, z czego po 2 w pierwszej i drugiej ćwiartce, 3 w trzeciej i 1 w czwartej. Prawa zaś informuje nas, że sieć ma w sumie 20 neuronów, z czego po 5 "siedzi" w dwóch pierwszych ćwiartkach, 8 w trzeciej i 2 w czwartej.

Jeszcze tylko wspomnę, że możesz użyć najwyżej 1000 neuronów, i już możesz zająć się eksperymentami.

Właściwości procesu samouczenia

Teraz opowiem Ci trochę o rozmaitych niuansach samouczenia, byś bogatszy o tą wiedzę mógł bardziej świadomie zająć się powyższym appletem. Przede wszystkim musisz wiedzieć, że sygnały wejściowe, mimo iż podawane w kolejności przypadkowej, nie mogą pojawiać się w przypadkowych miejscach. W naszym przykładzie mamy cztery takie miejsca:

Rozmiar: 1870 bajtów

Innymi słowy: sygnały wejściowe muszą się dać jakoś sklasyfikować, zaszufladkować. Tak jak w życiu - kiedy na przykład rozpoznajemy rośliny, to możemy zaobserwować mnóstwo drzew, ale wszystkie one mają ze sobą coś wspólnego, są w pewien sposób podobne. Tak samo sygnały wejściowe sieci samouczącej się muszą być "podobne" do pewnych wzorców, można nawet powiedzieć: archetypów. W naszym przykładzie mogłyby wystąpić bez szwanku dla procesu uczenia na przykład takie sygnały wejściowe:

Rozmiar: 1870 bajtów

Oczywiście tych "archetypów" może być więcej, mogą być inaczej rozłożone, mogą pojawiać się w zaawansowanym procesie uczenia nowe archetypy, ale nie może być całkowitej przypadkowości. Sieć wówczas odbierze to jako szum, chaos. Proces uczenia zabrnie zaś w ślepy zaułek.

Drugim ważnym warunkiem jest zależność ilości potrzebnych neuronów od ilości archetypów. Przedtem jednak mała umowa: ten nasz "archetyp" będę dalej nazywał, zgodnie z nomenklaturą, atraktorem. "Atrakcyjny" znaczy nic więcej, jak "pociągający". A miałeś okazję zaobserwować, jak (dosłownie!) pociągający dla neuronów jest atraktor. A wracając do tematu: neuronów musi być wyraźnie więcej, niż atraktorów. Znaczy to, że sieć musi być dostatecznie "mądra", by zaabsorbować pewną dawkę wiedzy. Możesz spróbować ustawić w applecie ilość neuronów na cztery lub sześć. Może się zdarzyć (a przy trzech neuronach jest to pewne), że jedne z sygnałów wejściowych będą miały rozpoznające je neurony, a inne - nie. Sieć po prostu nie będzie mogła objąć umysłem tak wielkiej dla niej różnorodności środowiska, w którym się znalazła (wszelkie podobieństwo do innych (niż sieć) istot inteligentnych jest z premedytacją zamierzone!).

Trzeci warunek udanego samouczenia to dostatecznie różnorodne początkowe preferencje poszczególnych neuronów. Jeśli sieć ma się nauczyć rozpoznawania różnych obiektów, musi mieć takie neurony, które mają różne "upodobania". Zrozumiesz to, kiedy przed uruchomieniem appletu zaznaczysz pole "Gęste ułożenie neuronów". Kiedy rozpoczniesz proces uczenia, zaobserwujesz efekt "owczego pędu" - wszystkie neurony zgodnie idą w stronę pokazywanych atraktorów. Żadnej różnicy zdań! Taka sieć złapie się kurczowo pierwszego atraktora, który zdoła ją "przechwycić" i będzie uparcie trwać na swoim stanowisku. Ty jednak możesz ją przechytrzyć. Pola oznaczone napisami: "1 ćwiartka", "2 ćwiartka" i tak dalej służą do sterowania procesem pojawiania się obiektów wejściowych. Jeśli odznaczysz daną ćwiartkę, to zamieszczony w niej atraktor nie będzie sieci pokazywany. W przypadku gęsto ułożonych neuronów polecam wyłączenie ćwiartki, do której przylgnęły. Zaobserwujesz wtedy ciekawe, bardzo "ludzkie" zjawisko: jeśli sieć nie "siedziała" zbyt długo w "swojej" ćwiartce, zachowa się w sposób typowy dla tak ograniczonej jednostki: po upadku jednej idei, której służyła, znajdzie sobie inną - wszystkie neurony zostaną (boczkiem, cichaczem!) przerzucone do sąsiedniego atraktora. Cudowne nawrócenie! W tym momencie chciałoby się wskazać przykład podobnego zjawiska z życia codziennego, ale wykłady powinny być apolityczne, więc przykładu nie będzie. Wróćmy do sieci. "Efekt nawrócenia" może wystąpić, ale nie musi. Jeśli jest już "za późno", po wyłączeniu przyciągające je atraktora wszystkie neurony zgodnie "odejdą w niebyt" - typowy przykład jednostki niereformowalnej.

"Starego psa nie nauczysz nowych sztuczek" - to, jakże trafne, powiedzenie, jest prawdziwe również w odniesieniu do SSN. Spróbuj tak: na początku uczenia wyłącz jedną z ćwiartek. Kiedy każdy neuron już wyspecjalizuje się w którejś z trzech pozostałych ćwiartek, włącz ją z powrotem. I co? I nic. Sieć "nie chce" się nauczyć rozpoznawania nowego obiektu. Spróbuj zacząć doświadczenie od początku i włączać z powrotem ćwiartkę nieco wcześniej. Zauważysz, że zdolność sieci do adaptacji malej wraz z "wiekiem". Nie będę się już powtarzał o analogiach do działania biologicznego mózgu... Zauważ przy tej okazji, jak ważną rzeczą jest pierwsze wrażenie - to, czego sieć nauczy się na początku.

Prawdziwie ciekawe doświadczenia zaczną się, gdy użyjesz większej ilości neuronów, a możesz ich użyć nawet tysiąc (choć nie więcej). Wtedy dopiero w pełni docenisz wagę "pierwszych doznań" sieci. Spróbuj na początku procesu uczenia wyłączyć trzy ćwiartki i pozostawić tylko jedną. Wykonaj tak trzy kroki uczenia i włącz wszystkie ćwiartki. Zauważ, że podczas dalszego uczenia nawet po dłuższym czasie wciąż najwięcej neuronów jest w tej ćwiartce, która jako jedyna była "widoczna" na początku.

Inne ciekawe zjawisko, jakie zaobserwujesz podczas uczenia dużej sieci, to fakt tworzenia się pomiędzy atraktorami "pomostów" neuronów nie podporządkowanych żadnemu z atraktorów. Pomosty owe w dalszym ciągu uczenia sieci w końcu runą, tym niemniej są nieodłącznym elementem początkowego etapu samouczenia. Co może rozpoznawać neuron będący na takim pomoście? Zapewne coś pośredniego pomiędzy jednym a drugim atraktorem. Jest to tak, jakby sieć "wyobrażała" sobie hybrydę dwóch znanych jej obiektów wejściowych i celowo zostawiała sobie pewien zapas neuronów, które mogłyby ową hybrydę rozpoznać. Potem rzeczywistość rozwiewa owe marzenia... Na zasadzie takich skojarzeń powstało wiele bajkowych stworzeń, jak smok, który kumuluje cechy wielu zwykłych zwierząt, czy swojska warszawska Syrenka.

Możesz także manipulować współczynnikiem uczenia. Rób to jednak ostrożnie - już przy wartości 0.5 program się "wysypie", gdyż wartości wag wzrosną tak gwałtownie, że nastąpi przepełnienie. Dobierając duży współczynnik otrzymasz sieć gwałtowną i entuzjastyczną - błyskawicznie uczy się ona pokazywanych atraktorów i równie szybko je zapomina, jeśli przez jakiś czas nie będą się ukazywać. Niska wartość współczynnika spowoduje, że sieć będzie się uczyć powoli i rozważnie, przez długi czas dysponując nie "zagospodarowanymi" jeszcze neuronami. Można to poczytać za wadę, ale zauważ, że jeśli w polu widzenia sieci pojawi się jakiś całkiem nowy atraktor, sieć będzie mogła go za pomocą tych "luźnych" neuronów rozpoznać.

Konkurencja w sieci

Pozostało tylko wyjaśnić, co oznacza owa "sieć z konkurencją". Pomysł jest bardzo prosty: na początku wszystko jest tak, jak w przypadku zwykłego samouczenia. Po obliczeniu odpowiedzi neuronów natomiast uczony jest tylko ten neuron, którego odpowiedź na dany sygnał wejściowy była najwyższa. Tylko jego wagi są zmieniane i tylko on "przysuwa się" do obiektu wejściowego. Kiedy już tam dojdzie, nieruchomieje i nie liczy się w dalszej konkurencji. Oznacza to, że znaleziony zostanie następny neuron leżący najbliżej punktu wejściowego i to on będzie teraz uczony. I tak dalej. Zasadę tą nazywa się także winner takes all (zwycięzca bierze wszystko), lub w skrócie: WTA.

Ta zmiana ma swoje zalety i wady. Zaletą jest fakt, iż prawie na pewno nie dojdzie tu do sytuacji, w której jakiś obiekt pozostanie nierozpoznany. Nie potrzeba również tak dużej ilości neuronów - wystarczy, że będzie ich nieco więcej, niż atraktorów. Ponadto sieć uczące się zwykłym sposobem ma skłonności do marnotrawstwa - kilka neuronów specjalizuje się zazwyczaj w rozpoznawaniu tego samego punktu. W przypadku WTA jest tak tylko wtedy, gdy neuronów jest wyraźnie więcej, niż obiektów wejściowych. W normalnych warunkach już na początku procesu uczenia każdy neuron obiera sobie własny atraktor i uczy się go rozpoznawać. Samouczenie z zastosowaniem konkurencji jest więc bardziej ekonomiczne. Nie jest jednak pozbawione pewnej istotnej wady. Kiedy w sieci uczącej się tradycyjną metodą dojdzie do sytuacji, iż jeden lub więcej atraktorów nie będzie posiadało "swoich" neuronów. Cóż - trudno, ale za to te atraktory, które zostały rozpoznane, mają zapewnioną swoją pozycję. Jeśli natomiast stosujemy algorytm WTA, to może się zdarzyć, że przy pokazywaniu pewnego atraktora zwycięzcą w jego rozpoznawaniu zostanie neuron przyporządkowany już do innego atraktora. Wówczas neuron ów bez skrupułów porzuci stary atraktor, by zająć się nowym.

No i to by było na tyle... Co prawda samouczenie zaledwie w tym rozdziale "liznęliśmy", ale jest to część "dla ciekawskich". Jeśli jeszcze Cię nie znudziłem, nie boisz się matematyki i chcesz się dowiedzieć czegoś więcej - zapraszam dalej. Jeśli zaś na tym skończysz, to uprzejmie dziękuję za uwagę i serdecznie pozdrawiam!

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