> Neurale netwerken <

Spiking‘ neurale netwerken verbruiken veel minder energie dan gewone neurale netwerken

Door Arnout Jaspers

Een neuraal netwerk is software of hardware die de werking van de hersenen nabootst. Door de afzonderlijke ‘hersencellen’ nog meer op echte hersencellen te laten lijken, is voor een taak als spraakherkenning veel minder energie nodig. Zo gaan slimme apparaten veel langer met hun batterijen doen.

Neurale netwerken zijn tegenwoordig heel goed in klussen die gewone computerprogramma’s niet echt onder de knie krijgen: gezichten herkennen, bijvoorbeeld, of woorden onderscheiden in gesproken taal, of tumoren opsporen in MRI-scans.
Een neuraal netwerk bestaat uit een netwerk van knooppunten met verbindingen ertussen. Deze architectuur is ontleend aan die van hersenen, die immers bestaan uit enorme netwerken van neuronen met veel onderlinge verbindingen. Een neuron krijgt signalen binnen van meerdere andere neuronen, verwerkt die, en geeft als gevolg daarvan zelf een signaal af naar neuronen verder ‘stroomafwaarts’.  (de Explainer onder dit artikel gaat in meer detail in op hoe een neuraal netwerk werkt en getraind wordt voor een bepaalde taak).  


Schema van een spiking recurrent neuraal netwerk. ‘Recurrent’ betekent dat neuronen ook informatie naar andere neuronen in dezelfde laag sturen, dus niet alleen stroomafwaarts naar de outputlaag.

Echter, een knooppunt in een kunstmatig neuraal netwerk verwerkt signalen op een heel andere manier dan een neuron in de hersenen. In de nu gangbare neurale netwerken doen de neuronen eigenlijk niet meer dan voortdurend de inkomende signalen optellen en met een zekere weegfactor  doorgeven. De totaliteit van al die individuele weegfactoren, of gewichten, bepaalt in feite welke taak een neuraal netwerk kan uitvoeren.
Daarentegen lijkt een neuron in de hersenen het grootste deel van de tijd inactief, maar het geeft af en toe een korte puls (spike) af, die wordt getriggerd wanneer een combinatie van inkomende spikes in een bepaalde tijdsperiode een drempelwaarde overschrijdt.      

Hoe dat precies werkt bij neuronen in de hersenen is deels nog onbekend, maar Sander Bohté van het Centrum voor Wiskunde en Informatica (CWI)  is een van de AI-onderzoekers die neurale netwerken bouwt met kunstmatige ‘spiking‘ neuronen. Het blijkt dat spiking neurale netwerken veel zuiniger met energie omgaan dan gewone neurale netwerken, in wezen omdat de neuronen het grootste deel van de tijd geen signaal hoeven doorgeven.

In een artikel gepubliceerd op de International Conference on Neuromorphic Systems (ICONS) tonen Bohté en zijn mede-onderzoekers aan, dat spiking netwerken voor sommige taken honderd tot wel duizend keer minder energie verbruiken. Dat is vooral belangrijk voor ‘always on‘ neurale netwerken die een continue stroom van inputdata verwerken en op batterijen moeten werken. Voorbeelden zijn apps op een mobieltje die medische gegevens analyseren, zoals iemands electrocardiogram, of real time spraakherkenning op je mobieltje. 

Bothé’s spiking neurale netwerken maken gebruik van twee types neuronen. De ene, het Leaky Integrate and Fire (LIF) neuron vuurt een puls af zodra het voldoende snel achter elkaar pulsen van andere neuronen ontvangt. Dit geldt ook voor het Adaptive neuron, maar dat heeft een extra rem op het snel achter elkaar afvuren van pulsen.   

Het LIF-neuron heeft een interne toestand, de membraanpotentiaal (blauwe lijn), die zorgt voor de afgifte van een puls als die een zekere drempelwaarde (oranje stippellijn) bereikt. Die potentiaal wordt beïnvloed door inkomende pulsen en de uitgaande puls, en door spontaan verval. Inkomende pulsen zijn rood, uitgaande pulsen groen.     

Het Adaptive is een variant op het LIF-neuron. Hier krijgt de membraanpotentiaal na elke uitgaande puls een hogere drempelwaarde, die spontaan weer afneemt naar de basis drempelwaarde. Dit vormt een rem op snel achter elkaar pulsen afgeven.  

Bothé: “Dit is ook ongeveer zoals we denken dat het biologisch werkt”

