logo

Aidatut toistuvat yksikköverkot

Gated Recurrent Unit (GRU) on eräänlainen toistuva hermoverkko (RNN), jonka esittelivät Cho et al. vuonna 2014 yksinkertaisempana vaihtoehtona Long Short-Term Memory (LSTM) -verkoille. Kuten LSTM, GRU voi käsitellä peräkkäistä dataa, kuten tekstiä, puhetta ja aikasarjadataa.

GRU:n perusideana on käyttää avainnusmekanismeja verkon piilotetun tilan päivittämiseen valikoivasti jokaisessa aikavaiheessa. Avainnusmekanismeja käytetään ohjaamaan tiedonkulkua verkkoon ja sieltä pois. GRU:ssa on kaksi avainnusmekanismia, joita kutsutaan nollausportiksi ja päivitysportiksi.



kuinka tietää, onko joku estänyt sinut Androidissa

Nollausportti määrittää, kuinka suuri osa aiemmasta piilotilasta tulee unohtaa, kun taas päivitysportti määrittää, kuinka paljon uutta tuloa käytetään piilotetun tilan päivittämiseen. GRU:n lähtö lasketaan päivitetyn piilotetun tilan perusteella.

GRU:n nollausportin, päivitysportin ja piilotetun tilan laskemiseen käytetyt yhtälöt ovat seuraavat:

Palauta portti: r_t = sigmoidi(W_r * [t_{t-1}, x_t])
Päivitä portti: z_t = sigmoidi(W_z * [h_{t-1}, x_t])
Ehdokas piilotettu tila: h_t' = tanh(W_t * [r_t * h_{t-1}, x_t])
Piilotettu tila: h_t = (1 – z_t) * h_{t-1} + z_t * h_t'
missä W_r, W_z ja W_h ovat opittavia painomatriiseja, x_t on syöte ajanvaiheessa t, h_{t-1} on edellinen piilotettu tila ja h_t on nykyinen piilotettu tila.



Yhteenvetona voidaan todeta, että GRU-verkot ovat eräänlainen RNN, joka käyttää avainnusmekanismeja piilotetun tilan valikoivaan päivittämiseen jokaisessa aikavaiheessa, jolloin ne voivat mallintaa tehokkaasti peräkkäistä dataa. Niiden on osoitettu olevan tehokkaita erilaisissa luonnollisen kielen käsittelytehtävissä, kuten kielen mallintamisessa, konekääntämisessä ja puheentunnistuksessa

Esitiedot: Recurrent Neural Networks, Long Short Term Memory Networks

Toistuvan perushermoverkon toiminnan aikana usein kohtaaman katoava-räjähtävien gradienttiongelman ratkaisemiseksi kehitettiin monia muunnelmia. Yksi tunnetuimmista muunnelmista on Pitkä lyhytaikainen muistiverkko (LSTM) . Yksi vähemmän tunnetuista mutta yhtä tehokkaista muunnelmista on Aidattu toistuvien yksiköiden verkko (GRU) .

Toisin kuin LSTM, se koostuu vain kolmesta portista, eikä se ylläpidä sisäistä solutilaa. Tieto, joka on tallennettu sisäiseen solun tilaan toistuvassa LSTM-yksikössä, sisällytetään portitetun toistuvan yksikön piilotettuun tilaan. Nämä kollektiiviset tiedot välitetään seuraavalle aidatulla toistuvaan yksikköön. GRU:n eri portit on kuvattu alla:-

    Päivitysportti(z): Se määrittää, kuinka paljon menneestä tiedosta on siirrettävä tulevaisuuteen. Se on analoginen toistuvan LSTM-yksikön lähtöportin kanssa. Reset Gate(r): Se määrittää, kuinka suuri osa menneestä tiedosta unohdetaan. Se on analoginen tuloportin ja unohda portin yhdistelmän kanssa toistuvassa LSTM-yksikössä. Current Memory Gate( overline{h}_{t} = tanh(Wodot x_{t}+Wodot (r_{t}odot h_{t-1})) ): Se jätetään usein huomiotta tyypillisessä keskustelussa Gated Recurrent Unit Networkista. Se on sisällytetty nollausporttiin, aivan kuten Input Modulation Gate on tuloportin alaosa, ja sitä käytetään tuomaan sisääntuloon epälineaarisuutta ja tekemään tulosta myös nollakeskiarvo. Toinen syy tehdä se Reset-portin alaosaksi on vähentää vaikutusta, joka aiemmalla tiedolla on nykyiseen tulevaisuuteen siirrettävään tietoon.

Avainnetun toistuvan yksikön verkon perustyönkulku on samanlainen kuin tavallisen toistuvan hermoverkon, kun se on kuvattu. Suurin ero näiden kahden välillä on sisäisessä toiminnassa kunkin toistuvan yksikön sisällä, koska avainnetut toistuvien yksiköiden verkot koostuvat porteista, jotka moduloivat nykyinen tulo ja edellinen piilotettu tila.



