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

***
Jednym zdaniem... - Istota uczenia sieci - Z nauczycielem czy bez? - Inne przydatne wiadomości

***

Idea i rodzaje uczenia sieci neuronowej

Jednym zdaniem...

... dochodzimy do sedna sprawy w SSN.

Istota uczenia sieci

Właściwie to zapewne już wiesz, na czym mniej więcej polega uczenie sieci, wspominałem o tym bowiem od czasu do czasu. Trzeba jednak zebrać i usystematyzować rozrzucone wiadomości. Cała wiedza sieci neuronowej tkwi w wartościach jej wag. Zmień je - a dostaniesz całkiem inną sieć. Nie chodzi to o jej "wygląd", ale o "charakter". Nie ma co się rozpisywać - uczenie sieci polega na automatycznym (według odpowiedniego algorytmu) dobraniu takich wartości wag, przy których sieć będzie możliwie najlepiej rozwiązywała dane zadanie. Jako że w poprzednim rozdziale naczytałeś się o sposobach ustalania struktury sieci i liczby neuronów, musisz wiedzieć, iż struktura to rzecz ważna, lecz nie najważniejsza. Nawet sieć nie posiadająca optymalnej struktury może zostać dobrze nauczona danego zadania.

Niejednokrotnie już wskazywałem na analogie między działaniem SSN a ludzkiego mózgu. Podczas zajmowania się uczeniem sieci analogii tych zauważyć można dużo więcej, a zwłaszcza przerabiając niezmiernie ciekawe zagadnienie, jakim jest samouczenie sieci. A pierwszą z analogii jest właśnie fakt, iż sieć, podobnie jak człowiek, może zarówno być uczona przez nauczyciela, jak i zdobywać wiedzę całkiem samodzielnie. W następnym podpunkcie omówię szczegółowo te zagadnienia, a w dalszych rozdziałach pokażę wszystko na przykładach.

Z nauczycielem czy bez?

Nauczyciel uczy w ten sposób, że zadając pytanie podpowiada odpowiedź. Tak jest właśnie w przypadku SSN. Pytaniem jest zbiór danych wejściowych, zaś odpowiedzią - docelowa wartość wyjścia sieci. Dla przykładu opiszę, jak uczyłem sieć w trzecim z przykładowych appletów - tym z siecią jednowarstwową o trzech neuronach i pięciu wejściach.

Rozpatrzmy pierwszy ze wzorców, których sieć miała się nauczyć. Na wejścia podajemy kolejne liczby tego wzorca: (3, 2, 4, 5, 4). Pierwszy neuron miał akceptować ten wzorzec, zaś drugi i trzeci - odrzucać go. Na wyjściu zatem miały się pojawić wartości: (1, -1, -1). Mamy już pytanie i odpowiedź. Musimy teraz sprawdzić, jak sieć zareaguje na ten obiekt przed rozpoczęciem procesu uczenia. Najprawdopodobniej nie tak, jak byśmy chcieli, ponieważ początkowe wartości wag ustalone są losowo. Powiedzmy, że po podaniu na wejście naszego wzorca sieć wyrzuci odpowiedź: (-1, -1, 1). Porównując ją z odpowiedzią prawidłową widzimy, że musimy douczyć neurony: pierwszy i trzeci. Drugi od razu odpowiedział prawidłowo. Algorytm uczenia sprawdza, na wyjściach których neuronów pojawił się błąd, a następnie poprawia wagi tych neuronów, aby ów błąd zmniejszyć (najlepiej do zera). Po korekcie wag znowu sprawdzamy, jak sieć odpowiada na wzorcowy sygnał. Jeśli nadal są błędy, poprawiamy wagi... i tak dalej. Tak prosta sieć, jak w moim applecie, przeważnie była nauczona poprawnie już po pierwszym kroku uczenia, ale na przykład zaawansowane sieci służące do rozpoznawania mowy lub pisma potrzebują nawet miliardów kroków uczenia, aby móc pełnić swe zadanie. Trwa to całymi dniami. Nie ma w tym nic dziwnego - pomyśl, ile czasu zajmuje człowiekowi nauka pisania i czytania.

