Dlaczego musimy znormalizować dane wejściowe dla sztucznej sieci neuronowej?


151

Jest to zasadnicze pytanie dotyczące teorii sieci neuronowych:

Dlaczego musimy znormalizować dane wejściowe dla sieci neuronowej?

Rozumiem, że czasami, gdy na przykład wartości wejściowe są nienumeryczne, trzeba wykonać pewną transformację, ale kiedy mamy wejście numeryczne? Dlaczego liczby muszą znajdować się w określonym przedziale?

Co się stanie, jeśli dane nie zostaną znormalizowane?


1
Głosuję za zamknięciem tego pytania jako niezwiązanego z tematem, ponieważ należy ono do Stats SE lub AI SE.
nbro

Odpowiedzi:


101

To wyjaśnia również tutaj .

Jeśli zmienne wejściowe są łączone liniowo, jak w MLP [perceptronie wielowarstwowym], wówczas normalizacja danych wejściowych, przynajmniej w teorii, jest rzadko konieczna. Powodem jest to, że każde przeskalowanie wektora wejściowego można skutecznie cofnąć, zmieniając odpowiednie wagi i odchylenia, pozostawiając dokładnie te same wyniki, co wcześniej. Jednak istnieje wiele praktycznych powodów, dla których standaryzacja danych wejściowych może przyspieszyć szkolenie i zmniejszyć ryzyko utknięcia w lokalnych optymach. Ponadto zanik wagi i estymację bayesowską można przeprowadzić wygodniej przy użyciu standardowych danych wejściowych.


2
Cześć, w MLP, czy nie można ujednolicić funkcji przy użyciu stałego tempa uczenia się, aby spowodować nadmierną / niedostateczną kompensację w korekcjach wstecznej propagacji dla różnych wymiarów? Zastanawiam się z poniższego postu, czy dotyczy to wyłącznie CNN, czy też MLP może mieć ten problem: stats.stackexchange.com/questions/185853/ ...
Austin,

Problem: Zejście gradientowe opt. proces może zająć dużo więcej czasu. Czemu? Gdy cechy mają różną skalę (x1 = 0-1 i x2 = 0..1000), powierzchnia funkcji błędu może ulec wydłużeniu. Znaczenie: różne skale dla różnych dimsów (w1, w2). Ale tempo uczenia jest TAKIE SAME dla wszystkich dims -> kroki w wydłużonym dim (w2) są bardzo małe, aż osiągną lokalne min. Problem: nie można dodać LR, ponieważ pominie lokalne min w drugim dim (w1). Zobacz demo na youtube.com/watch?reload=9&v=UIp2CMI0748
Dekel

Oto liniowy przykład, w którym sytuacja wygląda bardzo źle bez skalowania: stackoverflow.com/q/59319643 . Masz jakiś pomysł, dlaczego?
AlwaysLearning

61

W sieciach neuronowych dobrym pomysłem jest nie tylko normalizacja danych, ale także ich skalowanie. Ma to na celu szybsze zbliżanie się do minimów globalnych na powierzchni błędu. Zobacz poniższe zdjęcia: powierzchnia błędu przed i po normalizacji

powierzchnia błędu przed i po skalowaniu

Zdjęcia pochodzą z kursu Coursera o sieciach neuronowych. Autorem kursu jest Geoffrey Hinton.


14
Byłoby miło z twojej strony, gdybyś wymienił autora opublikowanej grafiki. Grafika została wyraźnie zaczerpnięta z kursu coursera Geoffreya Hintona .
Ricardo Cruz

5
Ten film okazał się bardzo pomocny w wyjaśnianiu powyższego schematu, który sam w sobie nie był dla mnie oczywisty.
chris838

21

Niektóre dane wejściowe do NN mogą nie mieć „naturalnie zdefiniowanego” zakresu wartości. Na przykład średnia wartość może powoli, ale stale rosnąć w czasie (na przykład liczba rekordów w bazie danych).

