Gradientní sestup
Aktualizováno na September 03, 2024 3 minuty čte

Úvod
Představte si, že máme funkci $f(x)$ a rádi bychom našli její minimum. Co bys dělal ?
Jednoduché že? Potřebujeme vyřešit pouze následující rovnici:
$$f’(x) = 0$$
Jde o to, že najít vzorec $f’$ není vždy snadné, protože bývají extrémně komplikované, zejména v hlubokém učení, kde se zabýváme komplexními funkcemi. Musíme tedy najít jinou metodu, která nám poskytne minimum funkce, aniž bychom museli hledat vzorec derivace $f’$.
Vybudujme trochu intuice
Předpokládejme, že máme funkci f s odpovídajícím grafem:
Začněme náhodným bodem $x_{0}$. Cílem je posunout tento bod a přiblížit ho k $x*$ tak, aby $f’($x*$) = 0$. Problém lze tedy rozdělit na dvě části:
-
Jakým směrem bychom měli posunout bod $x$? Vlevo nebo vpravo ?
-
Jak moc bychom to měli posunout?
Směr
Vybudujme trochu intuice, abychom odpověděli na první otázku. Podívejte se na následující bod:
Všimněte si, že:
-
když je bod $x_{0}$ napravo od optimálního bodu $x*$, jeho tečna jde nahoru.
-
když je bod $x_{0}$ napravo od optimálního bodu $x*$, jeho tečna klesá.
Směr čáry je určen znaménkem jejího sklonu:
-
Čára stoupá $\implikuje$ sklon $a$ je kladný.
-
Čára klesá $\implikuje$ sklon $a$ je záporný.
Všimněte si, že: \
Směrnice tečné čáry funkce v určitém bodě $x_{0}$ není větší než derivace v tomto bodě $f’(x_{0})$:
$$ tangent(x*{0}): g(x) = f’(x*{0}).(x-x*{0}) + f(x*{0}) $$
Takže jako odpověď na otázku “Kam bychom se měli přesunout $x_{0}$?”:
-
$f’(x_{0}) < 0$ $\implies$ $x_{0}$ vpravo od $x*$ $\implies$ Musíme posunout $x_{0}$ doleva.
-
$f’(x_{0}) > 0$ $\implies$ $x_{0}$ vlevo od $x*$ $\implies$ Musíme posunout $x_{0}$ doprava.
Kroky
Nyní k druhé otázce: Kolik bychom měli přesunout $x_{0}$?
Podívejte se na následující příklady:
Můžeme dojít k závěru, že:
-
$x_{0}$ se blíží $x*$ => Sklon tečny je malý => $f’(x_{0})$ je malý.
-
$x_{0}$ je vzdáleno od $x*$ => Sklon tečny je velký => $f’(x_{0})$ je velký.
Odpovědí na obě otázky jsme dospěli k závěru, že pouze znalost derivace v bodě $x_{0}$ nám může poskytnout mnoho informací o směru a vzdálenosti optimálního bodu $x_{0}$.
Gradientní klesání
Gradient sestup je formulací odpovědí na předchozí dvě otázky. Je to optimalizační iterační algoritmus, který aproximuje minimum $x*$ funkce počínaje náhodným počátečním bodem $x_{0}$. Algoritmus je uveden následovně:
$$ x*{n+1} = x*{n} - lr \times \frac{\mathrm{d} f}{\mathrm{d} x_{n}} $$
kde:
-
$ \frac{\mathrm{d} f}{\mathrm{d} x*{n}} $ není více než derivace $f$ v bodě $x*{n}$.
-
$lr$ je kladná konstanta, která určuje, jak velké kroky budou.
Všimněte si, že:
-
$x_{n}$ je napravo od $x*$ => $\frac{\mathrm{d} f}{\mathrm{d} x_{n}} > 0 $ => $ x_{n+ 1} = x_{n} - kladné $ => $x_{n}$ se posune doleva.
-
$x_{n}$ je vlevo od $x*$ => $\frac{\mathrm{d} f}{\mathrm{d} x_{n}} < 0$ => $ x*{n +1} = x*{n} + kladné $ => $x_{n}$ se posune doprava.
-
$x_{n}$ blízko $x*$ => $\frac{\mathrm{d} f}{\mathrm{d} x_{n}}$ blízko $0$ => Malá aktualizace na $x_{ n}$.
Kvíz
-
Kdy se klesání gradientu přestane opakovat:
-
Když je $x_{n}$ dostatečně malý.
-
Když se $x_{n}$ blíží $x_{0}$ .
-
Když $\frac{\mathrm{d} f}{\mathrm{d} x_{n}} = 0 $. XXX
– Jak vybereme $x_{0}$:
-
Vybíráme to náhodně. XXX
-
Bereme to v okolí $x{n}$.
-
Záleží na problému.
-
Proč potřebujeme gradientní sestup:
-
Protože počítače nejsou dostatečně výkonné na výpočet derivací.
-
Protože je extrémně těžké najít odvozené vzorce modelů hlubokého učení. XXX
-
Protože funkce mají více než jedno lokální minimum.