Wiadomo, że nauka idzie łatwiej, kiedy mamy nauczyciela. Bez niego jednak też jesteśmy w stanie niejednego się nauczyć. Nie tylko my - sieć również. Uczenie bez nauczyciela (zwane też uczeniem nienadzorowanym) różni się od zwykłego uczenia głównie tym, że sieć otrzymuje tylko obiekt wejściowy, bez narzuconego dla niego wyjścia. Nikt jej nie sugeruje, jak ma na dany obiekt reagować. Jak zatem się ona uczy? Pomysł jest bardzo prosty (zresztą nie mój ani niczyj inny - samouczenie przebiega w naszym mózgu właśnie na tej zasadzie, "wynalezionej" przez naturę). Kiedy sieć coś "zobaczy" (odbierze jakiś obiekt ze swoich wejść), na jej wyjściu pojawią się konkretne, choć przypadkowe (z powodu losowego doboru początkowych wartości wag), wartości. Jeśli mamy na przykład pięć neuronów w warstwie wyjściowej, to każdy z nich jakoś zareaguje na podany sygnał. Następnie wagi każdego z neuronów zmieniają się zgodnie z zasadą, że:

  • 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ł.

Oznacza to, że jeśli jakiś neuron ma "wrodzone skłonności" do pewnego obiektu wejściowego, to kiedy podamy ów obiekt na wejście sieci, te skłonności zostaną rozwinięte. Jeżeli zaś neuronowi jakiś obiekt wyjątkowo się "nie spodoba", to po kilkukrotnym pokazaniu neuron "znielubi" obiekt dokumentnie. Po dłuższym okresie uczenia się poszczególne neurony sieci potrafią rozpoznawać rozmaite obiekty, choć projektant sieci mógł nic o tych obiektach nie wiedzieć, a nawet nie wiedzieć, ile ich będzie. Wyobraź sobie, że wysyłamy taką sieć w trudno dostępne miejsce. Sieć "siedzi" i obserwuje. Początkowo potrafi tylko rozróżnić obiekty ruchome od nieruchomych, potem szybkie od powolnych... Wciąż uściślając swoją wiedzę może nawet nauczyć się odróżniać samca od samicy jakiegoś nieodkrytego jeszcze gatunku zwierzęcia! Ale o tym wszystkim opowiem w stosownym rozdziale.

Inne przydatne wiadomości

Wiesz już, że sieć można nauczyć rozpoznawania różnych obiektów podawanych na jej wejście. Jednakże możemy podać na wejście tylko jeden obiekt na raz. Trzeba zatem opracować jakiś system podawania obiektów w określonej kolejności. Pierwszy sposób to podawanie na wejście pierwszego obiektu tyle razy, żeby sieć porządnie się go nauczyła, następnie to samo z drugim obiektem, itd. W ten sposób jednak sieć ucząc się dziesiątego obiektu może całkiem zatracić wiedzę na temat pierwszego (widzisz podobieństwo do uczenia się człowieka?). Spróbujmy inaczej: Podajemy obiekt pierwszy - raz, potem drugi - też raz, i tak dalej - każdy z obiektów kolejno po razie. Tak jest już dużo lepiej, ale sieć może przyzwyczaić się, że obiekty następują po sobie w określonej kolejności i nie zdać egzaminu "na wyrywki" (kolejna analogia, nieprawdaż?). Najlepszym, "jedynie słusznym" sposobem jest podawanie obiektów wejściowych w całkowicie przypadkowej kolejności. W czasie uczenia co jakiś czas egzaminujemy sieć i uczymy dalej aż do zadowalającego poziomu wiedzy. Z niezliczonych doświadczeń wynika, iż taka procedura uczenia najlepiej zdaje egzamin.

Inna sprawa to tak zwany współczynnik uczenia. Algorytm uczenia (czy to z nauczycielem, czy też bez) zawsze musi obliczyć korekty wag, czyli zdecydować, o jaką wartość zmienić wagi neuronu, który jeszcze nie potrafi rozpoznawać danego obiektu. Im większa wartość (co do wartości bezwzględnej) była na wejściu niedouczonego neuronu, tym bardziej zmieniane są jego wagi (większa jest ich korekta). Proces uczenia może być dodatkowo usprawniony przez zastosowanie współczynnika uczenia. Przyjmuje on wartości z przedziału od 0 do 1, nie licząc zera (może być większy od 1, choć nie ma to większego sensu). Obliczona korekta jest mnożona przez ów współczynnik. Jeśli ma on wysoką wartość (około 1), korekta nie zmienia się znacząco. Jeśli jednak współczynnik ma wartość na przykład 0.1, korekta zostanie dziesięciokrotnie zmniejszona. Współczynnik uczenia (w angielskiej literaturze learning rate) można porównać do nauczyciela: zbyt wysoka wartość odpowiada nauczycielowi surowemu, który nawet za małe pomyłki stosuje wysoką karę. Uczeń (czyli sieć) pełen frustracji miota się od jednej skrajności do drugiej i nie może trafić na właściwe rozwiązanie. Zbyt niski współczynnik z kolei to nauczyciel zbyt łagodny, przy którym uczeń uczy się bardzo powoli, gdyż jego błędy są tolerowane. Zrozumiesz to lepiej w następnym rozdziale na przykładzie uczenia neuronu.

