Presentatie
Mensen beginnen hun intuïtie niet zonder voorbereiding. Als u dit artikel leest, ziet u elk woord afhankelijk van uw begrip van de woorden uit het verleden. Je gooit niet alles weg en begint weer te denken zonder enige voorbereiding. Uw overwegingen hebben ijver.
Conventionele neurale netwerken kunnen dit niet, en het lijkt een belangrijke tekortkoming te zijn. Stel je bijvoorbeeld voor dat je moet regelen wat voor soort gelegenheid zich op elk punt in een film voordoet. Het is wazig hoe een conventioneel neuraal systeem zijn denken over vroegere gelegenheden in de film zou kunnen gebruiken om later te adviseren.
Repetitieve neurale netwerken pakken dit probleem aan. Het zijn systemen met cirkels erin, die het mogelijk maken om gegevens te verdragen.

In het bovenstaande schema, een brok van het neurale systeem A, ziet een aantal informatie xt en geeft een waarde ht. Een cirkel maakt het mogelijk om gegevens door te geven, beginnend met de ene fase van het systeem en dan op de volgende. Een intermitterend neuraal systeem kan worden gezien als een groot aantal duplicaten van een soortgelijk systeem, die elk een boodschap doorgeven aan een opvolger. Bedenk wat er gebeurt als we de cirkel ontrollen:

Deze ketenachtige aard legt bloot dat repetitieve neurale systemen persoonlijk worden geïdentificeerd met groeperingen en registraties. Zij zijn de reguliere engineering van de neurale systemen om te gebruiken voor dergelijke informatie. Bovendien worden ze zeker gebruikt! In de afgelopen jaren zijn er geestverruimende prestaties geleverd door RNN’s toe te passen op een scala van onderwerpen: vertoogbevestiging, taalweergave, interpretatie, ondertiteling van foto’s… De lijst gaat verder.
Ondanks het feit dat het nog niet verplicht is, zou het voor de gebruiker nuttig zijn om te begrijpen wat WordVectoren zijn. Hier is mijn vorige blog over Word2Vec, een procedure om Word Vectors te maken.
Wat zijn Repetitieve Neurale Systemen
Een opvallende beperking van vanille-neurale systemen (en bovendien convolutionele systemen) is dat hun programmeerinterface overmatig verplicht is: ze erkennen een vector van vaste grootte als informatie (bijvoorbeeld een foto) en produceren een vector van vaste grootte als de opbrengst (bijvoorbeeld waarschijnlijkheid van verschillende klassen). En niet alleen dat: deze modellen spelen deze mapping uit met behulp van een vaste maat voor de rekenkundige vooruitgang (bijvoorbeeld het aantal lagen in het model).
De centrale verklaring voor het feit dat herhalende netten des te energieker zijn, is dat ze ons in staat stellen om te werken over opeenvolgende vectoren: Opstellingen in de info, de opbrengst, of in het breedste geval beide.
Enkele modellen kunnen dit steeds concreter maken:

