stub Kas yra gradiento nusileidimas? - Vienykitės.AI
Susisiekti su mumis
AI meistriškumo klasė:

AI 101 m

Kas yra gradiento nusileidimas?

mm
Atnaujinta on

Kas yra gradiento nusileidimas?

Jei skaitėte apie tai, kaip treniruojami neuroniniai tinklai, beveik neabejotinai anksčiau esate susidūrę su terminu „gradiento nusileidimas“. Gradientinis nusileidimas yra pagrindinis būdas optimizuoti neuroninio tinklo veikimą, sumažinti tinklo nuostolių/klaidų dažnį. Tačiau tiems, kurie pradeda mokytis mašininiu būdu, gali būti šiek tiek sunku suprasti nusileidimą nuo gradiento, todėl šiame straipsnyje bus stengiamasi suteikti jums tinkamą intuiciją, kaip veikia gradientas.

Gradiento nusileidimas yra optimizavimo algoritmas. Jis naudojamas siekiant pagerinti neuroninio tinklo našumą, pakeičiant tinklo parametrus taip, kad skirtumas tarp tinklo prognozių ir faktinių / numatomų tinklo verčių (vadinamų nuostolių) būtų kuo mažesnis. Gradiento nusileidimas paima pradines parametrų reikšmes ir naudoja skaičiavimu pagrįstas operacijas, kad jų reikšmes pakoreguotų pagal vertes, dėl kurių tinklas bus kuo tikslesnis. Jums nereikia mokėti daug skaičiavimo, kad suprastumėte, kaip veikia gradiento nusileidimas, bet jūs turite suprasti gradientus.

Kas yra gradientai?

Tarkime, kad yra grafikas, nurodantis neuroninio tinklo padarytos klaidos dydį. Diagramos apačioje rodomi mažiausios paklaidos taškai, o grafiko viršuje yra didžiausia klaida. Norime pereiti nuo grafiko viršaus į apačią. Gradientas yra tik būdas kiekybiškai įvertinti ryšį tarp klaidos ir neuroninio tinklo svorio. Santykis tarp šių dviejų dalykų gali būti pavaizduotas kaip nuolydis, su neteisingais svoriais sukelia daugiau klaidų. Šlaito / nuolydžio statumas parodo, kaip greitai modelis mokosi.

Statesnis nuolydis reiškia, kad labai sumažėja klaidų, o modelis greitai mokosi, o jei nuolydis lygus nuliui, modelis yra plokščiakalnyje ir nesimoko. Skaičiuodami gradientą, judėjimo kryptį (tinklo parametrų pasikeitimą) savo modeliui galime judėti žemyn link mažesnės klaidos.

Tik šiek tiek pakeiskime metaforą ir įsivaizduokime daugybę kalvų ir slėnių. Norime patekti į kalvos apačią ir rasti tą slėnio dalį, kuri atspindi mažiausią nuostolį. Pradėję nuo kalvos viršūnės galime dideliais žingsniais leistis nuo kalno ir būti tikri, kad judame link žemiausio slėnio taško.

Tačiau artėjant prie žemiausio slėnio taško, mūsų žingsniai turės sumažėti, kitaip galime viršyti tikrąjį žemiausią tašką. Panašiai gali būti, kad koreguojant tinklo svorį, koregavimai iš tikrųjų gali jį nutolinti nuo mažiausio nuostolio taško, todėl laikui bėgant koregavimai turi mažėti. Nusileidus nuo kalno link taško, kuriame mažiausias nuostolis, nuolydis yra vektorius/instrukcijos, nurodančios kelią, kuriuo turėtume eiti ir kokie turėtų būti žingsniai.

Dabar žinome, kad gradientai yra instrukcijos, nurodančios, kuria kryptimi judėti (kurie koeficientai turi būti atnaujinti) ir kokių didelių žingsnių turėtume atlikti (kiek koeficientus reikia atnaujinti), galime ištirti, kaip skaičiuojamas gradientas.

Gradientų ir gradiento nusileidimo skaičiavimas

Nusileidimas gradientu prasideda nuo didelio praradimo vietos ir daug kartų kartodamas žingsnius žengia mažiausio praradimo kryptimi, siekdamas rasti optimalią svorio konfigūraciją. Nuotrauka: Роман Сузи per Wikimedia Commons, CCY BY SA 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)

Norint atlikti gradiento nusileidimą, pirmiausia reikia apskaičiuoti nuolydžius. tvarka gradientui apskaičiuoti, turime žinoti nuostolių / sąnaudų funkciją. Norėdami nustatyti išvestinę priemonę, naudosime sąnaudų funkciją. Skaičiuojant išvestinė tiesiog nurodo funkcijos nuolydį tam tikrame taške, todėl iš esmės mes tik apskaičiuojame kalvos nuolydį pagal praradimo funkcija. Nuostolius nustatome vykdydami koeficientus per nuostolių funkciją. Jei nuostolių funkciją pavaizduojame kaip „f“, galime teigti, kad nuostolių apskaičiavimo lygtis yra tokia (koeficientus tik paleidžiame per pasirinktą išlaidų funkciją):

