logo

Gated terugkerende eenheidsnetwerken

Gated Recurrent Unit (GRU) is een type terugkerend neuraal netwerk (RNN) dat werd geïntroduceerd door Cho et al. in 2014 als een eenvoudiger alternatief voor Long Short-Term Memory (LSTM) -netwerken. Net als LSTM kan GRU sequentiële gegevens verwerken, zoals tekst-, spraak- en tijdreeksgegevens.

Het basisidee achter GRU is om poortmechanismen te gebruiken om bij elke tijdstap selectief de verborgen status van het netwerk bij te werken. De poortmechanismen worden gebruikt om de informatiestroom in en uit het netwerk te controleren. De GRU heeft twee poortmechanismen, de reset-poort en de update-poort.



De resetpoort bepaalt hoeveel van de vorige verborgen status moet worden vergeten, terwijl de updatepoort bepaalt hoeveel van de nieuwe invoer moet worden gebruikt om de verborgen status bij te werken. De uitvoer van de GRU wordt berekend op basis van de bijgewerkte verborgen status.

De vergelijkingen die worden gebruikt om de resetpoort, updatepoort en verborgen status van een GRU te berekenen zijn als volgt:

Poort resetten: r_t = sigmoïde(W_r * [h_{t-1}, x_t])
Update poort: z_t = sigmoïde(W_z * [h_{t-1}, x_t])
Kandidaat verborgen staat: h_t’ = tanh(W_h * [r_t * h_{t-1}, x_t])
Verborgen staat: h_t = (1 – z_t) * h_{t-1} + z_t * h_t’
waarbij W_r, W_z en W_h leerbare gewichtsmatrices zijn, is x_t de invoer op tijdstap t, is h_{t-1} de vorige verborgen toestand, en h_t is de huidige verborgen toestand.



Samenvattend zijn GRU-netwerken een soort RNN die poortmechanismen gebruiken om de verborgen status bij elke tijdstap selectief bij te werken, waardoor ze op effectieve wijze sequentiële gegevens kunnen modelleren. Er is aangetoond dat ze effectief zijn bij verschillende natuurlijke taalverwerkingstaken, zoals taalmodellering, automatische vertaling en spraakherkenning

Vereisten: terugkerende neurale netwerken, langetermijngeheugennetwerken

Om het probleem van verdwijnende en exploderende gradiënten op te lossen dat vaak voorkomt tijdens de werking van een fundamenteel terugkerend neuraal netwerk, zijn er veel variaties ontwikkeld. Een van de bekendste varianten is de Langetermijngeheugennetwerk (LSTM) . Een van de minder bekende maar even effectieve varianten is de Gated Recurrent Unit-netwerk (GRU) .

In tegenstelling tot LSTM bestaat het uit slechts drie poorten en onderhoudt het geen interne celstatus. De informatie die is opgeslagen in de interne celstatus in een terugkerende LSTM-eenheid, wordt opgenomen in de verborgen toestand van de Gated Recurrent Unit. Deze collectieve informatie wordt doorgegeven aan de volgende Gated Recurrent Unit. De verschillende poorten van een GRU zijn zoals hieronder beschreven: -

    Update Gate(z): Het bepaalt hoeveel van de kennis uit het verleden moet worden doorgegeven aan de toekomst. Het is analoog aan de Output Gate in een terugkerende LSTM-eenheid. Reset Gate(r): Het bepaalt hoeveel van de kennis uit het verleden moet worden vergeten. Het is analoog aan de combinatie van de invoerpoort en de vergeetpoort in een terugkerende LSTM-eenheid. Huidige geheugenpoort ( overline{h}_{t} = tanh(Wodot x_{t}+Wodot (r_{t}odot h_{t-1})) ): Het wordt vaak over het hoofd gezien tijdens een typische discussie over Gated Recurrent Unit Network. Het is opgenomen in de Reset Gate, net zoals de Input Modulation Gate een subonderdeel is van de Input Gate en wordt gebruikt om enige niet-lineariteit in de input te introduceren en ook om de input Zero-mean te maken. Een andere reden om er een subonderdeel van de Reset-poort van te maken, is om het effect te verminderen dat eerdere informatie heeft op de huidige informatie die wordt doorgegeven aan de toekomst.

De basiswerkstroom van een Gated Recurrent Unit Network is vergelijkbaar met die van een standaard Recurrent Neural Network, indien geïllustreerd. Het belangrijkste verschil tussen de twee zit in de interne werking binnen elke terugkerende eenheid, aangezien Gated Recurrent Unit-netwerken bestaan ​​uit poorten die de huidige invoer en de vorige verborgen status.



