06 · Sieci · 4 min czytania · aktualizacja
Dlaczego wynik modelu zależy od seeda i czym jest szczęśliwa inicjalizacja?
W skrócie
Losowe wagi startowe dają przypadkową granicę decyzji, która czasem trafia blisko prawdziwej. Wynik zależy od seeda: jeden przebieg to jedno losowanie.
Co to jest
Szczęśliwa inicjalizacja to przypadek, w którym losowo wylosowane wagi startowe dają model działający wyraźnie lepiej niż zgadywanie jeszcze przed treningiem, bo jego przypadkowa granica decyzji leży blisko prawdziwej. Szerzej chodzi o zależność wyniku od seeda generatora liczb losowych — przez inicjalizację wag, kolejność danych i maski dropoutu.
Ta zależność jest realnym źródłem wariancji w każdym eksperymencie z sieciami neuronowymi i w konkursach Kaggle. Jeden przebieg treningu to jedno losowanie, a nie „wynik modelu”.
Intuicja: rzucasz strzałką z zawiązanymi oczami. Zwykle chybiasz, ale raz na kilkadziesiąt rzutów trafisz blisko środka. To nie znaczy, że umiesz rzucać — i następny rzut nie będzie lepszy tylko dlatego, że poprzedni był udany.
Mechanizm — dlaczego tak działa
Dla modelu liniowego z d cechami losowy wektor wag to losowy kierunek w d wymiarach, a bias to losowe przesunięcie. Granica decyzji leży więc gdziekolwiek. Jeśli prawdziwa reguła też jest w przybliżeniu liniowa, prawdopodobieństwo, że losowa granica będzie jej „dość bliska”, jest małe, ale niezerowe — i rośnie, gdy wiele cech niesie podobną informację. Przy wielu losowych startach szczęśliwy trafi się prawie na pewno. Szczęście się jednak nie przenosi: nowe losowanie to nowa, przypadkowa granica.
W sieciach trenowanych seed działa subtelniej: różne starty prowadzą do różnych minimów, a wariancja wyniku między seedami bywa porównywalna z różnicą między metodami (Henderson i in. 2018 w uczeniu ze wzmocnieniem; Dodge i in. 2020 w dostrajaniu modeli językowych). Hipoteza losu na loterii (lottery ticket, Frankle i Carbin 2019) idzie dalej: w losowo zainicjowanej dużej sieci istnieją podsieci, których startowe wagi są „szczęśliwe” — wytrenowane osobno osiągają wynik całej sieci, a z innymi startowymi wagami już nie.
Konsekwencja metodologiczna: pojedynczy wynik z jednego seeda to jedna realizacja zmiennej losowej. Wybór „najlepszego seeda” na walidacji i raportowanie jego wyniku to zawyżenie — ten sam mechanizm co klątwa zwycięzcy przy wyborze hiperparametrów.
Zastrzeżenie: w dużych sieciach z dobrą inicjalizacją (He, Xavier) i dostateczną liczbą danych wariancja między seedami maleje; przy małych sieciach i małych danych jest duża i trzeba ją mierzyć.
Na przykładzie
Na Breast Cancer Wisconsin (30 standaryzowanych cech) wylosowałem 10 000 wektorów wag z rozkładu normalnego i dla każdego policzyłem trafność reguły „łagodny, gdy w·x > 0” (bez biasu i bez żadnego treningu, random_state=0). Mediana trafności wynosi 49,9%, ale 12% losowych wektorów przekracza 80%, 1,4% przekracza 90%, a najlepszy trafia w 95,4% przypadków — prawie tyle co wytrenowana regresja logistyczna (95,8%). Działa to, bo prawie wszystkie cechy guza rosną razem, więc wiele kierunków jest „dość dobrych”.
W treningu efekt jest mniejszy, ale obecny. MLPClassifier z 16 neuronami ukrytymi na Digits 8×8 (podział 75/25, random_state=0) przez 20 seedów osiąga na teście od 96,7% do 97,8% (średnio 97,2%). Gdy wybrałem seed z najlepszym wynikiem na walidacji (97,3% wobec średniej 96,5%), na teście dał 96,9% — praktycznie tyle co średnia (96,9%). Przewaga z walidacji nie przeszła na nowe dane. Uśrednienie predykcji pięciu seedów dało natomiast 97,3%, powyżej średniej pojedynczego modelu.
Dane: Breast Cancer Wisconsin (diagnostyka raka piersi) Digits (ręcznie pisane cyfry 8×8)
W praktyce
- Ustawiaj seed dla powtarzalności (
torch.manual_seed,np.random.seed,random_state), ale raportuj wynik jako średnią ± odchylenie z 3–5 seedów, nie z jednego. - Na Kaggle uśrednianie predykcji modeli z różnych seedów (seed averaging) zmniejsza wariancję i prawie zawsze poprawia wynik — to tani ensembling.
- Jeśli różnica między dwoma ustawieniami jest mniejsza niż rozrzut między seedami, nie ma podstaw, by uznać jedno za lepsze.
- Pełna powtarzalność na GPU wymaga dodatkowo wyłączenia niedeterministycznych kerneli (
torch.use_deterministic_algorithms). - Typowy błąd: „model A ma 0,812, model B 0,809, więc A jest lepszy” przy jednym seedzie i rozrzucie ±0,01.
Najczęstsze pytania
- Dlaczego wynik sieci zmienia się po zmianie seeda?
- Seed określa wagi startowe, kolejność batchy i maski dropoutu. Różne starty prowadzą do różnych minimów krajobrazu straty, a różne kolejności danych do różnych ścieżek. Przy małych danych i małych sieciach ta wariancja bywa duża — mierz ją, uruchamiając kilka seedów.
- Czy warto szukać „najlepszego seeda”?
- Nie jako metody poprawy modelu: wybrany na walidacji seed jest lepszy głównie przez szczęście, które nie powtórzy się na nowych danych. Warto natomiast uśredniać predykcje z kilku seedów — to zmniejsza wariancję i daje realną, powtarzalną poprawę.
- Co to jest hipoteza losu na loterii (lottery ticket)?
- Obserwacja Frankle'a i Carbina (2019): w dużej losowo zainicjowanej sieci istnieje mała podsieć, która — trenowana osobno od swoich oryginalnych wag startowych — osiąga wynik całej sieci. Z innymi wagami startowymi ta sama podsieć uczy się gorzej, więc to inicjalizacja była „szczęśliwa”.
Źródła
- Frankle, J., Carbin, M. (2019). "The lottery ticket hypothesis: finding sparse, trainable neural networks". ICLR. arXiv:1803.03635
- Henderson i in. (2018). "Deep reinforcement learning that matters". AAAI. arXiv:1709.06560
- Dodge i in. (2020). "Fine-tuning pretrained language models: weight initializations, data orders, and early stopping". arXiv:2002.06305
- Goodfellow, Bengio, Courville (2016). Deep Learning, rozdz. 8.4 "Parameter initialization strategies". https://www.deeplearningbook.org/contents/optimization.html