Gegroet Dataridders!
In januari had ik een bericht geplaatst over neurale netwerken.
Nu was dit bericht over het algemeen wel in orde, er was ook aardig wat ruimte voor verbetering. Inmiddels heb ik namelijk al weer een stuk meer geleerd over dit onderwerp en daarom heb ik besloten mijn vorige versie te updaten.
Laten we beginnen.
Wat en waarom?
Kunstmatige neurale netwerken zijn een onderdeel van Machine Learning en een van de krachtigste programmeer constructies voor het analyseren van data. Ze zijn gebaseerd op biologische neurale netwerken, en stellen een programma in staat te leren op een vergelijkbare manier als wij dit doen. Dit is een krachtig concept!
We hebben dan namelijk niet meer te maken met een programma dat wij stap voor stap moeten vertellen wat het moet doen en hoe het dat moet doen. In plaats daarvan hoeven we het neurale netwerk alleen een doel te geven en wat trainingsdata, en daarna leert het zelf om dit doel te bereiken.
Afhankelijk van het type en formaat van het gebruikte netwerk en de verwerkingskracht van het systeem kan zo’n systeem dan dingen leren die wij nooit op de gebruikelijke manier hadden kunnen programmeren. Hoe schrijf je nou bijvoorbeeld een programma dat het verschil tussen het plaatje van een hond en een kat kan zien?
Dit is een machine learning taak die vrijwel onmogelijk op te lossen is met algoritmes zoals random forest en gradient boosted trees (tree-ensembles). Om nog maar niet te beginnen over een simpele lineaire regressie.
Een plaatje kan namelijk uit duizenden pixels bestaan en de interpretatie van die pixels is alles behalve simpel. Deze complexiteit is vrijwel onmogelijk te vangen met deze andere methoden. Een tree-ensemble zou wellicht in staat zijn om een dataset uit het hoofd te leren, maar zou het bijzonder slecht doen op nieuwe data.
Maar, met neurale netwerken is deze taak met grote precisie op te lossen. Neurale netwerken worden echter niet alleen gebruikt voor beeldherkenning, maar ook voor spraakherkenning, spam filtering, chatbots, zelf lerende systemen en nog veel meer!
Hoe werkt het?
Net zoals in het brein wordt er gebruik gemaakt van neuronen en verbindingen tussen die neuronen om input en output te regelen. De neuronen in kunstmatige neurale netwerken zijn echter versimpeld tot knooppunten met een aantal parameters die gevarieerd kunnen worden om het gedrag van het netwerk aan te passen.
Perceptron
Een perceptron is een voorbeeld van een kunstmatig neuron. Het neemt een aantal inputs x genereert op basis daarvan een binaire output (een 0 of een 1). Hierbij is x dikgedrukt omdat het een vector is. Om dat te doen heeft het een aantal parameters, namelijk een serie van “weights” w voor elke input x en een treshold (drempel). De weights bepalen hoe sterk de inputs x worden meegerekend en de treshold bepaalt hoe moeilijk het perceptron vuurt (een 1 genereert). Het gedrag van het perceptron kan dan beschreven worden met de volgende formule:
Wat is nou het nut van zo’n perceptron? Nou, door de waardes van w en b te varieren krijgen we nu verschillende outputs voor de zelfde waardes van x. Een netwerk van deze perceptrons kan dus “leren” door de juiste waardes van w en b te vinden, de waardes die het netwerk het gewenste gedrag zo goed mogelijk laten benaderen.
Ofwel de juiste output bij een gegeven input, bijvoorbeeld het antwoord ‘hond’ (output) bij een plaatje van een hond (input).
Oeps! Er komt helaas nog best wat meer bij kijken dan dat…
Complicaties
Ten eerste wordt er gebruik gemaakt van verschillende activatie functies. Een perceptron is een lineaire activatie functie, maar er wordt vrijwel altijd gebruik gemaakt van niet lineaire activatie functies.
Dit is nodig om het model goed te kunnen trainen op niet lineaire verbanden. Er is nog steeds sprake van inputs, gewichten en outputs, maar het verband tussen de inputs en outputs is wat ingewikkelder als bij het perceptron en de outputs kunnen meer waarden aannemen dan 0 en 1.
Daarnaast wordt bij image recognition (beeldherkenning) ook gebruik gemaakt van convolutional layers (convolutionele lagen). Deze transformeren de ruwe pixel data tot simpelere “meta-data” die het netwerk kan gebruiken om de plaatjes te analyseren.
Een convolutional layer kan bijvoorbeeld aangeven waar de horizontale lijnen in het plaatje te vinden zijn. Een andere laag kan aangeven waar de verticale zijn. Een volgende zou deze kunnen combineren tot vierkanten. Etc. De lagen worden in de praktijk echter ook automatisch getraind en wat ze precies doen weet je eigenlijk nooit.
Pfoe, wat een termen allemaal!
Om in een bericht alles uit te leggen over hoe neurale netwerken werken is een beetje teveel gevraagd ben ik bang. Ik hoop echter dat je het een beetje hebt kunnen volgen en dat ik je interesse heb aangewakkerd.
Maar dat is alles voor nu,
Tot de volgende keer!
Bronnen
- Michael Nielsen – Neural Networks and Deep Learning
- Towards Data Science – Activation Functions in Neural Networks
- Coursera – Intro to Deep Learning
- Wikipedia – Artifical Neural Network