În învățarea automată, este o metodă de estimare a gradientului utilizată pentru a antrena modele de rețele neurale. Estimarea gradientului este utilizată de algoritmul de optimizare pentru a calcula actualizările parametrilor rețelei.
Este o aplicare eficientă la astfel de rețele a regulii derivării funcțiilor compuse enunțată de Leibniz (1673) pentru calculul derivatelor funcțiilor compuse. Este cunoscut și ca modul invers al sau , datorită lui (1970). Termenul de „corectare a erorilor cu propagare inversă” a fost introdus în 1962 de , dar el nu știa cum să implementeze acest lucru, chiar dacă avea un precursor continuu al lui deja în 1960 în contextul .
calculează gradientul unei în raport cu ponderile rețelei pentru un singur exemplu de intrare-ieșire și face acest lucru eficient, calculând gradientul strat cu strat, înapoi de la ultimul strat pentru a evita calculele redundante ale termenilor intermediari din regula derivării funcțiilor compuse; aceasta se poate calcula prin . În mod obișnuit, se utilizează sau variante ale ei, cum ar fi .
În sens strict, termenul se referă doar la algoritmul de calcul al gradientului, nu la modul în care este utilizat gradientul; dar termenul este adesea folosit în mod liber pentru a se referi la întregul algoritm de învățare – inclusiv la modul în care este utilizat gradientul, cum ar fi descreșterea stochastică., "The term back-propagation is often misunderstood as meaning the whole learning algorithm for multilayer neural networks. Backpropagation refers only to the method for computing the gradient, while other algorithms, such as stochastic gradient descent, is used to perform learning using this gradient." În 1986 et al. au publicat o analiză experimentală a tehnicii. Aceasta a contribuit la popularizarea tehnicii și a ajutat la inițierea unei perioade active de cercetare în domeniul .
Generalități calculează gradientul în unei rețele neuronale , în raport cu o . Se notează cu:
: input (vectorul de caracteristici) : ieșirea așteptată Pentru clasificare, ieșirea va fi un vector de probabilități pe toate clasele (de ex., , iar ieșirea așteptată este o anumită clasă, codificată prin variabila one-hot (de ex., ).
Pentru clasificare, aceasta este de obicei entropia încrucișată (XC, ), în timp ce pentru regresie este de obicei costul erorii la pătrat (SEL). : numărul de straturi : ponderile legăturilor între straturile și , unde este ponderea între nodul din stratul și nodul din stratul : de pe stratul Pentru clasificare, ultimul strat este de regulă pentru clasificare binară, și (softargmax) pentru clasificare cu mai multe clase, în timp ce pentru stratele ascunse, aceasta este tradițiomal o (funcția logistică sau altele) pe fiecare nod (coordonată), dar astăzi gama este mai variată, fiind comună și funcția (, ). : activarea nodului din stratul .
În calculul lui , se folosesc alte cantități intermediare introducându-le după cum este necesar mai jos. Termenii de bias nu sunt tratați în mod special, deoarece corespund unei ponderi cu o intrare fixă de 1. Pentru , funcția de cost și funcțiile de activare specifice nu contează atâta timp cât ele și derivatele lor pot fi evaluate eficient. Printre funcțiile tradiționale de activare se numără sigmoidele, tanh și ReLU. Au mai fost propuse și swish, mish, și alte funcții de activare.
Rețeaua de ansamblu este o combinație de și înmulțiri de matrici:
Ca mulțime de antrenare se ia o mulțime de perechi intrare-ieșire, . Pentru fiecare pereche intrare-ieșire din mulțimea de antrenare, costul modelului pe acea pereche este costul diferenței dintre rezultatul prezis și rezultatul așteptat :
În timpul evaluării modelului, ponderile sunt fixe, în timp ce intrările variază (și ieșirea așteptată poate fi necunoscută), iar rețeaua se termină cu stratul de ieșire (nu include funcția de cost). În timpul antrenării modelului, perechea intrare-ieșire este fixă în timp ce ponderile variază, iar rețeaua se termină cu funcția de cost.
calculează gradientul pentru o pereche de intrare-ieșire fixă , unde ponderile pot varia. Fiecare componentă individuală a gradientului, poate fi calculată prin regula derivării funcțiilor compuse; dar a face acest lucru separat pentru fiecare pondere este ineficient. calculează eficient gradientul, evitând calculele duplicate și nu calculează valori intermediare inutile, calculând gradientul fiecărui strat în special gradientul intrării ponderate a fiecărui strat, notat cu – din spate către față.
Cu alte cuvinte, punctul cheie este că, din moment ce singurul mod în care o pondere din afectează costul este prin efectul său asupra stratului următor și face acest lucru liniar, rezultă că sunt singurele date de care este nevoie pentru a calcula gradienții ponderilor stratului , iar apoi stratul anterior poate fi calculat cu și repetat recursiv. Aceasta evită ineficiența în două moduri. În primul rând, evită duplicarea, deoarece atunci când se calculează gradientul la stratul – nu mai este nevoie să se recalculeze toate derivatele pe straturile ulterioare de fiecare dată. În al doilea rând, evită calculele intermediare inutile, deoarece în fiecare etapă calculează direct gradientul ponderilor în raport cu rezultatul final (costul), și nu calculează inutil derivatele valorilor straturilor ascunse în raport cu modificările ponderilor .
poate fi exprimat pentru rețelele simple în termeni de înmulțire de matrici sau, mai general, în termeni de graf adjunct.
Înmulțire de matrici Pentru cazul de bază al unei rețele , în care nodurile din fiecare strat sunt conectate numai la nodurile din stratul imediat următor (fără a sări peste niciun strat) și există o funcție de cost care calculează costul scalar pentru ieșirea finală, poate fi înțeles pur și simplu prin înmulțiri de matrici. În esență, evaluează expresia derivatei funcției de cost ca un produs al derivatelor între fiecare strat de la dreapta la stânga – „înapoi” – iar gradientul ponderilor dintre fiecare strat este o simplă modificare a produsele parțiale („eroarea propagată înapoi”).
Dacă se dă o pereche intrare-ieșire , costul este:
Pentru a-l calcula, se începe cu intrarea și se merge înainte; se notează intrarea ponderată a fiecărui strat ascuns cu și rezultatul stratului ascuns ca activarea . Pentru , activarea precum și derivatele (evaluat la ) trebuie să fie memorate pentru utilizare în timpul trecerii înapoi.
Derivata costului în termeni de intrări este dată de regula derivării funcțiilor compuse; fiecare termen este o , evaluată la valoarea rețelei (în fiecare nod) pe intrarea :
Unde este o matrice diagonală.
Acești termeni sunt: derivata funcției de cost; derivatele funcțiilor de activare; și matricile ponderilor:
Gradientul este transpusa derivatei ieșirii în termeni de intrare, deci matricile sunt transpuse și ordinea înmulțirii se inversează, dar intrările sunt aceleași:
constă apoi, în esență, în evaluarea acestei expresii de la dreapta la stânga (echivalent, înmulțirea expresiei anterioare pentru derivată de la stânga la dreapta), calculând gradientul la fiecare strat pe parcurs; se mai adaugă un pas, deoarece gradientul ponderilor nu este doar o subexpresie: există o înmulțire suplimentară.
Introducerea mărimii auxiliare pentru produsele parțiale (înmulțirea de la dreapta la stânga), interpretată ca „eroare la nivelul ” și definită ca gradientul valorilor de intrare la nivelul :
Cum este un vector, de lungime egală cu numărul de noduri din nivelul , fiecare componentă este interpretată drept „costul atribuibil (valorii) nodului respectiv”.
Gradientul ponderilor din stratul este atunci:
Factorul este pentru că greutățile între nivelele și afectează proporțional cu intrările (activările): intrările sunt fixe, ponderile variază.
poate fi ușor calculat recursiv, mergând de la dreapta la stânga, după cum urmează:
Gradienții ponderilor pot fi astfel calculați folosind câteva înmulțiri de matrici pentru fiecare nivel; aceasta este .
Se compară cu calculul naiv înainte (folosind pentru ilustrare):
În există două diferențe esențiale:
Calculul lui în termeni de evită evidenta dublare a înmulțirii straturilor și mai departe. Înmulțirea începând de la – propagarea erorii înapoi – înseamnă că la fiecare pas pur și simplu se înmulțește un vector () cu matricile de ponderi și derivatele activărilor . În schimb, înmulțirea înainte, pornind de la modificările de la un strat anterior, înseamnă că la fiecare înmulțire se înmulțește o matrice cu altă matrice. Aceasta este mult mai costisitoare și corespunde urmăririi tuturor căilor posibile ale unei modificări dintr-un singur strat până în stratul (pentru înmulțirea lui cu , cu înmulțiri suplimentare pentru derivatele activărilor), care calculează în mod inutil cantități intermediare ale modului în care modificările de pondere afectează valorile nodurilor ascunse.
Graful adjunct Pentru grafuri mai generale și alte variații avansate, poate fi înțeles în termeni de , unde este un caz particular al acumulării inverse (sau „modului invers”).
Motivația Obiectivul oricărui algoritm de este de a găsi o funcție care mapează cel mai bine un set de intrări la ieșirea lor corectă. Motivația pentru este de a antrena o rețea neurală cu mai multe straturi, astfel încât să poată învăța reprezentările interne adecvate pentru a-i permite să învețe orice mapare arbitrară a intrării la ieșire.
Învățarea ca problemă de optimizare Pentru a înțelege calculul matematic al algoritmului de , este nevoie mai întâi de dezvoltarea unei intuiții despre relația dintre produsul real al unui neuron și rezultatul corect pentru un anumit exemplu de antrenament. Fie o rețea neurală simplă cu două unități de intrare, o unitate de ieșire și fără unități ascunse și în care fiecare neuron utilizează o ieșire liniară (spre deosebire de majoritatea lucrărilor pe rețelele neurale, în care maparea de la intrări la ieșiri este neliniară) care este suma ponderată a intrărilor sale. miniatura|250x250px| O rețea neurală simplă cu două unități de intrare (fiecare cu o singură intrare) și o unitate de ieșire (cu două intrări) Inițial, înainte de antrenare, ponderile pot fi stabilite aleatoriu. Apoi neuronul învață din , care în acest caz constau dintr-o mulțime de unde și sunt intrările rețelei și este ieșirea corectă (ieșirea pe care rețeaua ar trebui să o producă când primește acele intrări, la momentul antrenării). Când primește la intrare și , rețeaua inițială va calcula o ieșire care probabil diferă de (dat fiind că ponderile sunt aleatorii). O funcție de cost este utilizată pentru măsurarea discrepanței dintre ieșirea așteptată și ieșirea calculată . Pentru problemele de analiză de regresie, eroarea pătrată poate fi folosită ca funcție de cost, dar pentru se poate folosi .
De exemplu, fie o problemă de regresie folosind eroarea pătrată ca funcție de cost:
unde este discrepanța sau eroarea.
Fie rețeaua pe un singur caz de antrenare: . Astfel, intrările și sunt 1 și, respectiv, 1, iar ieșirea corectă este 0. Acum, dacă este reprezentată relația dintre ieșirea rețelei pe axa orizontală și eroarea pe axa verticală, rezultatul este o parabolă. Minimul parabolei corespunde ieșirii care minimizează eroarea . Pentru un singur caz de antrenament, minimul atinge și axa orizontală, ceea ce înseamnă că eroarea va fi zero și rețeaua poate produce o ieșire care se potrivește exact cu ieșirea țintă . Prin urmare, problema mapării intrărilor la ieșiri poate fi redusă la o a găsirii unei funcții care va produce eroarea minimă. dreapta|miniatura|250x250px| Suprafața de eroare a unui neuron liniar pentru un singur caz de antrenament Ieșirea unui neuron depinde însă de suma ponderată a tuturor intrărilor sale:
Unde și sunt ponderile conexiunii de la unitățile de intrare la unitatea de ieșire. Prin urmare, eroarea depinde și de ponderile de intrare ale neuronului, care este în cele din urmă ceea ce trebuie schimbat în rețea pentru a permite învățarea.