Articles

neurale netwerken begrijpen 2: de wiskunde van neurale netwerken in 3 vergelijkingen

in het eerste deel van deze serie bespraken we het concept van een neuraal netwerk, evenals de wiskunde die een enkel neuron beschrijft. Er zijn echter veel neuronen in een enkele laag en vele lagen in het hele netwerk, dus we moeten een algemene vergelijking bedenken die een neuraal netwerk beschrijft.

Single neuron

het eerste wat ons netwerk moet doen is informatie doorsturen door de lagen. We weten al hoe we dit moeten doen voor een enkel neuron:

Output van het neuron is de activeringsfunctie van een gewogen som van de input van het neuron

2 neuronen

nu kunnen we dezelfde logica toepassen als we 2 neuronen in de tweede laag hebben.

in dit voorbeeld is elk neuron van de eerste laag verbonden met elk neuron van de tweede laag, dit type netwerk wordt volledig verbonden netwerk genoemd. Neuron Y1 is verbonden met neuronen X1 en X2 met gewichten W11 en W12 en neuron Y2 is verbonden met neuronen X1 en X2 met gewichten W21 en W22. In deze notatie geeft de eerste index van het gewicht het uitgangsneuron aan en de tweede index Het input-neuron, dus bijvoorbeeld W12 is gewicht op Verbinding van X2 naar Y1. Nu kunnen we de vergelijkingen voor Y1 en Y2 schrijven:

nu kan deze vergelijking worden uitgedrukt met behulp van matrixvermenigvuldiging.

visualisatie van de matrixvermenigvuldiging uit http://matrixmultiplication.xyz/

Als u voor het vermenigvuldigen van matrices en lineaire algebra en dit maakt je verward ik beveel 3blue1brown lineaire algebra serie.

nu kunnen we de output van het eerste neuron schrijven als Y1 en de output van het tweede neuron als Y2. Dit geeft ons de volgende vergelijking:

gehele laag

hieruit kunnen we de algemene regel voor de uitvoer van de laag abstraheren:

in deze vergelijking zijn alle variabelen matrices en het vermenigvuldigingsteken vertegenwoordigt matrixvermenigvuldiging.

het gebruik van matrix in de vergelijking stelt ons in staat om het in een eenvoudige vorm te schrijven en maakt het waar voor elk aantal van de input en neuronen in de output.

bij het programmeren van neurale netwerken gebruiken we ook matrixvermenigvuldiging, omdat dit ons in staat stelt om de computer parallel te maken en efficiënte hardware te gebruiken, zoals grafische kaarten.

nu hebben we vergelijking voor een enkele laag, maar niets houdt ons tegen om de uitvoer van deze laag te nemen en het te gebruiken als invoer naar de volgende laag. Dit geeft ons de algemene vergelijking die de output van elke laag van neuraal netwerk beschrijft. Nog een ding, moeten we toevoegen, is activeringsfunctie, Ik zal uitleggen waarom we activeringsfuncties nodig hebben in het volgende deel van de serie, voor nu kun je denken als een manier om de output te schalen, zodat het niet te groot of te onbeduidend wordt.

met deze vergelijking kunnen we de informatie verspreiden door zoveel lagen van het neurale netwerk als we willen. Maar zonder iets te leren, neuraal netwerk is gewoon een set van willekeurige matrix vermenigvuldigingen die niets betekent.

dus hoe ons neuraal netwerk te onderwijzen? Eerst moeten we de fout van het neurale netwerk berekenen en nadenken hoe we deze fout aan alle lagen kunnen doorgeven.

2: het doorgeven van de error-Back-propagation

om het error propagation algoritme te begrijpen moeten we teruggaan naar een voorbeeld met 2 neuronen in de eerste laag en 1 neuron in de tweede laag.

