Uczenie maszynowe #2 Ten o uczeniu nadzorowanym - regułą DELTA zwanym
Jak wytrenować neuron? Jak wygląda metodyka uczenia i jakie są jej rodzaje? Czym jest reguła DELTA? Jak sprawdzić jakość treningu? Czy obok perceptronu istnieją lepsze modele sieci neuronowych? Czym jest model ADALINE? A co na to filozofia?
Filozofia uczenia maszynowego
Pewien brytyjski filozof John Locke (Nie mylić z postacią z serialu “Lost - Zagubieni”) stwierdził kiedyś, że człowiek przychodzi na świat jako “czysta karta”, a jego umysł jest “tabula rasa” czyli “niezapisaną tablicą”, który nabywa wiedzę dopiero na skutek doświadczeń. Gdyby się nad tym chwilę zastanowić to faktycznie coś w tym jest, a czyniąc luźną analogię do sieci neuronowych (jakieś 300 lat później) jego filozofia ma dokładnie taki sam kontekst. Sztuczny neuron zaraz po utworzeniu jest praktycznie nie zaadaptowany do wykonywania jakiegokolwiek zadania i brak mu “wiedzy” w jakimkolwiek temacie.
Z łatwością można to jednak (a nawet trzeba) zmienić, wielokrotnie pozwalając mu na zapoznanie się z zestawami danych, które chcemy klasyfikować. Ciekawe jest to, że neurony wraz z treningiem oprócz rozpoznawania dokładnie tych zestawów, które mu wcześniej zaprezentowaliśmy w procesie treningu, będą również zdolne do zauważenia podobieństwa nowych zestawów (w procesie pracy), do tych już poznanych. Procedurę uczenia pojedynczej serii informacji (przez serię informacji rozumiemy dowolne wartości liczbowe podawane na wejścia), będziemy wykonywać iteracyjnie tzn. wielokrotnie, aż do uzyskania zadowalającej dokładności klasyfikacji. Tyle względem idei.
Tryby pracują
Na czym jednak polega cały mechanizm w trakcie “przepuszczania” danych przez neurony? Zasada jest prosta i polega na właściwym dostrojeniu synaps (zupełnie jak w biologicznym procesie), czyli naszych wag w
. Pamiętamy, że każde wejście ma odpowiadającą mu synapsę, co pozwala na traktowanie każdej wagi, jako indywidualnego “stroika” dla każdego pojawiającego się na pojedynczym wejściu sygnału.
Jak to zrobić, by dostroić? O tym za chwilę. Zapoznajmy się jeszcze z dwoma, można by rzec “nurtami” uczenia maszynowego.
Wyróżniamy następujące rodzaje treningu:
-
uczenie nadzorowane - uczenie z silną ingerencją człowieka - po dobraniu odpowiednich metod do danego zagadnienia pozwala na bardzo precyzyjną klasyfikację. Żeby uczyć pod nadzorem, człowiek musi posiadać dwie informacje, które przedstawi sieci - musi wiedzieć co podaje na wejścia oraz co chce otrzymać na wyjściu (chęć otrzymania konkretnego wyniku na wyjściu nazywamy życzeniem lub predykcją, czyli przewidywaniem) - struktura neuronu “odnajdzie” wtedy wszystkie zależności jakie istnieją między wejściami a wyjściem (człowiek nie będzie musiał znać tych zależności wprost, co jest ogromną zaletą sieci neuronowych) i zapamięta je sobie, klasyfikując z pewną skutecznością w przyszłości gdyby identyczne lub podobne dane zostałyby mu przedstawione ponownie.
-
uczenie nienadzorowane - uczenie bez pomocy człowieka (lub jego nikłym udziałem). Klasyfikacja korzysta z np. analizy skupień danych w pewnym obszarze (tzw. klasteryzacja) czyli najbliższego sąsiedztwa poszczególnych danych (gdyby spróbować przedstawić je graficznie). Nie zawsze skuteczna przy rozwiązywaniu niektórych problemów. Wymaga większej liczby iteracji treningu (czyli nauka będzie trwała dłużej). Za to jej niewątpliwą zaletą jest zbędność wiedzy o tym co chcemy otrzymać na wyjściu, neuron praktycznie samoistnie po pewnym czasie “załapie”, że część z informacji które przetwarza jest do siebie podobna (czyli w graficznej reprezentacji są porozrzucane w niedużej odległości od siebie), a z kolei inne diametralnie się od nich różnią. Na tej zasadzie przyporządkowuje je do różnych “obozów”.
W tym artykule zajmiemy się tylko pierwszym przypadkiem - uczeniem nadzorowanym. Najbardziej trywialną metodą jest oczywiście możliwość ręcznego podawania wartości wag i obserwacja wyników otrzymywanych na wyjściu, jednak jest to żmudna i nudna metoda programowania neuronowego. O wiele lepszym (choć równie prostym) sposobem, którego użyjemy w zautomatyzowanym procesie dostrajania synaps będzie jedna z wcześniej wspomnianych metod iteracyjnych. Poznajmy regułę DELTA.
Im więcej potu na poligonie tym mniej krwi na polu bitwy
Regułę DELTA dla pojedynczego wejścia i odpowiadającej mu synapsy można wyrazić za pomocą krótkiej formuły:
wj|i+1 = wj|i + η(z - y)xi
Gdzie:
wj|i
- waga synapsy o numerze j
w iteracji i
wj|i+1
- waga tej samej synapsy w kolejnej iteracji (względem tej o numerze i
)
xj
- wejście o numerze j
(odpowiadające pojedynczej synapsie)
z
- życzenie (predykcja)
y
- aktualnie otrzymywany wynik na wyjściu
η
- współczynnik uczenia
j
- numer wejścia lub wagi
i
- numer iteracji
Oczywiście regułę aplikujemy dla wszystkich j
wejść.
Istotnym jest również, by początkowe wartości wag były bardzo małymi liczbami różnymi od siebie dla każdego wejścia (tzw. wprowadzenie asymetrii) ponieważ - jak już wcześniej było wspominane - w przypadku wielowarstwowych sieci neuronowych nieliniowość zaczyna mieć znaczenie.
We wzorze pojawia się symbol η
, który oznacza współczynnik uczenia. Jest to pewna liczba wybierana przez człowieka, którą w luźnym sposobie rozumienia możemy opisać jako instrukcję “jak duży krok ma wykonać funkcja ucząca dla pojedynczej aktualizacji”. Sam proces dostrajania można przyrównać do szukania fali swojej ulubionej stacji radiowej. Kręcąc gałką, potencjometrem od radia (takiego przynajmniej z końca lat 90-tych, które jeszcze miało pokrętło), każdy ruch potencjometru oznacza kolejną iterację, a kąt obrotu naszego pokrętła - współczynnik uczenia (czyli krok postępu). Jeśli zmienilibyśmy pozycję gałki zbyt gwałtownie, zamiast złapać falę radiową interesującej nas stacji, moglibyśmy wejść w zupełnie inny zakres częstotliwości, który nijak miałby się do naszych oczekiwań. Z kolei delikatne, nieśmiałe ruchy wydłużyłyby czas poszukiwania częstotliwości, na której właśnie nadają naszą ulubioną audycję.
I tak właśnie im liczba określająca współczynnik jest większa, tym mniej iteracji potrzeba by wytrenować neuron. Mówi się jednak, że chytry dwa razy traci i rzeczywiście wraz ze zwiększaniem współczynnika uczenia stawiamy na szybkość jednak tracimy jakość - co znaczy, że zamiast otrzymywać wyjście y
coraz bliższe życzeniu z
, mogłoby się okazać, że w pewnym momencie otrzymujemy efekt odwrotny do zamierzonego (zamiast audycji jedynego słusznego radia, odebraliśmy transmisję radia propagandowego) - mówimy wtedy o tym że algorytm się “rozbiegł” - lub uzyskany wynik jest dalece odległy od oczekiwanego (niby złapaliśmy pasmo i słyszymy naszą wyczekiwaną audycję, ale jest ona zakłócana przez trzaski i szumy, co jest wynikiem niezadowalającym). Gdyby z kolei ustawić współczynnik uczenia na zbyt niską wartość, jak wcześniej było wspomniane - potrzebny byłby dłuższy czas (więcej iteracji) na precyzyjne dostrojenie i mogłoby się okazać że dla wytrenowania dużej sieci neuronowej zabrakłoby nam życia - czas jest cenny dlatego dobranie optymalnego współczynnika uczenia ma duże znaczenie.
Współczynnik uczenia przez cały proces treningu może być stały, istnieją jednak bardziej zaawansowane algorytmy uczące, które pozwalają na jego dynamiczną zmianę w trakcie całej procedury (tzw. adaptacyjny współczynnik uczenia), jest to jednak temat na oddzielny artykuł.
W przypadku trenowania pojedynczego neuronu dla uproszczenia przyjmijmy, że nasz współczynnik uczenia będzie stałą, bardzo małą liczbą bliską 0 (np. 0.07 albo 0.2 albo 0.4 itd.).
Z racji że reguła DELTA to algorytm iteracyjny, jej działanie możemy śmiało traktować jako postępujące aktualizacje, gdzie wraz z każdą kolejną iteracją (czyli właśnie aktualizacją) coraz lepiej dostrajane są wagi synaps, a to z kolei powoduje pojawienie się coraz bardziej zbliżonego do życzenia z
wartości wyjścia y
.
W teorii, chcemy otrzymać wyjście równe życzeniu co w matematycznym kontekście oznacza zminimalizowanie tzw. funkcji błędu.
E = ½ Σj = 0 (zj - yj)2 -> min
gdzie:
E
- funkcja błędu
zj
-życzenie dla pojedynczej serii danych o numerze j
yj
- wyjście dla pojedynczej serii danych o numerze j
Funkcja błędu jest pewnego rodzaju wskaźnikiem jakości treningu i jak sama nazwa wskazuje - określa jak duży, uśredniony błąd kwadratowy (różnicy między życzeniem a wyjściem) występuje po treningu dla wszystkich serii danych. Oczywiście zależy nam na tym (jakże inaczej) żeby jej wartość była jak najmniejsza.
Podsumowanie
Reguła DELTA mimo swojej prostoty (reguła opisana wzorem na jedną linijkę? Serio..?) - jest podstawą i punktem wyjścia do tworzenia większości automatycznych algorytmów uczenia. Innymi słowy istnieją pewne “ulepszacze” - sposoby przyspieszania procesu uczenia zwiększające jego zbieżność, aplikowane bezpośrednio na wyżej wymienioną regułę, o których chciałbym w najbliższym czasie opowiedzieć (choć niekoniecznie w następnym artykule). W kwestii uzupełnienia warto również napisać, że w momencie dodania algorytmu aktualizacji w postaci reguły DELTA, nasz pojedynczy sztuczny neuron - perceptron - ewoluuje do tzw. modelu ADALINE (czyli ADAptive LINear Element), który po implementacji w dowolnym języku programowania będzie świetną bazą do hobbystycznych testów związanych z prostą klasyfikacją (np. bramek logicznych lub kształtu cyfr).
Dziękuję za uwagę!
Zobacz również:
Uczenie maszynowe #3 Ten o bias ścięciu
Grafika
Potwierdzam że użyłem Zaawansowanego szukania grafik Google z zaznaczoną opcją prawa użytkowania treści: "do swobodnego użytku, udostępniania lub modyfikowania, również komercyjnego"
Bibliografia
- R. Tadeusiewicz "Sieci neuronowe" Akademicka Oficyna Wydaw. RM, Warszawa 1993. Seria: Problemy Współczesnej Nauki i Techniki. Informatyka.
Warto uważać na "grafika Google", bo zgodnie z napisem przy grafice - używanie tego nie zdejmuje z nas odpowiedzialności cywilno-karnej :D
Celna uwaga :D
Na Steem trzeba mocno uważać z grafikami, żeby sobie nie narobić bigosu ;) Bo tak jak fervi mówi - podanie źródła nie wystarcza. Najlepiej po prostu korzystać ze takich stron jak:
Tutaj jakiś artykuł na ten temat:
https://steemit.com/polish/@oscar.rak/skad-brac-legalne-darmowe-zdjecia-do-swoich-wpisow-poradnik.
A strojenie radia to jedno z moich ulubionych porównań :)
Rzeczywiście powinienem przyłożyć do tego większą uwagę. Dziękuję za przydatne linki :) Co do porównania, cieszy mnie że trafiłem w gusta :)
Congratulations @callmejoe! You have completed the following achievement on Steemit and have been rewarded with new badge(s) :
Award for the number of comments
Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word
STOP