ciot Ce este Gradient Descent? - Unite.AI
Conectează-te cu noi
Masterclass AI:

AI 101

Ce este Gradient Descent?

mm
Actualizat on

Ce este o coborâre în gradient?

Dacă ați citit despre modul în care sunt antrenate rețelele neuronale, aproape sigur ați întâlnit înainte termenul „coborâre în gradient”. Coborâre în gradient este metoda principală de optimizare a performanței unei rețele neuronale, reducând rata de pierdere/eroare a rețelei. Cu toate acestea, coborârea în gradient poate fi puțin greu de înțeles pentru cei care sunt noi în învățarea automată, iar acest articol se va strădui să vă ofere o intuiție decentă a modului în care funcționează coborârea în gradient.

Coborârea gradientului este un algoritm de optimizare. Este folosit pentru a îmbunătăți performanța unei rețele neuronale prin ajustări ale parametrilor rețelei, astfel încât diferența dintre predicțiile rețelei și valorile reale/așteptate ale rețelei (denumită pierdere) să fie cât mai mică posibil. Coborârea în gradient ia valorile inițiale ale parametrilor și folosește operațiuni bazate pe calcul pentru a ajusta valorile acestora către valorile care vor face rețeaua cât se poate de precisă. Nu trebuie să cunoașteți mult calcul pentru a înțelege cum funcționează coborârea gradientului, dar trebuie să înțelegeți gradienții.

Ce sunt gradienții?

Să presupunem că există un grafic care reprezintă cantitatea de eroare pe care o face o rețea neuronală. Partea de jos a graficului reprezintă punctele cu cea mai mică eroare, în timp ce partea de sus a graficului este acolo unde eroarea este cea mai mare. Vrem să ne mutăm din partea de sus a graficului în jos în jos. Un gradient este doar o modalitate de a cuantifica relația dintre eroare și greutățile rețelei neuronale. Relația dintre aceste două lucruri poate fi reprezentat grafic ca o pantă, cu greutăți incorecte producând mai multe erori. Abruptul pantei/gradientului reprezintă cât de repede învață modelul.

O pantă mai abruptă înseamnă că se fac reduceri mari ale erorilor și modelul învață rapid, în timp ce dacă panta este zero, modelul se află pe un platou și nu învață. Ne putem deplasa în jos pe panta spre mai puțină eroare calculând un gradient, o direcție de mișcare (modificarea parametrilor rețelei) pentru modelul nostru.

Să schimbăm puțin metafora și să ne imaginăm o serie de dealuri și văi. Vrem să ajungem la fundul dealului și să găsim partea de vale care reprezintă cea mai mică pierdere. Când începem din vârful dealului putem face pași mari în jos pe deal și să fim încrezători că ne îndreptăm spre cel mai jos punct al văii.

Cu toate acestea, pe măsură ce ne apropiem de punctul cel mai de jos din vale, pașii noștri vor trebui să devină mai mici, altfel am putea depăși punctul cel mai de jos adevărat. În mod similar, este posibil ca atunci când ajustați greutățile rețelei, ajustările să o îndepărteze de fapt de punctul de cea mai mică pierdere și, prin urmare, ajustările trebuie să devină mai mici în timp. În contextul coborârii unui deal spre un punct de cea mai mică pierdere, gradientul este un vector/instrucțiuni care detaliază calea pe care ar trebui să o parcurgem și cât de mari ar trebui să fie pașii noștri.

Acum știm că gradienții sunt instrucțiuni care ne spun în ce direcție să ne deplasăm (care coeficienți ar trebui actualizați) și cât de mari sunt pașii pe care ar trebui să-i facem (cât de mult ar trebui actualizați coeficienții), putem explora modul în care este calculat gradientul.

Calculul Gradienților și Coborârea Gradientului

Coborârea în gradient începe dintr-un loc cu pierderi mari și, prin mai multe iterații, face pași în direcția celei mai mici pierderi, urmărind găsirea configurației optime a greutății. Foto: Роман Сузи prin Wikimedia Commons, CCY BY SA 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)

Pentru a efectua coborârea în pante, mai întâi trebuie să se calculeze pantele. În ordine pentru a calcula gradientul, trebuie să cunoaștem funcția pierdere/cost. Vom folosi funcția de cost pentru a determina derivata. În calcul, derivata se referă doar la panta unei funcții într-un punct dat, așa că practic doar calculăm panta dealului pe baza functia de pierdere. Determinăm pierderea prin rularea coeficienților prin funcția de pierdere. Dacă reprezentăm funcția de pierdere ca „f”, atunci putem afirma că ecuația pentru calcularea pierderii este următoarea (doar rulăm coeficienții prin funcția de cost aleasă):