Elke vierkante vorm is een vector en bouten spreken tot capaciteiten (bijvoorbeeld raamwerk duplicaat). Informatieve vectoren zijn in rood, opbrengstvectoren zijn in blauw en groene vectoren houden de toestand van de RNN in stand (meer hierover binnenkort). Van links naar rechts:
Vanille methode van verwerking zonder RNN, van vaste grootte bijdrage tot vaste grootte opbrengst (bijvoorbeeld beeldgroepering).
Gegroepeerde opbrengst (bijvoorbeeld ondertiteling van een foto maakt een foto en levert een woordspeling op).
Gegroepeerde input (bijvoorbeeld adviesonderzoek waarbij een bepaalde zin wordt gedelegeerd en een positieve of negatieve aanname wordt gecommuniceerd).
Successie-informatie en schikkingsopbrengst (bijvoorbeeld Machine-interpretatie: een RNN leest een zin in het Engels en levert daarna een zin in het Frans op).
Bij elkaar horende groepsinformatie en opbrengst (bijvoorbeeld videoregeling waarbij we elk frame van de video willen markeren).
Merk op dat er voor elke situatie geen vooropgestelde vereisten zijn met betrekking tot de lengte van de sequenties in het licht van het feit dat de repetitieve verandering (groen) vastligt en hetzelfde aantal keren kan worden toegepast als we willen.
RNN-berekening
Dus hoe bereiken ze dit?
Ze erkennen een informatievector x en geven een opbrengstvector y. Desalniettemin wordt de inhoud van deze opbrengstvector niet alleen beïnvloed door de informatie die u zojuist hebt verstrekt, maar ook door de hele geschiedenis van de databronnen die u eerder hebt ondersteund. Samengesteld als een klasse, bestaat de programmeerinterface van de RNN uit een solitair stappenplan:
rnn = RNN()
y = rnn.step(x) # x is een informatievector, y is de opbrengstvector van de RNN
De RNN klasse heeft een aantal interieur express dat het de gelegenheid krijgt om elke stap te verfrissen. In het minst moeilijke geval bestaat deze toestand uit een eenzame omhulde vector h. Hier is een uitvoering van het progressiewerk in een vanille RNN: De omhulde toestand zelf.h wordt geïntroduceerd met de nulvector. Het np.tanh (hyperbolische digressie) werk actualiseert een niet-lineariteit die de initiaties tot het bereik [-1, 1] verplettert.
klasse RNN:
…
def stap (zelf, x):
update de verborgen toestand
self.h = np.tanh(np.dot(self.W_hhh, self.h) + np.dot(self.W_xh, x))
bereken de outputvector
y = np.dot(self.W_hy, self.h)
retourneer y
Het bovenstaande specificeert de voorwaartse pas van een vanille RNN. De parameters van deze RNN zijn de drie matrices –
W_hh : Matrix gebaseerd op de Vorige Verborgen Staat
W_xh : Matrix gebaseerd op de Current Input
W_waarom : Matrix gebaseerd tussen verborgen toestand en uitvoer
Dus hoe het werkt
Er zijn twee termen binnen de tanh: een hangt af van de voorbije omhulde toestand en een hangt af van de huidige informatie. In numpy np.dot is netwerkaugmentatie. De twee tussenproducten werken samen met expansie, en worden daarna door de tanh in de nieuwe toestandsvector verpletterd.
De wiskundige notatie voor de verborgen toestandsupdate is –

waar tanh elementair wordt toegepast.
We introduceren de netwerken van de RNN met onregelmatige aantallen en het grootste deel van het werk tijdens de voorbereiding gaat naar het vinden van de roosters die opstijgen naar verleidelijk gedrag bieden, zoals geschat met een aantal ongelukkige werk dat uw neiging communiceert naar wat voor soort rendementen y je zou willen vinden in het licht van uw info opvolging x
We vinden in een stuk, RNNs join the info vector met hun toestandsvector met een vaste (nog geleerde) capaciteit om een andere toestandsvector te leveren.
Nu gaan we diep –
y1 = rnn1.step(x)
y = rnn2.stap(y1)
Uiteindelijk hebben we twee aparte RNN’s: Eén RNN accepteert de informatievectoren en de tweede RNN krijgt de opbrengst van de eerste RNN als informatie. Maar geen van deze RNN’s weet of geeft erom – het is alles, alleen vectoren die binnenkomen en uitgaan, en een paar invalshoeken die door elke module heen gaan tijdens de backpropagatie.
Ik zou snel willen verwijzen naar een groot deel van ons dat gebruik maakt van een marginaal onverwacht plan in vergelijking met wat ik hierboven een lange kortstondige geheugen (LSTM) organisatie noemde. De LSTM is een specifiek soort intermitterend systeem dat marginaal beter werkt, af te leiden uit de meer dominante update-omstandigheden en enkele innemende backpropagatie-elementen. Ik ga niet in op subtiliteiten, maar alles wat ik heb gezegd over RNN’s blijft precies het equivalent, met uitzondering van de wetenschappelijke structuur voor het verwerken van de update (de lijn zelf.h = … ) wordt iets ingewikkelder. Vanaf hier gebruik ik de uitdrukkingen “RNN/LSTM” omgekeerd, maar alle onderzoeken in deze post maken gebruik van een LSTM.