Connect with us

AI 101

Wat is Gradient Descent?

mm

Wat is een Gradient Descent?

Als je hebt gelezen over hoe neurale netwerken getraind worden, ben je waarschijnlijk al eens het begrip “gradient descent” tegengekomen. Gradient descent is de primaire methode voor het optimaliseren van de prestaties van een neuronaal netwerk, waardoor de fout-/errorrate van het netwerk wordt verlaagd. Echter, gradient descent kan een beetje moeilijk te begrijpen zijn voor mensen die nieuw zijn in machine learning, en dit artikel zal proberen je een Fatsoenlijke intuïtie te geven over hoe gradient descent werkt.

Gradient descent is een optimalisatiealgoritme. Het wordt gebruikt om de prestaties van een neuronaal netwerk te verbeteren door aanpassingen te maken aan de parameters van het netwerk, zodat het verschil tussen de voorspellingen van het netwerk en de werkelijke/verwachte waarden van het netwerk (de fout) zo klein mogelijk is. Gradient descent neemt de initiële waarden van de parameters en gebruikt operaties op basis van calculus om hun waarden aan te passen naar de waarden die het netwerk zo nauwkeurig mogelijk maken. Je hoeft geen uitgebreide kennis van calculus te hebben om te begrijpen hoe gradient descent werkt, maar je moet wel een goed begrip hebben van gradients.

Wat zijn Gradients?

Stel dat er een grafiek is die de hoeveelheid fouten van een neuronaal netwerk weergeeft. De onderkant van de grafiek vertegenwoordigt de punten met de laagste fout, terwijl de bovenkant van de grafiek de punten zijn waar de fout het hoogst is. We willen van de bovenkant van de grafiek naar de onderkant gaan. Een gradient is gewoon een manier om de relatie tussen fout en de gewichten van het neuronaal netwerk te kwantificeren. De relatie tussen deze twee dingen kan worden weergegeven als een helling, met onjuiste gewichten die meer fouten produceren. De steilheid van de helling/gradient vertegenwoordigt hoe snel het model leert.

Een steile helling betekent dat er grote verminderingen in de fout optreden en het model leert snel, terwijl een helling van nul betekent dat het model op een plateau staat en niet leert. We kunnen naar beneden gaan langs de helling naar minder fouten door een gradient te berekenen, een richting van beweging (verandering in de parameters van het netwerk) voor ons model.

Laten we de metafoor een beetje veranderen en ons een serie heuvels en valleien voorstellen. We willen naar de onderkant van de heuvel en het deel van de vallei vinden dat de laagste verlies vertegenwoordigt. Wanneer we bovenaan de heuvel beginnen, kunnen we grote stappen naar beneden nemen en er zeker van zijn dat we naar het laagste punt in de vallei gaan.

Echter, als we dichter bij het laagste punt in de vallei komen, moeten onze stappen kleiner worden, anders kunnen we het werkelijke laagste punt voorbijlopen en aan de andere kant terechtkomen. Vergelijkbaar hiermee is het mogelijk dat, wanneer we de gewichten van het netwerk aanpassen, de aanpassingen het netwerk eigenlijk verder weg kunnen brengen van het punt van laagste verlies, en daarom moeten de aanpassingen kleiner worden over tijd. In de context van afdalen naar een punt van laagste verlies, is de gradient een vector/instructies die de weg aangeven die we moeten volgen en hoe groot onze stappen moeten zijn.

Nu we weten dat gradients instructies zijn die ons vertellen in welke richting we moeten gaan (welke coëfficiënten moeten worden bijgewerkt) en hoe groot onze stappen moeten zijn (hoeveel de coëfficiënten moeten worden bijgewerkt), kunnen we onderzoeken hoe de gradient wordt berekend.

Berekenen van Gradients & Gradient Descent

Gradient descent start bij een punt van hoge verlies en door meerdere iteraties, stappen in de richting van laagste verlies, met als doel de optimale gewichtconfiguratie te vinden. Foto: Роман Сузи via Wikimedia Commons, CCY BY SA 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)

Om gradient descent uit te voeren, moeten de gradients eerst worden berekend. Om de gradient te berekenen, moeten we de verlies-/kostenfunctie kennen. We zullen de kostenfunctie gebruiken om de afgeleide te bepalen. In calculus verwijst de afgeleide gewoon naar de helling van een functie in een bepaald punt, dus we berekenen eigenlijk de helling van de heuvel op basis van de verliesfunctie. We bepalen de verlies door de coëfficiënten door de verliesfunctie te halen. Als we de verliesfunctie “f” noemen, kunnen we zeggen dat de vergelijking voor het berekenen van de verlies als volgt is (we halen de coëfficiënten gewoon door onze gekozen kostenfunctie):

