stub Co to jest zejście gradientowe? - Unite.AI
Kontakt z nami
Kurs mistrzowski AI:

AI 101

Co to jest zejście gradientowe?

mm
Zaktualizowano on

Co to jest zejście gradientowe?

Jeśli czytałeś o tym, jak trenowane są sieci neuronowe, prawie na pewno zetknąłeś się już wcześniej z terminem „zejście gradientowe”. Spadek gradientu to podstawowa metoda optymalizacji wydajności sieci neuronowej, zmniejszająca współczynnik strat/błędów sieci. Jednakże opadanie gradientowe może być nieco trudne do zrozumienia dla osób, które dopiero zaczynają przygodę z uczeniem maszynowym, dlatego w tym artykule postaramy się dać przyzwoitą intuicję dotyczącą działania opadania gradientowego.

Zejście gradientowe jest algorytmem optymalizacji. Służy do poprawy wydajności sieci neuronowej poprzez wprowadzanie zmian w parametrach sieci w taki sposób, aby różnica między przewidywaniami sieci a rzeczywistymi/oczekiwanymi wartościami sieci (tzw. strata) była jak najmniejsza. Zejście gradientowe pobiera początkowe wartości parametrów i wykorzystuje operacje oparte na rachunku różniczkowym w celu dostosowania ich wartości do wartości, które sprawią, że sieć będzie tak dokładna, jak to tylko możliwe. Nie musisz znać zbyt wiele rachunku różniczkowego, aby zrozumieć, jak działa opadanie gradientu, ale musisz rozumieć gradienty.

Czym są gradienty?

Załóżmy, że istnieje wykres przedstawiający ilość błędów popełnianych przez sieć neuronową. Dolna część wykresu przedstawia punkty o najniższym błędzie, natomiast górna część wykresu przedstawia punkty, w których błąd jest najwyższy. Chcemy przejść od góry wykresu w dół. Gradient to po prostu sposób ilościowego określenia związku między błędem a wagami sieci neuronowej. Związek pomiędzy tymi dwiema rzeczami można przedstawić na wykresie jako nachylenie, przy nieprawidłowych wagach powoduje większy błąd. Stromość zbocza/gradientu reprezentuje szybkość uczenia się modelu.

Bardziej strome nachylenie oznacza, że ​​następuje duża redukcja błędów i model uczy się szybko, natomiast jeśli nachylenie wynosi zero, model znajduje się na plateau i nie uczy się. Możemy zejść w dół w kierunku mniejszego błędu, obliczając gradient, kierunek ruchu (zmianę parametrów sieci) dla naszego modelu.

Zmieńmy nieco metaforę i wyobraźmy sobie szereg wzgórz i dolin. Chcemy dotrzeć do podnóża wzgórza i znaleźć część doliny, która reprezentuje najmniejsze straty. Zaczynając od szczytu wzniesienia, możemy zejść dużymi schodami w dół i mieć pewność, że zmierzamy w stronę najniższego punktu w dolinie.

Jednakże w miarę zbliżania się do najniższego punktu w dolinie nasze kroki będą musiały być coraz mniejsze, w przeciwnym razie możemy przekroczyć prawdziwy najniższy punkt. Podobnie możliwe jest, że podczas dostosowywania wag sieci korekty mogą w rzeczywistości odsunąć ją dalej od punktu najniższej straty, dlatego z czasem korekty muszą być coraz mniejsze. W kontekście schodzenia ze wzgórza w kierunku punktu najniższej straty, nachylenie jest wektorem/instrukcjami szczegółowo opisującymi ścieżkę, którą powinniśmy podążać i jak duże powinny być nasze kroki.

Teraz wiemy, że gradienty to instrukcje, które mówią nam, w którym kierunku się poruszać (które współczynniki należy zaktualizować) i jak duże kroki powinniśmy wykonać (jak bardzo współczynniki powinny zostać zaktualizowane). Możemy zbadać, w jaki sposób obliczany jest gradient.

Obliczanie gradientów i opadania gradientu

Opuszczanie gradientowe rozpoczyna się w miejscu dużej straty i poprzez wielokrotne iteracje prowadzi w kierunku najniższej straty, mając na celu znalezienie optymalnej konfiguracji ciężaru. Zdjęcie: Роман Сузи za pośrednictwem Wikimedia Commons, CCY BY SA 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)

Aby wykonać zniżanie gradientowe, należy najpierw obliczyć nachylenia. W celu do obliczenia gradientu, musimy znać funkcję straty/kosztu. Do wyznaczenia pochodnej użyjemy funkcji kosztu. W rachunku różniczkowym pochodna odnosi się po prostu do nachylenia funkcji w danym punkcie, więc po prostu obliczamy nachylenie wzniesienia na podstawie funkcja straty. Stratę określamy przepuszczając współczynniki przez funkcję straty. Jeśli przedstawimy funkcję straty jako „f”, możemy stwierdzić, że równanie do obliczenia straty jest następujące (po prostu przeprowadzamy współczynniki przez wybraną funkcję kosztu):