laten we aannemen dat de Y-laag de uitvoerlaag van het netwerk is en dat het Y1-neuron wat waarde moet teruggeven. Nu kan deze waarde nogal verschillen van de verwachte waarde, dus er is een fout op het Y1 neuron. We kunnen deze fout zien als het verschil tussen de geretourneerde waarde en de verwachte waarde. We kennen de fout op Y1 maar we moeten deze fout doorgeven aan de onderste lagen van het netwerk omdat we willen dat alle lagen leren, niet alleen de Y-laag. Dus hoe deze fout door te geven aan X1 en X2? Nou, een naïeve benadering zou zijn om de Y1 fout gelijk te verdelen, aangezien er 2 neuronen in de x laag zijn, kunnen we zeggen dat zowel X1 als X2 fout gelijk is aan Y1 fout bedacht door 2.

er is echter een groot probleem met deze aanpak — de neuronen hebben verschillende gewichten verbonden met hen. Als het gewicht verbonden aan het x1 neuron veel groter is dan het gewicht verbonden aan het x2 neuron wordt de fout op Y1 veel meer beïnvloed door X1 sinds Y1 = ( X1 * W11 + X2 * X12). Dus als W11 groter is dan W12 moeten we meer van de Y1 fout doorgeven aan het x1 neuron omdat dit het neuron is dat eraan bijdraagt.

nu we het geobserveerd hebben, kunnen we ons algoritme bijwerken, niet om de fout gelijkmatig te verdelen, maar om het te splitsen volgens het rantsoen van het input-neurongewicht naar alle gewichten die naar het outputneuron komen.

update het gewicht

nu kunnen we een stap verder gaan en het voorbeeld analyseren waar er meer dan één neuron in de uitvoerlaag zit.

in dit voorbeeld zien we dat b.v. neuron X1 niet alleen bijdraagt aan de fout van Y1 maar ook aan de fout van Y2 en deze fout is nog steeds evenredig met zijn gewicht. Dus, in de vergelijking die fout van X1 beschrijft, moeten we zowel fout van Y1 vermenigvuldigd met de verhouding van de gewichten en fout van Y2 vermenigvuldigd met de verhouding van de gewichten die naar Y2 komen.

deze vergelijking kan ook geschreven worden in de vorm van matrixvermenigvuldiging.

nu is er nog een truc die we kunnen doen om dit citaat eenvoudiger te maken zonder veel relevante informatie te verliezen. De noemer van de gewichtsverhouding werkt als een normaliserende factor, dus we geven er niet zo veel om, deels omdat de uiteindelijke vergelijking we andere middelen zullen hebben om het leren van neuraal netwerk te reguleren.

Dit is ook nog een opmerking die we kunnen maken. We kunnen zien dat de matrix met gewicht in deze vergelijking is vrij vergelijkbaar met de matrix van de feed forward algoritme. Het verschil is dat de rijen en kolommen worden geschakeld. In de algebra noemen we deze omzetting van de matrix.

aangezien het niet nodig is om 2 verschillende variabelen te gebruiken, kunnen we gewoon dezelfde variabele van feed forward algoritme gebruiken. Dit geeft ons de algemene vergelijking van het back-propagation algoritme

merk op dat we in het feed-forward algoritme de eerste laag naar de laatste gaan vormen, maar in de back-propagatie gaan we de laatste laag van het netwerk vormen naar de eerste sinds om de fout in een bepaalde laag te berekenen hebben we informatie nodig over fouten in de volgende laag.

Trending AI-artikelen:

1. Hoe Ik machine learning gebruikte als inspiratie voor fysieke schilderijen

2. MS of Startup Job – welke manier om te gaan om een carrière op te bouwen in Deep Learning?

3. Top 100 mediumartikelen met betrekking tot kunstmatige intelligentie

4. Artificial Intelligence Conference

nu we weten hoe we de informatie naar voren en de fout naar achteren kunnen doorgeven, kunnen we de fout op elke laag gebruiken om het gewicht bij te werken.