Aidatun toistuvan yksikön työskentely:

  • Ota syöte nykyinen tulo ja edellinen piilotettu tila vektoreina.
  • Laske kolmen eri portin arvot noudattamalla alla olevia vaiheita: -
    1. Laske kullekin portille parametroitu virtatulo ja aiemmin piilotetut tilavektorit suorittamalla elementtikohtainen kertolasku (Hadamard-tulo) kyseisen vektorin ja kunkin portin vastaavien painojen välillä.
    2. Käytä kullekin porttielementille vastaavaa aktivointifunktiota parametroiduissa vektoreissa. Alla on luettelo porteista, joissa on portille käytettävä aktivointitoiminto.
 Update Gate : Sigmoid Function Reset Gate : Sigmoid Function>
  • Nykyisen muistiportin laskentaprosessi on hieman erilainen. Ensin lasketaan nollausportin ja aiemmin piilotetun tilavektorin Hadamard-tulo. Sitten tämä vektori parametroidaan ja lisätään sitten parametroituun virtatulovektoriin.

    h_{t} = z_{t}odot h_{t-1} + (1-z_{t})odot overline{h}_{t}
  • Nykyisen piilotilan laskemiseksi määritetään ensin ykkösten vektori ja samat mitat kuin tulolla. Tätä vektoria kutsutaan ykkösiksi ja se merkitään matemaattisesti 1:llä. Laske ensin päivitysportin ja aiemmin piilotetun tilavektorin Hadamard-tulo. Luo sitten uusi vektori vähentämällä päivitysportti niistä ja laske sitten Hadamard-tulo vastikään luodulle vektorille nykyisellä muistiportilla. Lisää lopuksi kaksi vektoria saadaksesi tällä hetkellä piilotetun tilavektorin.
    E_{t} = -y_{t}loki(overline{y}_{t})

    Yllämainittu työskentely on ilmoitettu seuraavasti: -

normalisointi tietokannassa

Huomaa, että siniset ympyrät tarkoittavat elementtikohtaista kertolaskua. Ympyrän positiivinen merkki tarkoittaa vektorin yhteenlaskua, kun taas negatiivinen merkki tarkoittaa vektorin vähennystä (vektorin yhteenlasku negatiivisella arvolla). Painomatriisi W sisältää erilaiset painot kullekin portille nykyiselle tulovektorille ja edelliselle piilotilalle.

Aivan kuten toistuvat hermoverkot, myös GRU-verkko tuottaa lähdön jokaisessa aikavaiheessa, ja tätä lähtöä käytetään verkon kouluttamiseen gradienttilaskua käyttämällä.

Huomaa, että kuten työnkulku, myös GRU-verkon koulutusprosessi on kaaviomaisesti samanlainen kuin tavallisen toistuvan hermoverkon koulutusprosessi ja eroaa vain kunkin toistuvan yksikön sisäisestä toiminnasta.

Avainnetun toistuvan yksikköverkon Back-Propagation Through Time -algoritmi on samanlainen kuin pitkän lyhytaikaisen muistiverkon algoritmi ja eroaa vain differentiaalisen ketjun muodostuksesta.

Antaa E = summa _{t} E_{t}on ennustettu lähtö jokaisessa aikavaiheessa ja Rightarrow E = sum _{t} -y_{t}loki(overline{y}_{t})olla todellinen tulos jokaisessa aikavaiheessa. Sitten virhe kussakin aikavaiheessa annetaan: -

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

Kokonaisvirhe saadaan siten kaikkien aikavaiheiden virheiden summana.

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} h_{t-2}}......frac{partial h_{0}}{partial W}

Samoin arvo h_{t} = z_{t}odot h_{t-1} + (1-z_{t})odot overline{h}_{t}voidaan laskea kunkin aikavaiheen gradienttien summana.

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

Käyttämällä ketjusääntöä ja käyttämällä sitä tosiasiaa overline{h}_{t} = tanh(Wodot x_{t}+Wodot (r_{t}odot h_{t-1}))on funktio 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)ja mikä todellakin on funktio , syntyy seuraava ilmaus:-



Siten kokonaisvirhegradientti saadaan seuraavasta: -



Huomaa, että gradienttiyhtälö sisältää ketjun joka näyttää samanlaiselta kuin perustoistuva hermoverkko, mutta tämä yhtälö toimii eri tavalla johtuen johdannaisten sisäisestä toiminnasta. .

Kuinka aidatut toistuvat yksiköt ratkaisevat katoavien gradienttien ongelman?

Gradienttien arvoa ohjaa johdannaisketju alkaen . Muista lauseke for :-



Yllä olevaa lauseketta käyttämällä arvo for On:-



Muista lauseke for :-



Käyttämällä yllä olevaa lauseketta arvon laskemiseen :-



Koska sekä päivitys- että nollausportti käyttävät sigmoid-toimintoa aktivointifunktionaan, molemmat voivat saada arvot joko 0 tai 1.

Tapaus 1 (z = 1):

Tässä tapauksessa arvosta riippumatta , termi on yhtä suuri kuin z, joka puolestaan ​​on yhtä suuri kuin 1.

Tapaus 2A(z=0 ja r=0):

Tässä tapauksessa termi on yhtä suuri kuin 0.

Tapaus 2B(z=0 ja r=1):

Tässä tapauksessa termi on yhtä suuri kuin . Tätä arvoa ohjaa painomatriisi, joka on treenattavissa ja siten verkko oppii säätämään painoja siten, että termi tulee lähemmäksi 1.

Siten Back-Propagation Through Time -algoritmi säätää vastaavat painot siten, että johdannaisketjun arvo on mahdollisimman lähellä 1:tä.