Dziś chcielibyśmy zabrać Was już nieco… głębiej - złapiemy więc perspektywę na deep learning, czyli sztuczne sieci neuronowe - zapraszamy!

 

Diabeł tkwi w… szczegółach?

W internecie dostępne są niezliczone artykuły dotyczące budowy, działania oraz treningu sieci neuronowych. Ich autorzy, zazwyczaj w sposób bardzo rzetelny i szczegółowy, chcą wprowadzić nas we wszystkie tajniki tych specyficznych struktur przetwarzania danych - a jest ich całkiem sporo, zwłaszcza, jeżeli to pierwszy raz, kiedy zmierzamy się z tym tematem. Rezultat? Przestajemy czytać artykuł w połowie, zniechęcamy twierdząc, że “to chyba nie dla mnie…”, a do tematu ponownie podejdziemy kiedy wystarczająco czasu, by zapomnieć o poprzednim niepowodzeniu (o ile w ogóle!). Nic dziwnego, w końcu sformułowania “reguła łańcuchowa” czy “wyliczanie gradientu po funkcji L” wraz z obszernymi kalkulacjami i wzorami potrafią skutecznie zniechęcić niewtajemniczonego czytelnika - szczególnie, jeżeli to jego pierwsze starcie z tematem sztucznych sieci neuronowych!

Sieci neuronowe z lotu ptaka

Skoro udało nam się już ustalić za jak złożony temat zamierzamy się brać, to teraz przychodzi pora na ustalenie planu działania, który pozwoliłby nam oswoić się z tym nietrywialnym zagadnieniem.

  1. Nie wszystko naraz!
  2. Od ogółu, do szczegółu.

Zapoznawanie zaczniemy od… końca. Na początek przede wszystkim należy określić do czego (w podstawowym scenariuszu) takie sieci są wykorzystywane oraz jak wygląda działanie takiego gotowego już modelu?

Od surowych danych do odpowiedniej klasy - predykcja

Choć sieci neuronowe występują w wielu wariantach, my skupimy się dziś na tym najbardziej podstawowym FCNN (ang. fully-connected neural network) wykorzystywanym do klasyfikacji, czyli przyporządkowania próbce danych konkretnej kategorii wynikowej. Jest to rodzaj sieci przyjmujący na wejściu wektor liczb, a zwracający prawdopodobieństwa przynależności próbki danych do każdej z dostępnych klas.

Przykładowo: dla danych wejściowych opisujących (w sposób numeryczny) cechy konkretnego zwierzęcia i dostępnych klas: ssak - gad - płaz, danymi wyjściowymi sieci byłoby prawdopodobieństwo przynależności opisanego organizmu do każdej z dostępnych kategorii. Naturalnie, jako ostateczny wynik uznalibyśmy tę klasę, której prawdopodobieństwo uznane zostało za najwyższe.

Opisana powyżej procedura przyporządkowywania klasy konkretnej próbce przez gotowy model nazywana jest predykcją.

Rys. 1: Schematyczne przedstawienie procesu predykcji. Na wejściu do modelu przekazywany jest wektor cech psa w formacie numerycznym. Na wyjściu otrzymujemy prawdopodobieństwa przynależności próbki do konkretnych klas.

 

Sieci neuronowe - co dzieje się w środku?

Znamy już zastosowanie FCNN, ale nadal nie przyjrzeliśmy się temu, w jaki sposób z podanego wektora danych uzyskujemy prawdopodobieństwa klas.

Sieci neuronowe myśleć przedstawiać jako ogromne, złożone funkcje matematyczne, w których zachodzi mnóstwo operacji liniowych (mnożenie, dodawanie) na zmianę z nieliniowymi.

O samej strukturze takiej sieci myśleć można jak o pewnych warstwach, na których znajdują się neurony - węzły obliczeniowe.

Rys.2: Struktura warstw sieci neuronowej - ta przykładowa sieć składa się z 4 warstw - wejściowej, wyjściowej i dwóch tzw. ukrytych 

Każdy neuron definiuje pewien zestaw operacji:

  •  dodaje wszystkie elementy z poprzedniej warstwy, pomnożone przez konkretne wagi…
  • dodaje pewną ustaloną wartość (bias)...
  • a wynik tego “wielkiego dodawania” poddaje działaniu tzw. funkcji aktywacji, której celem jest po prostu zaburzenie liniowości tych wszystkich operacji (tak, chodzi o to, by trochę tu skomplikować obliczenia!). 

Tak powstały wynik neurona będzie jednym z elementów przekazanych do kolejnej warstwy - a właściwie do każdego z neuronów kolejnej warstwy, na których cała opisana procedura się powtórzy.

Rys. 3: Każdy neuron jest swego rodzaju węzłem obliczeniowym. Przyjmuje i składa tyle liczb, ile neuronów ma poprzednia warstwa (lub w przypadku pierwszej warstwy - tyle, ile elementów ma wektor wyjściowy), a zwraca jedną wartość, którą następnie przekaże każdemu neuronowi kolejnej warstwy.

Nawet bez szczególnie wnikliwej analizy pojąć można ogólny zarys działania takiej sieci, że każda z wartości wektora wejściowego poddana zostaje wielu następującym po sobie operacjom, a wynik każdej z tych operacji ma swoją wagę. Te wagi w niewytrenowanej sieci inicjowane są w sposób losowy, zatem wyniki również są losowe. W sieci wytrenowanej pod konkretne zadanie natomiast te wagi są już tak ustalone, aby sieć dawała na ostatniej z warstw jak najpewniejsze odpowiedzi (tzn. prawdopodobieństwo jednej, właściwej klasy bliskie 1, natomiast pozostałych klas - zbliżone do 0).

Podsumowanie

Przybliżyliśmy sobie dzisiaj temat predykcji w sieciach neuronowych - mamy już generalny ogląd na to, jak z wektora danych uzyskać można prawdopodobieństwa przynależności danej próbki do konkretnych klas. Za tydzień natomiast pochylimy się nad samym treningiem takiej sieci. Do zobaczenia!