Nuostolis = f (koeficientas)

Tada apskaičiuojame išvestinę arba nustatome nuolydį. Gaudami nuostolio išvestinę vertę, parodysime, kuri kryptis yra aukštyn ar žemyn, pateikdami atitinkamą ženklą, pagal kurį pakoreguosime savo koeficientus. Atitinkamą kryptį pateiksime kaip „delta“.

delta = išvestinė_funkcija(nuostolis)

Dabar nustatėme, kuri kryptis yra žemyn link mažiausio nuostolio taško. Tai reiškia, kad galime atnaujinti neuroninio tinklo parametrų koeficientus ir, tikėkimės, sumažinti nuostolius. Atnaujinsime koeficientus, pagrįstus ankstesniais koeficientais, atėmus atitinkamą vertės pokytį, nustatytą pagal kryptį (delta) ir pokyčio dydį (mūsų žingsnio dydį) valdantį argumentą. Argumentas, valdantis naujinimo dydį, vadinamas „mokymosi greitis“ ir pateiksime jį kaip „alfa“.

koeficientas = koeficientas – (alfa * delta)

Tada tiesiog kartojame šį procesą, kol tinklas susilieja ties mažiausio nuostolio tašku, kuris turėtų būti artimas nuliui.

Labai svarbu pasirinkti tinkamą mokymosi greičio (alfa) reikšmę. Pasirinktas mokymosi tempas neturi būti nei per mažas, nei per didelis. Atminkite, kad artėjant prie mažiausio praradimo taško, mūsų žingsniai turi mažėti, kitaip viršysime tikrąjį mažiausio nuostolio tašką ir atsidursime kitoje pusėje. Mažiausio nuostolio taškas yra mažas, o jei mūsų pokyčių greitis yra per didelis, klaida gali vėl padidėti. Jei žingsnių dydžiai yra per dideli, tinklo našumas ir toliau šoktels į mažiausio nuostolio tašką, viršydamas jį vienoje, o paskui kitoje pusėje. Jei taip atsitiks, tinklas niekada nepriartės prie tikrosios optimalios svorio konfigūracijos.

Priešingai, jei mokymosi greitis yra per mažas, tinklui gali prireikti nepaprastai daug laiko, kol jis pasiekia optimalų svorį.

Gradiento nusileidimo tipai

Dabar, kai suprantame, kaip apskritai veikia gradiento nusileidimas, pažvelkime į kai kuriuos skirtingus gradiento nusileidimo tipai.

Paketinis gradiento nusileidimas: prieš atnaujinant koeficientus ši gradiento nusileidimo forma atliekama per visus mokymo pavyzdžius. Tikėtina, kad šis gradiento nusileidimo tipas yra efektyviausia skaičiavimo požiūriu gradiento nusileidimo forma, nes svoriai atnaujinami tik tada, kai apdorojama visa partija, o tai reiškia, kad iš viso yra mažiau atnaujinimų. Tačiau, jei duomenų rinkinyje yra daug mokymo pavyzdžių, treniruotės gali užtrukti dėl paketinio gradiento nusileidimo.

Stochastinis gradiento nusileidimas: Stochastinis gradientas Descent apdorojamas tik vienas mokymo pavyzdys kiekvienai gradiento nusileidimo ir parametrų atnaujinimo iteracijai. Tai atsitinka kiekvienam mokymo pavyzdžiui. Kadangi prieš atnaujinant parametrus apdorojamas tik vienas mokymo pavyzdys, jis paprastai suartėja greičiau nei Batch Gradient Descent, nes atnaujinimai atliekami anksčiau. Tačiau, kadangi procesas turi būti atliktas su kiekvienu mokymo rinkinio elementu, jis gali užtrukti gana ilgai, jei duomenų rinkinys yra didelis, todėl, jei pageidaujama, naudokite vieną iš kitų gradiento nusileidimo tipų.

Mini-Batch Gradient Descent: Mini-Batch Gradient Descent veikia padalijus visą mokymo duomenų rinkinį į poskyrius. Jis sukuria mažesnes mini partijas, kurios paleidžiamos per tinklą, o kai mini paketas buvo naudojamas klaidai apskaičiuoti, koeficientai atnaujinami. Mini-paketinis gradiento nusileidimas pasiekia vidurį tarp Stochastic Gradient Descent ir Batch Gradient Descent. Modelis atnaujinamas dažniau nei Batch Gradient Descent atveju, o tai reiškia šiek tiek greitesnį ir tvirtesnį modelio optimalių parametrų konvergenciją. Jis taip pat yra efektyvesnis skaičiavimo požiūriu nei Stochastic Gradient Descent

Tinklaraštininkas ir programuotojas, turintis specialybių Mašininis mokymasis ir Gilus mokymasis temomis. Danielis tikisi padėti kitiems panaudoti AI galią socialinei gerovei.