AI udvikler sig hurtigt og gør i stigende grad applikationer, som tidligere ville være utænkelige eller svære at implementere, til en mulighed. Vi skal i det følgende forklare ”konvolutionelle neurale netværk” (CNN) og deres betydning for machine learning i AI-systemer. CNN er effektive værktøjer, der kan udtrække funktioner fra komplekse data som mønstergenkendelse i audiosignaler eller billeder. Vi skal se, hvilke fordele CNN har i forhold til klassisk lineær programmering
Artiklen har været bragt i Aktuel Elektronik nr. 8 – 2024 og kan læses herunder uden illustrationer
(læs originaludgaven her)
Af Ole Dreessen, stabsingeniør, field applications, Analog Devices Inc.
Neurale netværk er systemer eller strukturer af neuroner, som gør AI bedre i stand til at forstå data, så det bliver muligt at løse komplekse problemer. Selv om der findes utallige netværkstyper, så skal vi alene se på de konvolutionelle neurale netværk (CNN), hvor de primære applikationsområder er mønstergenkendelse og klassificering af objekter indeholdt i input-data.
CNN er den type af kunstige neurale netværk, som bruges til deep learning, og disse netværk består af et input-lag, flere konvolutionelle lag og et output-lag. De konvolutionelle lag er de mest betydningsfulde komponenter, da de anvender et unikt sæt af vægte og filtre, hvorved netværket kan udtrække funktioner fra input-data. Data kan komme i mange former som billeder, lyd eller tekst. Ekstraktet af data gør CNN i stand til at identificere mønstre i data, og ved at udtrække funktionerne i disse mønstre kan CNN gøre ingeniører i stand til at skabe mere effektive applikationer. Men vi er nødt til først at se på den klassiske lineære programmering.
Inden for styringselektronik ligger opgaven i at aflæse data fra én eller flere sensorer med efterfølgende behandling, respons i henhold til fastsatte regler samt visning eller fremsendelse af de endelige resultater: En temperaturregulator måler for eksempel temperaturen hvert sekund gennem en mikrocontroller (MCU), der aflæser input fra sensoren. Værdien fra denne sensor leveres som input-data til en closed-loop styring, hvor data bliver sammenlignet med et sætpunkt for temperaturen i loopen med følgende justering op eller ned af temperaturen på output. Det er klassisk lineær eksekvering styret af en MCU. Løsningen giver endelige outputs baseret på forud indstillede eller forprogrammerede værdier, der sammenlignes med de aktuelle. AI-systemer er derimod baseret på sandsynligheder.
Kompleks mønster- og signalbehandling
Der er et antal applikationer, der arbejder med input-data, der først skal fortolkes af et mønstergenkendelsessystem. Mønstergenkendelse kan anvende forskellige datastrukturer. I de aktuelle eksempler begrænser vi os selv til én- og todimensionelle datastrukturer, og eksemplerne er som følger: Audiosignaler, elektrokardiogrammer (EKG), fotopletysmografi (PPGs), vibrationer for endimensionelle data og billeder, termiske billeder og vandfalddiagrammer for todimensionelle data.
Mønstergenkendelse til de nævnte bruger-cases gør konvertering af applikationen til klassisk kode for MCU’en ekstremt vanskelig. Et eksempel kunne være genkendelse af et objekt (som en kat) i et billede. I dette tilfælde gør det ingen forskel, om billedet, der bliver analyseret, kommer fra en tidligere optagelse eller lige er indlæst af en kamerasensor. Analysesoftwaren udfører en regelbaseret søgning efter mønstre, der kan tilskrives en kat. Typisk kunne det være spidse ører, det trekantede næseparti eller knurhår. Hvis disse funktioner kan genkendes i billedet, så vil softwaren rapportere, at der er fundet en kat. Men der er visse spørgsmål: Hvad nu, hvis katten kun bliver set bagfra? Eller hvad nu, hvis katten ikke har knurhår eller har mistet et ben i en ulykke? Trods usandsynligheden i disse undtagelser, så ville en mønstergenkendelse skulle tjekke et stort antal yderligere regler, som skulle dække alle mulige anormaliteter. Selv i vores simple eksempel, så ville de regler, som en software ville opsætte, hurtigt blive meget omfattende.
Machine learning erstatter klassiske regler
Idéen bag AI er at kopiere menneskelig indlæring i en lille skala. I stedet for at formulere et stort antal if-then-regler kan vi modellere en universel mønstergenkendelses-machine. Forskellen ligger primært mellem de to AI-tilgange i forhold til et etableret sæt regler. AI leverer ikke et klart resultat, men rapporterer i stedet: ”Jeg genkendte en kat i billedet” i form af en machine learning-vægtning, som siger: ”Der er 97,5 procent sandsynlighed for, at billedet viser en kat”. Men det kunne også være en leopard (2,1 procent) eller en tiger (0,4 procent). En udvikler af en sådan applikation må foretage beslutningen til sidst i mønstergenkendelsesprocessen. Man anvender en beslutningstærskel til en sådan vurdering.
Endnu en forskel er, at en mønstergenkendelses-machine ikke følger faste regler. Den er i stedet blevet ”trænet”. I denne træningsproces bliver et neuralt netværk vist et stort antal billeder af katte. Netværket vil så blive i stand til uafhængigt at definere, om der er en kat i billedet eller ej. Det kritiske punkt er, at en fremtidig genkendelse ikke er begrænset til allerede kendte træningsbilleder. Dette neurale netværk skal så mappes ind i en MCU.Et netværk af neuroner i AI ligner lidt sit biologiske modstykke i den menneskelige hjerne. En neuron har flere inputs, men kun ét output. Sådan en neuron er faktisk ikke andet end en lineær transformation af inputs som en multiplikation af inputs med tal (vægtene, w) tilføjet en konstant (bias, b) – fulgt af en fast nonlineær funktion, der også kendes som en aktiveringsfunktion. Denne aktiveringsfunktion (sigmoid, tanh eller ReLU bliver typisk anvendt) – som den eneste nonlineære komponent i netværket – definerer værdiområdet, i hvilket en kunstig neuron ”skydes af”. Funktionen af en neuron kan matematisk beskrives som:

