Gradient Descent variantai dirbtinio intelekto mokyme: nuo paprasto GD iki pažangių optimizatorių
Išsamus gidas apie Gradient Descent ir jo variantus dirbtinio intelekto mokyme: Batch, SGD, Mini-Batch, Momentum, Nesterov, AdaGrad, RMSProp, Adam. Suprask, kaip pasirinkti tinkamiausią optimizatorių savo ML ir DL projektams.

Gradient descent yra vienas svarbiausių algoritmų dirbtinio intelekto (DI) ir mašininio mokymosi (MM) pasaulyje. Būtent jis leidžia mokyti neuroninius tinklus, regresijos modelius ir daugelį kitų statistinių modelių, palaipsniui mažinant nuostolių funkciją. Tačiau praktikoje naudojama ne viena, o visa šeima Gradient Descent variantų, pritaikytų skirtingoms problemoms, duomenų kiekiui ir modeliui.
Šiame straipsnyje apžvelgsime pagrindinius Gradient Descent variantus, jų privalumus ir trūkumus, paaiškinsime, kuo jie skiriasi, ir kada verta rinktis vieną ar kitą. Straipsnis orientuotas į skaitytojus, kurie jau yra girdėję apie DI ir mašininį mokymąsi, bet nori gilesnio, praktiškai pritaikomo supratimo apie optimizavimo algoritmus.
Kas yra Gradient Descent?
Gradient Descent yra iteracinis optimizavimo algoritmas, naudojamas minimaliai nuostolių (angl. loss) arba klaidos funkcijai surasti. Intuityviai galima įsivaizduoti, kad stovime ant kalno ir norime nusileisti į žemiausią įdubą. Gradient Descent sako, kuria kryptimi leidžiasi stačiausias šlaitas, ir leidžia mažais žingsniais judėti žemyn.
Matematiškai kiekviename žingsnyje atnaujiname modelio parametrus pagal formulę:
w_new = w_old - η * ∇L(w_old)
- w – modelio parametrai (svoriai).
- η – mokymosi žingsnis (angl. learning rate).
- ∇L(w) – nuostolių funkcijos gradientas pagal parametrus.
Skirtingi Gradient Descent variantai skiriasi tuo, kaip jie apskaičiuoja gradientą, kaip prisitaiko mokymosi žingsnį ir kaip „atsimena“ ankstesnius žingsnius, kad mokymas būtų stabilesnis ir greitesnis.
Pagrindinės Gradient Descent rūšys pagal duomenų apdorojimą
Pirmiausia svarbu suprasti tris klasikines Gradient Descent formas: Batch Gradient Descent, Stochastic Gradient Descent ir Mini-Batch Gradient Descent. Jos apibrėžia, kaip algoritmas naudoja duomenis gradientui apskaičiuoti.
Batch Gradient Descent
Batch Gradient Descent kiekviename mokymo žingsnyje naudoja visą treniravimo duomenų rinkinį gradientui apskaičiuoti. Tai reiškia, kad jei turite 1 000 000 pavyzdžių, gradientas bus skaičiuojamas pagal visus juos vienu metu.
Privalumai:
- Labai stabilus gradientas, nes naudojami visi duomenys.
- Nuostolių funkcijos kreivė mažėja tolygiai, be didelių svyravimų.
- Tinka mažesniems duomenų rinkiniams, kai visus duomenis galima laikyti atmintyje.
Trūkumai:
- Lėtas, kai duomenų daug – vienas žingsnis reikalauja daug skaičiavimų.
- Prastai tinka didelio masto deep learning užduotims.
- Gali įstrigti lokaliuose minimumuose ar balno taškuose.
Stochastic Gradient Descent (SGD)
Stochastic Gradient Descent kiekviename žingsnyje naudoja tik vieną atsitiktinai pasirinktą pavyzdį. Gradientas skaičiuojamas pagal vieną įrašą, todėl atnaujinimas vyksta labai greitai.
Privalumai:
- Labai greiti atnaujinimai – tinka dideliems duomenų kiekiams.
- Didelis atsitiktinumas padeda išvengti lokalių minimumų.
- Dažnai greitai pasiekiamas pakankamai geras sprendinys.
Trūkumai:
- Labai triukšminga nuostolių kreivė – daug svyravimų.
- Gali būti sunku „susikoncentruoti“ ties minimumu – sprendinys šokinėja aplink.
- Reikia gana mažo learning rate stabilumui užtikrinti.
Mini-Batch Gradient Descent
Mini-Batch Gradient Descent yra kompromisas tarp Batch ir SGD. Vietoje visų duomenų arba vieno pavyzdžio naudojami maži duomenų paketai (pvz., 32, 64, 128 pavyzdžiai viename mini-batch).
Privalumai:
- Balansas tarp stabilumo ir greičio.
- Puikiai išnaudoja GPU ir paralelinį skaičiavimą.
- Mažesnis triukšmas nei SGD, bet daugiau atsitiktinumo nei grynas Batch.
Trūkumai:
- Reikia parinkti mini-batch dydį (tai dar vienas hiperparametras).
- Per didelis mini-batch gali vėl priartinti prie Batch GD trūkumų.
Modernus deep learning praktiškai visada naudoja būtent Mini-Batch Gradient Descent kartu su pažangesniais optimizatoriais, tokiais kaip Adam ar RMSProp.
Mokymosi žingsnis ir jo reikšmė
Mokymosi žingsnis (learning rate) yra kritinis parametras visiems Gradient Descent variantams. Jei jis per didelis, modelio mokymas „iššauna“ pro minimumą ir diverguoja. Jei per mažas, mokymas tampa lėtas ir gali įstrigti lokaliuose minimumuose.
Tipiški sprendimai:
- Fiksuotas η – paprasčiausia, bet ne visada optimalu.
- Learning rate schedule – η mažinamas laikui bėgant (pvz., kas N epochų).
- Adaptuojami optimizatoriai – algoritmai, kurie patys prisitaiko learning rate pagal gradientų istoriją.
Būtent adaptuojami optimizatoriai (AdaGrad, RMSProp, Adam ir kt.) tapo de facto standartu sudėtingesniems neuroniniams tinklams, nes leidžia sumažinti rankinio tuningavimo naštą.
Momentum: pagreitintas Gradient Descent
Vienas iš svarbių Gradient Descent patobulinimų yra Momentum. Idėja paprasta: mokymą įsivaizduojame kaip rutulį, riedantį kalnu žemyn. Rutulys įgauna pagreitį, todėl ne tik seka dabartinį gradientą, bet ir „atsimena“ ankstesnę judėjimo kryptį.
Momentum algoritme atnaujinami ne tik svoriai, bet ir greičio vektorius:
- v_new = β * v_old + (1 − β) * ∇L(w)
- w_new = w_old − η * v_new
Čia β (dažniausiai apie 0,9) valdo, kiek stipriai remiamės ankstesne kryptimi.
Momentum privalumai
- Greitesnis nusileidimas „slėniais“, kai gradientai nuosekliai rodo ta pačia kryptimi.
- Mažiau įstringama vietose, kur gradientas artimas nuliui (balno taškai).
- Lygesnė trajektorija, mažiau svyravimų kai kuriose ašyse.
Dėl šių savybių Momentum dažnai naudojamas kartu su Mini-Batch GD ir tapo pagrindu dar pažangesniems optimizatoriams, tokiems kaip Nesterov ir Adam.
Nesterov Momentum (NAG)
Nesterov Accelerated Gradient (NAG) yra Momentum patobulinimas. Idėja – gradientą skaičiuoti ne esamoje pozicijoje, o ten, kur tikimasi atsidurti, judant pagal Momentum. Tai tarsi „žiūrėjimas į priekį“ prieš darant žingsnį.
Intuityviai Nesterov leidžia algoritmui anksčiau „pajusti“, kad artėjame prie minimumo, ir pristabdyti, kad neperšoktume per jį.
Kada verta naudoti Nesterov?
- Kai paprastas Momentum sukelia per didelį svyravimą aplink minimumą.
- Kai norite greitesnio, bet stabilesnio konvergavimo nei grynas Momentum.
- Kai turite gilias architektūras, kuriose gradientai gali stipriai svyruoti.
Nesterov dažnai realizuojamas kaip atskiras optimizatorius bibliotekose (pvz., SGD with Nesterov Keras ar PyTorch), tačiau koncepciniu požiūriu tai tiesiog Momentum evoliucija.
Adaptuojami Gradient Descent variantai
Klasikinis Gradient Descent visiems parametrams naudoja tą patį learning rate. Tačiau realiose užduotyse skirtingi parametrai gali reikalauti skirtingo žingsnio dydžio. Todėl atsirado algoritmai, kurie learning rate pritaiko kiekvienam parametrui atskirai, remdamiesi gradientų istorija.
AdaGrad
AdaGrad (Adaptive Gradient) yra vienas pirmųjų adaptuojamų optimizatorių. Jis kaupia ankstesnių gradientų kvadratų sumą ir tuo remdamasis keičia learning rate.
Esminė idėja: parametrams, kurie sulaukia didelių gradientų, learning rate mažinamas; tiems, kurie keičiasi mažai, – didinamas. Taip algoritmas automatiškai labiau prisiderina prie retų, bet svarbių parametrų (pvz., retų žodžių NLP užduotyse).
Privalumai:
- Automatinis learning rate pritaikymas kiekvienam parametrui.
- Geras pasirinkimas retoms ypatybėms (sparse features).
- Mažiau rankinio hiperparametrų derinimo.
Trūkumai:
- Learning rate nuolat mažėja ir galiausiai gali tapti per mažas, kad mokymas judėtų toliau.
- Gali „sustoti“ per anksti, dar nepasiekus gero minimumo.
RMSProp
RMSProp buvo sukurtas kaip AdaGrad trūkumo – nuolat mažėjančio learning rate – sprendimas. Vietoje visos gradientų istorijos RMSProp naudoja slenkantį vidurkį (eksponentinį), todėl atmintis apie senus gradientus palaipsniui išblėsta.
Esminė idėja: RMSProp išlaiko adaptuojamą learning rate, bet neleidžia jam nuolat ir negrįžtamai mažėti.
RMSProp privalumai:
- Labai gerai veikia nelygiomis, triukšmingomis nuostolių funkcijomis.
- Stabilus mokymas net su gana dideliu learning rate.
- Puikiai tinka rekursyviems neuroniniams tinklams (RNN) ir sekų modeliams.
RMSProp trūkumai:
- Vis dar reikalingas rankinis learning rate parinkimas.
- Hiperparametrai (pvz., slopinimo koeficientas) gali daryti didelę įtaką.
Adam: vienas populiariausių optimizatorių
Adam (Adaptive Moment Estimation) yra vienas populiariausių optimizavimo algoritmų deep learning praktikoje. Jis sujungia Momentum ir RMSProp idėjas: skaičiuoja tiek pirmą gradientų momentą (vidurkį), tiek antrą momentą (kvadratų vidurkį) ir automatiškai pritaiko learning rate kiekvienam parametrui.
Adam turi kelis svarbius bruožus:
- Naudoja Momentum tipo „greitį“ (pirmas momentas).
- Naudoja RMSProp tipo adaptuojamą skalę (antras momentas).
- Taiko bias correction, kad pradžioje momentai nebūtų šališki.
Adam privalumai:
- Labai dažnai veikia „iš dėžutės“ su minimaliais koregavimais.
- Greitas konvergavimas daugelyje realių užduočių.
- Mažiau jautrus pradiniams svoriams ir duomenų masteliui.
- Standartinis pasirinkimas daugelyje framework’ų pavyzdinių projektų.
Adam trūkumai:
- Kartais duoda prastesnį galutinį generalizuojantį rezultatą nei SGD su Momentum.
- Daugiau hiperparametrų (β1, β2, ε), kurie gali turėti įtakos rezultatui.
Nors Adam dažnai rekomenduojamas kaip „saugus pirmas pasirinkimas“, rimtesniuose projektuose verta palyginti jo rezultatus su SGD + Momentum ar kitais variantais.
AdamW ir kitos Adam modifikacijos
Praktikoje plačiai naudojama ir Adam modifikacija AdamW. Ji atskiria svorių mažinimą (weight decay) nuo gradientų atnaujinimo, kas pagerina modelių generalizaciją, ypač dideliuose tinkluose (pvz., transformeriuose).
Kitos modifikacijos (pvz., Nadam – Nesterov + Adam) apjungia dar daugiau idėjų, tačiau jų pagrindas vis tiek yra adaptuojami momentai ir Gradient Descent principas.
Kaip pasirinkti Gradient Descent variantą praktikoje?
Nors teorija svarbi, praktinis klausimas dažnai būna paprastas: kurį optimizatorių naudoti mano DI projekte? Žemiau – keli orientaciniai principai.
Mažesni modeliai ir klasikinis ML
- Linijinė regresija, logistinė regresija, mažesni MLP tinklai: galima naudoti paprastą Batch GD arba Mini-Batch GD su fiksuotu learning rate.
- Jei duomenų nėra labai daug, stabilus Batch GD neretai yra pakankamas.
Dideli duomenų kiekiai ir deep learning
- Konvoliuciniai tinklai (CNN), RNN, transformeriai: dažniausiai naudojami Mini-Batch + Adam arba Mini-Batch + AdamW.
- Jei norite geresnės generalizacijos (ypač kompiuterinės regos užduotyse), verta rimtai išbandyti SGD su Momentum.
Retos ypatybės ir NLP
- Jei turite labai retus požymius (pvz., žodžių vektoriai, rekomendacijų sistemos), AdaGrad ar jo giminaičiai gali būti naudingi.
- Modernios NLP architektūros (pvz., BERT, GPT tipo modeliai) dažnai naudoja AdamW su iš anksto nustatytais hiperparametrais.
Dažniausios klaidos naudojant Gradient Descent
Net ir pasirinkus „teisingą“ algoritmą galima susidurti su problemomis dėl prasto parametrų parinkimo ar duomenų paruošimo. Štai kelios tipiškos klaidos:
- Per didelis learning rate: nuostolių funkcija šokinėja ir nedidėja, arba net diverguoja.
- Per mažas learning rate: mokymas praktiškai stovi vietoje, progreso beveik nėra.
- Nemastelinti duomenys: jei požymiai skirtingų mastelių, gradientai gali būti labai nevienodi ir mokymas taps nestabilus.
- Per didelis batch dydis: mokymas tampa lėtas atnaujinimų prasme, o generalizacija gali pablogėti.
- Per mažas batch dydis: labai triukšmingas SGD, sunku stabiliai priartėti prie minimumo.
Prieš kaltinant konkretų optimizatorių, verta patikrinti duomenų normalizavimą, learning rate parinkimą ir batch dydį.
Gradient Descent DI mokyme: platesnis kontekstas
Gradient Descent ir jo variantai yra šiuolaikinio dirbtinio intelekto „variklis“. Backpropagation algoritmas neuroniniuose tinkluose iš esmės yra tik gradientų apskaičiavimo metodas, o Gradient Descent – būdas tuos gradientus panaudoti svorių atnaujinimui.
Be Gradient Descent ir jo modifikacijų nebūtų įmanoma efektyviai mokyti giliųjų tinklų, kurie naudojami:
- Kompiuterinėje regoje (vaizdų atpažinimas, segmentavimas).
- Natūralios kalbos apdorojime (vertimas, teksto generavimas).
- Rekomendacijų sistemose.
- Signalų ir laiko eilučių analizėje.
- Žaidimų kūrime ir pastiprinamajame mokyme.
Augant modelių dydžiui ir duomenų kiekiui, Gradient Descent variantų klausimas tampa ne tik teoriniu, bet ir praktiniu – nuo optimizatoriaus pasirinkimo priklauso, ar modelis bus treniruojamas valandas, dienas ar savaites, ir ar jis apskritai pasieks tinkamą tikslumą.
Išvados
Gradient Descent yra fundamentali idėja, kurią praktiškai taikome per įvairius jos variantus: Batch, Stochastic, Mini-Batch, Momentum, Nesterov, AdaGrad, RMSProp, Adam, AdamW ir kitus. Nėra vieno „stebuklingo“ algoritmo, kuris būtų geriausias visoms užduotims. Vietoje to turime įrankių rinkinį, iš kurio pasirenkame tinkamiausią, atsižvelgdami į duomenų kiekį, modelio sudėtingumą ir praktinius reikalavimus.
Pradedantiesiems dažnai pakanka suprasti pagrindinę Gradient Descent idėją ir pradėti nuo Adam su Mini-Batch. Vystantis projektui ir augant patirčiai, verta eksperimentuoti su SGD + Momentum, learning rate schemomis ir kitais optimizatoriais, kad modeliai ne tik greitai mokytųsi, bet ir gerai generalizuotų naujiems duomenims.
Supratimas, kaip veikia skirtingi Gradient Descent variantai, yra esminis žingsnis norint kurti patikimus, efektyvius ir verslui vertę kuriančius DI sprendimus.


