Skip to main content

Gradient nedstigning

Oppdatert den September 03, 2024Lesetid: 3 minutter


Introduksjon

Tenk deg at vi har en funksjon f(x)f(x) og vi vil gjerne finne dens minimum. Hva ville du gjort ?

Enkelt ikke sant? Vi trenger bare å løse følgende ligning:

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

Saken er at det ikke alltid er lett å finne formelen f′f', da de har en tendens til å være ekstremt kompliserte, spesielt i dyp læring hvor vi arbeider med komplekse funksjoner. Så vi må finne en annen metode som kan gi oss minimum av en funksjon uten å måtte finne formelen til den deriverte f′f'.

La oss bygge litt intuisjon

La oss anta at vi har en funksjon f med den tilsvarende grafen:

Graph 1

La oss starte med et tilfeldig punkt x0x_{0}. Målet er å flytte dette punktet og gjøre det nærmere og nærmere x∗x* slik at f′(f'(x*)=0) = 0. Så problemet kan deles i to deler:

  • I hvilken retning skal vi flytte punktet xx? Venstre eller høyre ?

  • Hvor mye skal vi flytte den?

Retningen

La oss bygge litt intuisjon for å svare på det første spørsmålet. Ta en titt på følgende punkt:

Graph 2

Graph 3

Noter det:

  • når punktet x0x_{0} er til høyre for det optimale punktet x∗x* går tangentlinjen opp.

  • når punktet x0x_{0} er til høyre for det optimale punktet x∗x* går tangentlinjen ned.

Retningen til en linje bestemmes av tegnet på skråningen:

  • En linje går opp   ⟹  \implies helningen aa er positiv.

  • En linje går ned   ⟹  \implies helningen aa er negativ.

Merk at: \

Helningen til tangentlinjen til en funksjon i et bestemt punkt x0x_{0} er ikke mer enn den deriverte i det punktet f′(x0)f'(x_{0}):

tangent(x∗0):g(x)=f′(x∗0).(x−x∗0)+f(x∗0)tangent(x*{0}): g(x) = f'(x*{0}).(x-x*{0}) + f(x*{0})

Så som et svar på spørsmålet "Hvor skal vi flytte x0x_{0}?":

  • f′(x0)<0f'(x_{0}) < 0   ⟹  \implies x0x_{0} til høyre for x∗x*   ⟹  \implies Vi må flytte x0x_{0} til venstre.

  • f′(x0)>0f'(x_{0}) > 0   ⟹  \implies x0x_{0} til venstre for x∗x*   ⟹  \implies Vi må flytte x0x_{0} til høyre.

Stegene

Nå til det andre spørsmålet, Hvor mye bør vi flytte x0x_{0}?

Ta en titt på følgende eksempler:

Graph 4

Graph 5

Vi kan konkludere med at:

  • x0x_{0} er nær x∗x* => Helningen til tangenten er liten => f′(x0)f'(x_{0}) er liten.

  • x0x_{0} er langt fra x∗x* => Hellingen til tangenten er stor => f′(x0)f'(x_{0}) er stor.

Ved å svare på begge spørsmålene konkluderte vi med at kun kunnskapen om den deriverte i punktet x0x_{0} kan gi oss mye innsikt om retningen og avstanden til det optimale punktet x0x_{0}.

Gradientnedstigning

Gradientnedstigning er formuleringen av svarene på de to foregående spørsmålene. Det er en iterativ optimaliseringsalgoritme som tilnærmer minimum x∗x* funksjon fra et tilfeldig startpunkt x0x_{0}. Algoritmen er angitt som følger:

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

hvor:

  • dfdx∗n\frac{\mathrm{d} f}{\mathrm{d} x*{n}} er ikke mer enn den deriverte av ff i punktet x∗nx*{n}.

  • lrlr er en positiv konstant som bestemmer hvor store trinnene skal være.

Legg merke til det:

  • xnx_{n} er til høyre for x∗x* => dfdxn>0\frac{\mathrm{d} f}{\mathrm{d} x_{n}} > 0 => xn+1=xn−positivx_{n+ 1} = x_{n} - positiv => xnx_{n} flyttes til venstre.

  • xnx_{n} er til venstre for x∗x* => dfdxn<0\frac{\mathrm{d} f}{\mathrm{d} x_{n}} < 0 => x∗n+1=x∗n+positivex*{n +1} = x*{n} + positive => xnx_{n} flyttes til høyre.

  • xnx_{n} nær x∗x* => dfdxn\frac{\mathrm{d} f}{\mathrm{d} x_{n}} nær 00 => Liten oppdatering til xnx_{ n}.

Quiz

  • Når slutter gradientnedstigning å iterere:

  • Når xnx_{n} er liten nok.

  • Når xnx_{n} er nær x0x_{0} .

  • Når dfdx_n=0\frac{\mathrm{d} f}{\mathrm{d} x\_{n}} = 0 . XXX

– Hvordan velger vi x0x_{0}:

– Vi plukker det tilfeldig. XXX

  • Vi tar det i nærheten av xnx{n}.

– Det kommer an på problemet.

  • Hvorfor trenger vi gradientnedstigning:

– Fordi datamaskiner ikke er kraftige nok til å beregne derivater.

  • Fordi det er ekstremt vanskelig å finne derivatformlene til dyplæringsmodeller. XXX

– Fordi funksjoner har mer enn ett lokalt minimum.

Lær tekniske ferdigheter på nett med Code Labs Academy

Lær tekniske ferdigheter på nett med Code Labs Academy

Bli en del av vårt støttende fellesskap, lås opp potensialet ditt og start på en givende karrierevei.