Layer Normalization
Do kolejnej warstwy trafia opis jednego fragmentu z liczbami [2, 4], a innego z [20, 40]. Rozmiar sygnału może się mocno różnić. Chcesz ułatwić obliczenia przez przeliczenie liczb w ramach każdego opisu do porównywalnej skali.
Layer Normalization normalizuje wektor — listę liczb — na podstawie jego własnej średniej i rozrzutu. W typowym Transformerze robi to osobno dla każdej pozycji tekstu. Nie potrzebuje do tego innych zdań z tej samej grupy danych.
Dla [2, 4] średnia to 3. Po odjęciu średniej zostaje [-1, 1]; podzielenie przez odpowiednią miarę rozrzutu reguluje skalę. Następnie wyuczone współczynniki mogą każdą liczbę rozciągnąć i przesunąć.
Końcowy wynik nie musi więc mieć dokładnie średniej zero i wariancji jeden. To lokalna operacja stabilizująca przetwarzanie, a nie usunięcie różnic znaczenia między tokenami ani gwarancja stabilności całej sieci. RMSNorm reguluje skalę bez odejmowania średniej.
Mechanizm i szczegóły
To rozróżnienie wprowadza praca Ba, Kiros i Hinton, Layer Normalization, §3. Statystyki zależą od aktualnego wejścia, więc normalizacja nie potrzebuje innych przykładów w tym samym batchu.
Dla współrzędnej zapis z uczonym skalowaniem i przesunięciem ma postać:
jest średnią wektora, a średnią kwadratów odchyleń od niej. Dodatnie chroni przed dzieleniem przez zero. Parametry i są uczone. Dokumentacja Keras podaje pełne obliczenie i znaczenie osi normalizacji.
Przykład dwóch współrzędnych
Dla [2; 4] średnia wynosi 3, a wariancja 1. Po odjęciu średniej otrzymujemy [−1; 1]. Przy bardzo małym epsilon, gamma równej jeden i beta równej zero wynik będzie bliski [−1; 1].
Po nauczeniu gamma i beta końcowy wektor nie musi mieć średniej zero ani wariancji jeden. Normalizacja nie oznacza też, że cały model staje się niezależny od skali wszystkich swoich parametrów.
W oryginalnym Transformer LayerNorm następowała po dodaniu przez Residual connection, zarówno przy attention, jak i FFN. Kolejność tę pokazuje Attention Is All You Need, §3.1; nie należy z niej robić reguły dla wszystkich LLM.