Co oblicza warstwa ukryta w sieci neuronowej?


187

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?


13
Ludzie w okolicy są mili, nigdy nie widziałem odpowiedzi „pozwól mi google dla ciebie”, ale wiele zaskakująco dokładnych i wnikliwych odpowiedzi na to, co na początku wydawało się być podstawowym pytaniem. Niestety nie mogę ci pomóc, ale wydaje się to dość istotne, dlatego z radością głosuję.
Gala

4
Dzięki za komentarz i głosowanie Gael, prawdopodobnie jestem trochę zmęczony społecznością SO, ponieważ wszyscy wiemy, jak ci ludzie mogą się dostać :) Cieszę się, że widzę tu więcej ducha współpracy, a nie próby zdobycia odznak i punkty, edytując / zamykając pytania.
FAtBalloon

1
Nie jestem ekspertem od sieci neuronowych, chociaż angażuję się w ich zastosowania i metody. Moja być może niezbyt pomocna odpowiedź byłaby taka, że ​​konkretne obliczenia ukryte zależą od „funkcji kosztu”, którą narzucasz swojemu wyjściu, tj. Od tego, co próbujesz osiągnąć. Na przykład, jeśli chcesz pogrupować elementy wejściowe w zestawy klastrowe, obliczysz odległości między elementami w ukrytej warstwie. Może to przechodzić przez różne iteracje i cykle optymalizacji w tej warstwie, dopóki nie zostanie spełnione kryterium błędu, które pozwala procesowi „opuścić” tę warstwę.
Lucozade

Odpowiedzi:


230

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.

xhyfxhghy

f(x)g(f(x))

fg

g(f(x))fg


Przykład z funkcjami logicznymi:

fasol

Funkcje pierwszej warstwy:

  • Upewnij się, że co najmniej jeden element ma wartość „PRAWDA” (przy użyciu LUB)
  • Upewnij się, że nie wszystkie są „PRAWDZIWE” (przy użyciu NAND)

Funkcja drugiej warstwy:

  • Upewnij się, że oba kryteria pierwszej warstwy są spełnione (przy użyciu AND)

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ń.


2
Czy istnieje więc tylko jeden zdefiniowany algorytm dla każdego węzła na danej warstwie, a wagi są tym, co odróżnia dane wyjściowe? Czy możesz zaprogramować każdy węzeł na warstwie, aby był inny?
FAtBalloon,

3
@GeorgeMcDowd pojawia się kluczowy problem: patrzenie na piksele i identyfikowanie autobusów jest trudne, jak sugerowałeś. Na szczęście patrzenie na piksele i znajdowanie krawędzi jest łatwe - to wszystko, co stara się zrobić pierwsza ukryta warstwa. Następna warstwa próbuje wnioskować na podstawie krawędzi, co jest znacznie łatwiejsze niż próba zrobienia tego na podstawie pikseli.
David J. Harris,

4
SO powinien dać ci inną nagrodę (niż tylko punkty) za czas i wysiłek włożony w tę odpowiedź!
samsamara

1
@JoshuaEnfield Myślę, że logika w latach 80. była połączeniem bycia podobnym do tego, jak ludzie myśleli, że mózg działa, że ​​można go wszędzie odróżnić i że wartości były ograniczone, jak wspomniałeś. Od tego czasu ludzie odkryli, że f(x) = max(x, 0)(„rektyfikowana jednostka liniowa”) często działa lepiej, mimo że nie ma wielu z tych właściwości.
David J. Harris,

2
Przykład autobusu i ciąg funkcji właśnie go przykuły. Nie rozumiem, dlaczego podręczniki nie mogą być tak opisowe.
drecute

12

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.


12

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

hidden_1 = 10 * (input_1) + 0 * (input_2) + 2 * (input_3)

Oznacza to, że wartość parametru hidden_1jest bardzo wrażliwa na wartość input_1, wcale nie jest wrażliwa input_2i tylko nieznacznie wrażliwa na input_3.

Można więc powiedzieć, że hidden_1to uchwycenie określonego aspektu danych wejściowych, który można nazwać input_1aspektem „ jest ważny”.

Dane wyjściowe hidden_1są 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 albo input_1jest 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_1jest ważne, ALE również input_2odbiera to znaczenie”:

hidden_2 = 10 * (input_1) - 10 * (input_2 ) + 0 * (input_3)

lub input_1i input_3mają „wspólne” znaczenie:

hidden_3 = 5 * (input_1) + 0 * (input_2) + 5 * (input_3)

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_1kierunku.

Spójrzmy hidden_1jeszcze raz, z góry. Gdy wartość at input_1bę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 nie input_1bę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


1
Podobnie jak OP, jestem trochę zdezorientowany co do ukrytej warstwy w sieciach neuronowych. W twoim przykładzie, w jaki sposób algorytm NN znajduje wagi dla neuronów hidden_1, hidden_2 i hidden_3? A skoro ukryte_1, ukryte_2 i ukryte_3 pochodzą z tych samych zmiennych wejściowych, czy wagi nie byłyby zbieżne z tym samym rozwiązaniem?
RobertF

5

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 ...)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.