Pierdere = f(coeficient)

Apoi calculăm derivata sau determinăm panta. Obținerea derivatei pierderii ne va spune în ce direcție este în sus sau în jos panta, dându-ne semnul potrivit pentru a ne ajusta coeficienții. Vom reprezenta direcția corespunzătoare ca „delta”.

delta = functie_derivata(pierdere)

Acum am stabilit ce direcție este în jos spre punctul cu cea mai mică pierdere. Aceasta înseamnă că putem actualiza coeficienții parametrilor rețelei neuronale și, sperăm, să reducem pierderea. Vom actualiza coeficienții pe baza coeficienților anteriori minus modificarea corespunzătoare a valorii determinată de direcția (delta) și un argument care controlează amploarea schimbării (mărimea pasului nostru). Argumentul care controlează dimensiunea actualizării se numește „rata de învățare” și îl vom reprezenta ca „alfa”.

coeficient = coeficient – ​​(alfa * delta)

Apoi repetăm ​​acest proces până când rețeaua a convergit în jurul punctului cu cea mai mică pierdere, care ar trebui să fie aproape de zero.

Este foarte important să alegeți valoarea potrivită pentru rata de învățare (alfa). Rata de învățare aleasă nu trebuie să fie nici prea mică, nici prea mare. Amintiți-vă că, pe măsură ce ne apropiem de punctul cu cea mai mică pierdere, pașii noștri trebuie să devină mai mici, altfel vom depăși adevăratul punct de cea mai mică pierdere și vom ajunge pe cealaltă parte. Punctul de cea mai mică pierdere este mic și dacă rata noastră de schimbare este prea mare, eroarea poate ajunge să crească din nou. Dacă dimensiunile pașilor sunt prea mari, performanța rețelei va continua să sară în jurul punctului de cea mai mică pierdere, depășindu-l pe o parte și apoi pe cealaltă. Dacă se întâmplă acest lucru, rețeaua nu va converge niciodată către configurația optimă a greutății adevărate.

În schimb, dacă rata de învățare este prea mică, rețeaua poate dura un timp extraordinar de lung pentru a converge către ponderile optime.

Tipuri de coborâre în gradient

Acum că înțelegem cum funcționează coborârea gradientului în general, să aruncăm o privire la unele dintre diferite tipuri de coborâre în gradient.

Batch Gradient Descent: Această formă de coborâre a gradientului parcurge toate mostrele de antrenament înainte de a actualiza coeficienții. Acest tip de coborâre a gradientului este probabil cea mai eficientă formă de coborâre a gradientului, deoarece ponderile sunt actualizate doar după ce întregul lot a fost procesat, ceea ce înseamnă că există mai puține actualizări în total. Cu toate acestea, dacă setul de date conține un număr mare de exemple de antrenament, atunci coborârea gradientului în lot poate face ca antrenamentul să dureze mult.

Stochastic Gradient Descent: În Stochastic Gradient Descent este procesat doar un singur exemplu de antrenament pentru fiecare iterație de coborâre a gradientului și actualizarea parametrilor. Acest lucru se întâmplă pentru fiecare exemplu de antrenament. Deoarece un singur exemplu de antrenament este procesat înainte ca parametrii să fie actualizați, acesta tinde să convergă mai repede decât Coborârea gradului de lot, deoarece actualizările se fac mai devreme. Cu toate acestea, deoarece procesul trebuie efectuat pentru fiecare element din setul de antrenament, poate dura destul de mult timp pentru a se finaliza dacă setul de date este mare și, prin urmare, folosirea unuia dintre celelalte tipuri de coborâre a gradientului, dacă se preferă.

Mini-Batch Gradient Descent: Mini-Batch Gradient Descent funcționează prin împărțirea întregului set de date de antrenament în subsecțiuni. Se creează mini-loturi mai mici care sunt rulate prin rețea, iar atunci când mini-lotul a fost folosit pentru a calcula eroarea, coeficienții sunt actualizați. Mini-batch Gradient Descent ajunge la un punct de mijloc între Stochastic Gradient Descent și Batch Gradient Descent. Modelul este actualizat mai frecvent decât în ​​cazul Batch Gradient Descent, ceea ce înseamnă o convergență ceva mai rapidă și mai robustă asupra parametrilor optimi ai modelului. De asemenea, este mai eficient din punct de vedere computațional decât Stochastic Gradient Descent

Blogger și programator cu specialități în Invatare mecanica și Invatare profunda subiecte. Daniel speră să-i ajute pe alții să folosească puterea AI pentru binele social.