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?
Odpowiedzi:
To wyjaśnia również tutaj .
źródło
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:
Zdjęcia pochodzą z kursu Coursera o sieciach neuronowych. Autorem kursu jest Geoffrey Hinton.
źródło
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.
źródło
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.
źródło
Istnieją 2 powody, dla których musimy znormalizować funkcje wejściowe przed przekazaniem ich do sieci neuronowej:
Powód 1 : Jeżeli
Feature
wDataset
jest 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:
źródło
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ć ).
źródło
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.
źródło
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
źródło
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.
źródło