Dlaczego musimy znormalizować obrazy przed umieszczeniem ich w CNN?

Odpowiedzi:

34

Pierwsza uwaga: naprawdę powinieneś także podzielić przez odchylenie standardowe każdej wartości funkcji (piksela). Odejmowanie średniej wyśrodkowuje wartość wejściową na 0, a dzielenie przez odchylenie standardowe powoduje, że każda skalowana cecha wartościuje liczbę odchyleń standardowych od średniej.

Aby odpowiedzieć na twoje pytanie: Zastanów się, w jaki sposób sieć neuronowa uczy się swoich wag. Uczenie się C (NN) poprzez ciągłe dodawanie gradientowych wektorów błędów (pomnożonych przez szybkość uczenia się) obliczonych na podstawie propagacji wstecznej do różnych macierzy masy w całej sieci podczas przekazywania przykładów szkolenia.

Należy tutaj zauważyć „pomnożone przez współczynnik uczenia się”.

Gdybyśmy nie skalowali naszych wejściowych wektorów szkoleniowych, zakresy naszych rozkładów wartości cech byłyby prawdopodobnie różne dla każdej cechy, a zatem szybkość uczenia się spowodowałaby korekty w każdym wymiarze, które różniłyby się (proporcjonalnie) od siebie. Być może nadwyżka kompensujemy korektę w jednym wymiarze wagi, a niedostateczną w innym.

Nie jest to idealne, ponieważ możemy znaleźć się w stanie oscylacyjnym (niezdolnym do wyśrodkowania na lepszych maksymalnych kosztach (wagach) przestrzeni) lub w powolnym ruchu (podróżowanie zbyt wolno, aby uzyskać lepsze maksima).

Oczywiście możliwe jest uzyskanie wskaźnika uczenia się w przeliczeniu na wagę, ale jeszcze więcej hiperparametrów można wprowadzić do już skomplikowanej sieci, którą musimy również zoptymalizować, aby ją znaleźć. Ogólnie wskaźniki uczenia się są skalarne.

Dlatego staramy się znormalizować obrazy przed użyciem ich jako danych wejściowych do algorytmu NN (lub dowolnego gradientu).

Lollercoaster
źródło
1
co z kolorowymi obrazami? czy robię to dla każdego kanału kolorów? czy to nie zepsułoby rozkładu kolorów?
user10024395
2
Uwierz, że tak. Możesz po prostu zrobić coś takiego:(image - image.mean()) / (image.std() + 1e-8)
JohnAllen
Czy to naprawdę pomaga w treningu? Trenuję wykrywanie obiektów i przy użyciu tego fitlera obraz (y) są bardzo mylące, trudno jest dostrzec obiekty, które
wykrywam
Jest to bardzo pomocne w treningu pod względem możliwości uczenia się i dokładności - nie dla ciebie, to dla modelu :) Być może zechcesz wygenerować nienormalizowany obraz podczas debugowania, aby wyglądał normalnie dla twoich ludzkich oczu.
Lollercoaster