Strata = f(współczynnik)

Następnie obliczamy pochodną lub określamy nachylenie. Uzyskanie pochodnej straty powie nam, który kierunek jest w górę lub w dół zbocza, dając nam odpowiedni znak, według którego możemy dostosować nasze współczynniki. Odpowiedni kierunek będziemy przedstawiać jako „delta”.

delta = funkcja_pochodna (strata)

Ustaliliśmy teraz, który kierunek prowadzi w dół w kierunku punktu najniższej straty. Oznacza to, że możemy zaktualizować współczynniki w parametrach sieci neuronowej i, miejmy nadzieję, zmniejszyć straty. Zaktualizujemy współczynniki w oparciu o poprzednie współczynniki minus odpowiednia zmiana wartości określona przez kierunek (delta) i argument kontrolujący wielkość zmiany (wielkość naszego kroku). Argument kontrolujący rozmiar aktualizacji nazywany jest „szybkość uczenia się” i będziemy go reprezentować jako „alfa”.

współczynnik = współczynnik – (alfa * delta)

Następnie powtarzamy ten proces, aż sieć zbiegnie się wokół punktu najniższej straty, która powinna być bliska zeru.

Bardzo ważne jest, aby wybrać odpowiednią wartość szybkości uczenia się (alfa). Wybrany współczynnik uczenia się nie może być ani za mały, ani za duży. Pamiętaj, że w miarę zbliżania się do punktu najniższej straty nasze kroki muszą się zmniejszać, w przeciwnym razie przekroczymy prawdziwy punkt najniższej straty i znajdziemy się po drugiej stronie. Punkt najmniejszej straty jest mały i jeśli tempo zmian jest zbyt duże, błąd może ponownie wzrosnąć. Jeśli rozmiary kroków są zbyt duże, wydajność sieci będzie nadal oscylować wokół punktu najniższej straty, przekraczając go po jednej stronie, a potem po drugiej. Jeśli tak się stanie, sieć nigdy nie osiągnie prawdziwej optymalnej konfiguracji wagi.

Z drugiej strony, jeśli szybkość uczenia się jest zbyt mała, osiągnięcie optymalnych wag może zająć potencjalnie niezwykle dużo czasu.

Rodzaje opadania gradientowego

Teraz, gdy już rozumiemy, jak ogólnie działa opadanie gradientowe, przyjrzyjmy się niektórym z nich rodzaje opadania gradientowego.

Wsadowe opadanie gradientu: Ta forma opadania gradientu przebiega przez wszystkie próbki szkoleniowe przed aktualizacją współczynników. Ten typ opadania gradientowego będzie prawdopodobnie najbardziej wydajną obliczeniowo formą opadania gradientowego, ponieważ wagi są aktualizowane dopiero po przetworzeniu całej partii, co oznacza, że ​​łącznie jest mniej aktualizacji. Jeśli jednak zestaw danych zawiera dużą liczbę przykładów szkoleniowych, wsadowe opadanie gradientu może spowodować, że szkolenie zajmie dużo czasu.

Stochastyczne opadanie gradientu: w przypadku stochastycznego opadania gradientu przetwarzany jest tylko jeden przykład szkoleniowy dla każdej iteracji opadania gradientu i aktualizacji parametrów. Dzieje się tak dla każdego przykładu szkoleniowego. Ponieważ przed aktualizacją parametrów przetwarzany jest tylko jeden przykład szkoleniowy, zwykle osiąga on zbieżność szybciej niż wsadowe opadanie gradientu, ponieważ aktualizacje są wprowadzane wcześniej. Ponieważ jednak proces musi zostać przeprowadzony na każdym elemencie zbioru uczącego, jego ukończenie może zająć sporo czasu, jeśli zbiór danych jest duży, dlatego w razie potrzeby należy zastosować jeden z pozostałych typów opadania gradientowego.

Mini-Batch Gradient Descent: Mini-Batch Gradient Descent działa poprzez podzielenie całego zestawu danych szkoleniowych na podsekcje. Tworzy mniejsze mini-partie, które przepuszczane są przez sieć, a gdy mini-partie zostaną wykorzystane do obliczenia błędu, współczynniki są aktualizowane. Mini-wsadowe opadanie gradientu stanowi środek pomiędzy stochastycznym opadaniem gradientu a wsadowym opadaniem gradientu. Model jest aktualizowany częściej niż w przypadku Batch Gradient Descent, co oznacza nieco szybszą i solidniejszą zbieżność do optymalnych parametrów modelu. Jest także bardziej wydajny obliczeniowo niż stochastyczne opadanie gradientu

Bloger i programista specjalizujący się w Nauczanie maszynowe i głęboki Learning tematy. Daniel ma nadzieję pomóc innym wykorzystać moc sztucznej inteligencji dla dobra społecznego.