W takim przypadku podawanie tej surowej wartości do sieci nie będzie działać zbyt dobrze. Nauczysz swoją sieć wartości z dolnej części zakresu, podczas gdy rzeczywiste wejścia będą z wyższej części tego zakresu (i całkiem możliwe, że powyżej zakresu, z którym sieć nauczyła się pracować).

Powinieneś znormalizować tę wartość. Możesz na przykład powiedzieć sieci, o ile wartość zmieniła się od czasu poprzedniego wprowadzenia. Ten przyrost zwykle można określić z dużym prawdopodobieństwem w określonym zakresie, co czyni go dobrym wejściem dla sieci.


Niezła wskazówka na temat normalizowania poprzedniego zestawu danych wejściowych. Zwalnia to użytkownika od definiowania dowolnego współczynnika normalizacji. Jednak podejrzewam, że sieć będzie trenować dokładniej, jeśli współczynnik normalizacji będzie stałą globalną zastosowaną do każdego wektora wejściowego.
davide

11

Patrząc na sieć neuronową z zewnątrz, jest to po prostu funkcja, która pobiera pewne argumenty i daje wynik. Podobnie jak w przypadku wszystkich funkcji, ma domenę (tj. Zestaw argumentów prawnych). Musisz znormalizować wartości, które chcesz przekazać do sieci neuronowej, aby upewnić się, że znajduje się w domenie. Podobnie jak w przypadku wszystkich funkcji, jeśli argumenty nie znajdują się w domenie, wynik nie jest gwarantowany jako odpowiedni.

Dokładne zachowanie sieci neuronowej w przypadku argumentów spoza domeny zależy od implementacji sieci neuronowej. Ale ogólnie wynik jest bezużyteczny, jeśli argumenty nie znajdują się w domenie.


16
Jeśli weźmiesz zwykłą funkcję aktywacyjną (ReLu lub Sigmoid), domeną jest zawsze cała przestrzeń R ^ n. Więc to nie może być powód do normalizacji danych.
Joker123

1
To również nie wyjaśnia, dlaczego obrazy są znormalizowane, ponieważ mają już domenę 0-255
DollarAkshay

4

Istnieją 2 powody, dla których musimy znormalizować funkcje wejściowe przed przekazaniem ich do sieci neuronowej:

Powód 1 : Jeżeli Featurew Datasetjest duża skalę w porównaniu do innych, to ta wielka cecha dominująca staje skalowany i wskutek tego, przepowiednie Neural Network nie będzie dokładne.

Przykład : W przypadku danych pracowników, jeśli weźmiemy pod uwagę wiek i wynagrodzenie, wiek będzie liczbą dwucyfrową, podczas gdy wynagrodzenie może mieć 7 lub 8 cyfr (1 milion itd.). W takim przypadku wynagrodzenie zdominuje przewidywanie sieci neuronowej. Ale jeśli znormalizujemy te cechy, wartości obu funkcji będą znajdować się w zakresie od (0 do 1).

Powód 2 : Przednia propagacja sieci neuronowych obejmuje iloczyn skalarny wag z funkcjami wejściowymi. Tak więc, jeśli wartości są bardzo wysokie (dla danych obrazu i danych innych niż obraz), obliczenie wyniku zajmuje dużo czasu obliczeń, a także pamięci. Tak samo jest w przypadku Back Propagation. W konsekwencji model zbiega się powoli, jeśli dane wejściowe nie są znormalizowane.

Przykład : Jeśli przeprowadzamy klasyfikację obrazu, rozmiar obrazu będzie bardzo duży, ponieważ wartość każdego piksela mieści się w zakresie od 0 do 255. Normalizacja w tym przypadku jest bardzo ważna.

Poniżej wymieniono przypadki, w których normalizacja jest bardzo ważna:

  1. K-średnie
  2. K-Nearest-Neighbours
  3. Analiza głównych składników (PCA)
  4. Gradientowe zejście

2

Uważam, że odpowiedź zależy od scenariusza.

