Dlaczego możemy zastosować normalizację partii?

Normalizujemy warstwę wejściową, dostosowując i skalując aktywacje. Na przykład, gdy mamy funkcje od 0 do 1 i kilka od 1 do 1000, powinniśmy je zawsze normalizować, aby przyspieszyć naukę. Jeśli warstwa wejściowa z tego korzysta, dlaczego nie zrobić czegoś równoważnego również dla wartości w warstwach ukrytych, które zmieniają się cały czas i uzyskać 10 lub więcej razy poprawę w ramach szybkości treningu.

Normalizacja wsadowa zmniejsza ilość o to, co zmieniają się wartości jednostek ukrytych (przesunięcie kowariancyjne). Aby wyjaśnić przesunięcie kowariancji, stwórzmy głęboką sieć wykrywania kotów. Tresujemy nasze dane tylko na zdjęciach czarnych kotów. Tak więc, jeśli teraz spróbujemy zastosować tę sieć do danych z kolorowymi kotami, to jest oczywiste, że nie mamy się najlepiej. Zestaw treningowy, a tym samym zestaw do przewidywania, to oba obrazy kotów, ale różnią się one nieco od siebie. Innymi słowy, jeśli algorytm nauczyłby się trochę mapowania od X do Y, i jeśli rozkład X zmieniłby się, musielibyśmy przekwalifikować algorytm treningu, próbując dopasować rozkład X do rozkładu Y. ( Deeplearning.ai: Dlaczego Partia Norm działa? (C2W3L06))

Ponadto, normalizacja wsadowa pozwala każdej warstwie sieci dowiedzieć się samemu nieco więcej, niezależnie od innych warstw.

Możemy stosować wyższe współczynniki uczenia się, ponieważ normalizacja wsadowa zapewnia, że nie ma żadnej aktywacji, która jest naprawdę wysoka lub naprawdę niska. A przez to rzeczy, których wcześniej nie można było trenować, zaczną się trenować.

Zmniejsza to overfitting, ponieważ jest to mały efekt normalizacji. Prawie jak dropout, dodaje trochę szumu do każdej ukrytej aktywacji warstwy. Jeśli więc użyjemy standaryzacji wsadowej, użyjemy mniej dropoutów, co może być dobre, bo nie będziemy tracić mnóstwa danych. Nie powinniśmy jednak zawsze polegać tylko na normalizacji wsadowej, ale lepiej korzystać z niej przy bocznym dropoucie.

Jak działa normalizacja wsadowa?

Aby zwiększyć stabilność sieci neuronowej, normalizacja wsadowa normalizuje dane wyjściowe z poprzedniej warstwy aktywacyjnej, odejmując średnią wsadową i dzieląc przez wariancję wsadową.

Jednak po tym przesunięciu/skali wyników aktywacji o pewne losowo zainicjowane parametry, wagi w kolejnej warstwie nie są już optymalne. SGD (Stochastyczny gradient opadania) odwraca tę normalizację, jeśli jest to sposób na osłabienie funkcji straty.

W związku z tym normalizacja wsadowa dodaje do każdej warstwy dwa parametry, które można trenować; dlatego znormalizowane wyjście mnoży się przez parametr “odchylenie standardowe” (gamma) i dodaje parametr “średni” (beta). Innymi słowy, normalizacja wsadowa pozwala SGD na denormalizację poprzez zmianę tylko tych dwóch wag dla każdej aktywacji, zamiast utraty stateczności sieci poprzez zmianę wszystkich wag.

Normalizacja wsadowa i wstępnie przeszkolone sieci, takie jak VGG:

VGG nie ma w nim warstwy normalizacji wsadowej, ponieważ normalizacja wsadowa nie istniała przed VGG. Jeśli będziemy trenować z nim od początku, wstępnie przeszkolona masa będzie cieszyć się normalizacją aktywacji. Tak więc dodanie warstwy normalizacji wsadowej w rzeczywistości poprawia jakość sieci ImageNet, co jest fajne. Dodasz ją do warstw gęstych, a także do warstw konwekcyjnych.

Jeśli dodamy normę wsadową w trakcie wcześniejszej sieci, zmieni ona wagę treningu; ponieważ odejmie średnią i podzieli przez odchylenie jakości dla warstw aktywacji i nie chcemy, aby tak się stało, ponieważ chcielibyśmy, aby te wagi pozostały równoważne. Tak więc, chcielibyśmy spróbować wstawić warstwę normalną dla partii i dowiedzieć się o gamma i beta, aby cofnąć zmiany w wyjściach.