ML Atlas

02 · Dane · 4 min czytania · Interaktywne · aktualizacja

Dlaczego trzeba standaryzować dane przed treningiem sieci neuronowej?

W skrócie

Standaryzacja sprowadza każdą cechę do średniej 0 i odchylenia 1. Bez niej cechy o dużej skali dominują gradient i odległości, a jeden learning rate nie pasuje.

Co to jest

Standaryzacja (z-score) to przeskalowanie każdej kolumny danych tak, by miała średnią 0 i odchylenie standardowe 1: x' = (x − μ) / σ. Normalizacja min-max skaluje do przedziału [0, 1]. Oba zabiegi wyrównują skale cech przed treningiem modeli opartych na gradiencie lub odległości: sieci neuronowych, regresji logistycznej, SVM, k-means, kNN.

Drzewa decyzyjne i boosting drzew skalowania nie potrzebują, bo pytają o progi, a te są niezmiennicze na skalę.

Intuicja: porównujesz domy po powierzchni w metrach kwadratowych i liczbie pokoi. Różnica 30 m² to „30”, różnica dwóch pokoi to „2” — dla algorytmu liczącego odległości metraż jest piętnaście razy ważniejszy tylko dlatego, że wyraża się większymi liczbami.

Mechanizm — dlaczego tak działa

Gradient wagi w pierwszej warstwie jest proporcjonalny do wartości wejścia, które ta waga mnoży: ∂L/∂w_j = (sygnał błędu) × x_j. Jeśli jedna cecha ma wartości w setkach, a inna w dziesiątych częściach, gradient pierwszej wagi jest tysiące razy większy niż drugiej. Jeden learning rate jest wtedy za duży dla pierwszej wagi (oscyluje) i za mały dla drugiej (pełznie). Geometrycznie krajobraz straty jest wydłużonym wąwozem: stromo w jednym kierunku, płasko w drugim, a spadek gradientu zygzakuje po ścianach, zamiast iść dnem. Po standaryzacji wąwóz staje się bliższy misie, krzywizna jest podobna we wszystkich kierunkach i jeden krok pasuje wszystkim wagom.

Drugi efekt: skala wejść określa, gdzie neuron pracuje. Duże wejścia dają duże sumy ważone, czyli nasycenie sigmoidu i tanh lub martwe ReLU już na starcie. Inicjalizacje Xaviera i He zakładają wejścia o wariancji około 1 — bez standaryzacji ich gwarancje nie obowiązują. Trzeci: regularyzacja L2 karze wagi jednakowo, więc cecha o małej skali (potrzebująca dużej wagi) jest karana bardziej niż cecha o dużej skali — bez standaryzacji kara jest arbitralna. Czwarty, w metodach odległościowych (kNN, k-means, SVM z jądrem RBF): odległość euklidesowa jest zdominowana przez cechę o największym rozrzucie.

Zastrzeżenie: średnią i odchylenie liczy się wyłącznie na zbiorze treningowym i tymi samymi wartościami przekształca walidację i test; policzenie ich na całości to wyciek. Standaryzacja nie naprawia skośności — dla rozkładów z długim ogonem (dochody, liczności) wcześniej stosuje się logarytm lub transformację kwantylową. Batch normalization i layer normalization to ta sama idea zastosowana wewnątrz sieci, do aktywacji warstw ukrytych.

Na przykładzie

Zbiór Wine (178 win, 13 cech chemicznych) to podręcznikowy przypadek: odchylenie standardowe proliny wynosi 314 (wartości od 278 do 1680), a fenoli nieflawonoidowych — ledwie 0,12. Podzieliłem dane 75/25 z warstwowaniem (random_state=0) i porównałem modele na surowych i standaryzowanych cechach (StandardScaler w Pipeline).

kNN z 5 sąsiadami: 66,7% na surowych danych, 93,3% po standaryzacji — bez niej odległość to w praktyce różnica proliny. SGDClassifier: 46,7% wobec 100%. Regresja logistyczna na surowych danych nie zbiega w domyślnych 100 iteracjach (93,3%), a do zbieżności potrzebuje 4722 iteracji; po standaryzacji wystarcza 15 iteracji i trafność wynosi 100%. MLPClassifier: 91,1% wobec 100%. Drzewo decyzyjne daje 88,9% w obu wersjach — dokładnie tak, jak przewiduje teoria.

Ta ilustracja działa w przeglądarce z włączonym JavaScriptem: PCA na 13 cechach win: bez standaryzacji PC1 wyjaśnia 99,8% wariancji i jest w zasadzie proliną, ze standaryzacją odmiany wyraźnie się rozdzielają.

Dane: Wine (wina z Piemontu)

W praktyce

  • scikit-learn: StandardScaler w Pipeline przed LogisticRegression, MLPClassifier, SVC, KMeans, KNeighborsClassifier; MinMaxScaler dla danych ograniczonych (piksele); QuantileTransformer lub PowerTransformer dla skośnych.
  • PyTorch: standaryzuj przed DataLoader lub jako pierwszą warstwę ze stałymi buforami; obrazy normalizuje się per kanał średnią i odchyleniem zbioru.
  • Drzewa (DecisionTreeClassifier, RandomForestClassifier, XGBoost, LightGBM) — standaryzacja nic nie zmienia; nie trać na nią czasu.
  • Adam częściowo kompensuje różne skale (dzieli krok przez typowy gradient wagi), ale nie usuwa wydłużenia wąwozu — standaryzuj i tak.
  • Typowy błąd: scaler.fit(X) na całym zbiorze przed train_test_split albo zapomnienie o przekształceniu danych produkcyjnych tym samym skalerem.

Najczęstsze pytania

Czym różni się normalizacja od standaryzacji?
Standaryzacja odejmuje średnią i dzieli przez odchylenie: wynik ma średnią 0 i odchylenie 1, bez ograniczenia zakresu. Normalizacja min-max przeskalowuje do [0, 1] i jest wrażliwa na wartości odstające. Dla sieci i regresji domyślnie standaryzuj; min-max stosuj, gdy zakres jest naturalnie ograniczony.
Czy drzewa decyzyjne wymagają standaryzacji?
Nie. Drzewo pyta „x ≤ próg”, a każde rosnące przekształcenie cechy daje te same podziały. Dotyczy to lasów losowych i boostingu drzew (XGBoost, LightGBM, CatBoost). Standaryzacji potrzebują modele liczące iloczyny skalarne lub odległości.
Kiedy dopasować skaler — przed czy po podziale na train/test?
Po podziale, wyłącznie na części treningowej. Walidację i test przekształcasz tymi samymi parametrami. Dopasowanie na całości przenosi informację o teście do treningu (wyciek) i zawyża wynik — zwykle nieznacznie, ale przy małych zbiorach wyraźnie.

Źródła

  • LeCun, Y., Bottou, L., Orr, G., Müller, K.-R. (2012). "Efficient BackProp". W: Neural Networks: Tricks of the Trade, 2nd ed., LNCS 7700, sekcja "Normalizing the inputs".
  • Géron, A. (2022). Hands-On Machine Learning, 3rd ed., rozdz. 2 "Feature scaling and transformation".
  • Hastie, Tibshirani, Friedman (2009). The Elements of Statistical Learning, 2nd ed., rozdz. 11.5.3 "Scaling of the inputs".
  • Ioffe, S., Szegedy, C. (2015). "Batch normalization: accelerating deep network training by reducing internal covariate shift". ICML. arXiv:1502.03167
  • scikit-learn: "Importance of feature scaling". https://scikit-learn.org/stable/auto_examples/preprocessing/plot_scaling_importance.html

Zobacz też