Rozważmy NN (sieć neuronowa) jako operator F, więc F (wejście) = wyjście . W przypadku, gdy ta relacja jest liniowa, tak że F (A * wejście) = A * wyjście , możesz albo pozostawić wejście / wyjście nienormalizowane w ich surowych formach, albo znormalizować oba, aby wyeliminować A. Oczywiście to założenie liniowości jest naruszone w zadaniach klasyfikacyjnych lub prawie każde zadanie, które generuje prawdopodobieństwo, gdzie F (A * wejście) = 1 * wyjście

W praktyce normalizacja pozwala na dopasowanie niedopasowalnych sieci, co jest kluczowe dla eksperymentatorów / programistów. Niemniej jednak dokładny wpływ normalizacji będzie zależał nie tylko od architektury / algorytmu sieci, ale także od statystycznego wyprzedzenia wejścia i wyjścia.

Co więcej, NN jest często wdrażane w celu rozwiązywania bardzo trudnych problemów w sposób czarnoskrzynkowy, co oznacza, że ​​podstawowy problem może mieć bardzo słabe sformułowanie statystyczne, co utrudnia ocenę wpływu normalizacji, co daje przewagę techniczną (możliwość dopasowania) dominować nad jego wpływem na statystyki.

W sensie statystycznym normalizacja usuwa zmienność, która jest uważana za bezprzyczynową w przewidywaniu wyniku, aby uniemożliwić NN poznanie tej zmienności jako predyktora ( NN nie widzi tej zmiany, dlatego nie może jej użyć ).


2

Gdy używasz nieznormalizowanych funkcji wejściowych, funkcja straty prawdopodobnie będzie miała bardzo wydłużone doliny. Podczas optymalizacji ze spadkiem gradientu staje się to problemem, ponieważ gradient będzie stromy w stosunku do niektórych parametrów. Prowadzi to do dużych oscylacji w przestrzeni poszukiwań, gdy podskakujesz między stromymi zboczami. Aby to zrekompensować, musisz ustabilizować optymalizację przy małych szybkościach uczenia się.

Rozważ cechy x1 i x2, gdzie mieszczą się odpowiednio w zakresie od 0 do 1 i od 0 do 1 miliona. Okazuje się, że stosunki dla odpowiednich parametrów (powiedzmy, w1 i w2) również będą duże.

Normalizacja sprawia, że ​​funkcja straty jest bardziej symetryczna / sferyczna. Są one łatwiejsze do optymalizacji, ponieważ gradienty mają tendencję do wskazywania globalnego minimum i można podjąć większe kroki.


1

Powodem, dla którego potrzebna jest normalizacja, jest to, że jeśli spojrzysz na to, jak krok adaptacyjny przebiega w jednym miejscu w dziedzinie funkcji, i po prostu przeniesiesz problem do odpowiednika tego samego kroku, który jest tłumaczony przez jakąś dużą wartość w pewnym kierunku w domain, otrzymujesz różne wyniki. Sprowadza się do kwestii dostosowania elementu liniowego do punktu danych. O ile pionek powinien się poruszać bez obracania, a o ile powinien się obracać w odpowiedzi na ten jeden punkt treningowy? Nie ma sensu zmieniać procedury adaptacji w różnych częściach domeny! Dlatego wymagana jest normalizacja, aby zmniejszyć różnicę w wyniku treningu. Nie mam tego napisanego, ale możesz po prostu spojrzeć na matematykę pod kątem prostej funkcji liniowej i jak jest ona trenowana przez jeden punkt treningowy w dwóch różnych miejscach. Ten problem mógł zostać rozwiązany w niektórych miejscach, ale nie znam ich. W ALN problem został rozwiązany i mogę wysłać artykuł, jeśli napiszesz do wwarmstrong AT shaw.ca


-9

Ukryte warstwy są używane zgodnie ze złożonością naszych danych. Jeśli mamy dane wejściowe, które można rozdzielić liniowo, to nie musimy używać warstwy ukrytej, np. Bramki OR, ale jeśli mamy dane rozdzielane nieliniowo, musimy użyć warstwy ukrytej, na przykład bramki logicznej ExOR. Liczba węzłów pobranych w dowolnej warstwie zależy od stopnia weryfikacji krzyżowej naszego wyniku.

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.