Jaka jest różnica między zejściem gradientowym a stochastycznym zejściem gradientowym?

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:

zaszumiona krzywa strat

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.

Gradient_Descent

Zaktualizuj równanie = UpdateEqn

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.

  1. Algorytm zstępowania gradientu

  2. Stochastyczny spadek gradientu .

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *