Computervisie is een van de meest invloedrijke gebieden van kunstmatige intelligentie, die bijna elk aspect van ons leven verandert, vergelijkbaar met generatieve AI. Van medische beeldanalyse en autonome voertuigen tot beveiligingssystemen: AI-aangedreven computervisie is van cruciaal belang voor het verbeteren van de veiligheid, efficiëntie en gezondheidszorg door middel van technologieën zoals objectdetectie, gezichtsherkenning en beeldclassificatie.
Maar computer vision maakt niet alleen furore op gespecialiseerde gebieden; het maakt ook deel uit van de consumentenapps die we dagelijks gebruiken. Verbetering van de camerafocus, het bewerken van foto’s, realtime tekstherkenning en scannen met een smartphonecamera, waardoor smart home-apparaten zoals beveiligingscamera’s gebruikers kunnen detecteren en waarschuwen voor beweging, pose-schatting voor fitness-tracking-apps, calorie- en voedselidentificatie voor dieet-tracking-apps, gezichtsherkenning voor het ontgrendelen van telefoons, en gezichtsdetectie en classificatie om foto’s per persoon in albums te ordenen. Deze toepassingen zijn een integraal onderdeel geworden van de dagelijkse ervaringen van miljoenen mensen.
Bron: Real Computer Vision door Boris Denisenko op Medium
De meeste machine learning-ingenieurs bouwen hun modellen niet helemaal opnieuw om deze functies tot leven te brengen. In plaats daarvan vertrouwen ze op bestaande open-sourcemodellen. Hoewel dit de meest haalbare aanpak is, omdat het bouwen van een model vanaf nul onbetaalbaar is, moet er nog veel werk worden verzet voordat het model in een app kan worden gebruikt.
Ten eerste kan het open-sourcemodel een soortgelijk scenario oplossen, maar niet precies het scenario dat een ingenieur nodig heeft. Een ML-ingenieur heeft bijvoorbeeld misschien een app nodig die verschillende dranken vergelijkt, maar het beschikbare model is ontworpen om voedingsmiddelen met elkaar te vergelijken. Hoewel het goed presteert met voedsel, kan het lastig zijn als het op drankjes wordt aangebracht.
Ten tweede verschillen de reële omstandigheden waarin deze modellen moeten functioneren vaak aanzienlijk van de omgevingen waarvoor ze oorspronkelijk zijn ontworpen. Een model kan bijvoorbeeld honderden miljoenen parameters hebben, waardoor het te groot en rekenintensief is om bijvoorbeeld op een smartphone te draaien. Als u probeert een dergelijk model uit te voeren op een apparaat met beperkte computerbronnen, leidt dit tot trage prestaties, overmatig leeglopen van de batterij of het niet werken ervan.
Aanpassing aan scenario’s en omstandigheden in de echte wereld
Dit leidt er vroeg of laat toe dat de meeste ingenieurs die machinaal leren toepassen voor computervisie in consumentenapps, geconfronteerd worden met de noodzaak van:
- Een bestaand open-sourcemodel aanpassen aan hun specifieke scenario.
- Het model optimaliseren voor gebruik binnen beperkte capaciteiten.
Het aanpassen van een model is niet iets waar je zomaar doorheen gaat. U begint met een vooraf getraind model en stemt dit af op uw specifieke taak. Dit omvat het aanpassen van een groot aantal parameters: het aantal lagen, het aantal neuronen in elke laag, de leersnelheid, de batchgrootte en meer. Het enorme aantal mogelijke combinaties kan overweldigend zijn, met potentieel miljoenen verschillende configuraties om te testen. Dit is waar hyperparameteroptimalisatie (HPO) in het spel komt. HPO helpt dit proces te stroomlijnen, waardoor u sneller de beste configuratie kunt vinden dan wanneer u de parameters afzonderlijk handmatig zou aanpassen.
Zodra u het model aan uw scenario heeft aangepast, is de volgende uitdaging het laten draaien op een apparaat met beperkte middelen. Mogelijk moet u het model bijvoorbeeld implementeren op een smartphone met slechts 6 GB RAM. In dergelijke gevallen wordt modelcompressie essentieel om de omvang van het model te verkleinen en beheersbaar te maken voor apparaten met beperkt geheugen en beperkte verwerkingskracht.
Hyperparameteroptimalisatietechnieken (HPO).
Bij optimalisatie van hyperparameters gaat het om het vinden van de beste set parameters voor uw neurale netwerk om fouten bij een specifieke taak te minimaliseren. Stel dat u een model traint om de leeftijd van een persoon te schatten op basis van een foto. De fout in deze context heeft betrekking op de afwijking tussen de leeftijdsschatting van het model en de werkelijke leeftijd van de persoon – gemeten, bijvoorbeeld, in het aantal jaren dat deze leeftijd niet klopt.
Raster zoeken
Grid search is een brute-force-methode die de optimale combinatie vindt door elke mogelijke set parameters te testen. Je vertrekt van een bestaand model en past dit aan jouw opgave aan. Vervolgens pas je systematisch parameters aan (zoals het aantal neuronen of lagen) om te zien hoe deze veranderingen de fout van het model beïnvloeden. Bij het zoeken in een raster wordt elke combinatie van deze parameters getest om de parameter te vinden die de laagste fout oplevert. De uitdaging is dat er talloze parameters zijn die je kunt aanpassen, elk met een breed scala aan potentiële waarden.
Hoewel deze methode garandeert dat u de beste optie vindt, is deze ongelooflijk tijdrovend en vaak onpraktisch.
Willekeurig zoeken
Een andere benadering is willekeurig zoeken, waarbij u willekeurig een deel van de mogelijke combinaties bemonstert in plaats van elke combinatie te testen. Deze methode omvat het selecteren van willekeurige waarden voor elke parameter binnen een gespecificeerd bereik en het testen van die combinaties. Hoewel het sneller is dan zoeken in een raster, garandeert het niet het beste resultaat. Het is echter waarschijnlijk dat er een goede, zo niet optimale, oplossing wordt gevonden. Het is een afweging tussen snelheid en precisie.
Als er bijvoorbeeld 1.000 mogelijke parametercombinaties zijn, kunt u er willekeurig 100 bemonsteren en testen, wat slechts een tiende van de tijd zou duren vergeleken met het testen van alle combinaties.
HPO met behulp van optimalisatie-algoritmen
Op optimalisatie gebaseerde methoden voor het afstemmen van hyperparameters gebruiken verschillende wiskundige benaderingen om efficiënt de beste parameterinstellingen te vinden. Bayesiaanse optimalisatie maakt bijvoorbeeld gebruik van probabilistische modellen om de zoektocht te begeleiden, terwijl TetraOpt – een algoritme ontwikkeld door de auteur en het team – gebruik maakt van tensor-train-optimalisatie om beter door hoog-dimensionale ruimtes te navigeren. Deze methoden zijn efficiënter dan raster- of willekeurige zoekopdrachten, omdat ze tot doel hebben het aantal evaluaties dat nodig is om optimale hyperparameters te vinden te minimaliseren, waarbij ze zich concentreren op de meest veelbelovende combinaties zonder elke mogelijkheid te testen.
Dergelijke optimalisatiealgoritmen helpen sneller betere oplossingen te vinden, wat vooral waardevol is wanneer modelevaluaties rekentechnisch duur zijn. Ze streven ernaar om met zo min mogelijk pogingen de beste resultaten te behalen.
ML-model Compressietechnieken
Als een model eenmaal in theorie werkt, is het uitvoeren ervan in reële omstandigheden de volgende uitdaging. Neem bijvoorbeeld ResNet voor gezichtsherkenning, YOLO voor verkeersmanagement en sportanalyse, of VGG voor stijloverdracht en contentmoderatie. Hoewel ze krachtig zijn, zijn deze modellen vaak te groot voor apparaten met beperkte middelen, zoals smartphones of slimme camera’s.
ML-ingenieurs gebruiken een reeks beproefde compressietechnieken om de modellen efficiënter te maken voor dergelijke omgevingen. Deze methoden – kwantisering, snoeien, matrixontleding en kennisdistillatie – zijn essentieel voor het verminderen van de omvang en de rekenvereisten van AI-modellen met behoud van hun prestaties.
Kwantisering
Bron: Master the Art of Quantization door Jan Marcel Kezmann op Medium
Kwantisering is een van de meest populaire methoden voor het comprimeren van neurale netwerken, vooral omdat het minimale extra berekeningen vereist in vergelijking met andere technieken.
Het kernidee is eenvoudig: een neuraal netwerk bestaat uit talloze matrices gevuld met getallen. Deze getallen kunnen in verschillende formaten op een computer worden opgeslagen, zoals drijvende komma (bijvoorbeeld 32.15) of geheel getal (bijvoorbeeld 4). Verschillende formaten nemen verschillende hoeveelheden geheugen in beslag. Een getal in het float32-formaat (bijvoorbeeld 3.14) neemt bijvoorbeeld 32 bits geheugen in beslag, terwijl een getal in het int8-formaat (bijvoorbeeld 42) slechts 8 bits in beslag neemt.
Als de nummers van een model oorspronkelijk in float32-formaat zijn opgeslagen, kunnen ze worden geconverteerd naar int8-formaat. Deze wijziging verkleint de geheugenvoetafdruk van het model aanzienlijk. Een model dat aanvankelijk 100 MB in beslag nam, zou na kwantisering kunnen worden gecomprimeerd tot slechts 25 MB.
Snoeien
Zoals eerder vermeld, bestaat een neuraal netwerk uit een reeks matrices gevuld met getallen, ook wel ‘gewichten’ genoemd. Snoeien is het proces waarbij de ‘onbelangrijke’ gewichten uit deze matrices worden verwijderd. Door deze onnodige gewichten te elimineren, blijft het gedrag van het model grotendeels onaangetast, maar worden de geheugen- en rekenvereisten aanzienlijk verminderd.
Stel je bijvoorbeeld voor dat een van de matrices van het neurale netwerk er als volgt uitziet:
Na het snoeien kan het er ongeveer zo uitzien:
De streepjes (“-“) geven aan waar elementen zijn verwijderd tijdens het snoeien. Dit vereenvoudigde model vereist minder computerbronnen om te werken.
Matrix-ontleding
Matrixontleding is een andere effectieve compressiemethode waarbij de grote matrices in een neuraal netwerk worden opgesplitst (of “ontbonden”) in verschillende kleinere, eenvoudigere matrices.
Laten we bijvoorbeeld zeggen dat een van de matrices in een neuraal netwerk er als volgt uitziet:
Met matrixontbinding kunnen we deze enkele grote matrix vervangen door twee kleinere.
Wanneer ze met elkaar worden vermenigvuldigd, geven deze kleinere matrices hetzelfde resultaat als het origineel, waardoor het gedrag van het model consistent blijft.
Dit betekent dat we de matrix uit de eerste afbeelding kunnen vervangen door de matrices uit de tweede.
De oorspronkelijke matrix bevat 9 parameters, maar na ontleding bevatten de matrices er samen slechts 6, wat resulteert in een reductie van ~33%. Een van de belangrijkste voordelen van deze methode is het potentieel om AI-modellen sterk te comprimeren – in sommige gevallen meerdere keren.
Het is belangrijk op te merken dat de ontbinding van de matrix niet altijd perfect nauwkeurig is. Soms wordt tijdens het proces een kleine benaderingsfout geïntroduceerd, maar de efficiëntiewinst weegt vaak op tegen dit kleine nadeel.
Kennisdistillatie
Kennisdistillatie is een techniek voor het bouwen van een kleiner model, bekend als het ‘studentenmodel’, door kennis over te dragen van een groter, complexer model, het ‘lerarenmodel’ genoemd. Het belangrijkste idee is om het kleinere model naast het grotere te trainen, zodat het leerlingmodel leert het gedrag van het lerarenmodel na te bootsen.
Zo werkt het: Je geeft dezelfde gegevens door via het grote neurale netwerk (de leraar) en het gecomprimeerde netwerk (de leerling). Beide modellen produceren output, en het leerlingmodel is getraind om output te genereren die zo veel mogelijk lijkt op die van de leraar. Op deze manier leert het gecomprimeerde model op dezelfde manier te presteren als het grotere model, maar met minder parameters.
Destillatie kan eenvoudig worden gecombineerd met kwantisering, snoeien en matrixdecompositie, waarbij het lerarenmodel de originele versie is en de leerling de gecomprimeerde versie. Deze combinaties helpen de nauwkeurigheid van het gecomprimeerde model te verfijnen.
In de praktijk combineren ingenieurs deze technieken vaak om de prestaties van hun modellen te maximaliseren wanneer ze deze in praktijkscenario’s inzetten.
AI evolueert langs twee parallelle paden. Aan de ene kant zorgt het voor indrukwekkende vooruitgang op gebieden als de gezondheidszorg, waardoor de grenzen worden verlegd van wat we dachten dat mogelijk was. Aan de andere kant is het aanpassen van AI aan reële omstandigheden net zo cruciaal, waardoor geavanceerde technologie vaak naadloos en onopgemerkt in het dagelijks leven van miljoenen mensen wordt gebracht. Deze dualiteit weerspiegelt de impact van de smartphonerevolutie, die computergebruik transformeerde van iets ontwrichtends en kostbaars naar technologie die voor iedereen toegankelijk en praktisch is.
De optimalisatietechnieken die in dit artikel worden behandeld, zijn wat ingenieurs gebruiken om AI een tastbaar onderdeel van het dagelijks leven te maken. Dit onderzoek is nog steeds gaande, waarbij grote technologiebedrijven (zoals Meta, Tesla of Huawei) en onderzoekslaboratoria aanzienlijke middelen investeren in het vinden van nieuwe manieren om modellen te optimaliseren. Goed geïmplementeerde HPO-technieken en compressiemethoden helpen ingenieurs echter al over de hele wereld om de nieuwste modellen in alledaagse scenario’s en apparaten te integreren, waardoor indrukwekkende producten voor miljoenen mensen worden gecreëerd en de industrie vooruit wordt geholpen door hun gepubliceerde en open source bevindingen.