Gradientní sestup

hluboké učení
matematika
gradientní sestup
Gradientní sestup cover image

Úvod

Představte si, že máme funkci f(x)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)=0f'(x) = 0

Jde o to, že najít vzorec ff' 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 ff'.

Vybudujme trochu intuice

Předpokládejme, že máme funkci f s odpovídajícím grafem:

Graph 1

Začněme náhodným bodem x0x_{0}. Cílem je posunout tento bod a přiblížit ho k xx* tak, aby f(f'(x*)=0) = 0. Problém lze tedy rozdělit na dvě části:

  • Jakým směrem bychom měli posunout bod xx? 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:

Graph 2

Graph 3

Všimněte si, že:

  • když je bod x0x_{0} napravo od optimálního bodu xx*, jeho tečna jde nahoru.

  • když je bod x0x_{0} napravo od optimálního bodu xx*, jeho tečna klesá.

Směr čáry je určen znaménkem jejího sklonu:

  • Čára stoupá \implikuje\implikuje sklon aa je kladný.

  • Čára klesá \implikuje\implikuje sklon aa je záporný.

Všimněte si, že: \

Směrnice tečné čáry funkce v určitém bodě x0x_{0} není větší než derivace v tomto bodě f(x0)f'(x_{0}):

tangent(x0):g(x)=f(x0).(xx0)+f(x0)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 x0x_{0}?":

  • f(x0)<0f'(x_{0}) < 0     \implies x0x_{0} vpravo od xx*     \implies Musíme posunout x0x_{0} doleva.

  • f(x0)>0f'(x_{0}) > 0     \implies x0x_{0} vlevo od xx*     \implies Musíme posunout x0x_{0} doprava.

Kroky

Nyní k druhé otázce: Kolik bychom měli přesunout x0x_{0}?

Podívejte se na následující příklady:

Graph 4

Graph 5

Můžeme dojít k závěru, že:

  • x0x_{0} se blíží xx* => Sklon tečny je malý => f(x0)f'(x_{0}) je malý.

  • x0x_{0} je vzdáleno od xx* => Sklon tečny je velký => f(x0)f'(x_{0}) je velký.

Odpovědí na obě otázky jsme dospěli k závěru, že pouze znalost derivace v bodě x0x_{0} nám může poskytnout mnoho informací o směru a vzdálenosti optimálního bodu x0x_{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 xx* funkce počínaje náhodným počátečním bodem x0x_{0}. Algoritmus je uveden následovně:

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

kde:

  • dfdxn\frac{\mathrm{d} f}{\mathrm{d} x*{n}} není více než derivace ff v bodě xnx*{n}.

  • lrlr je kladná konstanta, která určuje, jak velké kroky budou.

Všimněte si, že:

  • xnx_{n} je napravo od xx* => dfdxn>0\frac{\mathrm{d} f}{\mathrm{d} x_{n}} > 0 => xn+1=xnkladneˊx_{n+ 1} = x_{n} - kladné => xnx_{n} se posune doleva.

  • xnx_{n} je vlevo od xx* => dfdxn<0\frac{\mathrm{d} f}{\mathrm{d} x_{n}} < 0 => xn+1=xn+kladneˊx*{n +1} = x*{n} + kladné => xnx_{n} se posune doprava.

  • xnx_{n} blízko xx* => dfdxn\frac{\mathrm{d} f}{\mathrm{d} x_{n}} blízko 00 => Malá aktualizace na xnx_{ n}.

Kvíz

  • Kdy se klesání gradientu přestane opakovat:

  • Když je xnx_{n} dostatečně malý.

  • Když se xnx_{n} blíží x0x_{0} .

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

– Jak vybereme x0x_{0}:

  • Vybíráme to náhodně. XXX

  • Bereme to v okolí xnx{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.


Career Services background pattern

Kariérní služby

Contact Section background image

Zůstaňme v kontaktu

Code Labs Academy © 2025 Všechna práva vyhrazena.