Skip to main content

Zejście gradientowe

Zaktualizowano: September 23, 20263 min czytania


Wstęp

Wyobraźmy sobie, że mamy funkcję f(x)f(x) i chcielibyśmy znaleźć jej minimum. Co byś zrobił ?

Proste, prawda? Musimy tylko rozwiązać następujące równanie:

f′(x)=0f'(x) = 0

Rzecz w tym, że znalezienie wzorów na f′f' nie zawsze jest łatwe, ponieważ są one niezwykle skomplikowane, szczególnie w głębokim uczeniu się, gdzie mamy do czynienia ze złożonymi funkcjami. Musimy więc znaleźć inną metodę, która zapewni nam minimum funkcji bez konieczności znajdowania wzoru na pochodną f′f'.

Zbudujmy trochę intuicji

Załóżmy, że mamy funkcję f z odpowiednim wykresem:

Graph 1

Zacznijmy od losowego punktu x0x_{0}. Celem jest przesunięcie tego punktu i przybliżenie go coraz bardziej do x∗x* tak, aby f′(f'(x*)=0) = 0. Zatem problem można podzielić na dwie części:

  • W którą stronę powinniśmy przesunąć punkt xx? Lewo czy prawo ?

  • O ile powinniśmy to przesunąć?

Kierunek

Aby odpowiedzieć na pierwsze pytanie, zbudujmy trochę intuicji. Spójrz na następujący punkt:

Graph 2

Graph 3

Pamiętaj, że:

  • gdy punkt x0x_{0} znajduje się na prawo od optymalnego punktu x∗x*, jego styczna podnosi się.

  • gdy punkt x0x_{0} znajduje się na prawo od optymalnego punktu x∗x*, jego linia styczna biegnie w dół.

Kierunek linii wyznacza znak jej nachylenia:

  • Linia idzie w górę \implikuje\implikuje, a nachylenie aa jest dodatnie.

  • Linia opadająca \implikuje\implikuje, a nachylenie aa jest ujemne.

Zauważ, że: \

Nachylenie stycznej funkcji w pewnym punkcie x0x_{0} nie jest większe niż pochodna w tym punkcie f′(x0)f'(x_{0}):

tangent(x∗0):g(x)=f′(x∗0).(x−x∗0)+f(x∗0)tangent(x*{0}): g(x) = f'(x*{0}).(x-x*{0}) + f(x*{0})

Zatem w odpowiedzi na pytanie „Gdzie powinniśmy przenieść x0x_{0} ?”:

  • f′(x0)<0f'(x_{0}) < 0   ⟹  \implies x0x_{0} na prawo od x∗x*   ⟹  \implies Musimy przesunąć x0x_{0} w lewo.

  • f′(x0)>0f'(x_{0}) > 0   ⟹  \implies x0x_{0} na lewo od x∗x*   ⟹  \implies Musimy przesunąć x0x_{0} w prawo.

Kroki

A teraz drugie pytanie: Ile powinniśmy przenieść x0x_{0} ?

Przyjrzyj się następującym przykładom:

Graph 4

Graph 5

Możemy stwierdzić, że:

  • x0x_{0} jest bliskie x∗x* => Nachylenie stycznej jest małe => f′(x0)f'(x_{0}) jest małe.

  • x0x_{0} jest odległe od x∗x* => Nachylenie stycznej jest duże => f′(x0)f'(x_{0}) jest duże.

Odpowiadając na oba pytania, doszliśmy do wniosku, że dopiero znajomość pochodnej w punkcie x0x_{0} może dać nam wiele informacji na temat kierunku i odległości optymalnego punktu x0x_{0}.

Zejście gradientowe

Zejście gradientowe to sformułowanie odpowiedzi na dwa poprzednie pytania. Jest to iteracyjny algorytm optymalizacji, który przybliża minimum x∗x* funkcji, zaczynając od losowego punktu początkowego x0x_{0}. Algorytm jest przedstawiony w następujący sposób:

x∗n+1=x∗n−lr×dfdx_nx*{n+1} = x*{n} - lr \times \frac{\mathrm{d} f}{\mathrm{d} x\_{n}}

Gdzie:

  • dfdx∗n\frac{\mathrm{d} f}{\mathrm{d} x*{n}} jest niczym więcej niż pochodną ff w punkcie x∗nx*{n}.

  • lrlr to dodatnia stała, która określa, jak duże będą kroki.

Zauważ, że:

  • xnx_{n} znajduje się na prawo od x∗x* => dfdxn>0\frac{\mathrm{d} f}{\mathrm{d} x_{n}} > 0 => xn+1=xn−dodatnix_{n+ 1} = x_{n} - dodatni => xnx_{n} przesuwa się w lewo.

  • xnx_{n} znajduje się na lewo od x∗x* => dfdxn<0\frac{\mathrm{d} f}{\mathrm{d} x_{n}} < 0 => x∗n+1=x∗n+dodatnix*{n +1} = x*{n} + dodatni => xnx_{n} przesuwa się w prawo.

  • xnx_{n} blisko x∗x* => dfdxn\frac{\mathrm{d} f}{\mathrm{d} x_{n}} blisko 00 => Mała aktualizacja do xnx_{ n}.

Quiz

  • Kiedy opadanie gradientu przestaje iterować:

  • Kiedy xnx_{n} jest wystarczająco małe.

  • Kiedy xnx_{n} jest bliskie x0x_{0} .

  • Gdy dfdx_n=0\frac{\mathrm{d} f}{\mathrm{d} x\_{n}} = 0 . XXX

  • Jak wybrać x0x_{0}:

  • Wybieramy losowo. XXX

  • Przyjmujemy to w okolicach xnx{n}.

  • To zależy od problemu.

  • Dlaczego potrzebujemy zejścia gradientowego:

  • Ponieważ komputery nie są wystarczająco mocne, aby obliczać instrumenty pochodne.

  • Ponieważ niezwykle trudno jest znaleźć wzory na pochodne modeli głębokiego uczenia się. XXX

  • Ponieważ funkcje mają więcej niż jedno minimum lokalne.

Rozwijaj kompetencje IT online z Code Labs Academy

Rozwijaj kompetencje IT online z Code Labs Academy

Dołącz do społeczności osób uczących się z Polski. Ucz się praktycznie, buduj portfolio i wzmacniaj umiejętności, które realnie przydają się w pracy, niezależnie od tego, czy celem jest awans, zmiana roli czy upskilling.