Verlies = f(coëfficiënt)

We berekenen vervolgens de afgeleide, of bepalen de helling. Het verkrijgen van de afgeleide van de verlies zal ons vertellen in welke richting we moeten gaan, door ons de juiste teken te geven om onze coëfficiënten bij te werken. We zullen de juiste richting “delta” noemen.

delta = afgeleide_functie(verlies)

We hebben nu bepaald in welke richting we moeten gaan om het punt van laagste verlies te bereiken. Dit betekent dat we de coëfficiënten in de parameters van het neuronaal netwerk kunnen bijwerken en hopelijk de verlies verlagen. We zullen de coëfficiënten bijwerken op basis van de vorige coëfficiënten minus de juiste verandering in waarde, zoals bepaald door de richting (delta) en een argument dat de grootte van de verandering controleert (de grootte van onze stap). Het argument dat de grootte van de update controleert, wordt de “leer tempo” genoemd en we zullen het “alpha” noemen.

coëfficiënt = coëfficiënt – (alpha * delta)

We herhalen dit proces totdat het netwerk is geconvergeerd rond het punt van laagste verlies, dat dicht bij nul moet zijn.

Het is heel belangrijk om de juiste waarde te kiezen voor het leer tempo (alpha). Het gekozen leer tempo moet niet te klein of te groot zijn. Onthoud dat, naarmate we dichter bij het punt van laagste verlies komen, onze stappen kleiner moeten worden, anders kunnen we het werkelijke punt van laagste verlies voorbijlopen en aan de andere kant terechtkomen. Het punt van kleinste verlies is klein en als onze veranderingssnelheid te groot is, kan de fout weer toenemen. Als de stapgroottes te groot zijn, zal de prestatie van het netwerk blijven schommelen rond het punt van laagste verlies, het overschrijden aan de ene kant en dan aan de andere kant. Als dit gebeurt, zal het netwerk nooit convergeren naar de werkelijke optimale gewichtconfiguratie.

In tegenstelling tot dit, als het leer tempo te klein is, kan het netwerk potentieel een buitengewoon lange tijd nodig hebben om te convergeren naar de optimale gewichten.

Soorten Gradient Descent

Nu we weten hoe gradient descent in het algemeen werkt, laten we eens kijken naar enkele van de verschillende soorten gradient descent.

Batch Gradient Descent: Deze vorm van gradient descent loopt door alle trainingsvoorbeelden voordat de coëfficiënten worden bijgewerkt. Deze vorm van gradient descent is waarschijnlijk de meest computationeel efficiënte vorm van gradient descent, omdat de gewichten alleen worden bijgewerkt wanneer de hele batch is verwerkt, wat betekent dat er minder updates zijn. Echter, als de dataset een groot aantal trainingsvoorbeelden bevat, kan batch gradient descent de training lang maken.

Stochastic Gradient Descent: In Stochastic Gradient Descent wordt slechts één trainingsvoorbeeld verwerkt voor elke iteratie van gradient descent en parameter bijwerken. Dit gebeurt voor elk trainingsvoorbeeld. Omdat slechts één trainingsvoorbeeld wordt verwerkt voordat de parameters worden bijgewerkt, convergeert het sneller dan Batch Gradient Descent, omdat updates eerder worden gemaakt. Echter, omdat het proces moet worden uitgevoerd op elk item in de trainingsset, kan het een lange tijd duren om te voltooien als de dataset groot is, en dus wordt de voorkeur gegeven aan een van de andere soorten gradient descent.

Mini-Batch Gradient Descent: Mini-Batch Gradient Descent werkt door de hele trainingsdataset op te delen in subsecties. Het maakt kleinere mini-batches die door het netwerk worden verwerkt, en wanneer de mini-batch is gebruikt om de fout te berekenen, worden de coëfficiënten bijgewerkt. Mini-batch Gradient Descent vindt een middenweg tussen Stochastic Gradient Descent en Batch Gradient Descent. Het model wordt vaker bijgewerkt dan in het geval van Batch Gradient Descent, wat betekent een iets snellere en robuustere convergentie naar de optimale parameters van het model. Het is ook computationeel efficiënter dan Stochastic Gradient Descent

Blogger en programmeur met specialisaties in Machine Learning en Deep Learning onderwerpen. Daniel hoopt anderen te helpen de kracht van AI te gebruiken voor het sociale goede.