Werking van een gated terugkerende eenheid:

  • Neem de huidige invoer en de vorige verborgen status als vectoren.
  • Bereken de waarden van de drie verschillende poorten door de onderstaande stappen te volgen: -
    1. Bereken voor elke poort de geparametriseerde huidige ingangsvectoren en voorheen verborgen toestandsvectoren door elementgewijze vermenigvuldiging (Hadamard-product) uit te voeren tussen de betreffende vector en de respectieve gewichten voor elke poort.
    2. Pas de respectieve activeringsfunctie voor elke poort elementsgewijs toe op de geparametreerde vectoren. Hieronder vindt u de lijst met poorten met de activeringsfunctie die voor de poort moet worden toegepast.
 Update Gate : Sigmoid Function Reset Gate : Sigmoid Function>
  • Het proces voor het berekenen van de huidige geheugenpoort is een beetje anders. Eerst wordt het Hadamard-product van de Reset Gate en de voorheen verborgen toestandsvector berekend. Vervolgens wordt deze vector geparametriseerd en vervolgens toegevoegd aan de geparametriseerde stroomingangsvector.

    h_{t} = z_{t}odot h_{t-1} + (1-z_{t})odot overline{h}_{t}
  • Om de huidige verborgen status te berekenen, wordt eerst een vector van enen en dezelfde afmetingen als die van de invoer gedefinieerd. Deze vector wordt enen genoemd en wordt wiskundig aangegeven met 1. Bereken eerst het Hadamard-product van de updatepoort en de voorheen verborgen toestandsvector. Genereer vervolgens een nieuwe vector door de updatepoort van de enen af ​​te trekken en bereken vervolgens het Hadamard-product van de nieuw gegenereerde vector met de huidige geheugenpoort. Voeg ten slotte de twee vectoren toe om de momenteel verborgen statusvector te krijgen.
    E_{t} = -y_{t}log(overline{y}_{t})

    De bovengenoemde werking wordt als volgt weergegeven: -

Merk op dat de blauwe cirkels elementgewijze vermenigvuldiging aangeven. Het positieve teken in de cirkel geeft vectoroptelling aan, terwijl het negatieve teken vectoraftrekking aangeeft (vectoroptelling met negatieve waarde). De gewichtsmatrix W bevat verschillende gewichten voor de huidige invoervector en de vorige verborgen toestand voor elke poort.

Net als Recurrent Neural Networks genereert een GRU-netwerk ook bij elke tijdstap een output en deze output wordt gebruikt om het netwerk te trainen met behulp van gradiëntdaling.

Merk op dat, net als de workflow, het trainingsproces voor een GRU-netwerk ook schematisch vergelijkbaar is met dat van een basis Recurrent Neural Network en alleen verschilt in de interne werking van elke terugkerende eenheid.

Het back-propagation through time-algoritme voor een gated recurrent unit-netwerk is vergelijkbaar met dat van een langetermijngeheugennetwerk en verschilt alleen in de differentiële ketenvorming.

Laten E = som _{t} E_{t}de voorspelde output bij elke tijdstap zijn en Pijl naar rechts E = sum _{t} -y_{t}log(overline{y}_{t})de werkelijke output bij elke tijdstap zijn. Vervolgens wordt de fout bij elke tijdstap gegeven door: -

frac{gedeeltelijke E}{gedeeltelijke W} = som _{t} frac{gedeeltelijke E_{t}}{gedeeltelijke W}

De totale fout wordt dus gegeven door de som van de fouten in alle tijdstappen.

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

Zo ook de waarde h_{t} = z_{t}odot h_{t-1} + (1-z_{t})odot overline{h}_{t}kan worden berekend als de som van de gradiënten bij elke tijdstap.

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

Gebruik de kettingregel en gebruik het feit dat overline{h}_{t} = tanh(Wodot x_{t}+Wodot (r_{t}odot h_{t-1}))is een functie van frac{gedeeltelijk overline{h_{t}}}{gedeeltelijk h_{t-1}} = frac{gedeeltelijk (tanh(Wodot x_{t}+Wodot (r_{t} odot h_{t-1})))}{gedeeltelijk h_{t-1}} Rightarrow frac{gedeeltelijk overline{h_{t}}}{gedeeltelijk h_{t-1}} = (1 -overline{h}_{t}^{2})(Wodot r)en dat is inderdaad een functie van , ontstaat de volgende uitdrukking: -



De totale foutgradiënt wordt dus gegeven door het volgende:



Merk op dat de gradiëntvergelijking een keten van omvat dat lijkt op dat van een fundamenteel terugkerend neuraal netwerk, maar deze vergelijking werkt anders vanwege de interne werking van de afgeleiden van .

Hoe lossen Gated Recurrent Units het probleem van verdwijnende gradiënten op?

De waarde van de gradiënten wordt bepaald door de keten van derivaten vanaf . Denk aan de uitdrukking voor :-



Met behulp van de bovenstaande expressie wordt de waarde voor is:-



Denk aan de uitdrukking voor :-



Gebruik de bovenstaande uitdrukking om de waarde van te berekenen :-



Omdat zowel de update- als de reset-poort de sigmoïdefunctie als activeringsfunctie gebruiken, kunnen beide waarden 0 of 1 aannemen.

Geval 1(z = 1):

In dit geval, ongeacht de waarde van , de voorwaarde is gelijk aan z, wat op zijn beurt gelijk is aan 1.

Geval 2A(z=0 en r=0):

In dit geval de termijn is gelijk aan 0.

Geval 2B(z=0 en r=1):

In dit geval de termijn is gelijk aan . Deze waarde wordt bepaald door de gewichtsmatrix die trainbaar is en zo leert het netwerk de gewichten zo aan te passen dat de term komt dichter bij 1.

Het Back-Propagation Through Time-algoritme past dus de respectieve gewichten zo aan dat de waarde van de keten van derivaten zo dicht mogelijk bij 1 ligt.