Introducere
Imaginați-vă că avem o funcție $f(x)$ și am dori să-i găsim minimul. Ce ai face ?
Simplu nu? Trebuie doar să rezolvăm următoarea ecuație:
$$f'(x) = 0$$
Chestia este că găsirea formulei lui $f'$ nu este întotdeauna ușoară, deoarece acestea tind să fie extrem de complicate, mai ales în deep learning, unde ne ocupăm de funcții complexe. Deci trebuie să găsim o altă metodă care să ne ofere minimul unei funcții fără a fi nevoie să găsim formula derivatei $f'$.
Să construim ceva intuiție
Să presupunem că avem o funcție f cu graficul corespunzător:
Să începem cu un punct aleatoriu $x_{0}$. Scopul este de a muta acest punct și de a-l apropia din ce în ce mai mult de $x*$ astfel încât $f'($x*$) = 0$. Deci problema poate fi împărțită în două părți:
-
În ce direcție ar trebui să mutăm punctul $x$ ? Stanga sau dreapta ?
-
Cât de mult ar trebui să-l mutăm?
Directia
Să construim puțină intuiție pentru a răspunde la prima întrebare. Aruncă o privire la următorul punct:
Rețineți că:
-
când punctul $x_{0}$ este la dreapta punctului optim $x*$ linia sa tangentă urcă.
-
când punctul $x_{0}$ este la dreapta punctului optim $x*$ linia sa tangentă coboară.
Direcția unei linii este determinată de semnul pantei sale:
-
O linie urcă $\implică$ că panta $a$ este pozitivă.
-
O linie coboară $\implică$ că panta $a$ este negativă.
Rețineți că: \
Panta dreptei tangente a unei funcții într-un anumit punct $x_{0}$ nu este mai mare decât derivata din acel punct $f'(x_{0})$:
$$ tangent(x*{0}): g(x) = f'(x*{0}).(x-x*{0}) + f(x*{0}) $$
Deci, ca răspuns la întrebarea „Unde ar trebui să mutăm $x_{0}$ ?”:
-
$f'(x_{0}) < 0$ $\implies$ $x_{0}$ la dreapta lui $x*$ $\implies$ Trebuie să mutăm $x_{0}$ la stânga.
-
$f'(x_{0}) > 0$ $\implies$ $x_{0}$ la stânga lui $x*$ $\implies$ Trebuie să mutăm $x_{0}$ la dreapta.
Pașii
Acum, pentru a doua întrebare, Cât ar trebui să mutăm $x_{0}$ ?
Aruncă o privire la următoarele exemple:
Putem concluziona că:
-
$x_{0}$ este aproape de $x*$ => Panta tangentei este mică => $f'(x_{0})$ este mică.
-
$x_{0}$ este distant de $x*$ => Panta tangentei este mare => $f'(x_{0})$ este mare.
Răspunzând la ambele întrebări, am ajuns la concluzia că numai cunoașterea derivatei în punctul $x_{0}$ ne poate oferi o mulțime de informații despre direcția și distanța punctului optim $x_{0}$.
Coborâre în gradient
Coborârea în gradient este formularea răspunsurilor la cele două întrebări anterioare. Este un algoritm iterativ de optimizare care aproximează minimul $x*$ al funcției pornind de la un punct inițial aleatoriu $x_{0}$. Algoritmul este prezentat după cum urmează:
$$ x*{n+1} = x*{n} - lr \times \frac{\mathrm{d} f}{\mathrm{d} x_{n}} $$
Unde:
-
$ \frac{\mathrm{d} f}{\mathrm{d} x*{n}} $ nu este mai mult decât derivata lui $f$ în punctul $x*{n}$.
-
$lr$ este o constantă pozitivă care determină cât de mari vor fi pașii.
Observa asta:
-
$x_{n}$ este la dreapta lui $x*$ => $\frac{\mathrm{d} f}{\mathrm{d} x_{n}} > 0 $ => $ x_{n+ 1} = x_{n} - pozitiv $ => $x_{n}$ se deplasează la stânga.
-
$x_{n}$ este la stânga lui $x*$ => $\frac{\mathrm{d} f}{\mathrm{d} x_{n}} < 0$ => $ x*{n +1} = x*{n} + $ pozitiv => $x_{n}$ se deplasează la dreapta.
-
$x_{n}$ aproape de $x*$ => $\frac{\mathrm{d} f}{\mathrm{d} x_{n}}$ aproape de $0$ => Mică actualizare la $x_{ n}$.
Test
-
Când se oprește coborârea în gradient:
-
Când $x_{n}$ este suficient de mic.
-
Când $x_{n}$ este aproape de $x_{0}$ .
-
Când $\frac{\mathrm{d} f}{\mathrm{d} x_{n}} = 0 $. XXX
-
Cum alegem $x_{0}$:
-
O alegem la întâmplare. XXX
-
O luăm în vecinătatea $x{n}$.
-
Depinde de problemă.
-
De ce avem nevoie de coborâre în gradient:
-
Pentru că calculatoarele nu sunt suficient de puternice pentru a calcula derivate.
-
Pentru că este extrem de greu să găsești formulele derivate ale modelelor de învățare profundă. XXX
-
Pentru că funcțiile au mai mult de un minim local.