Buduję modele regresji. Na etapie wstępnego przetwarzania skaluję wartości funkcji, aby uzyskać średnią 0 i odchylenie standardowe 1. Czy konieczne jest również znormalizowanie wartości docelowych?
Buduję modele regresji. Na etapie wstępnego przetwarzania skaluję wartości funkcji, aby uzyskać średnią 0 i odchylenie standardowe 1. Czy konieczne jest również znormalizowanie wartości docelowych?
Odpowiedzi:
Najpierw przeanalizujmy, dlaczego przeprowadzane jest skalowanie funkcji. Skalowanie cech poprawia zbieżność najbardziej stromych algorytmów zniżania, które nie posiadają właściwości niezmienności skali.
W przykładach treningu stochastycznego spadku gradientu iteracyjnie informuj o aktualizacjach wagi, tak,
Gdzie jest wagami, jest wielkością kroków, jest gradientu wrt, jest funkcją straty, jest funkcją sparametryzowaną przez , jest przykładem treningu, a jest odpowiedzią / etykietą.
Porównaj następujące funkcje wypukłe, reprezentujące prawidłowe skalowanie i niewłaściwe skalowanie.
Krokowa aktualizacja wagi o rozmiarze spowoduje o wiele lepszą redukcję błędu w odpowiednio skalowanej obudowie niż w przypadku nieprawidłowo skalowanej obudowy. Poniżej pokazano kierunek o długości .
Normalizacja wyjścia nie wpłynie na kształt , więc na ogół nie jest to konieczne.
Jedyną sytuacją, jaką mogę sobie wyobrazić skalowanie wyników, jest wpływ, jeśli twoja zmienna odpowiedzi jest bardzo duża i / lub używasz zmiennych f32 (co jest wspólne z algebrą liniową GPU). W takim przypadku możliwe jest uzyskanie przelewu zmiennoprzecinkowego elementu odważników. Objaw jest albo wartością Inf, albo obejmie drugą skrajną reprezentację.
Zasadniczo nie jest to konieczne. Skalowanie danych wejściowych pomaga uniknąć sytuacji, w której jedna lub kilka cech dominuje nad innymi pod względem wielkości, w wyniku czego model prawie nie bierze udziału zmiennych o mniejszej skali, nawet jeśli są one silne. Ale jeśli skalujesz cel, twój średni błąd kwadratu jest automatycznie skalowany. MSE> 1 automatycznie oznacza, że radzisz sobie gorzej niż stałe (naiwne) przewidywanie.
Nie, transformacje liniowe odpowiedzi nigdy nie są konieczne. Mogą one jednak pomóc w interpretacji modelu. Na przykład, jeśli twoja odpowiedź jest podana w metrach, ale zazwyczaj jest bardzo mała, pomocne może być przeskalowanie do np. Milimetrów. Należy również zauważyć, że centrowanie i / lub skalowanie danych wejściowych może być przydatne z tego samego powodu. Na przykład można z grubsza zinterpretować współczynnik jako wpływ na zmianę odpowiedzi na jednostkę w predyktorze, gdy wszystkie inne predyktory są ustawione na 0 . Ale 0 często nie będzie prawidłową lub interesującą wartością dla tych zmiennych. Centrowanie danych wejściowych pozwala interpretować współczynnik jako zmianę efektu na jednostkę, gdy inne predyktory przyjmują swoje wartości średnie.
Inne transformacje (tj. Log lub pierwiastek kwadratowy) mogą być pomocne, jeśli odpowiedź nie jest liniowa w predyktorach w oryginalnej skali. W takim przypadku możesz przeczytać o uogólnionych modelach liniowych, aby sprawdzić, czy są one odpowiednie dla Ciebie.
To nie wpływa metoda gradientu prostego w zły sposób. sprawdź wzór na opadanie gradientu:
Powiedzmy, że jest funkcją 1000 razy większą niż
dla mamy . Optymalnym sposobem osiągnięcia (0,0), który jest globalnym optymalnym, jest przejście po przekątnej, ale jeśli jedna z cech dominuje nad drugą pod względem skali, to się nie zdarzy.
Aby zilustrować: Jeśli wykonasz transformację , przyjmij jednolitą szybkość uczenia się dla obu współrzędnych i oblicz gradient, a następnieForma funkcjonalna jest taka sama, ale szybkość uczenia się dla drugiej współrzędnej musi być dostosowana do 1/1000 tej dla pierwszej współrzędnej, która ją dopasuje. Jeśli nie, współrzędne dominują dwa, a wektor będzie wskazywał bardziej w tym kierunku.
W rezultacie odchyla deltę, aby wskazywała tylko w tym kierunku i spowalnia konwergencję.
Tak , musisz skalować zmienną docelową. Zacytuję to odniesienie :
Z kolei zmienna docelowa z dużym rozkładem wartości może powodować duże wartości gradientu błędu, powodując radykalną zmianę wartości masy, powodując niestabilność procesu uczenia się.
W odnośniku znajduje się również demonstracja kodu, w której masy modelu eksplodowały podczas treningu, biorąc pod uwagę bardzo duże błędy, a z kolei wybuchły również gradienty błędów obliczone dla aktualizacji masy. Krótko mówiąc, jeśli nie skalujesz danych i masz bardzo duże wartości, upewnij się, że używasz bardzo małych wartości szybkości uczenia się. Zostało to również wspomniane przez @drSpacy.