Uczenie maszynowe #1 Ten o sztucznych neuronach - perceptronach
Czym jest i jak działa sztuczny neuron? Jaką drogę musi pokonać sygnał od wejścia do wyjścia i po co nam funkcja aktywująca? Perceptron? A na co to komu? Jaki wpływ na rozwój uczenia maszynowego miał człowiek który wymyślił EKG do badania serca?
Trochę historii:
Do roku 1906 ludzkość nie zdawała sobie sprawy z powszechnie znanego dzisiaj zagadnienia, jakim jest budowa mózgu. Uważano wtedy, że jest on jednolitą masą, która bierze udział we wszystkich procesach odpowiedzialnych za funkcjonowanie człowieka, nie potrafiono jednak wyjaśnić na jakiej zasadzie mózg - nadrzędny sterownik - miałby nadzorować każdy aspekt naszego życia.
Wszystko zmieniło rewolucyjne odkrycie pewnego hiszpana: Pana Santiago Ramón y Cajal, który wyodrębnił strukturę systemu nerwowego i kształt pojedynczego neuronu, korzystając z dorobku ówczesnych metod fotografii.
Świeżo zrewidowane poglądy na sprawę pozwoliły na dalsze odkrycia innych badaczy, i tak np. Pan Einthoven (Taaak, ten sam który wymyślił elektrokardiograf EKG do badania serca) rejestrując biopotencjały tkanek narządów, zajął się również badaniem zjawisk elektrycznych układu nerwowego.
W końcu w swoje ręce oprócz fizjologów temat pochwycili matematycy - ludzie mający tendencję do opisu świata za pomocą modeli matematycznych - i tak w roku 1943 Panowie McCulloch i Pitts biorąc za podstawę sposób funkcjonowania biologicznego neuronu, z pomocą podstawowych operacji matematycznych stworzyli numeryczny opis jego działania, który 14 lat później posłużył innym Panom - Rosenblat’owi i Wightman’owi do budowy (jakżeby inaczej, z przekaźników) pierwszej sztucznej sieci neuronowej - perceptronu - wytrenowanego w celu rozpoznawania liter i cyfr.
I od tego miejsca zaczynamy naszą przygodę.
Przygodo - start
Perceptronem nazywamy sieć zbudowaną z jednego lub wielu sztucznych neuronów umieszczanych kolejno warstwami. W gruncie rzeczy jest on algorytmem - pewną funkcją matematyczną, która przyjmując wiele argumentów (wejść) podaje jedną odpowiedź (wyjście). Pojedynczy neuron sam w sobie jest tzw. klasyfikatorem binarnym - tzn. potrafi on po wcześniejszym treningu odpowiadać (klasyfikować, przyporządkowywać do dwóch możliwych zbiorów odpowiedzi) na przedstawiony mu problem odpowiedzią “tak, jest” lub “nie, nie jest”, lub prościej “prawda” lub “fałsz” czy jeszcze prościej jako “1” lub “0” - stąd binarny, bo jego liczbowa odpowiedź przyjmuje tylko dwie wartości (system dwójkowy operuje wartościami 1 lub 0).
Gdyby bliżej przyjrzeć się w jaki sposób postrzega człowiek, dokonując pewnego uproszczenia moglibyśmy powiedzieć, że w “prawdziwym życiu” jest bardzo podobnie - kierujemy się naszą percepcją - rozpoznajemy że coś jest ciepłe lub nie, że przed nami stoi ściana lub nie, że widzimy znajomą, przyjazną nam twarz życzliwej osoby którą lubimy lub nie - prawda i fałsz, wszystko sprowadza się do algebry Boole’a i logiki matematycznej. Oczywiście mózg człowieka jest bardziej “zaawansowaną” technologią niż jakiekolwiek sztuczne sieci neuronowe skonstruowane do dziś i potrafimy klasyfikować zjawiska spotykane przez nas w codziennym życiu w o wiele szerszy sposób, np. że coś jest super-ciepłe, ciepłe, trochę ciepłe czy w ogóle nie jest ciepłe - nauka znalazła jednak i na to sposób - tzw. logikę rozmytą, gdzie odpowiedzią może być dowolna liczba z przedziału 0 do 1 (np. 0.75 będzie bardziej ciepłe niż zimne, a z kolei 0.5 będzie takie nie za zimne nie za ciepłe). Logika rozmyta jest jednak tematem na inny artykuł.
Ale o co chodzi..?
Rozważmy budowę biologicznego neuronu i spróbujmy tak jak kiedyś Panowie McCulloch i Pitts “przełożyć” go na opis mogący przysłużyć się inżynierii, czyniąc rozmaite analogie.
W budowie neuronu, możemy wyodrębnić:
- dendryty - na które podawane są impulsy (np. elektryczne o odpowiednim natężeniu prądu jak w latach 60-tych lub po prostu wartości liczbowe jeśli zajmujemy się tak wirtualną dziedziną jak programowanie), są one swoistymi wejściami neuronu
- synapsy - które są pewnego rodzaju furtkami i odpowiednio dopasowanymi wzmacniaczami sygnałów które do nich docierają, synapsy posiadają pewną liczbową wagę przez którą będziemy mnożyć wartości podawane z dendrytów. Każdy dendryt posiada odpowiadającą mu synapsę.
- jądro komórkowe - sumujące wszystkie wzmocnione impulsy (wartości liczbowe).
- wzgórek aksonu - działający jako funkcja aktywacyjna (bez aktywacji, to tak jakby odkręcić tubkę z pastą do zębów ale jej nie wycisnąć, a przecież idziemy myć zęby) określająca co pojawi się na wyjściu.
- akson - czyli po prostu wyjście, miejsce gdzie pojawi się odpowiedź którą można wykorzystać w danym momencie lub przekazać dalej do np. kolejnego neuronu
Wiedząc już co nieco na temat poszczególnych elementów pojedynczego neuronu, podzielmy go na bloki oraz stwórzmy jego nowy schemat który od ich nazwy określimy jako schemat blokowy.
Zawiążmy również dżentelmeńską umowę, że przyjmujemy następujący słowniczek do dalszego opisu:
dendryt - wejście x
synapsa - waga w
jądro komórkowe - blok sumacyjny
wzgórek aksonu - blok aktywacji
akson - wyjście y
sygnał - pewna wartość liczbowa, zmienna s
Oczywiście liczba wejść może być nieograniczona - biologiczny neuron posiada tysiące dendrytów - przeanalizujmy jednak prosty przypadek dwu-wejściowego neuronu i tego co będzie się działo z przepływającymi przez niego sygnałami.
- Na wejścia podajemy sygnały
x1
orazx2
- Sygnał
x1
zostaje przemnożony przez odpowiadającą mu wagęw1
, a sygnałx2
zostaje przemnożony przez odpowiadającą mu wagęw2
zachodzi relacja: - Do bloku sumacyjnego docierają sygnały
s1 = x1w1
orazs2 = x2w2
, które zostają do siebie dodane zachodzi relacja: - Zsumowany sygnał dociera do bloku aktywacji, gdzie odpowiednia funkcja aktywacji oblicza (klasyfikuje) wynik, który jest podawany na wyjście y
s1 = x1w1
s2 = x2w2
SUMA_SYGNAŁÓW = s1 + s2 = x1w1 + x2w2
a w bardziej formalnym zapisie matematycznym dla przypadku z nieograniczoną liczbą wejść:
SUMA_SYGNAŁÓW = Σi = 0 xiwi
gdzie:
i - numer wejścia
y = AKTYWACJA(SUMA_SYGNAŁÓW)
Okay, znamy już drogę sygnału i wiemy co się z nim dzieje w trakcie jego przepływu (prosta matematyka). Wypadałoby jednak powiedzieć coś więcej o tej całej funkcji aktywacji. Teoretycznie rzecz biorąc, może być ona dowolna - byleby nam jakoś normalizowała wynik, czyli określała wyjście w pewnej skali która byłaby lepiej czytelna, dobrze byłoby gdyby była też funkcją nieliniową. O ile w przypadku pojedynczego neuronu jest to sprawa typu "doskonale wszystko jedno", o tyle w przypadku całej sieci wprowadzenie nieliniowości ma znaczenie. Najprostszą użyteczną funkcją aktywującą jest funkcja skokowa. Istnieją jej różne odmiany (np. unipolarna lub bipolarna) które działają analogicznie do siebie, rozważymy więc tylko jeden przypadek - funkcję skokową unipolarną.
Jej zasada działania jest trywialnie prosta:
- jeśli SUMA_SYGNAŁÓW jest większa od 0 to ustaw wyjście jako 1 (prawda) | y = 1 SUMA_SYGNAŁÓW > T = 0
- jeśli SUMA_SYGNAŁÓW jest mniejsza od 0 to ustaw wyjście jako 0 (fałsz) | y = 0 SUMA_SYGNAŁÓW < T = 0
gdzie:
T - to próg aktywacji, w naszym przypadku wybraliśmy próg równy 0
Może się zdarzyć, a nawet powinno (w końcu takie mamy oczekiwania), że nasz pojedynczy neuron po wytrenowaniu będzie dokonywał klasyfikacji z zadowalającą skutecznością. Ale czy samojeden neuron może rozwiązać każdy problem jaki przed nim postawimy? Niestety nie - cóż nikt nie jest doskonały.
Pojedynczy neuron, jest w stanie klasyfikować tylko liniowo separowalne zbiory, czyli takie których reprezentację graficzną dla dwóch zbiorów danych można oddzielić linią prostą. Przypadek dwóch wejść można odwzorować graficznie w układzie Kartezjańskim.
Całe szczęście, pojedyncze neurony można łączyć w bardziej skomplikowane sieci dokonując złożeń i tworząc kilka, a nawet kilkaset ich warstw. Wiedząc o tym i umiejąc to wykorzystać dostajemy do rąk potężne, uniwersalne narzędzie które jest w stanie klasyfikować również liniowo nieseparowalne zbiory i rozwiązywać wieloklasowe problemy jak np. dynamiczna percepcja ruchu w pojazdach autonomicznych.
Moim zdaniem sieci neuronowe to niewątpliwie przydatne i interesujące zagadnienie dla współczesnego świata technologii, który z dnia na dzień pędzi ku jeszcze bardziej świetlanej przyszłości i wygodzie człowieka.
Zakończenie
Co się zaś tyczy bloga, myślę że w najbliższym czasie dodam artykuł poruszający temat trenowania pojedynczego neuronu ponieważ całkowicie pominąłem ten temat, a nie da się przecież mówić o uczeniu maszynowym bez słowa o metodyce treningu. :-) Chciałbym również prosić o komentarz czy obecna forma podawanej treści jest w miarę przystępna - ułatwi mi to nadanie odpowiedniego tonu i charakteru kolejnym artykułom.
Dziękuję za uwagę !
Zobacz również:
Uczenie maszynowe #2 Ten o uczeniu nadzorowanym - regułą DELTA zwanym
Bibliografia
- R. Tadeusiewicz "Sieci neuronowe" Akademicka Oficyna Wydaw. RM, Warszawa 1993. Seria: Problemy Współczesnej Nauki i Techniki. Informatyka.
Congratulations @callmejoe! You have completed the following achievement on Steemit and have been rewarded with new badge(s) :
Award for the number of upvotes
You published your First Post
You got a First Vote
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
Ciekawie opisane, czekam na kolejne części!
Jeszcze mam taką sugestię, myślę, że warto byłoby zamienić np ostatni tag na jakiś w stylu #pl-siecineuronowe albo #pl-uczeniemaszynowe - wtedy łatwiej będzie w przyszłości znaleźć taki artykuł po tagach.
Dziękuję za krzepiącą opinię! Co do tagów, całkowita racja - piszę o konkretnej dziedzinie, a dodałem bardzo ogólnikowe metki, dziękuję za wskazówkę :-)
Congratulations @callmejoe! You have completed the following achievement on Steemit and have been rewarded with new badge(s) :
Award for the number of upvotes received
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
To support your work, I also upvoted your post!
Ciekawe nie powiem :) Jednak dla 14 latka trochę skomplikowane 😂
Jednak jeżeli chcesz się dowiedzieć trochę o Powstaniu Warszawskim to zapraszam do mnie :)
Hej :) Na wszystko jest czas :) Z przyjemnością zaglądnę, bo też lubię historię :)