hvor f = er aktiveringsfunktionen (AF i diagrammerne), w = vægtningen, x = input-data og b = bias. Data kan opstå som individuelle skaleringer, vektorer eller i en matrixform. Figur 1 viser en neuron med tre inputs og en ReLU2-aktiveringsfunktion (ReLU: ”Rectified Linear Unit”. Negative input-værdier i denne funktion bliver sat til nul på output, og med værdier større end nul som deres input-værdier). Neuroner i et netværk er altid arrangeret i lag.
Som nævnt bruger man CNN til mønstergenkendelse og klassificering af objekter indeholdt i input-data. CNN er opdelt i ét input-lag, adskillige skjulte lag og ét output-lag. Et lille netværk med tre inputs, ét skjult lag med fem neuroner og ét output-lag med fire outputs er vist i figur 2. Alle neuron-outputs er forbundet til alle inputs i det næste lag. Netværket vist i figur 2 er ikke i stand til at behandle meningsfulde opgaver og bruges her udelukkende til demonstrationsformål. Men selv i sådan et lille netværk er der 32 biases og 32 vægte i ligningen, der bruges til at beskrive netværket.
CIFAR til billedgenkendelse
Et CIFAR neuralt netværk er en type af CNN, der er udbredt inden for billedgenkendelse. CIFAR består af to hovedtyper af lag: Konvolutionelle lag og pooling-lag, der begge bruges effektivt i træningen af de neurale netværk. Det konvolutionelle lag bruger den matematiske operation, der kaldes konvolution, og som identificerer mønstre inden for en array af pixel-værdier. Konvolution sker i de skjulte lag, som det kan ses i figur 3. Processen bliver gentaget multiple gange, indtil det ønskede præcisionsniveau bliver opnået. Læg mærke til, at output-værdien fra en konvolutionel operation altid er specielt høj, hvis de to sammenlignende input-værdier (billede og filter i dette tilfælde) er ens. Det kaldes en filter-matrix – også kendt som en filterkerne eller bare et filter. Resultatet bliver så overført til pooling-laget, der genererer en funktions-map, som er en repræsentation af input-data, der identificerer vigtige funktioner. Det skal så ses som endnu en filter-matrix. Efter træning – med netværket i drift – bliver disse funktions-maps sammenlignet med input-data. Da funktions-maps indeholder de objekter med klassespecifikke karakteristika, der skal sammenlignes med billeder på input, vil output for neuronerne kun trigge, hvis indholdet er tæt på identiske. Ved at kombinere disse to tilgange kan et CIFAR-netværk bruges til at genkende og klassificere forskellige objekter i et billede med en meget stor præcision.
CIFAR-10 er ét specifikt datasæt, der er almindeligt i træning af CIFAR neurale netværk. CIFAR består af 60.000 styk 32×32 farvebilleder delt op i ti klasser, der er indsamlet fra forskellige kilder som websites, nyhedsgrupper og personlige billedsamlinger. Hver klasse har 6000 billeder ligeligt fordelt mellem træning, test og valideringssæt, hvad der gør det til et ideelt sæt til test af nye computer-visionarkitekturer og andre machine learning-modeller.
Den primære forskel mellem konvolutionelle neurale netværk og andre typer af netværk ligger i måden, de behandler data på. Gennem filtrering bliver input-data successivt undersøgt for deres egenskaber. I takt med at antallet af konvolutionelle lag forbundet i serie stiger, så stiger detaljeringsniveauet tilsvarende. Processen begynder med helt enkle objektegenskaber som sider eller punkter, hvorefter den første konvolution siden går efter mere detaljerede strukturer som hjørner, cirkler, rektangler eller lignende efter den anden konvolution. Efter den tredje konvolution vil funktionerne repræsentere mere komplekse mønstre, der ligner dele af objekterne i billederne, og som typisk er unikke for en given objektklasse. Det kunne – som i vores indledende eksempel – være knurhår eller ører på en kat. Visualisering af funktions-maps – som det kan ses i figur 4 – er ikke nødvendigt for applikationen selv, men det hjælper til at forstå konceptet bag konvolution.
Selv små netværk som CIFAR består af hundredvis af neuroner i hvert lag, og mange lag forbundet i serie. Antallet af nødvendige vægte og biases vokser hastigt med den øgede kompleksitet og størrelse af netværket. I det CIFAR-10 eksempel, der er vist i figur 3, er der allerede 200.000 parametre, som kræver et determineret sæt af værdier under træningsprocessen. De nævnte funktions-maps kan ydermere blive behandlet i pooling-lag, der reducerer antallet af parametre, der er nødvendige at træne, men med bibeholdelse af de vigtige informationer.
Pooling/subsampling
Som nævnt optræder der ofte efter hver konvolution i et CNN den såkaldte pooling – der også nu og da kaldes subsampling. Pooling har til formål at reducere dimensionerne af data. Hvis man ser på figur 4’s funktions-maps, så kan man se, at store områder kun indeholder små mængder eller slet ingen information. Det skyldes, at objekterne ikke udfylder hele billedet, men kun en lille del. Den resterende del af billedet er ikke i brug i den aktuelle funktions-map og derfor heller ikke relevant for klassificeringen. I pooling-laget bliver både pooling-type (maksimum eller average) og størrelsen af vinduesmatrixen specificeret. Vinduesmatrixen bliver trinvist flyttet hen over input-data under pooling-processen. Ved maksimum-pooling bliver de største dataværdier i vinduet taget. Alle andre værdier bliver ignoreret. På den måde bliver antallet af data kontinuert reduceret og danner sammen med konvolutionerne de unikke egenskaber for den respektive objektklasse.
Resultaterne af disse konvolutioner og pooling-grupper er et stort antal todimensionelle matrixer. For at opnå vores ønskede klassificering, konverterer vi de todimensionelle data til én lang endimensionel vektor. Konverteringen bliver udført i et såkaldt ”flattening-lag”, der bliver fulgt af ét eller to fuldt konnekterede lag. Neuronerne i de sidste to lagtyper ligner strukturen vist i figur 2. Det sidste lag i vores neurale netværk har præcis så mange outputs, som der er klasser, der skal skelnes imellem. Desuden vil data i det sidste lag også blive normaliseret for at levere en sandsynlighedsdistribution (97,5 procent kat, 2,1 procent leopard, 0,4 procent tiger, eller lignende).
Hermed er modelleringen af vores neurale netværk ført til ende. Vægtning og indhold af kerne og filtermatrixer er endnu ikke på plads og skal siden afgøres på baggrund af netværkstræning, før modellen kan fungere ordentligt. Hvis tid og plads tillader det, vil vi forsøge at forklare mere om dét i en efterfølgende artikel sammen med hardware-implementeringen af det neurale netværk, vi har diskuteret (til eksempelvis genkendelse af en kat). Til det formål vil AI-mikrocontrolleren, MAX78000, komme i brug. Der er en AI-MCU med en hardwarebaseret CNN-accelerator udviklet af Analog Devices, og under E-24 i Odense vil Kris Ardis fra Analog Devices også fortælle mere om brugen af kredsen og AI i hardwaren.
Billedtekster:
Figur 1: En neuron med tre inputs og ét output.
Figur 2: Et lille neuralt netværk.
Figur 3: Model af et CIFAR-netværk trænet med et CIFAR-10 datasæt.
Figur 4: Funktions-maps for et CNN.

