Jaka jest różnica między gradientem a stochastycznym spadkiem?
Nie jestem z nimi zbyt zaznajomiony, czy możesz opisać różnicę za pomocą krótkiego przykładu?
Odpowiedź
Aby uzyskać szybkie i proste wyjaśnienie:
Zarówno w przypadku gradientu (GD), jak i stochastycznego gradientu (SGD), aktualizujesz zestaw parametrów w sposób iteracyjny, aby zminimalizować funkcję błędu.
Będąc w GD, musisz przejść przez WSZYSTKIE próbki w zestawie uczącym, aby wykonać pojedynczą aktualizację parametru w określonej iteracji, natomiast w SGD, z drugiej strony, używasz TYLKO JEDNEGO lub PODZBIORU próbki szkoleniowej z zestaw szkoleniowy do wykonania aktualizacji parametru w określonej iteracji. Jeśli używasz SUBSET, nazywa się to Minibatch Stochastic Gradient Descent.
Tak więc, jeśli liczba próbek uczących jest duża, w rzeczywistości bardzo duża, to użycie gradientu może zająć zbyt dużo czasu, ponieważ w każdej iteracji, gdy aktualizujesz wartości parametrów, przechodzisz przez cały zbiór uczący. Z drugiej strony, użycie SGD będzie szybsze, ponieważ używasz tylko jednej próbki treningowej i zaczyna się poprawiać od razu od pierwszej próbki.
SGD często zbiega się znacznie szybciej w porównaniu z GD, ale funkcja błędu nie jest równie dobrze zminimalizowane jak w przypadku GD. Często w większości przypadków bliskie przybliżenie, które otrzymujesz w SGD dla wartości parametrów, jest wystarczające, ponieważ osiągają one optymalne wartości i wciąż tam oscylują.
Jeśli potrzebujesz przykładu z praktycznym przypadkiem, sprawdź Notatki Andrew NG, w których wyraźnie pokazuje kroki wymagane w obu przypadkach. cs229-notes
Źródło: Wątek Quora
Komentarze
- Dzięki, tak pokrótce? Istnieją trzy warianty Gradient Descent: Batch, Stochastic and Minibatch: Batch aktualizuje wagi po ocenie wszystkich próbek szkoleniowych. Stochastic, wagi są aktualizowane po każdej próbce treningowej. Minibatch łączy w sobie to, co najlepsze z obu światów. Nie używamy pełnego zestawu danych, ale nie używamy pojedynczego punktu danych. Korzystamy z losowo wybranego zestawu danych z naszego zbioru danych. W ten sposób zmniejszamy koszt obliczeń i osiągamy mniejszą wariancję niż wersja stochastyczna.
- Zauważ, że powyższe łącze do cs229-notes jest wyłączone. Jednak Wayback Machine, dostosowany do daty wysłania, dostarcza – yay! web.archive.org/web/20180618211933/http://cs229.stanford.edu/…
Odpowiedź
Uwzględnienie słowa stochastic oznacza po prostu, że losowe próbki z danych uczących są wybierane w każdym przebiegu w celu aktualizacji parametru podczas optymalizacji, w ramach gradientu .
Robiąc to, nie tylko obliczamy błędy i aktualizujemy wagi w szybszych iteracjach (ponieważ przetwarzamy tylko niewielki wybór próbek za jednym razem), ale często pomaga to również optymalnie szybciej. Przeczytaj odpowiedzi tutaj , aby uzyskać więcej informacji na temat tego, dlaczego używanie stochastycznych minibatchów do treningu ma zalety.
Jednym z minusów jest że ścieżka do optimum (zakładając, że będzie to zawsze to samo optimum) może być dużo głośniejsza. Więc zamiast ładnej gładkiej krzywej strat, pokazującej, jak zmniejsza się błąd w każdej iteracji gradientu, możesz zobaczyć coś takiego:
Wyraźnie widzimy, że strata maleje w czasie, jednak występują duże różnice w poszczególnych epokach (od serii treningowej do partii szkoleniowej), więc krzywa jest zaszumiona.
Dzieje się tak po prostu dlatego, że w każdej iteracji obliczamy średni błąd na naszym stochastycznie / losowo wybranym podzbiorze z całego zbioru danych. Niektóre próbki dadzą wysoki błąd, inne niskie. Zatem średnia może się różnić w zależności od tego, które próbki losowo wykorzystaliśmy do jednej iteracji gradientu.
Komentarze
- Dzięki, na krótko? Istnieją trzy warianty Gradient Descent: Batch, Stochastic i Minibatch: Batch aktualizuje wagi po ocenie wszystkich próbek szkoleniowych. Stochastic, wagi są aktualizowane po każdej próbce treningowej. Minibatch łączy w sobie to, co najlepsze z obu światów. Nie używamy pełnego zestawu danych, ale nie korzystamy z pojedynczego punktu danych. Używamy losowo wybranego zestawu danych z naszego zbioru danych. W ten sposób obniżamy koszt obliczeń i osiągamy mniejszą wariancję niż wersja stochastyczna.
- I ' d mówię, że jest partia, w której partia to cały zestaw uczący (czyli w zasadzie jedna epoka), a następnie jest mini partia, w której podzbiór jest używany (więc każda liczba mniejsza niż cały zbiór $ N $) – ten podzbiór jest wybierany losowo, więc jest stochastyczny. Użycie pojedynczej próbki będzie nazywane uczeniem się online i jest podzbiorem mini-partii … Lub po prostu mini-wsadem z
n=1
. - tks, to jasne!
Odpowiedź
W gradiencie lub wsadowym gradiencie , używamy całych danych treningowych na epokę, podczas gdy w stochastycznym zejściu gradientowym używamy tylko jednego przykładu treningowego na epokę, a mini-wsadowe zejście gradientowe znajduje się pomiędzy tymi dwoma skrajnościami, w których możemy użyć mini-partii (mała porcja ) danych uczących na epokę, reguła kciuka do wybierania rozmiaru mini-partii ma moc 2, np. 32, 64, 128 itd.
Aby uzyskać więcej informacji: cs231n notatki z wykładów
Komentarze
- dziękuję, pokrótce tak? Istnieją trzy warianty Gradient Descent: Batch, Stochastic i Minibatch: Batch aktualizuje wagi po ocenie wszystkich próbek szkoleniowych. Stochastic, wagi są aktualizowane po każdej próbce treningowej. Minibatch łączy w sobie to, co najlepsze z obu światów. Nie używamy pełnego zestawu danych, ale nie korzystamy z pojedynczego punktu danych. Używamy losowo wybranego zestawu danych z naszego zbioru danych. W ten sposób zmniejszamy koszt obliczeń i osiągamy mniejszą wariancję niż wersja stochastyczna.
Odpowiedź
Spadek gradientu to algorytm minimalizujący $ J (\ Theta) $ !
Pomysł: Dla bieżącej wartości theta oblicz $ J (\ Theta) $ , a następnie zrób mały krok w kierunku ujemnego gradientu. Powtórz.
Algorytm:
while True: theta_grad = evaluate_gradient(J,corpus,theta) theta = theta - alpha * theta_grad
Ale problem polega na tym, że $ J (\ Theta) $ jest funkcją całego korpusu w systemie Windows, więc obliczenia są bardzo kosztowne.
Stochastyczne zejście gradientowe wielokrotnie próbkuj okno i aktualizuj po każdym z nich.
Stochastyczny algorytm zstępowania gradientu:
while True: window = sample_window(corpus) theta_grad = evaluate_gradient(J,window,theta) theta = theta - alpha * theta_grad
Zwykle rozmiar okna próbki to potęga 2, powiedzmy 32, 64 jako mini partia.
Odpowiedź
Oba algorytmy są dość podobne. Jedyna różnica pojawia się podczas iteracji. W Gradient Descent uwzględniamy wszystkie punkty przy obliczaniu straty i pochodnej, podczas gdy w stochastycznym gradiencie gradientu używamy losowo pojedynczego punktu w funkcji straty i jego pochodnej. Sprawdź te dwa artykuły, oba są ze sobą powiązane i dobrze wyjaśnione. Mam nadzieję, że to pomoże.