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.
Dane: Wine (wina z Piemontu)
W praktyce
- scikit-learn:
StandardScalerwPipelineprzedLogisticRegression,MLPClassifier,SVC,KMeans,KNeighborsClassifier;MinMaxScalerdla danych ograniczonych (piksele);QuantileTransformerlubPowerTransformerdla skośnych. - PyTorch: standaryzuj przed
DataLoaderlub 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 przedtrain_test_splitalbo 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