Het trainen van een spiking neuraal netwerk voor een bepaalde taak – bijvoorbeeld: woorden herkennen in een gesproken tekst – levert wel een wiskundig probleem op. Bij die training worden alle gewichten (weegfactoren) tussen de neuronen ingesteld op de ideale combinatie om woorden te herkennen.
De werking van een gewoon neuraal netwerk is te beschrijven als een weliswaar rekenintensieve, maar wiskundig goed hanteerbare bewerking van de inputdata (namelijk een matrixvermenigvuldiging). Daarom is ook uit te rekenen, hoe de gewichten bij elk trainingsvoorbeeld met inputdata stap voor stap moeten worden bijgesteld om uiteindelijk bij de optimale combinatie van gewichten uit te komen.
Maar voor een spiking neuron, met zijn ‘springerige’ respons op inkomende pulsen, werkt die wiskundige beschrijving niet (in technische termen: de functie die de respons beschrijft is niet differentieerbaar). Daarom was een extra wiskundige truc nodig, die neerkomt op doen alsof de respons van het spiking neuron toch geleidelijk (en dus differentieerbaar) verloopt. Zo lukte het Bothé en zijn collega’s Federico Corradi en Bojian Yin om een spiking neuraal netwerk toch trainbaar te maken.
Op diverse standaard tests – o.a. ECG analyse, het herkennen van geprinte cijfers – presteerden de spiking neurale netwerken bijna net zo goed of net zo goed als de beste ‘gewone’ neurale netwerken.
Daarbij verbruikten ze volgens theoretische berekeningen tientallen tot ruim duizend keer minder energie voor dezelfde taak als een gewoon neuraal netwerk. 

Trend naar meer ‘biologische’ neurale netwerken
Volgens Bothé is de manier waarop de gangbare neurale netwerken functioneren nog steeds rechtstreeks ontleend aan de klassieke elektrotechniek met analoge signaaloverdracht. “Heel simpele breinen, met maar weinig neuronen, gebruiken ook analoge signaaloverbrenging. Maar in een groot brein, waar signalen relatief grote afstanden moet overbruggen, heb je een ‘kabelprobleem’: analoge signalen krijgen dan last van dispersie (een vorm van ‘ruis op de lijn’ waardoor signalen steeds vager worden, aj). Pulsen hebben geen last van dispersie.” Volgens Bothé, die ook deeltijd hoogleraar cognitieve neuroscience is, functioneren neuronen in echte hersenen op een ingewikkelde, deels nog onbegrepen manier. Niettemin verwacht hij dat de ontwikkeling van neurale netwerken meer deze ‘biologische’ kant op zal gaan.
Netwerken met spiking neuronen zijn namelijk wezenlijk digitaal, en kunnen zo in principe veel efficiënter functioneren dan ‘analoge’ neurale netwerken.

Effective and Efficient Computation with Multiple-timescale Spiking Recurrent Neural Networks Bojian Yin, Federico Corradi, Sander M. Bohté  

Explainer: hoe werkt een neuraal netwerk, en hoe wordt het getraind?  

Een klassiek kunstmatig neuraal netwerk bevat een inputlaag, waar de data binnenkomen, dan een of meer tussenlagen, en als laatste een outputlaag. In de loop der tijd is hun architectuur steeds complexer geworden, maar de reken- en leerprincipes zijn niet veranderd. (Overigens wordt zo’n neuraal netwerk meestal niet fysiek gebouwd, maar gesimuleerd op een gewone computer.) De te analyseren data komen binnen bij de inputlaag – bijvoorbeeld: elke pixel van een MRI-scan bepaalt de beginwaarde van één knooppunt in deze laag. 

Voorbeeld van een mini neuraal netwerk met maar twee lagen en drie neuronen. De inkomende data, x1 en x2, worden met ‘gewichten’ (weegfactoren) w1 en w2 doorgegeven naar de volgende laag.
(credit: CC BY-SA 3.0
https://commons.wikimedia.org/wiki/File:A_simple_neural_network_with_two_input_units_and_one_output_unit.png)

Elk knooppunt geeft zijn waarde V via verbindingen door aan een of meerdere knooppunten ‘stroomafwaarts’ in de laag daaronder. Maar elke verbinding tussen twee knooppunten heeft ook een ‘gewicht’ W, dat bepaalt hoe sterk die waarde doorgegeven wordt. Bijvoorbeeld: als een knooppunt in de eerste  tussenlaag verbindingen heeft met drie knooppunten in de inputlaag met gewichten 1/2, 1/3 en 1/4, en die drie knooppunten hebben op dat moment waardes 7, 3 en 5, dan krijgt het knooppunt stroomafwaarts de waarde V = 1/2 x 7 + 1/3 x 3 + 1/4 x 5 =  23/4. Die waarde geeft dat knooppunt dan weer met andere gewichten door aan knooppunten in de laag daaronder.

De ‘intelligentie’ van een neuraal netwerk zit ‘m in de architectuur van het netwerk (hoeveel lagen en verbindingen, enzovoort), maar vooral in de gewichten van de verbindingen. Die gewichten zijn specifiek voor de taak die het netwerk moet verrichten, bijvoorbeeld beoordelen of in een plaatje een kat voorkomt, of niet. Omdat elke pixel in zo’n plaatje nuttige informatie kan bevatten, zal de inputlaag hier net zo veel knooppunten moeten hebben als er pixels zijn. 
In een gewoon computerprogramma voert een algoritme daarna op deze input een reeks bewerkingen uit, die vooraf helemaal door de programmeur zijn bedacht. Sommige stappen zijn welsiwaar mede afhankelijk van de input-data, maar dan zijn alle opties door de programmeur vooraf bedacht.
Bij een neuraal netwerk gaat dat echt anders: de gewichten worden niet door een programmeur bepaald, maar komen tot stand door het netwerk te trainen met een groot aantal voorbeelden van plaatjes waar wel of niet een kat in voorkomt (zoals beoordeeld door een mens). In dit geval hoeft de output-laag van het netwerk maar één knooppunt te hebben dat één bit informatie levert: ofwel 1 (ja, ik zie een kat) of  0 (nee, ik zie geen kat).
De vele duizenden verbindingen vanaf de inputlaag komen in dit geval dus in een soort trechter samen bij slechts één knooppunt. Echter, voor andere taken, bijvoorbeeld tumoren onderscheiden op een MRI-scan, kan de output-laag wel veel knooppunten bevatten.

Backpropagation
Maar hoe gaat dat trainen in z’n werk? Meestal gebeurt dat met een techniek die backpropagation  heet. Aan het begin van de training krijgen alle gewichten binnen zekere grenzen een willekeurige waarde. Dan gaat het eerste plaatje met wel of geen kat in de inputlaag. Het neuraal netwerk gaat aan de slag, en levert de output 1 of 0 af. Omdat de gewichten een willekeurige waarde hebben, is die uitkomst puur toeval. Maar als er verschil zit tussen de feitelijke uitkomst (bijvoorbeeld: 0, geen kat) en de gewenste uitkomt (1, er zat namelijk wel een kat in het plaatje), dan kan je vanuit dat verschil in de output, terugrekenen hoe je achtereenvolgens in alle tussenlagen de gewichten kan  aanpassen om wel uitkomst 1 te krijgen.
Natuurlijk heb je niets aan een neuraal netwerk dat alleen in dat ene plaatje een kat herkent. Het netwerk wordt daarom getraind met een grote set trainingsplaatjes, waarbij de gewichten telkens een klein beetje worden bijgesteld om de juiste uitkomst te krijgen.
Als de training van het netwerk goed verloopt, is bij elk volgend plaatje een steeds kleinere bijstelling van de gewichten nodig, en bereiken die tenslotte een optimale waarde. Dan kan het netwerk in principe ook in plaatjes die niet in de trainingsset zitten, katten herkennen.  

Wiskundig is dit voor te stellen als een wandeling door een vitueel heuvellandschap met net zoveel dimensies als er gewichten zijn, waarbij je wilt uitkomen in het laagste punt. ‘Hoogte’ staat dan voor de afwijking tussen de feitelijke en gewenste uitkomst.
In de afbeelding hieronder is dat weergegeven voor een neuraal netwerk met slechts twee gewichten, W1 en W2.

Het ongetrainde netwerk begint in een willekeurig punt van het virtuele landschap. Een wiskundige berekening (gradient descent) geeft aan in welke richting de gewichten w1 en w2 een beetje moeten worden bijgesteld om te dalen in het landschap. Door dit te herhalen met een groot aantal trainingsplaatjes, wandelt het neurale netwerk door het landschap. Als de training succesvol is, komt de wandeling uit in het diepste punt (globaal minimum) en kan het ook z’n taak uitvoeren met inputdata – plaatjes met katten, in dit geval – die het in de training niet  gezien heeft. Het kan ook mis gaan, doordat het netwerk in een locaal minimum terecht komt, of doordat de wandeling kris kras door het landschap blijft zwerven. In dat geval leert het netwerk niet van de trainingsdata.   

Het trainen met grote datasets kan veel computertijd kosten, maar dat hoeft geen bezwaar te zijn, omdat het maar één keer nodig is. Daarna staan alle gewichten goed, en kan een neuraal netwerk vrij snel nieuwe input-data op de gewenste manier verwerken. Niettemin blijft die verwerking van data door een neuraal netwerk zeer rekenintensief, en dat vertaalt zich in een relatief hoog energiegebruik. Vandaar dat het aanzienlijk lagere energiegebruik van spiking neurale netwerken allerlei nieuwe toepassingen mogelijk maakt, met name als het desbetreffende apparaat afhankelijk is van een batterij.   

Reacties zijn gesloten.