logo

Rețele de unități recurente Gated

Gated Recurrent Unit (GRU) este un tip de rețea neuronală recurentă (RNN) care a fost introdusă de Cho și colab. în 2014, ca alternativă mai simplă la rețelele de memorie pe termen scurt (LSTM). La fel ca LSTM, GRU poate procesa date secvențiale, cum ar fi text, vorbire și date din serii de timp.

Ideea de bază din spatele GRU este utilizarea mecanismelor de deschidere pentru a actualiza selectiv starea ascunsă a rețelei la fiecare pas de timp. Mecanismele de intrare sunt utilizate pentru a controla fluxul de informații în și în afara rețelei. GRU are două mecanisme de acces, numite poarta de resetare și poarta de actualizare.



Poarta de resetare determină cât de mult din starea ascunsă anterioară ar trebui uitată, în timp ce poarta de actualizare determină cât de mult din noua intrare ar trebui utilizată pentru a actualiza starea ascunsă. Ieșirea GRU este calculată pe baza stării ascunse actualizate.

Ecuațiile utilizate pentru a calcula poarta de resetare, poarta de actualizare și starea ascunsă a unui GRU sunt următoarele:

Resetează poarta: r_t = sigmoid(W_r * [h_{t-1}, x_t])
Actualizare poarta: z_t = sigmoid(W_z * [h_{t-1}, x_t])
Stare ascunsă a candidatului: h_t’ = tanh(W_h * [r_t * h_{t-1}, x_t])
Stare ascunsă: h_t = (1 – z_t) * h_{t-1} + z_t * h_t’
unde W_r, W_z și W_h sunt matrici de greutate învățabile, x_t este intrarea la pasul de timp t, h_{t-1} este starea ascunsă anterioară și h_t este starea ascunsă curentă.



În rezumat, rețelele GRU sunt un tip de RNN care utilizează mecanisme de deschidere pentru a actualiza selectiv starea ascunsă la fiecare pas de timp, permițându-le să modeleze în mod eficient datele secvențiale. S-au dovedit a fi eficiente în diverse sarcini de procesare a limbajului natural, cum ar fi modelarea limbajului, traducerea automată și recunoașterea vorbirii

Cerințe preliminare: rețele neuronale recurente, rețele de memorie pe termen lung și scurt

Pentru a rezolva problema gradienților de dispariție-explodare întâlnită adesea în timpul funcționării unei rețele neuronale recurente de bază, au fost dezvoltate multe variații. Una dintre cele mai cunoscute variante este Rețea de memorie pe termen lung (LSTM) . Una dintre variantele mai puțin cunoscute, dar la fel de eficiente este Rețeaua de unități recurente cu setare (GRU) .

Spre deosebire de LSTM, este format din doar trei porți și nu menține o stare internă a celulei. Informațiile care sunt stocate în starea internă a celulei într-o unitate recurentă LSTM sunt încorporate în starea ascunsă a unității recurente Gated. Aceste informații colective sunt transmise următoarei Unități Recurente Gated. Diferitele porți ale unui GRU sunt descrise mai jos: -

    Update Gate(z): Determină cât de mult din cunoștințele trecute trebuie transmise în viitor. Este analog cu Poarta de ieșire dintr-o unitate recurentă LSTM. Reset Gate(r): Determină cât de mult din cunoștințele trecute trebuie uitat. Este analog cu combinația dintre Poarta de intrare și Poarta Uitare într-o unitate recurentă LSTM. Poarta de memorie curentă ( overline{h}_{t} = tanh(Wodot x_{t}+Wodot (r_{t}odot h_{t-1})) ): Este adesea trecută cu vederea în timpul unei discuții tipice despre Gated Recurrent Unit Network. Este încorporat în poarta de resetare la fel cum poarta de modulare a intrării este o sub-parte a porții de intrare și este folosită pentru a introduce o oarecare neliniaritate în intrare și, de asemenea, pentru a face intrarea zero-medie. Un alt motiv pentru a face din aceasta o sub-parte a porții de resetare este reducerea efectului pe care informațiile anterioare îl au asupra informațiilor curente care sunt transmise în viitor.

Fluxul de lucru de bază al unei rețele de unități recurente Gated este similar cu cel al unei rețele neuronale recurente de bază, atunci când este ilustrat, principala diferență dintre cele două constă în funcționarea internă în cadrul fiecărei unități recurente, deoarece rețelele de unități recurente Gated constau din porți care modulează intrare curentă și starea anterioară ascunsă.



Funcționarea unei unități recurente Gated:

  • Introduceți intrarea curentă și starea ascunsă anterioară ca vectori.
  • Calculați valorile celor trei porți diferite urmând pașii de mai jos: -
    1. Pentru fiecare poartă, calculați intrarea curentă parametrizată și vectorii de stare ascunși anterior efectuând înmulțirea pe elemente (Produsul Hadamard) între vectorul în cauză și greutățile respective pentru fiecare poartă.
    2. Aplicați funcția de activare respectivă pentru fiecare element de poartă pe vectorii parametrizați. Mai jos este prezentată lista porților cu funcția de activare care urmează să fie aplicată pentru poartă.
 Update Gate : Sigmoid Function Reset Gate : Sigmoid Function>
  • Procesul de calcul al Porții de memorie curentă este puțin diferit. Mai întâi, se calculează produsul Hadamard al porții de resetare și vectorul de stare ascuns anterior. Apoi acest vector este parametrizat și apoi adăugat la vectorul de intrare curent parametrizat.

    h_{t} = z_{t}odot h_{t-1} + (1-z_{t})odot overline{h}_{t}
  • Pentru a calcula starea ascunsă curentă, mai întâi, este definit un vector de uni și aceleași dimensiuni ca și cea a intrării. Acest vector va fi numit uni și matematic va fi notat cu 1. Mai întâi, calculați Produsul Hadamard al porții de actualizare și vectorul de stare ascuns anterior. Apoi generați un nou vector scăzând poarta de actualizare din unele și apoi calculați Produsul Hadamard al vectorului nou generat cu poarta de memorie curentă. În cele din urmă, adăugați cei doi vectori pentru a obține vectorul de stare ascuns în prezent.
    E_{t} = -y_{t}log(overline{y}_{t})

    Lucrările menționate mai sus sunt prezentate după cum urmează:

