Rodzaje (sztucznych) sieci neuronowych

in #polish6 years ago

Wstęp

Podstawą uczenia głębokiego (deep learningu) jest wykorzystanie sieci neuronowych. Ale sieć sieci nierówna, gdyż istnieją różne rodzaje w zależności od przeznaczenia.

Perceptron wielowarstwowy

Najpopularniejszy typ, zwykle mówiąc sieć neuronowa (bez dodatkowego określenia) mamy na myśli właśnie ten typ. Sieć taka składa się z warstwy wejściowej, następnie warstw ukrytych oraz warstwy wyjściowej. Schemat takiej sieci wygląda następująco:

Tutaj mamy akurat tylko jedną warstwę ukrytą (kolor niebieski) - taki szczególny przypadek nazywamy perceptronem jednowarstwowym lub po prostu perceptronem. Kolorem zielonym oznaczona jest warstwa wejściowa, a kolorem żółtym warstwa wyjściowa. Ale co dokładnie dzieje się w takiej sieci? Pojedynczy krok to:

  • umieszczenie danych na wejściu warstwy
  • obliczenie wyjścia każdej warstwy na podstawie poprzedniej warstwy
  • wyznaczenie błędu na wyjściu
  • na podstawie błędu aktualizacja wag sieci neuronowej w procesie wstecznej propagacji błędu (czyli obrazowo tak zmieniamy wagi, aby wynik sieci był bliższy wynikowi oczekiwanemu).

Jeśli spojrzymy z perspektywy pojedynczego neuronu to wygląda to następująco:

Wyjście warstwy to po prostu wyjście (wynik) poszczególnych jej neuronów. A dla każdego neuronu powstaje ono jak pomnożenie wektora wejściowego x przez wektor wag w i dodanie biasu b. Następnie z tej wartości obliczana jest funkcja aktywacji i jej wynik przekazywany jako wyjście danego neuronu (i to wyjście będzie wejściem każdego połączonego neuronu warstwy następnej).

Tego typu sieci stosowane są zwykle w problemach klasyfikacji (czyli przypisaniu do określonej grupy). Choć jeśli chodzi o klasyfikację obrazów, to częściej stosuje się inny typ sieci, o którym mowa w następnym punkcie.

Konwolucyjne sieci neuronowe

Jest to typ sieci przystosowany do klasyfikacji obrazów. Powstał ze względu na to, że użycie standardowej sieci w przypadku obrazów o dużej rozdzielczości sprawia, że taka sieć miałaby zbyt duże rozmiary i obliczenia byłyby bardzo powolne. Przykładowo dla obrazu o rozdzielczości 1000x1000 pikseli warstwa wejściowa miałaby 3 000 000 neuronów (uwzględniając 3 składowe obrazu RGB). Dlatego sieć nie przyjmuje na wejściu całego obrazu, ale w danej chwili wybrany fragment (np 32x32). Obrazowo - "przejeżdżamy" po obrazie latarką i w danym momencie przekazujemy tylko ten podświetlony fragment. Dzięki temu rozmiar całej sieci jest znacząco mniejszy (już akceptowalny).

Schemat można przedstawić tak:

No dobrze, ale dlaczego w takim razie to działa? W przypadku wykrywania twarzy może to wyglądać następująco:

  • warstwa pierwsza wykrywa krawędzie
  • warstwa druga na ich podstawie wykrywa proste kształty geometryczne
  • warstwa trzecia na podstawie tych kształtów bardziej złożone figury
  • warstwa czwarta wykrywa takie elementy jak oko, ucho, nos
  • warstwa piąta kombinacje powyższych
  • warstwa szósta (ostatnia) na podstawie informacji z wcześniejszej warstwy wykrywa już całą twarz.

Oczywiście to taki obrazowy przykład. W przypadku dużych sieci zwykle ciężko określić co się dokładnie dzieje w której warstwie.

Rekurencyjne sieci neuronowe

Są to sieci neuronowe w których wyjście sieci jest przekazywane jako dodatkowe wejście dla następnego rekordu. Czyli możemy to przedstawić tak:

W pierwszych dwóch rodzajach sieci taka sytuacja nie miała miejsca, dane przepływały tylko w jednym kierunku (stąd też często określa się je mianem feed-forward neural networks). Główne zastosowania to przetwarzanie tekstu (Natural Language Processing), gdzie mamy do czynienia z sekwencjami słów i kolejność ma znaczenie. Dzięki temu rekursywnemu połączeniu sieć bierze też pod uwagę to co było wcześniej.

Sieci LSTM

LSTM to skrót od Long short-term memory. Jest to podtyp sieci rekurencyjnych i jak sama nazwa wskazuje są to sieci z pamięcią. Wykorzystywane są wtedy kiedy sieć musi brać pod uwagę informację z wielu poprzednich kroków (czyli obrazowo "pamiętać co się wcześniej działo"), a zwykła sieć rekurencyjna jest niewystarczająca. Schemat przedstawia się następująco:

Wykorzystywane są np w tłumaczeniach, opisywaniu słowami obrazów, przewidywaniu zmian wykresów.

Autoencoder

Jest to sieć neuronowa ucząca się reprezentacji danych, zwykle w celu jej kompresji. Sieć stara się zapamiętać najbardziej istotne cechy danych wejściowych, tak aby później mogła je jak najlepiej odtworzyć. Struktura takiej sieci jest względnie prosta:

Jak widzimy, liczba neuronów ukrytych jest mniejsza niż liczba neuronów wejściowych / wyjściowych.

Rodzajów sieci jest o wiele więcej, ale te przedstawione powyżej są najczęściej używane.

Źródło zdjęć: wikimedia

Sort:  

Interesuje się neural networks od niedawna, ale nie wiem gdzie zacząć naukę. Python i C# to mój żywioł, ale nie mam problemu z skakaniem między językami - co polecasz na start? Jakaś lektura? Seria filmów?

Python jest tutaj najlepszym wyborem. Co do kursu to polecam: https://www.deeplearning.ai/ - teoretycznie kurs jest płatny, ale można skorzystać z 7 dniowego okresu próbnego. Jest on prowadzony przez prof. Andrew Ng. Technologie używany podczas kursu to python + tensorflow. Polecam też ten kanał, który jest dobrą zajawką do poszczególnych zagadnień (prowadzący jest dość specyficzny, ale moim zdaniem to zaleta):

Dzięki wielkie - zyskałeś wiecznego followera, a za kurs się płacić nie boję tak długo, jak są w sprawiedliwej cenie.

The Vote For Your Awesome Post Has Just Arrived!


This post has been voted with the use of SteemiTag. Feel free to upvote this comment if you’d like to express your support for our cause. Conversely, if you don’t want to receive any more votes from SteemiTag, please respond to this comment by writing NOVOTES.

SteemiTag is an innovative program that helps users increase their gains in the curation rewards by voting on posts that are likely to get high payouts. It maximizes the chance of a user to be rewarded through an accurate selection algorithm that works 24/7 and eliminates "no rewards" problem for users with low Steem Power. You can participate in our program by clicking on this link and confirming your delegation. Your rewards will be sent to you in the form of weekly dividends. Thank you and keep up with your great work!

Świetny materiał, oby więcej takich!

Coin Marketplace

STEEM 0.26
TRX 0.11
JST 0.032
BTC 63585.64
ETH 3035.86
USDT 1.00
SBD 3.84