Johdanto
Kuvittele, että meillä on funktio $f(x)$ ja haluaisimme löytää sen minimin. Mitä sinä tekisit ?
Yksinkertaista eikö? Meidän tarvitsee vain ratkaista seuraava yhtälö:
$$f'(x) = 0$$
Asia on siinä, että $f'$:n kaavan löytäminen ei ole aina helppoa, koska ne ovat yleensä erittäin monimutkaisia varsinkin syväoppimisessa, jossa käsitellään monimutkaisia funktioita. Joten meidän on löydettävä toinen menetelmä, joka voi tarjota meille funktion minimin ilman, että tarvitsee löytää derivaatan $f'$ kaavaa.
Rakennataan intuitiota
Oletetaan, että meillä on funktio f, jolla on vastaava graafi:
Aloitetaan satunnaisesta pisteestä $x_{0}$. Tavoitteena on siirtää tätä pistettä ja tehdä siitä lähemmäs kohtaa $x*$ siten, että $f'($x*$) = 0$. Joten ongelma voidaan jakaa kahteen osaan:
-
Mihin suuntaan pistettä $x$ pitäisi siirtää? Vasemmalle vai oikealle ?
-
Kuinka paljon meidän pitäisi siirtää sitä?
Suunta
Rakennetaan intuitiota, jotta voimme vastata ensimmäiseen kysymykseen. Katso seuraava kohta:
Ota huomioon, että:
-
kun piste $x_{0}$ on optimaalisen pisteen $x*$ oikealla puolella, sen tangenttiviiva nousee.
-
kun piste $x_{0}$ on optimaalisen pisteen $x*$ oikealla puolella, sen tangenttiviiva laskee.
Viivan suunta määräytyy sen kaltevuuden merkillä:
-
Viiva nousee $\implikoi$, kaltevuus $a$ on positiivinen.
-
Viiva laskee $\implys$ kaltevuus $a$ on negatiivinen.
Huomaa, että: \
Funktion tangenttiviivan kaltevuus tietyssä pisteessä $x_{0}$ ei ole suurempi kuin derivaatta kyseisessä pisteessä $f'(x_{0})$:
$$ tangent(x*{0}): g(x) = f'(x*{0}).(x-x*{0}) + f(x*{0}) $$
Joten vastauksena kysymykseen "Mihin meidän pitäisi siirtää $x_{0}$ ?":
-
$f'(x_{0}) < 0$ $\implies$ $x_{0}$ oikealla $x*$ $\implies$ Meidän täytyy siirtää $x_{0}$ vasemmalle.
-
$f'(x_{0}) > 0$ $\implies$ $x_{0}$ $x*$ $\implies$ vasemmalla Meidän täytyy siirtää $x_{0}$ oikealle.
Askeleet
Nyt toiseen kysymykseen Kuinka paljon meidän pitäisi siirtää $x_{0}$ ?
Katso seuraavat esimerkit:
Voimme päätellä, että:
-
$x_{0}$ on lähellä $x*$ => Tangentin kaltevuus on pieni => $f'(x_{0})$ on pieni.
-
$x_{0}$ on kaukana kohteesta $x*$ => Tangentin kaltevuus on suuri => $f'(x_{0})$ on suuri.
Vastaamalla molempiin kysymyksiin päätimme, että vain pisteen $x_{0}$ derivaatan tunteminen voi antaa meille paljon käsitystä optimaalisen pisteen $x_{0}$ suunnasta ja etäisyydestä.
Gradienttilasku
Gradienttilasku on kahden edellisen kysymyksen vastausten muotoilu. Se on iteratiivinen optimointialgoritmi, joka arvioi funktion minimiarvon $x*$ alkaen satunnaisesta alkupisteestä $x_{0}$. Algoritmi esitetään seuraavasti:
$$ x*{n+1} = x*{n} - lr \times \frac{\mathrm{d} f}{\mathrm{d} x_{n}} $$
missä:
-
$ \frac{\mathrm{d} f}{\mathrm{d} x*{n}} $ ei ole enempää kuin $f$:n derivaatta pisteessä $x*{n}$.
-
$lr$ on positiivinen vakio, joka määrittää kuinka suuria askeleita tulee olemaan.
Huomaa, että:
-
$x_{n}$ on oikealla $x*$ => $\frac{\mathrm{d} f}{\mathrm{d} x_{n}} > 0 $ => $ x_{n+ 1} = x_{n} - positiivinen $ => $x_{n}$ siirtyy vasemmalle.
-
$x_{n}$ on $x*$ => $\frac{\mathrm{d} f}{\mathrm{d} x_{n}} vasemmalla puolella < 0$ => $ x*{n +1} = x*{n} + positiivinen $ => $x_{n}$ siirtyy oikealle.
-
$x_{n}$ lähellä $x*$ => $\frac{\mathrm{d} f}{\mathrm{d} x_{n}}$ lähellä $0$ => Pieni päivitys hintaan $x_{ n} $.
Tietovisa
-
Milloin gradienttilasku lopettaa iteroinnin:
-
Kun $x_{n}$ on tarpeeksi pieni.
-
Kun $x_{n}$ on lähellä $x_{0}$ .
-
Kun $\frac{\mathrm{d} f}{\mathrm{d} x_{n}} = 0 $. XXX
-
Kuinka valitsemme $x_{0}$:
-
Valitsemme sen satunnaisesti. XXX
-
Otamme sen naapurustossa $x{n}$.
– Se riippuu ongelmasta.
-
Miksi tarvitsemme kaltevuuslaskua:
-
Koska tietokoneet eivät ole tarpeeksi tehokkaita laskemaan johdannaisia.
-
Koska syväoppimismallien derivaattakaavoja on äärimmäisen vaikea löytää. XXX
-
Koska funktioilla on useampi kuin yksi paikallinen minimi.