Czytając o sieciach neuronowych zetkniesz się też z pojęciem momentum. Pojęcia tego raczej się nie tłumaczy. Oznacza ono wartość "bezwładności" procesu uczenia. Kiedy stosowane jest momentum, korekta wag neuronu zależy nie tylko od sygnału wejściowego i błędu, jaki neuron popełnił, ale również od tego, jak duża była korekta wag w poprzednim kroku uczenia. W ten sposób szybkość uczenia (wielkość korekty wag) automatycznie maleje w miarę zbliżania się do właściwego rozwiązania, a proces uczenia staje się płynniejszy (więcej o momentum w części "dla fachowców"). Używając momentum można zwiększyć współczynnik uczenia.

Teraz uwaga: wyjaśniam, o co chodziło z tym tajemniczym biasem dwa rozdziały temu... Jak wiesz, odpowiedź neuronu zależy od jego potencjału membranowego. Kiedy ów potencjał jest większy od zera, odpowiedź wynosi 1, a w przeciwnym przypadku -1. Zero jest więc pewnym punktem krytycznym, określanym jako próg aktywacji neuronu. Otóż stosując bias można ten próg przesunąć. A czym właściwie jest bias? Po prostu dodatkowym wejściem neuronu, ze swoją własną wartością wagi. "Normalne" wejścia neuronu oznacza się zazwyczaj liczbami od 1 w górę, a bias staje się wejściem "zerowym". Wygląda to tak:

Rozmiar: 6198 bajtów

Jeśli w sieci stosuje się bias, jest on dołączany do każdej warstwy i połączony z każdym jej neuronem. Jego wagi podlegają normalnemu uczeniu, traktuje się go tak, jakby był zwykłym wejściem. Z jednym wyjątkiem: wartość na wejściu biasu zawsze wynosi 1. Oto schematy ilustrujące zależność progu aktywacji neuronu od wartości wagi biasu:

Rozmiar: 2402 bajtów


Rozmiar: 2385 bajtów

A oto i sam bias podpięty do warstwy pewnej sieci:

Rozmiar: 9154 bajtów

Zastosowanie biasu często określa się jako "uwolnienie progu aktywacji neuronu". Prosty przykład wyjaśniający, na czym polega użyteczność biasu: przypuśćmy, że neuron ma nauczyć się rozpoznawania dwóch obiektów (jednego na "nie", drugiego na "tak"). Załóżmy, że przed rozpoczęciem procesu uczenia potencjał membranowy neuronu dla każdego z obiektów wynosi odpowiednio: -6 i -4. Neuron bez biasu będzie musiał mozolnie uczyć się do chwili, gdy jego potencjał membranowy przyjmie wartości na przykład -1.8 i 0.2, co odpowiada wyjściom równym -1 i 1 (czyli zadanie wykonane - jeden obiekt na "nie", drugi na "tak"). Neuron z biasem natomiast może pomóc sobie przesuwając swój próg aktywacji na przykład na -5. Wtedy dla potencjału membranowego równego -6 odpowiedź wyniesie -1, a dla potencjału równego -4 neuron odpowie: 1. Przykład jest wprawdzie uproszczony, gdyż w rzeczywistości neuron stosuje "złoty środek" - trochę przesuwa swój próg aktywacji i trochę zmienia wagi wejść, więc w naszym przykładzie na te dwa obiekty może odpowiedzieć na przykład: -4 i -2, a próg aktywacji w tym czasie ustawić na -3. Pomimo tych koniecznych w Twoim procesie uczenia J nieścisłości mam nadzieję, iż wyjaśniłem z grubsza ideę biasu.

Uczysz się i uczysz... Czas na przerwę. Tym razem to Ty nauczysz czegoś neuron.

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