Articles

înțelegerea rețelelor neuronale 2: Matematica rețelelor neuronale în 3 ecuații

în prima parte a acestei serii am discutat conceptul de rețea neuronală, precum și matematica care descrie un singur neuron. Există totuși mulți neuroni într-un singur strat și multe straturi în întreaga rețea, așa că trebuie să venim cu o ecuație generală care descrie o rețea neuronală.

neuron unic

primul lucru pe care rețeaua noastră trebuie să-l facă este să transmită informații înainte prin straturi. Știm deja cum să facem acest lucru pentru un singur neuron:

ieșirea neuronului este funcția de activare a unei sume ponderate a intrării neuronului

2 neuronii

acum putem aplica aceeași logică atunci când avem 2 neuroni în al doilea strat.

în acest exemplu, fiecare neuron al primului strat este conectat la fiecare neuron al celui de-al doilea strat, acest tip de rețea se numește rețea complet conectată. Neuronul Y1 este conectat la neuronii X1 și X2 cu greutăți W11 și W12, iar neuronul Y2 este conectat la neuronii X1 și X2 cu greutăți W21 și W22. În această notație, primul indice al greutății indică neuronul de ieșire, iar al doilea indice indică neuronul de intrare, deci, de exemplu, W12 este greutatea la conexiunea de la X2 la Y1. Acum putem scrie ecuațiile pentru Y1 și Y2:

acum această ecuație poate fi exprimată folosind multiplicarea matricei.

vizualizarea multiplicării matricei din http://matrixmultiplication.xyz/

dacă sunteți nou în multiplicarea matricei și algebra liniară și acest lucru vă face confuz, vă recomand cu încredere seria de algebră liniară 3blue1brown.

acum putem scrie ieșirea primului neuron ca Y1 și ieșirea celui de-al doilea neuron ca Y2. Aceasta ne oferă următoarea ecuație:

întregul strat

din aceasta putem rezuma regula generală pentru ieșirea stratului:

acum, în această ecuație, toate variabilele sunt matrice, iar semnul de multiplicare reprezintă multiplicarea matricei.

utilizarea matricei în ecuație ne permite să o scriem într-o formă simplă și o face adevărată pentru orice număr de intrare și neuroni din ieșire.

în programarea rețelelor neuronale folosim și multiplicarea matricei, deoarece acest lucru ne permite să facem calculul paralel și să folosim hardware eficient pentru acesta, cum ar fi plăcile grafice.

acum avem ecuație pentru un singur strat, dar nimic nu ne oprește să luăm ieșirea acestui strat și să-l folosim ca intrare la următorul strat. Acest lucru ne oferă ecuația generică care descrie ieșirea fiecărui strat de rețea neuronală. Încă un lucru, trebuie să adăugăm, este funcția de activare, voi explica de ce avem nevoie de funcții de activare în următoarea parte a seriei, deocamdată vă puteți gândi ca o modalitate de a scala ieșirea, astfel încât să nu devină prea mare sau prea nesemnificativă.

cu această ecuație, putem propaga informațiile prin câte straturi ale rețelei neuronale dorim. Dar fără nici o învățare, rețeaua neuronală este doar un set de multiplicări ale matricei aleatorii care nu înseamnă nimic.

Deci, cum să ne învățăm rețeaua neuronală? În primul rând, trebuie să calculăm eroarea rețelei neuronale și să ne gândim cum să transmitem această eroare tuturor straturilor.

2 : trecerea error — Back-propagation

pentru a înțelege algoritmul de propagare a erorilor trebuie să ne întoarcem la un exemplu cu 2 neuroni în primul strat și 1 neuron în al doilea strat.

să presupunem că stratul Y este stratul de ieșire al rețelei și neuronul Y1 ar trebui să returneze o anumită valoare. Acum, această valoare poate fi diferită de valoarea așteptată cu destul de puțin, deci există o eroare pe neuronul Y1. Ne putem gândi la această eroare ca la diferența dintre valoarea returnată și valoarea așteptată. Știm eroarea pe Y1, dar trebuie să transmitem această eroare straturilor inferioare ale rețelei, deoarece dorim ca toate straturile să învețe, nu numai stratul Y. Deci, cum să treci această eroare la X1 și X2? Ei bine, o abordare naivă ar fi împărțirea uniformă a erorii Y1, deoarece există 2 neuroni în stratul X, am putea spune că eroarea x1 și X2 este egală cu eroarea Y1 concepută de 2.

există totuși o problemă majoră cu această abordare — neuronii au greutăți diferite legate de ele. Dacă greutatea conectată la neuronul X1 este mult mai mare decât greutatea conectată la neuronul X2 eroarea pe Y1 este mult mai influențată de X1 deoarece Y1 = ( X1 * W11 + X2 * X12). Deci, dacă W11 este mai mare decât W12, ar trebui să transmitem mai mult din eroarea Y1 către neuronul X1, deoarece acesta este neuronul care contribuie la acesta.

acum că am observat – o, putem actualiza algoritmul nostru pentru a nu împărți eroarea în mod egal, ci pentru a o împărți în funcție de rația greutății neuronului de intrare la toate greutățile care vin la neuronul de ieșire.

actualizați greutatea

acum putem merge cu un pas mai departe și să analizăm exemplul în care există mai mult de un neuron în stratul de ieșire.

în acest exemplu vedem că, de exemplu, neuronul X1 contribuie nu numai la eroarea lui Y1, ci și la eroarea lui Y2 și această eroare este încă proporțională cu greutățile sale. Deci, în ecuația care descrie eroarea lui X1, avem nevoiepentru a avea atât eroarea lui Y1 înmulțită cu raportul greutăților, cât și eroarea lui Y2 înmulțită cu raportul greutăților care vin la Y2.

