Podstawy AI
Co to jest Gradient Descent?
Co to jest Gradient Descent?
Jeśli czytałeś o tym, jak sieci neuronowe są szkolone, prawdopodobnie już słyszałeś o terminie “gradient descent” wcześniej. Gradient descent jest podstawową metodą optymalizacji wydajności sieci neuronowej, redukującą współczynnik błędu/szkody sieci. Jednak gradient descent może być trochę trudny do zrozumienia dla tych, którzy są nowi w machine learning, i ten artykuł będzie starał się dać ci przyzwoitą intuicję, jak gradient descent działa.
Gradient descent jest algorytmem optymalizacji. Jest on używany do poprawy wydajności sieci neuronowej, wykonując drobne zmiany w parametrach sieci, tak aby różnica między przewidywaniami sieci a wartościami rzeczywistymi/oczekiwanymi sieci (zwanej błędem) była jak najmniejsza. Gradient descent bierze początkowe wartości parametrów i używa operacji opartych na rachunku różniczkowym, aby dostosować ich wartości do wartości, które sprawią, że sieć będzie jak najbardziej dokładna. Nie musisz znać dużo rachunku różniczkowego, aby zrozumieć, jak gradient descent działa, ale musisz mieć pojęcie o gradientach.
Co to są Gradients?
Załóżmy, że istnieje wykres, który reprezentuje ilość błędu, jaki sieć neuronowa popełnia. Dół wykresu reprezentuje punkty najmniejszego błędu, podczas gdy górna część wykresu to miejsce, gdzie błąd jest największy. Chcemy przenieść się z góry wykresu na dół. Gradient jest po prostu sposobem ilościowym określania relacji między błędem a wagami sieci neuronowej. Relacja między tymi dwoma rzeczami może być wykreślona jako nachylenie, z niewłaściwymi wagami powodującymi więcej błędów. Nachylenie/gradient reprezentuje, jak szybko model się uczy.
Nachylone nachylenie oznacza duże zmniejszenie błędu i model uczy się szybko, natomiast jeśli nachylenie jest zero, model jest na płaskowyżu i nie uczy się. Możemy przenieść się w dół nachylenia w kierunku mniejszego błędu, obliczając gradient, kierunek ruchu (zmianę parametrów sieci) dla naszego modelu.
Przejdźmy do innego porównania i wyobraźmy sobie serię wzgórz i dolin. Chcemy dostać się na dół wzgórza i znaleźć część doliny, która reprezentuje najmniejszą stratę. Kiedy zaczynamy na górze wzgórza, możemy zrobić duże kroki w dół wzgórza i być pewnymi, że idziemy w kierunku najniższego punktu w dolinie.
Jednak im bliżej jesteśmy najniższego punktu w dolinie, nasze kroki muszą być mniejsze, w przeciwnym razie możemy przekroczyć prawdziwy najniższy punkt i znaleźć się po drugiej stronie. Podobnie, przy dostosowywaniu wag sieci, dostosowania mogą tak naprawdę oddalić ją od punktu najmniejszej straty, a zatem dostosowania muszą być mniejsze w czasie. W kontekście zejścia z wzgórza w kierunku punktu najmniejszej straty, gradient jest wektorem/instrukcjami określającymi ścieżkę, którą powinniśmy obrać, i jak duże powinny być nasze kroki.
Teraz, kiedy wiemy, że gradients są instrukcjami, które mówią nam, w którym kierunku się poruszać (które współczynniki powinny być aktualizowane) i jak duże powinny być nasze kroki (jak bardzo powinny być aktualizowane współczynniki), możemy zbadać, jak gradient jest obliczany.
Obliczanie Gradients & Gradient Descent

