AI:n perusteet

Mikä on Gradient Descent?

mm
Lisää Unite.AI suosikkilähteisiisi Google-palvelussa

Mikä on Gradient Descent?

Jos olet lukenut siitä, miten neuroverkkomallit koulutetaan, olet varmasti törmännyt termeihin “gradient descent” aikaisemmin. Gradient descent on ensisijainen menetelmä neuroverkon suorituskyvyn optimoimiseen ja vähentämiseen verkon virhe-/menetysnopeutta. Kuitenkin gradient descent voi olla hieman hankala ymmärtää niille, jotka ovat uusia koneoppimisessa, ja tämä artikkeli pyrkii antamaan sinulle kohtuullisen intuitio siitä, miten gradient descent toimii.

Gradient descent on optimointialgoritmi. Se käytetään parantamaan neuroverkon suorituskykyä tekemällä säätöjä verkon parametreihin siten, että ero verkon ennusteiden ja todellisten/odotettujen arvojen välillä (jota kutsutaan virheeksi) on mahdollisimman pieni. Gradient descent ottaa parametrejen alkuperäiset arvot ja käyttää niiden muuttamiseen laskelmia, jotka perustuvat differentiaali- ja integraalilaskentaan, kohti arvoja, jotka tekevät verkon mahdollisimman tarkan. Et tarvitse tietää paljon differentiaali- ja integraalilaskentaa ymmärtääksesi, miten gradient descent toimii, mutta sinun on ymmärrettävä, mitä gradientit ovat.

Mitä ovat Gradientit?

Oletetaan, että on olemassa graafi, joka edustaa virhettä, jonka neuroverkko tekee. Graafin alareuna edustaa pisteitä, joissa virhe on pienin, kun taas graafin yläreuna edustaa pisteitä, joissa virhe on suurin. Haluamme siirtyä graafin yläosasta alaosaan. Gradientti on vain tapa mittailla virheen ja neuroverkon painojen välistä suhdetta. Suhteen virheen ja painojen välillä voidaan piirtää kuvaamalla sitä kulmana, jossa virheen suuruus on suoraan verrannollinen painojen suuruuteen. Kulman jyrkkyyttä edustava gradientti kertoo, kuinka nopeasti malli oppii.

Steep kulma tarkoittaa, että virheen vähentäminen on suurta ja malli oppii nopeasti, kun taas, jos kulma on nolla, malli on tasaisella alueella eikä opi. Voimme siirtyä kulman alaspäin vähentämällä virhettä laskemalla gradientin, joka on liikkeen suunta (muutos verkon parametreissa) mallille.

Siirrytään metaforaa hieman ja kuvitellaan sarja mäkiä ja laaksoja. Haluamme päästä laakson pohjalle ja löytää se osa laaksosta, joka edustaa pienintä virhettä. Kun aloitamme mäen huipulla, voimme ottaa suuria askelia mäen alas ja olla varmoja, että olemme menossa kohti alimman pisteen laaksossa.

Kuitenkin, kun lähennymme laakson alimman pistettä, askelten on oltava pienempiä, tai muuten voimme ylittää todellisen alimman pisteen ja päätyä toiselle puolelle. Samoin, kun säädämme verkon painoja, säätöjen on oltava pienempiä ajan myötä, tai muuten virhe voi kasvaa jälleen. Gradientti on vektori/ohje, joka kertoo, mihin suuntaan liikuta ja kuinka suuria askelia ottaa.

Nyt kun tiedämme, mitä gradientit ovat, voimme tutkia, miten gradientti lasketaan.

Gradientin laskeminen & Gradient Descent

Gradient descent aloittaa pisteestä, jossa virhe on suurin, ja useiden iteraatioiden jälkeen se ottaa askelia suuntaan, jossa virhe on pienin, pyrkien löytämään optimaalisen painojen konfiguraation. Kuva: Роман Сузи via Wikimedia Commons, CCY BY SA 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)

Jotta voimme suorittaa gradient descentin, on laskettava gradientit ensin. Laskemalla gradientin tarvitaan tietää menetys-/häviöfunktiosta. Käytämme häviöfunktiota määrittämään derivaatan. Differentiaali- ja integraalilaskennassa derivaatta viittaa funktion kulmaan tietyssä pisteessä, joten laskemme vain kulman, joka perustuu häviöfunktiota. Määritämme häviön suorittamalla kertoimet häviöfunktiota. Jos edustamme häviöfunktiota “f”:na, voidaan sanoa, että häviön laskemiseen käytettävä kaava on seuraava (suoritamme vain kertoimet valitsemalla häviöfunktiolla):