această ecuație poate fi scrisă și sub forma multiplicării matricei.

acum există încă un truc pe care îl putem face pentru a simplifica această cotație fără a pierde o mulțime de informații relevante. Numitorul raportului de greutate, acționează ca un factor de normalizare, deci nu ne pasă atât de mult de el, parțial pentru că ecuația finală vom avea alte mijloace de reglare a învățării rețelei neuronale.

aceasta este, de asemenea, încă o observație pe care o putem face. Putem vedea că matricea cu greutate în această ecuație este destul de similară cu matricea din algoritmul de avansare. Diferența este că rândurile și coloanele sunt comutate. În algebră numim această transpunere a matricei.

deoarece nu este nevoie de a utiliza 2 variabile diferite, putem folosi doar aceeași variabilă din feed forward algoritm. Aceasta ne oferă ecuația generală a algoritmului de propagare înapoi

rețineți că în algoritmul feed-forward vom forma primul strat până la ultimul, dar în propagarea din spate vom forma ultimul strat al rețelei la primul, deoarece pentru a calcula eroarea într-un strat dat avem nevoie de informații despre eroare în următorul strat.

articole în tendințe AI:

1. Cum am folosit învățarea automată ca inspirație pentru picturile fizice

2. MS sau Startup Job — ce mod de a merge pentru a construi o carieră în Deep Learning?

3. Top 100 articole medii legate de inteligența artificială

4. Conferința de inteligență artificială

acum, că știm cum să transmitem informațiile înainte și să transmitem eroarea înapoi, putem folosi eroarea la fiecare strat pentru a actualiza greutatea.

3 : Actualizarea greutăților

acum, că știm ce erori face rețeaua neuronală la fiecare strat, putem începe în cele din urmă să învățăm rețeaua noastră să găsească cea mai bună soluție la problemă.

dar care este cea mai bună soluție?

eroarea ne informează despre cât de greșite sunt soluțiile noastre, deci, în mod natural, cea mai bună soluție ar fi cea în care funcția de eroare este minimă.

funcția de eroare depinde de greutățile rețelei, așa că dorim să găsim astfel de valori de greutăți care au ca rezultat minimul global în funcția de eroare. Rețineți că această imagine este doar pentru scopul de vizualizare. În aplicațiile din viața reală avem mai mult de 1 greutate, astfel încât funcția de eroare este funcția de înaltă Dimensiune.

dar cum găsim minimul acestei funcții? O idee simplă aici este să începeți cu greutăți aleatorii, să calculați funcția de eroare pentru acele greutăți și apoi să verificați panta acestei funcții pentru a merge în jos.

dar cum ajungem să cunoaștem panta funcției?

putem folosi algebra liniară încă o dată și putem folosi faptul că derivata unei funcții la un moment dat este egală cu panta unei funcții în acest moment. Putem scrie acest derivat în felul următor:

Unde E este funcția noastră de eroare și W reprezintă greutățile. Această notație ne informează că dorim să găsim derivata funcției de eroare în ceea ce privește greutatea. Folosim n + 1 cu eroarea, deoarece în notația noastră ieșirea rețelei neuronale după greutățile Wn este pe+1.

putem folosi apoi acest derivat pentru a actualiza greutatea:

aceasta reprezintă „merge în jos” fiecare iterație de învățare (epocă) vom actualiza greutatea în funcție de panta derivatului funcției de eroare.

mai avem nevoie de un lucru înainte de a prezenta ecuația finală și anume rata de învățare. Rata de învățare reglementează cât de mari pași facem în timpul coborârii.

după cum puteți vedea cu o rată de învățare mai mare, facem pași mai mari. Acest lucru înseamnă că putem ajunge la optimul funcției mai repede, dar există, de asemenea, o șansă răzătoare vom dor de ea.

cu rata de învățare mai mică, facem pași mai mici, ceea ce duce la necesitatea mai multor epoci pentru a atinge minimul funcției, dar există o șansă mai mică să o ratăm.

de aceea, în practică, folosim adesea rata de învățare care depinde de pașii anteriori, de ex. dacă există o tendință puternică de a merge într-o direcție, putem face pași mai mari (rata de învățare mai mare), dar dacă direcția continuă să se schimbe, ar trebui să facem pași mai mici (rata de învățare mai mică) pentru a căuta minimul mai bun. Cu toate acestea, în exemplul nostru, vom lua abordarea simplă și vom folosi valoarea ratei fixe de învățare. Aceasta ne oferă următoarea ecuație.

rata de învățare (LR) este un număr în rage 0 — 1. Cu cât este mai mică, cu atât este mai mică schimbarea greutăților. Dacă învățarea este aproape de 1. folosim valoarea completă a derivatului pentru a actualiza greutățile și dacă este aproape de 0, folosim doar o mică parte din acesta. Aceasta înseamnă că rata de învățare, așa cum sugerează și numele, reglementează cât de mult „învață” rețeaua într-o singură iterație.

actualizarea greutăților a fost ecuația finală de care aveam nevoie în rețeaua noastră neuronală. Ecuațiile sunt responsabile pentru învățarea efectivă a rețelei și pentru predarea acesteia pentru a da rezultate semnificative în loc de valori aleatorii.

pune totul împreună

Feed-forward

Back-propagare

actualizarea greutăților

Lasă un răspuns

Adresa ta de email nu va fi publicată.