Gradientni spust

Posodobljeno na September 03, 2024 3 minute preberite


Uvod

Predstavljajte si, da imamo funkcijo f(x)f(x) in bi radi našli njen minimum. Kaj bi naredil?

Preprosto kajne? Rešiti moramo samo naslednjo enačbo:

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

Stvar je v tem, da iskanje formule ff' ni vedno enostavno, saj so ponavadi izjemno zapletene, zlasti pri globokem učenju, kjer imamo opravka s kompleksnimi funkcijami. Zato moramo najti drugo metodo, ki nam lahko zagotovi minimum funkcije, ne da bi bilo treba najti formulo odvoda ff'.

Razvijmo nekaj intuicije

Recimo, da imamo funkcijo f z ustreznim grafom:

Graph 1

Začnimo z naključno točko x0x_{0}. Cilj je premakniti to točko in jo vse bolj približati xx*, tako da je f(f'(x*)=0) = 0. Torej lahko problem razdelimo na dva dela:

  • V katero smer naj premaknemo točko xx? Levo ali desno ?

  • Koliko naj ga premaknemo?

Smer

Razvijmo nekaj intuicije, da bi odgovorili na prvo vprašanje. Oglejte si naslednjo točko:

Graph 2

Graph 3

Upoštevajte to:

  • ko je točka x0x_{0} desno od optimalne točke xx*, gre njena tangenta navzgor.

  • ko je točka x0x_{0} desno od optimalne točke xx*, gre njena tangenta navzdol.

Smer črte je določena z znakom njenega naklona:

  • Črta gre navzgor     \implies, da je naklon aa pozitiven.

  • Premica gre navzdol     \implies, da je naklon aa negativen.

Upoštevajte, da: \

Naklon tangente funkcije v določeni točki x0x_{0} ni večji od odvoda v tej točki 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})

Kot odgovor na vprašanje "Kam naj premaknemo x0x_{0}?":

  • f(x0)<0f'(x_{0}) < 0     \implies x0x_{0} desno od xx*     \implies x0x_{0} moramo premakniti v levo.

  • f(x0)>0f'(x_{0}) > 0     \implies x0x_{0} levo od xx*     \implies x0x_{0} moramo premakniti v desno.

Koraki

Zdaj pa drugo vprašanje, Koliko naj premaknemo x0x_{0}?

Oglejte si naslednje primere:

Graph 4

Graph 5

Lahko sklepamo, da:

  • x0x_{0} je blizu xx* => Naklon tangente je majhen => f(x0)f'(x_{0}) je majhen.

  • x0x_{0} je oddaljen od xx* => Naklon tangente je velik => f(x0)f'(x_{0}) je velik.

Z odgovorom na obe vprašanji smo ugotovili, da nam le poznavanje odvoda v točki x0x_{0} lahko da veliko vpogleda v smer in oddaljenost optimalne točke x0x_{0}.

Gradientni spust

Gradientni spust je formulacija odgovorov na prejšnji dve vprašanji. To je optimizacijski iterativni algoritem, ki približa najmanj xx* funkcije, začenši z naključno začetno točko x0x_{0}. Algoritem je naveden kot sledi:

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

kje:

  • dfdxn\frac{\mathrm{d} f}{\mathrm{d} x*{n}} ni več kot odvod ff v točki xnx*{n}.

  • lrlr je pozitivna konstanta, ki določa, kako veliki bodo koraki.

Upoštevajte, da:

  • xnx_{n} je desno od xx* => dfdxn>0\frac{\mathrm{d} f}{\mathrm{d} x_{n}} > 0 => xn+1=xnpozitivnix_{n+ 1} = x_{n} - pozitivni => xnx_{n} se premakne v levo.

  • xnx_{n} je levo od xx* => dfdxn<0\frac{\mathrm{d} f}{\mathrm{d} x_{n}} < 0 => xn+1=xn+pozitivnox*{n +1} = x*{n} + pozitivno => xnx_{n} se premakne v desno.

  • xnx_{n} blizu xx* => dfdxn\frac{\mathrm{d} f}{\mathrm{d} x_{n}} blizu 00 => Majhna posodobitev na xnx_{ n}.

Kviz

  • Kdaj se gradientni spust preneha ponavljati:

  • Ko je xnx_{n} dovolj majhen.

  • Ko je xnx_{n} blizu x0x_{0}.

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

  • Kako izberemo x0x_{0}:

  • Izberemo ga naključno. XXX

  • Vzamemo ga v bližini xnx{n}.

  • Odvisno od problema.

  • Zakaj potrebujemo gradientni spust:

  • Ker računalniki niso dovolj zmogljivi za izračun derivatov.

  • Ker je izredno težko najti formule izpeljank modelov globokega učenja. XXX

  • Ker imajo funkcije več kot en lokalni minimum.