3: het bijwerken van de gewichten

nu we weten welke fouten het neurale netwerk op elke laag maakt, kunnen we eindelijk beginnen ons netwerk te leren de beste oplossing voor het probleem te vinden.

maar wat is de beste oplossing?

de fout informeert ons over hoe verkeerd onze oplossingen zijn, dus natuurlijk zou de beste oplossing degene zijn waar de foutfunctie minimaal is.

de Foutfunctie hangt af van de gewichten van het netwerk, dus we willen dergelijke gewichtswaarden vinden die resulteren in het globale minimum in de foutfunctie. Merk op dat deze foto is alleen voor de visualisatie doel. In echte toepassingen hebben we meer dan 1 gewicht, dus de foutfunctie is een hoogdimensionale functie.

maar hoe vinden we het minimum van deze functie? Een eenvoudig idee hier is om te beginnen met willekeurige gewichten, bereken de foutfunctie voor die gewichten en controleer dan de helling van deze functie om bergafwaarts te gaan.

maar hoe leren we de helling van de functie kennen?

we kunnen de lineaire algebra opnieuw gebruiken en gebruik maken van het feit dat de afgeleide van een functie op een gegeven punt gelijk is aan de helling van een functie op dit punt. We kunnen deze afgeleide op de volgende manier schrijven:

waar E onze foutfunctie is en W de gewichten vertegenwoordigt. Deze notatie informeert ons dat we de afgeleide van de foutfunctie met betrekking tot gewicht willen vinden. We gebruiken n + 1 in met de fout, omdat in onze notatie output van neuraal netwerk na de gewichten Wn is op+1.

we kunnen dit derivaat gebruiken om het gewicht bij te werken:

dit vertegenwoordigt de” going downhill ” elke leer iteratie (epoch) we werken het gewicht volgens de helling van de afgeleide van de fout functie.

er is nog een ding dat we nodig hebben voordat we de laatste vergelijking presenteren en dat is het leerpercentage. Learning-rate regelt hoe grote stappen we nemen tijdens het bergafwaarts gaan.

zoals je kunt zien met een grotere Leersnelheid, nemen we grotere stappen. Dit betekent dat we sneller tot het optimale van de functie kunnen komen, maar er is ook een rasp kans dat we het missen.

met de kleinere Leersnelheid nemen we kleinere stappen, wat resulteert in de noodzaak van meer tijdperken om het minimum van de functie te bereiken, maar er is een kleinere kans dat we het missen.

daarom gebruiken we in de praktijk vaak Leersnelheid die afhankelijk is van de vorige stappen, bijvoorbeeld. als er een sterke trend is om in één richting te gaan, kunnen we grotere stappen nemen (Grotere Leersnelheid), maar als de richting blijft veranderen, moeten we kleinere stappen nemen (kleinere Leersnelheid) om te zoeken naar het minimum beter. In ons voorbeeld nemen we echter de eenvoudige aanpak en gebruiken we vaste learning rate value. Dit geeft ons de volgende vergelijking.

Learning rate (Lr) is een getal in rage 0 — 1. Hoe kleiner het is, hoe minder gewichtsverandering. Als het leren dicht bij 1 ligt. we gebruiken de volledige waarde van het derivaat om de gewichten bij te werken en als het dicht bij 0 ligt, gebruiken we slechts een klein deel ervan. Dit betekent dat de leersnelheid, zoals de naam al doet vermoeden, regelt hoeveel het netwerk “leert” in een enkele iteratie.

het bijwerken van de gewichten was de laatste vergelijking die we nodig hadden in ons neurale netwerk. Het zijn de vergelijkingen die verantwoordelijk zijn voor het daadwerkelijk leren van het netwerk en voor het onderwijzen ervan om betekenisvolle output te geven in plaats van willekeurige waarden.

Putting het allemaal samen

Feed-forward

Back-propagation

het Bijwerken van de gewichten

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.