Wprowadzenie do sieci neuronowych cz. 2

To druga część pościgu za sieciami neuronowymi. Pojawienie się nowych postaci, skomplikowanie fabuły, zawiązanie akcji. Pełen emocji punkt kulminacyjny oraz zakończenie. Takie niby melancholijne, ale jednak podszyte wiarą i nadzieją.

Wszystko co potrzebne żeby opowiedzieć interesującą historię. Prawie jak ,,Stary człowiek i morze''. Tylko sieci już nie te.

Funkcje Boolowskie

Jest tu potrzebna odrobina cierpliwości. Sieci neuronowe czają się tuż za rogiem. Wierzcie mi – będziecie zaskoczeni. Teraz jednak pora wspomnieć o pewnej interpretacji funkcji Boole’a.

Spróbujemy je wyrazić za pomocą poznanej już w poprzedniej części, regresji logistycznej. Weźmiemy pod lupę takie byty jak AND, OR oraz NOT. Łatwizna! Ale niekoniecznie z tej perspektywy.

Negacja

Mamy w tym przypadku jedną zmienną wejściową \(x\in\{0,1\}\). Wzór na regresję logistyczną powinien być tutaj dość prosty: .

Czyli zwyczajnie:

co przez definicję funkcji sigmoid jest równe:

Znalezienie odpowiednich wartości \(\Theta\) nie powinno nam sprawić trudności. Może ona na być na przykład następująca: \(\Theta = [10, -20]\). Poniższa figura znakomicie obrazuje sytuację:

Negation perceptron

AND

Rozgrzewkę mamy już za sobą. Przejdziemy więc od razu do sedna.

Potrzebujemy zatem \(\Theta_0 + x_1\Theta_1 + x_2\Theta_2 = x_1\land x_2\) dla wszystkich kombinacji. Przykładowym rozwiązaniem może być: \(\Theta = [-30, 20, 20]\). Łatwo zauważyć, że \(20x_1 + 20x_2 - 30 > 0\) wtedy i tylko wtedy, gdy \(x_1 = 1\) and \(x_2=1\).

Graf wyrażający powyższe:

And perceptron

OR

Pominiemy teraz szczegóły. Przyjrzyjmy się jednak proponowanej wizualizacji logicznej alternatywy:

Or perceptron

Troszkę bardziej wymagająca funkcja: XOR

XOR, czyli exclusive disjunction jest funkcją, która zwraca prawdę wtedy i tylko wtedy, gdy argumenty do ktorych została zaaplikowana są różne. Tabela prawdy:

Na marginesie dodam, że XOR jest kanonicznym przykładem funkcji, która nie może być wyrażona przy użyciu najprostszych form regresji liniowej. Może to brzmieć mgliście, wszystko wyjaśni jednak poniższy wykres:

Xor_chart_empty

Regresja wielomianowa

Jak widzimy nie jesteśmy w stanie poprowadzić prostej segregującej punkty tego samego koloru. Jakie mamy zatem wyjście? Możemy oczywiście wprowadzić więcej zmiennych używając regresji wielomianowej.

Przykładem równania mającego zastosowanie w naszym przypadku może być: — widoczne poniżej:

Xor_chart

Dopasowanie elementów układanki

Możemy jednakowoż spróbować alternatywnej metody rozwiązania problemu XOR. Wymagać będzie ono dokładniejszego przyjrzenia się definicji naszej funkcji. A wyglądać może ona na przykład tak:

Spróbujmy teraz połączyć funkcje, które do tej pory udało nam się już rozpracować. Powinniśmy starać się otrzymać coś w tym stylu:

Xor gates

Jest to schemat naszego rozwiązania posługujący się bramkami logicznymi. Naszym zadaniem będzie przekonwertowanie go na język perceptronów.

Zdaje się, że ostatnią brakującą rzeczą jest zauważenie, że \(\Theta_{\text{NAND}} = -\Theta_{\text{AND}}\).

Mamy zatem wszystkie elementy, których potrzebujemy do budowy… SIECI NEURONOWEJ!

Xor

Reprezentacja

Dotarliśmy wreszczie do celu. Jest to kwintesencja obu wpisów poświęconym temu tematowi. Wyglada na to, że sprawa jest wręcz banalnie prosta, prawda?

Lubię rozumieć sieć neuronową jako wielopoziomową regresję logistyczną. Na każdym poziomie posługujemy się zmiennymi, będącymi rezultatem kalkulacji z poziomu poprzedniego.

Łatwo zatem zauważyć, że mechanizm ten jest rzeczywiście zbliżony do ludzkiego systemu nerwowego. Możemy postrzegać parametry wejściowe sieci jako bodźce odczytywane przez nasze opuszki czy receptory smakowe.

Bodźce te, są następnie przetwarzane przez sieć neuronów, które nieustannie adaptują się w miarę konsumowania nieznanych jeszcze do tej pory danych.

Wracając do naszego matematycznego wątku – niestety nie zagłębimy się tutaj w szczegóły. Mam nadzieję, że lektura niniejszego artykułu ułatwi pracę z kolejnymi źródłami, skoro naumiane już zostały podstawy.

Rzućmy jednak jeszcze okiem na reprezentację sieci neuronowych. Okazuje się, że naturalnie jest opisywać \(\Theta\) jako wektor macierzy – reprezentujących poszczególne warstwy. Przy takim podejściu sieć z powyższego obrazka będzie opisana w sposób następujący:

Całość obliczeń wyraża się ładnie wtedy następującym wzorem:

Podsumowanie

Wspomnieć należy, że posługiwanie się wytrenowaną siecią neuronową, jest wględnie proste. Przy ustalonych wartościach \(\Theta\), jest to tylko kwestią przeprowdzenia algorytmu forward propagation, opisanym mniej więcej powyższym wzorem.

Z drugiej strony znalezienie tych wartośći (\(\Theta\)) nie jest już tak trywialną rzeczą. Pełne zrozumienie tej części wymaga zapoznania się z bardziej lub mniej zaawansowaną analizą matematyczną.

Stąd nikt nie może powiedzieć, że to prościzna. Opisanie tych trudniejszy części wykracza (nie)stety poza zakres niniejszego artykułu, balansując przy tym na krawędzi kompetencji matematycznych autora.

Komentarze