Gradient descent zaczyna się w miejscu wysokiej straty i przez wiele iteracji wykonuje kroki w kierunku najmniejszej straty, starając się znaleźć optymalną konfigurację wag. Zdjęcie: Роман Сузи via Wikimedia Commons, CCY BY SA 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)
Aby wykonać gradient descent, najpierw musimy obliczyć gradients. Aby obliczyć gradient, musimy znać funkcję straty/kosztu. Będziemy używać funkcji kosztu, aby określić pochodną. W rachunku różniczkowym pochodna to po prostu nachylenie funkcji w danym punkcie, więc tak naprawdę obliczamy nachylenie wzgórza na podstawie funkcji straty. Określamy stratę, wykonując współczynniki przez funkcję straty. Jeśli reprezentujemy funkcję straty jako “f”, to możemy powiedzieć, że równanie do obliczania straty jest następujące (po prostu wykonujemy współczynniki przez naszą wybraną funkcję kosztu):
Strata = f(współczynnik)
Następnie obliczamy pochodną, czyli określamy nachylenie. Pochodna straty powie nam, w którym kierunku jest góra lub dół nachylenia, dając nam odpowiedni znak do dostosowania naszych współczynników. Będziemy reprezentować odpowiedni kierunek jako “delta”.
delta = funkcja_pochodnej(strata)
Teraz wiemy, w którym kierunku jest dół nachylenia, w kierunku punktu najmniejszej straty. Możemy zatem zaktualizować współczynniki w parametrach sieci neuronowej i nadal redukować stratę. Będziemy aktualizować współczynniki na podstawie poprzednich współczynników minus odpowiedniej zmiany wartości, jak określono przez kierunek (delta) i argument, który kontroluje wielkość zmiany (wielkość naszego kroku). Argument, który kontroluje rozmiar aktualizacji, nazywa się “learning rate” i będziemy go reprezentować jako “alpha”.
współczynnik = współczynnik – (alpha * delta)
Następnie po prostu powtarzamy ten proces, aż sieć zbiegnie wokół punktu najmniejszej straty, który powinien być bliski zera.
Jest bardzo ważne, aby wybrać odpowiednią wartość dla learning rate (alpha). Wybrana learning rate musi być ani za mała, ani za duża. Pamiętaj, że im bliżej jesteśmy punktu najmniejszej straty, nasze kroki muszą być mniejsze, w przeciwnym razie możemy przekroczyć prawdziwy punkt najmniejszej straty i znaleźć się po drugiej stronie. Jeśli nasze kroki są za duże, wydajność sieci będzie nadal skakać wokół punktu najmniejszej straty, przekraczając go z jednej strony, a potem z drugiej. Jeśli to się stanie, sieć nigdy nie zbiegnie do prawdziwej optymalnej konfiguracji wag.
W przeciwnym razie, jeśli learning rate jest za mała, sieć może potencjalnie zająć niezwykle długi czas, aby zbiec do optymalnych wag.
Typy Gradient Descent
Teraz, kiedy rozumiemy, jak gradient descent działa ogólnie, przyjrzyjmy się niektórym z różnych typów gradient descent.
Batch Gradient Descent: Ten rodzaj gradient descent przechodzi przez wszystkie przykłady szkoleniowe przed aktualizacją współczynników. Ten typ gradient descent jest najprawdopodobniej najbardziej efektywny obliczeniowo, ponieważ wagi są aktualizowane tylko raz, gdy cały batch został przetworzony, co oznacza, że jest mniej aktualizacji. Jednak jeśli zestaw danych zawiera dużą liczbę przykładów szkoleniowych, wówczas batch gradient descent może sprawić, że szkolenie zajmie dużo czasu.
Stochastic Gradient Descent: W Stochastic Gradient Descent tylko jeden przykład szkoleniowy jest przetwarzany dla każdej iteracji gradient descent i aktualizacji parametrów. To się dzieje dla każdego przykładu szkoleniowego. Ponieważ tylko jeden przykład szkoleniowy jest przetwarzany przed aktualizacją parametrów, tendencja jest taka, że zbiega szybciej niż Batch Gradient Descent, ponieważ aktualizacje są wykonywane wcześniej. Jednak ponieważ proces musi być wykonany na każdym elemencie zestawu szkoleniowego, może to potrwać dużo czasu, jeśli zestaw danych jest duży, więc użycie jednego z innych typów gradient descent jest preferowane.
Mini-Batch Gradient Descent: Mini-Batch Gradient Descent działa, dzieląc cały zestaw danych szkoleniowych na podsekcje. Tworzy mniejsze mini-batche, które są przetwarzane przez sieć, a gdy mini-batch został użyty do obliczenia błędu, współczynniki są aktualizowane. Mini-Batch Gradient Descent znajduje się pomiędzy Stochastic Gradient Descent a Batch Gradient Descent. Model jest aktualizowany częściej niż w przypadku Batch Gradient Descent, co oznacza nieco szybsze i bardziej stabilne zbieganie do optymalnych parametrów modelu. Jest również bardziej efektywny obliczeniowo niż Stochastic Gradient Descent












