Jestem pewien, że wiele osób odpowie linkami „pozwól mi google go dla ciebie”, więc chcę powiedzieć, że próbowałem to rozgryźć, więc proszę wybacz mi brak zrozumienia tutaj, ale nie mogę zrozumieć, w jaki sposób praktyczne wdrożenie sieci neuronowej faktycznie działa.
Rozumiem warstwę wejściową i jak normalizować dane, rozumiem również jednostkę odchylenia, ale jeśli chodzi o warstwę ukrytą, to, jakie jest rzeczywiste obliczenie w tej warstwie i jak mapuje się na wyjście, jest trochę mgliste. Widziałem diagramy ze znakami zapytania w ukrytej warstwie, funkcje boolowskie, takie jak AND / OR / XOR, funkcje aktywacyjne i węzły wejściowe, które odwzorowują na wszystkie ukryte jednostki i węzły wejściowe, które odwzorowują tylko kilka ukrytych jednostek i tak dalej Mam tylko kilka pytań dotyczących aspektu praktycznego. Oczywiście, proste wyjaśnienie całego procesu sieci neuronowej, tak jak wyjaśniłoby się dziecku, byłoby niesamowite.
Jakie obliczenia są wykonywane w ukrytej warstwie?
W jaki sposób te obliczenia są mapowane na warstwę wyjściową?
Jak działa warstwa wyjściowa? Dezormalizowanie danych z ukrytej warstwy?
Dlaczego niektóre warstwy w warstwie wejściowej są połączone z warstwą ukrytą, a niektóre nie?
Odpowiedzi:
Wersja z trzema zdaniami:
Każda warstwa może zastosować dowolną funkcję do poprzedniej warstwy (zazwyczaj transformacja liniowa, po której następuje nieliniowość zgniatania).
Zadaniem ukrytych warstw jest przekształcenie danych wejściowych w coś, co może wykorzystać warstwa wyjściowa.
Warstwa wyjściowa przekształca aktywacje ukrytej warstwy w dowolną skalę, w której chcesz, aby wyniki były na.
Jak masz 5 lat:
Jeśli chcesz, aby komputer informował cię, czy na zdjęciu jest autobus, komputer może mieć łatwiejszy czas, jeśli ma odpowiednie narzędzia.
Twój detektor autobusowy może więc składać się z detektora kół (aby pomóc ci powiedzieć, że to pojazd) i detektora skrzynek (ponieważ autobus ma kształt dużego pudła) i detektora rozmiarów (mówiąc, że jest za duży, aby być samochodem) ). Są to trzy elementy ukrytej warstwy: nie są częścią surowego obrazu, są narzędziami, które zaprojektowałeś, aby pomóc Ci zidentyfikować autobusy.
Jeśli wszystkie trzy detektory zostaną włączone (a może są szczególnie aktywne), istnieje duża szansa, że masz przed sobą autobus.
Sieci neuronowe są przydatne, ponieważ istnieją dobre narzędzia (takie jak propagacja wsteczna) do budowania wielu detektorów i ich łączenia.
Jak jesteś dorosły
Sieć neuronowa ze sprzężeniem zwrotnym stosuje do danych szereg funkcji. Dokładne funkcje będą zależeć od używanej sieci neuronowej: najczęściej te funkcje obliczają transformację liniową poprzedniej warstwy, a następnie nieliniowość zgniatania. Czasami funkcje zrobią coś innego (na przykład obliczanie funkcji logicznych w twoich przykładach lub uśrednianie na sąsiadujących pikselach na obrazie). Role różnych warstw mogą zależeć od tego, jakie funkcje są obliczane, ale postaram się być bardzo ogólny.
Przykład z funkcjami logicznymi:
Funkcje pierwszej warstwy:
Funkcja drugiej warstwy:
Wydajność sieci jest tylko wynikiem tej drugiej funkcji. Pierwsza warstwa przekształca dane wejściowe w coś, co może wykorzystać druga warstwa, dzięki czemu cała sieć może wykonać XOR.
Przykład z obrazkami:
Slajd 61 z tego przemówienia - dostępny również tutaj jako pojedynczy obraz - pokazuje (jeden sposób na wizualizację), czego szukają różne ukryte warstwy w określonej sieci neuronowej.
Pierwsza warstwa szuka krótkich fragmentów krawędzi na obrazie: są one bardzo łatwe do znalezienia na podstawie nieprzetworzonych danych pikseli, ale same w sobie nie są bardzo przydatne do informowania, czy patrzysz na twarz, autobus, czy słonia .
Następna warstwa składa się z krawędzi: jeśli krawędzie dolnej ukrytej warstwy pasują do siebie w określony sposób, to jeden z detektorów oka na środku lewej kolumny może się włączyć. Trudno byłoby stworzyć pojedynczą warstwę, która byłaby tak dobra w znalezieniu czegoś tak specyficznego z surowych pikseli: detektory oka są znacznie łatwiejsze do zbudowania z detektorów brzegowych niż z surowych pikseli.
Kolejna warstwa składa się z detektorów oczu i detektorów nosa w twarze. Innymi słowy, zapalą się, gdy detektory oka i detektory nosa z poprzedniej warstwy włączą się z właściwymi wzorami. Są bardzo dobre w wyszukiwaniu określonych rodzajów twarzy: jeśli jedna lub więcej z nich się zaświeci, wtedy twoja warstwa wyjściowa powinna zgłosić obecność twarzy.
Jest to przydatne, ponieważ detektory twarzy są łatwe do zbudowania z detektorów oczu i nosowych, ale naprawdę trudne do zbudowania z intensywności pikseli.
Dzięki temu każda warstwa zbliża się coraz bardziej do nieprzetworzonych pikseli i zbliża się do ostatecznego celu (np. Wykrywanie twarzy lub wykrywanie magistrali).
Odpowiedzi na inne pytania
„Dlaczego niektóre warstwy w warstwie wejściowej są połączone z warstwą ukrytą, a niektóre nie?”
Odłączone węzły w sieci nazywane są węzłami „polaryzacji”. Jest to naprawdę bardzo miłe wyjaśnienie tutaj . Krótka odpowiedź jest taka, że są one jak regresy przechwytujące.
„Skąd pochodzą zdjęcia z„ detektora oka ”na przykładzie obrazu?”
Nie sprawdziłem jeszcze dwukrotnie konkretnych obrazów, z którymi się połączyłem, ale generalnie te wizualizacje pokazują zestaw pikseli w warstwie wejściowej, które maksymalizują aktywność odpowiedniego neuronu. Jeśli więc myślimy o neuronie jako detektorze oka, jest to obraz, który neuron uważa za najbardziej podobny do oka. Ludzie zwykle znajdują te zestawy pikseli za pomocą procedury optymalizacji (wspinaczki pod górę).
W tym artykule niektórzy ludzie z Google z jedną z największych sieci neuronowych na świecie pokazują w ten sposób neuron „wykrywacza twarzy” i neuron „wykrywacza kota”, a także drugi sposób: pokazują również rzeczywiste obrazy, które aktywują neuron najsilniej (ryc. 3, ryc. 16). Drugie podejście jest dobre, ponieważ pokazuje, jak elastyczna i nieliniowa jest sieć - te „detektory” wysokiego poziomu są wrażliwe na wszystkie te obrazy, nawet jeśli nie wyglądają szczególnie podobnie na poziomie pikseli.
Daj mi znać, jeśli coś tutaj jest niejasne lub masz więcej pytań.
źródło
f(x) = max(x, 0)
(„rektyfikowana jednostka liniowa”) często działa lepiej, mimo że nie ma wielu z tych właściwości.Spróbuję dodać do intuicyjnego opisu operacyjnego ...
Dobrym intuicyjnym sposobem myślenia o sieci neuronowej jest zastanowienie się nad tym, co próbuje zrobić model regresji liniowej. Regresja liniowa przyjmie pewne dane wejściowe i opracuje model liniowy, który bierze każdą wartość wejściową razy niektóre optymalne współczynniki wagowe modelu i próbuje odwzorować sumę tych wyników na odpowiedź wyjściową, która jest ściśle zgodna z rzeczywistym wynikiem. Współczynniki są określane przez znalezienie wartości, które zminimalizują pewną miarę błędów między pożądaną wartością wyjściową a wartością wyuczoną przez model. Innym sposobem na powiedzenie jest to, że model liniowy będzie próbował utworzyć mnożniki współczynników dla każdego wejścia i zsumować je wszystkie, aby spróbować określić związek między (wieloma) wartościami wejściowymi a (zwykle pojedynczymi) wartościami wyjściowymi. Ten sam model można niemal uznać za podstawowy element sieci neuronowej;
Ale perceptron z pojedynczą jednostką ma jeszcze jeden element, który przetworzy sumę ważonych danych w sposób nieliniowy. Zwykle wykorzystuje do tego celu funkcję squashingu (sigmoid lub tanh). Masz więc podstawową jednostkę ukrytej warstwy, która jest blokiem, który sumuje zestaw ważonych danych wejściowych - następnie przekazuje zsumowaną odpowiedź do funkcji nieliniowej w celu utworzenia odpowiedzi węzła wyjściowego (ukrytej warstwy). Jednostka odchylenia jest tak samo jak w regresji liniowej, jest stałym przesunięciem dodawanym do każdego przetwarzanego węzła. Ze względu na nieliniowy blok przetwarzania nie jesteś już ograniczony do odpowiedzi tylko liniowych (jak w modelu regresji liniowej).
Ok, ale kiedy wiele pojedynczych jednostek perceptronów działa razem, każda z nich może mieć różne mnożniki masy wejściowej i różne odpowiedzi (nawet jeśli WSZYSTKIE przetwarzają ten sam zestaw danych wejściowych z tym samym nieliniowym blokiem wcześniej opisanym). Tym, co odróżnia odpowiedzi, jest to, że każda z nich ma różne wagi współczynników, które są uczone przez sieć neuronową poprzez szkolenie (niektóre formy obejmują opadanie gradientu). Wynik wszystkich perceptronów jest następnie ponownie przetwarzany i przekazywany do warstwy wyjściowej, tak jak przetwarzane były poszczególne bloki. Pytanie brzmi zatem, w jaki sposób określa się prawidłowe wagi dla wszystkich bloków?
Typowym sposobem uczenia się prawidłowych wag jest rozpoczynanie od losowych wag i mierzenie odpowiedzi na błąd między rzeczywistą rzeczywistą wydajnością a wyuczonym modelem wyjściowym. Błąd zwykle jest przekazywany wstecz przez sieć, a algorytm sprzężenia zwrotnego indywidualnie zwiększa lub zmniejsza te wagi o pewną proporcję do błędu. Sieć będzie wielokrotnie iterować, przechodząc do przodu, mierząc odpowiedź wyjściową, a następnie aktualizując (przekazując korekty wagi do tyłu) i korygując wagi, aż do osiągnięcia zadowalającego poziomu błędu. W tym momencie masz model regresji, który może być bardziej elastyczny niż model regresji liniowej, jest to tak zwane uniwersalne przybliżenie funkcji.
Jednym ze sposobów, które naprawdę pomogły mi nauczyć się, jak naprawdę działa sieć neuronowa, jest przestudiowanie kodu implementacji sieci neuronowej i zbudowanie go. Jedno z najlepszych podstawowych wyjaśnień dotyczących kodu można znaleźć w rozdziale dotyczącym sieci neuronowej (bezpłatnie dostępnego) „Przewodnika naukowca i inżyniera po DSP” Ch. 26. Jest napisany głównie w bardzo podstawowym języku (myślę, że był to fortran), który naprawdę pomaga zobaczyć, co się dzieje.
źródło
Opiszę ten pogląd w dwóch krokach: krok od wejścia do ukrytego i krok od wyjścia do ukrytego. Najpierw zrobię krok od ukrytego do wyjścia, ponieważ wydaje mi się mniej interesujący (dla mnie).
Hidden-to-Output
Wyjściem z ukrytej warstwy mogą być różne rzeczy, ale na razie załóżmy, że pochodzą one z sigmoidalnych funkcji aktywacyjnych. Są to więc wartości od 0 do 1, a dla wielu danych wejściowych mogą to być po prostu 0 i 1.
Lubię myśleć o transformacji między wyjściami tych ukrytych neuronów a warstwą wyjściową jako po prostu tłumaczeniem (w sensie językowym, a nie geometrycznym). Jest to z pewnością prawda, jeśli transformacja jest odwracalna , a jeśli nie, to coś zostało utracone w tłumaczeniu. Ale po prostu widzisz wyjścia ukrytych neuronów z innej perspektywy.
Input-to-Hidden
Powiedzmy, że masz 3 neurony wejściowe (tylko po to, że mogę łatwo napisać tutaj równania) i niektóre ukryte neurony. Każdy ukryty neuron otrzymuje jako dane wejściowe ważoną sumę danych wejściowych, więc na przykład może
Oznacza to, że wartość parametru
hidden_1
jest bardzo wrażliwa na wartośćinput_1
, wcale nie jest wrażliwainput_2
i tylko nieznacznie wrażliwa nainput_3
.Można więc powiedzieć, że
hidden_1
to uchwycenie określonego aspektu danych wejściowych, który można nazwaćinput_1
aspektem „ jest ważny”.Dane wyjściowe
hidden_1
są zwykle tworzone przez przekazywanie danych wejściowych przez jakąś funkcję, więc powiedzmy, że używasz funkcji sigmoid . Ta funkcja przyjmuje wartości od 0 do 1; więc pomyśl o tym jak o przełączniku, który mówi, że alboinput_1
jest ważny, albo nie.Tak właśnie działa ukryta warstwa! Wydobywa aspekty lub cechy przestrzeni wejściowej.
Teraz wagi mogą być również ujemne! Co oznacza, że możesz uzyskać takie aspekty, jak „
input_1
jest ważne, ALE równieżinput_2
odbiera to znaczenie”:lub
input_1
iinput_3
mają „wspólne” znaczenie:Więcej geometrii
Jeśli znasz algebrę liniową, możesz myśleć geometrycznie w kategoriach rzutowania wzdłuż określonych kierunków. W powyższym przykładzie rzutowałem wzdłuż
input_1
kierunku.Spójrzmy
hidden_1
jeszcze raz, z góry. Gdy wartość atinput_1
będzie wystarczająco duża, wyjście funkcji aktywacji sigmoidalnej pozostanie na poziomie 1, nie będzie już większe . Innymi słowy, coraz więcej nieinput_1
będzie miało znaczenia dla wyniku. Podobnie, jeśli porusza się w przeciwnym (tj. Ujemnym) kierunku, to po punkcie wyjście nie ulegnie zmianie.Ok dobrze. Załóżmy jednak, że nie chcemy wrażliwości w kierunku nieskończoności w określonym kierunku i chcemy, aby była aktywowana tylko dla określonego zakresu na linii. Znaczenie dla bardzo ujemnych wartości nie ma efektu, a dla bardzo pozytywnych wartości nie ma efektu, ale dla wartości między powiedzmy 5 a 16 chcesz, żeby się obudził. Tutaj użyjesz radialnej funkcji bazowej do aktywacji.
Podsumowanie
Ukryta warstwa wyodrębnia cechy przestrzeni wejściowej, a warstwa wyjściowa przekłada je na pożądany kontekst. Może być o wiele więcej niż to, co dotyczy sieci wielowarstwowych i tym podobnych, ale to właśnie rozumiem do tej pory.
EDYCJA: Ta strona ze swoimi wspaniałymi interaktywnymi wykresami ma lepszą pracę niż moja długa i kłopotliwa odpowiedź powyżej mogłaby kiedykolwiek zrobić: http://neuralnetworksanddeeplearning.com/chap4.html
źródło
Weźmy przypadek klasyfikacji. Warstwa wyjściowa próbuje oszacować prawdopodobieństwo warunkowe, że twoja próbka należy do danej klasy, tzn. Jak prawdopodobne jest, że próbka należy do danej klasy. W kategoriach geometrycznych łączenie warstw w sposób nieliniowy za pomocą funkcji progowych pozwala sieci neuronowej rozwiązywać problemy nie wypukłe (rozpoznawanie mowy, rozpoznawanie obiektów itp.), Które są najciekawsze. Innymi słowy, jednostki wyjściowe są w stanie generować niewypukłe funkcje decyzyjne, takie jak te tutaj przedstawione .
Jednostki w ukrytych warstwach można postrzegać jako uczące się złożonych funkcji na podstawie danych, które pozwalają warstwie wyjściowej lepiej odróżnić jedną klasę od drugiej i wygenerować bardziej dokładne granice decyzyjne. Na przykład w przypadku rozpoznawania twarzy jednostki w pierwszych warstwach uczą się cech podobnych do krawędzi (wykrywają krawędzie w danych orientacjach i pozycjach), a wyższa warstwa uczy się łączyć je w celu wykrycia cech twarzy, takich jak nos, usta lub oczy. Wagi każdej ukrytej jednostki reprezentują te cechy, a jej wynik (zakładając, że jest to sigmoid) reprezentuje prawdopodobieństwo, że ta cecha jest obecna w twojej próbce.
Zasadniczo znaczenie danych wyjściowych i warstw ukrytych zależy od problemu, który próbujesz rozwiązać (regresja, klasyfikacja) i stosowanej funkcji straty (entropia krzyżowa, błędy najmniejszych kwadratów ...)
źródło