Häviö = f(kertoimet)

Sitten laskemme derivaatan eli määritämme kulman. Häviön derivaatan saaminen kertoo, mihin suuntaan on alaspäin kulkeva suunta, antamalla sopivan merkin kertoimien säätämiseen. Edustamme sopivaa suuntaa “delta”:na.

delta = derivaatta_funktiosta(häviö)

Olemme nyt määrittäneet, mihin suuntaan on alaspäin kulkeva suunta. Tämä tarkoittaa, että voimme päivittää kertoimet verkon parametreihin ja toivomme, että häviö vähenee. Päivitämme kertoimet aiempien kertoimien ja sopivan muutoksen arvon (askelen koon) välillä, joka määräytyy suunnan (delta) ja argumentin avulla, joka määrää muutoksen suuruuden (askelen koon). Argumentti, joka määrää päivityksen suuruuden, on “oppiopparametri”, jota edustamme “alpha”:na.

kertoimet = kertoimet – (alpha * delta)

Toistamme tämän prosessin, kunnes verkko on konvergoitunut pisteeseen, jossa häviö on lähes nolla.

On erittäin tärkeää valita oikea arvo oppiopparametrille (alpha). Valittu oppiopparametri ei saa olla liian pieni eikä liian suuri. Muistamme, että kun lähennymme pisteeseen, jossa häviö on pienin, askelten on oltava pienempiä, tai muuten voimme ylittää todellisen alimman pisteen ja päätyä toiselle puolelle. Piste, jossa häviö on pienin, on pieni, ja jos muutoksen suuruus on liian suuri, virhe voi kasvaa jälleen. Jos askelkoot ovat liian suuria, verkon suorituskyky voi jatkuvasti heittää pisteestä toiseen, ylittäen sen toisella puolella ja sitten toisella. Jos tämä tapahtuu, verkko ei koskaan konvergoi todelliseen optimaaliseen painojen konfiguraatioon.

Toisaalta, jos oppiopparametri on liian pieni, verkko voi kestää erittäin kauan konvergoitua optimaalisiin painoihin.

Gradient Descentin tyypit

Nyt kun ymmärrämme, miten gradient descent toimii yleisesti, tarkastellaan eri tyyppejä gradient descentistä.

Batch Gradient Descent: Tämä gradient descentin muoto suorittaa koko koulutusaineiston ennen kuin päivittää kertoimet. Tämä tyyppi gradient descentistä on todennäköisesti laskennallisesti tehokkain, koska painot päivitetään vain kerran koko erän käsittelyksen jälkeen, mikä tarkoittaa vähemmän päivityksiä. Kuitenkin, jos koulutusaineistossa on suuri määrä koulutusehkäisyyksiä, batch gradient descent voi tehdä koulutuksesta pitkän.

Stochastic Gradient Descent: Stochastic Gradient Descentissä vain yksi koulutusehkäisy käsitellään jokaisessa gradient descentin iteraatiossa ja parametrin päivityksessä. Tämä toistetaan jokaiselle koulutusehkäisylle. Koska vain yksi koulutusehkäisy käsitellään ennen kuin parametreja päivitetään, se konvergoi nopeammin kuin batch gradient descent, koska päivitykset tehdään aikaisemmin. Kuitenkin, koska prosessi on suoritettava koko koulutusaineistolle, se voi kestää pitkään, jos aineisto on suuri, joten toisen gradient descentin tyyppi on suositeltavaa.

Mini-Batch Gradient Descent: Mini-Batch Gradient Descent toimii jakamalla koko koulutusaineiston osiin. Se luo pienempiä mini-eriä, jotka suoritetaan verkon läpi, ja kun mini-erä on käytetty virheen laskemiseen, kertoimet päivitetään. Mini-Batch Gradient Descent löytää keskitien stochastic gradient descentin ja batch gradient descentin välillä. Malli päivitetään useammin kuin batch gradient descentissä, mikä tarkoittaa hieman nopeampaa ja vakaampaa konvergentia mallin optimaalisiin parametreihin. Se on myös laskennallisesti tehokkaampi kuin stochastic gradient descent

Blogger ja ohjelmoija, jolla on erityisalat Machine Learning ja Deep Learning -aiheissa. Daniel toivoo pystyvänsä auttamaan muita käyttämään tekoälyn voimaa sosiaaliseen hyvään.