Het herkennen van katten, muziek, teksten en klanten

Artificial Intelligence, Algoritmes, Machine en Deep Learning. Deze termen vliegen je vandaag zo’n beetje overal om je oren. Niet alleen op de IT sites en blogs, maar ook op tv, radio en zelfs in de reclamespots zijn ze gemeengoed geworden van de journalisten en presentatoren.

Ook bij CMEdge kunnen we er geen genoeg van krijgen. Begin van deze eeuw zag het er veel belovend uit. Het herkennen van afbeeldingen, het omzetten van gesproken tekst naar geschreven tekst en vice versa. Dat alles was mogelijk op je computer. Hoopvol gingen we praten tegen onze vers geïnstalleerde Word Speech2Text applicatie. Er moest wel wat getraind worden (een dag of veertien), maar dan konden we teksten inspreken die in vrijwel foutloos Nederlands op het scherm verscheen. Ook het zoeken naar katten, honden, tafels en stoelen aan de hand van een voorbeeldplaatje of -tekening werd ons in de schoot geworpen. Helaas, we hebben toen veel zaken uitgeprobeerd en we zijn ook even vaak teleurgesteld.

Maar het wonder is geschied. De laatste jaren zijn de beloften waargemaakt. Start Google Now of Keep, praat er tegen en je wordt begrepen (wel een beetje ABN spreken, hoewel Google de noordelijke accenten redelijk goed verstaat). Voor een belangrijk deel hebben we dit te danken aan de ontwikkelingen rondom neurale netwerken. Neuraal netwerk, klinkt interessant maar hoe werkt dat nu precies en hoe kun je dat gebruiken om bijvoorbeeld een gezicht of een tekst te herkennen. Belangrijk is dat een neuraal netwerk leert van (veel) voorbeelden. Je moet het trainen, trainen en nog eens trainen. Neurale netwerken zijn goed in het herkennen van afbeeldingen, muziek, spraak en ook tekst. Waarom dat zo is, wordt hopelijk straks duidelijk.

Het basis idee achter neurale netwerken is de werking van onze hersenen. Die bestaan uit miljarden neuronen die met elkaar verbonden zijn en signalen uitwisselen. Een kunstmatig neuraal netwerk is een simpele afspiegeling van onze hersenen. Wat in onze hersenen een neuron is, wordt in kunstmatig neurale netwerken een perceptron genoemd. Gewoon een bolletje dat input actief verwerkt tot output. De input is afkomstig van alle omringende andere perceptrons. Die verschillende inputs hebben allemaal hun eigen weegfactor. Om te voorkomen dat de hele zaak vastloopt, wordt er bij de ontvangen inputs een ‘bias’ toegevoegd. Zeg maar een beetje vervuiling. Hiermee wordt voorkomen dat er een soort deadlock ontstaat waarbij alle inputs gelijk aan nul zijn.

Wanneer een perceptron input krijgt dan zal die afhankelijk van zijn activatiefunctie output geven die vervolgens wordt doorgegeven aan andere perceptrons. Vaak wordt dit voorgesteld in een gelaagd model waarbij de input (input layer) via tussenstappen (hidden layers) leidt tot het eindresultaat (output layer). De perceptrons bevatten dus simpelweg getallen. Door afspraken te maken kun je ervoor zorgen dat de getallen tussen 0 en 1 liggen. Bij het trainen van het netwerk zorg je ervoor dat uitkomsten die in de buurt van 1 liggen de goede uitkomsten zijn. Hieronder een voorbeeld van een geschreven getal 7 waarbij het netwerk bij de gewenste uitkomst van het cijfer 7, een output van 0.9 geeft om aan te geven dat de geschreven 7wel erg veel lijkt op het cijfer 7.

Met het trainen van het netwerk wordt aldus de ‘mechanica’ van het netwerk ingericht. Wanneer er nieuwe input wordt gegeven, dan wordt die verwerkt volgens de getrainde ‘mechanica’ van het netwerk. Dat zal niet altijd goed gaan. Van verkeerde conclusies leert het netwerk door de parameters van het netwerk (bijvoorbeeld weegfactoren en/of activatiefuncties) aan te passen en de foutmarge te minimaliseren. Op deze manier leert het netwerk van zijn fouten zodat het beter en beter wordt.

Een model van een neuraal netwerk is het Convolutional Neural Network (CNN). Dit type wordt veel gebruikt om afbeeldingen te herkennen. Hierbij wordt het onderwerp van onderzoek ‘verpixeld’ in rijen en kolommen. Bij een afbeelding is dat goed voor te stellen. Een voorbeeld om de werking van neurale netwerken uit te leggen is het herkennen van geschreven letters. Bijvoorbeeld de letter X. Deze wordt op verschillende manieren geschreven. Maar een X bestaat toch uit een aantal basiselementen. (zie onder).

Door die basiselementen van de X over de te onderzoeken, handgeschreven X stapsgewijs te schuiven, en tegelijk te berekenen welke pixels van het basiselement samenvallen met de pixels van het handgeschreven X , ontstaat een getallenpatroon die als het ware de score van de matching van het X-onderdeel met de handgeschreven X presenteert.

Door het verschuiven van basiselementen over het te onderzoeken onderwerp, is de volgorde van de kolommen (en rijen) van belang. CNN’s zijn goed in het herkennen van dingen die lokaal samenhang hebben. Zoals een afbeelding of geluid en ook een tekst. Bij een tekst kun je alle relevante woorden op een rij zetten en vervolgens in de kolommen aangeven wat de volgorde is van de woorden.

Verwisselen van kolommen zal bij een afbeelding het beeld verminken en bij een tekst de betekenis van de tekst veranderen.

Bij klant-data is in veel gevallen de volgorde van kolommen niet van belang. Zet je de klant-data in de kolommen en de klanten in de rijen, dan zal het verwisselen van kolommen waarin deze gegevens staan niets aan de ‘betekenis’ van de data veranderen. CNN’s zijn voor dit type data niet goed bruikbaar.
Vuistregel: als de data die je gebruikt na het verwisselen van kolommen (en rijen) nog goed bruikbaar is, dan zijn CNN’s niet toepasbaar. Waar Convolutional Neural Netwerken goed in zijn is het herkennen van patronen (afbeeldingen, geluid, tekst).

Wil je meer weten over CNN’s ga dan naar https://www.youtube.com/watch?v=FmpDIaiMIeA . In deze video wordt het nog eens haarfijn uitgelegd.