Rețineți că cercurile albastre indică înmulțirea în funcție de elemente. Semnul pozitiv din cerc denotă adunarea vectorială, în timp ce semnul negativ denotă scăderea vectorială (adunare vectorială cu valoare negativă). Matricea de ponderi W conține ponderi diferite pentru vectorul de intrare curent și starea ascunsă anterioară pentru fiecare poartă.

La fel ca și rețelele neuronale recurente, o rețea GRU generează, de asemenea, o ieșire la fiecare pas de timp, iar această ieșire este folosită pentru a antrena rețeaua folosind coborârea gradientului.

Rețineți că, la fel ca fluxul de lucru, procesul de instruire pentru o rețea GRU este, de asemenea, schematic similar cu cel al unei rețele neuronale recurente de bază și diferă doar în funcționarea internă a fiecărei unități recurente.

Algoritmul de propagare inversă prin timp pentru o rețea de unități recurente cu poartă este similar cu cel al unei rețele de memorie pe termen scurt și lung și diferă doar în formarea lanțului diferențial.

Lăsa E = sum _{t} E_{t}să fie rezultatul prezis la fiecare pas de timp și Rightarrow E = sum _{t} -y_{t}log(overline{y}_{t})fie rezultatul real la fiecare pas de timp. Atunci eroarea la fiecare pas de timp este dată de: -

frac{partial E}{partial W} = sum _{t} frac{partial E_{t}}{partial W}

Eroarea totală este astfel dată de însumarea erorilor în toate etapele de timp.

frac{partial E_{t}}{partial W} = frac{partial E_{t}}{partial overline{y}_{t}}frac{partial overline{y}_ {t}}{partial h_{t}}frac{partial h_{t}}{partial h_{t-1}}frac{partial h_{t-1}}{partial h_{t -2}}......frac{partial h_{0}}{partial W}
frac{partial E}{partial W} = sum _{t}frac{partial E_{t}}{partial overline{y}_{t}}frac{partial overline{ y}_{t}}{partial h_{t}}frac{partial h_{t}}{partial h_{t-1}}frac{partial h_{t-1}}{partial h_{t-2}}......frac{partial h_{0}}{partial W}

În mod similar, valoarea h_{t} = z_{t}odot h_{t-1} + (1-z_{t})odot overline{h}_{t}poate fi calculată ca însumarea gradienților la fiecare pas de timp.

frac{partial h_{t}}{partial h_{t-1}} = z + (1-z)frac{partial overline{h}_{t}}{partial h_{t- 1}}

Folosind regula lanțului și folosind faptul că overline{h}_{t} = tanh(Wodot x_{t}+Wodot (r_{t}odot h_{t-1}))este o functie a frac{partial overline{h_{t}}}{partial h_{t-1}} = frac{partial (tanh(Wodot x_{t}+Wodot (r_{t} odot h_{t-1})))}{partial h_{t-1}} Rightarrow frac{partial overline{h_{t}}}{partial h_{t-1}} = (1 -overline{h}_{t}^{2})(Wodot r)și care într-adevăr este o funcție a , apare următoarea expresie:



Astfel, gradientul total de eroare este dat de următoarele:



Rețineți că ecuația gradientului implică un lanț de care arată similar cu cel al unei rețele neuronale recurente de bază, dar această ecuație funcționează diferit din cauza funcționării interne a derivatelor de .

Cum rezolvă unitățile recurente Gated problema gradienților care dispar?

Valoarea gradienților este controlată de lanțul de derivate pornind de la . Amintiți-vă expresia pentru :-



Folosind expresia de mai sus, valoarea pentru este:-



Amintiți-vă expresia pentru :-



Folosind expresia de mai sus pentru a calcula valoarea lui :-



Deoarece atât poarta de actualizare, cât și cea de resetare folosesc funcția sigmoid ca funcție de activare, ambele pot lua valori fie 0, fie 1.

Cazul 1 (z = 1):

În acest caz, indiferent de valoarea , termenul este egal cu z care, la rândul său, este egal cu 1.

Cazul 2A(z=0 și r=0):

În acest caz, termenul este egal cu 0.

Cazul 2B(z=0 și r=1):

În acest caz, termenul este egal cu . Această valoare este controlată de matricea de ponderi care este antrenabilă și astfel rețeaua învață să ajusteze ponderile în așa fel încât termenul se apropie de 1.

Astfel, algoritmul Back-Propagation Through Time ajustează ponderile respective în așa fel încât valoarea lanțului de derivate să fie cât mai aproape de 1.