Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
Faculteit Toegepaste Wetenschappen
Vakgroep Elektronica en Informatiesystemen
Voorzitter: Prof. dr. ir. J. Van Campenhout
Pulstreincodering en training met
meerdere datasets op de CBM.
door Benjamin Schrauwen
Promotor: Prof. dr. ir. J. Van Campenhout
Thesisbegeleider: ir. H. Eeckhaut
Afstudeerwerk ingediend tot het behalen van de graad van Burgerlijk
Ingenieur Computerwetenschappen, optie: Computerarchitectuur
Academiejaar 2001–2002
Toelating tot bruikleen
De auteur geeft de toelating dit afstudeerwerk voor consultatie beschikbaar te stellen
en delen van het afstudeerwerk te copieren voor persoonlijk gebruik. Elk ander gebruik
valt onder de beperkingen van het auteursrecht, in het bijzonder met betrekking tot de
verplichting de bron uitdrukkelijk te vermelden bij het aanhalen van resultaten uit dit
afstudeerwerk.
Benjamin Schrauwen 19 juni 2002
i
Dankwoord
Graag zou ik iedereen willen bedanken die heeft bijgedragen tot de verwezenlijking van
dit eindwerk, in het bijzonder dank ik:
• mijn promotor Prof. dr. ir. J. Van Campenhout
• mijn thesisbegeleider ir. H. Eeckhaut waarmee ik samen een heel jaar lang de CBM
heb ontdekt, en die mij ontzettend hielp bij het voltooien van deze thesis
• ir. P. Rombouts voor de vele halve uren dat hij mij probeerde de theorie van de
∆Σ-modulatoren bij te brengen
• ir. J. Dambre voor het, ondanks alle stress, nalezen en corrigeren van deze thesis
• mijn vriendin die mij gedurende het vermoeiende proces van het schrijven van deze
thesis steeds heeft gesteund
ii
Pulstreincodering en training met meerdere datasets op de CBM.
door
Benjamin Schrauwen
Afstudeerwerk ingediend tot het behalen van de graad van Burgerlijk Ingenieur Compu-
terwetenschappen, optie: Computerarchitectuur
Academiejaar 2001–2002
Universiteit Gent
Faculteit Toegepaste Wetenschappen
Promotor: Prof. dr. ir. J. Van Campenhout
Begeleider: ir. H. Eeckhaut
Samenvatting
De CAM-brain neurale computer, een parallelle hardware-implementatie van een groot
neuraal netwerk, is een experimentele machine waar reeds enkele jaren onderzoek naar
gebeurt. Recent is de universiteit in het bezit gekomen van /’e/’en van deze computers,
waarvan er wereldwijd slechts vier bestaan. Het is echter nog steeds niet mogelijk om
complexe problemen op te lossen met deze afwijkende computerarchitectuur, ondanks vele
onderzoeksinspanningen. Twee belangrijke problemen die het onderzoek momenteel hin-
deren zijn: een beperkt inzicht in de interne voorstelling van de signalen en de beperkingen
van de bijgeleverde sofware om complexere problemen te trainen.
Het doel van dit afstudeerwerk is om deze twee problemen aan te pakken. We onderzoeken
de bestaande technieken voor het coderen van de interne informatie. We breiden deze uit
en introduceren een aantal nieuwe methoden. Voor het tweede probleem implementeren
we het concept van meerdere datasets op de CAM-brain computer. We tonen aan dat het
met deze techniek mogelijk wordt om complexere problemen op te lossen.
In dit afstudeerwerk wordt eerst de werking, opbouw en architectuur van de CAM-brain
neurale computer beschreven. Dan volgt een hoofdstuk over de codering van de interne
signalen en een hoofdstuk dat de methode van de meerdere datasets bespreekt. Tot slot
komt er een algemeen besluit. In de bijlagen worden een aantal nieuwe bestandsformaten
besproken die geıntroduceerd werden voor de beschrijving van nieuwe functionaliteiten.
Trefwoorden: CAM-brain machine (CBM), pulstreincodering, meerdere datasets.
iii
Inhoudsopgave
1 Inleiding 1
1.1 Doel van deze thesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Inhoud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2 De CAM-Brain machine 3
2.1 Het logisch model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1.1 Artificiele neurale netwerken . . . . . . . . . . . . . . . . . . . . . . 3
2.1.2 CoDi-1-bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2 Genetisch algoritme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3 De machine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.3.1 Cellulaire ruimte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3.2 Fasen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3.3 Ondersteunende onderdelen . . . . . . . . . . . . . . . . . . . . . . . 18
2.3.4 Cijfergegevens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.4 Genetische lus op de CBM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3 Pulstreincodering 26
3.1 Pulstreincodering volgens de neurobiologie . . . . . . . . . . . . . . . . . . . 26
3.1.1 Frequentiecodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.1.2 Pulscodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2 De oude methode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2.1 SIIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2.2 HSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.3 Het filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.4 De nieuwe methodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.4.1 HSA – herbezocht . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.4.2 BSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.4.3 ∆Σ-modulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.5 Resultaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.6 Besluit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
iv
4 Training met meerdere datasets 51
4.1 Het oude CBM-model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.2 Combinatie van geschiktheden . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.3 A priori methodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.3.1 Lineaire combinatie . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.3.2 Niet-lineaire combinatie . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.3.3 Lexicografische ordening . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.4 A posteriori methodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.4.1 Paretobemonstering . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.5 Het nieuwe CBM-model met meerdere datasets . . . . . . . . . . . . . . . . 60
4.6 Resultaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.6.1 Oud model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.6.2 Nieuw model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.6.3 Berekeningscomplexiteit . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.7 Besluit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5 Besluit 78
A Nieuw GAC formaat 79
B Nieuw SPT formaat 82
C Nieuw MSK formaat 84
v
Lijst van figuren
2.1 De werking van het analoog neuraal netwerk . . . . . . . . . . . . . . . . . . 3
2.2 Voorwaartse en teruggekoppelde verbindingen . . . . . . . . . . . . . . . . . 4
2.3 Een biologische pulstrein . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.4 In A ziet u een biologische actiepotentiaal, en in B een vereenvoudigde
pulstrein . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.5 Reactie ηi op het overschrijden van de drempelwaarde . . . . . . . . . . . . 6
2.6 Een typische εij . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.7 Het antwoord op verschillende inkomende pulsen volgens het SRM model . 7
2.8 Het CoDi-1-bitmodel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.9 Het CoDi-1-bitmodel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.10 Het genetisch algoritme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.11 De recombinatie-operaties . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.12 De CAM-Brain neurale computer . . . . . . . . . . . . . . . . . . . . . . . . 14
2.13 De 3x2x2 basiscellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.14 De ingangen en uitgagen van een CBM module . . . . . . . . . . . . . . . . 16
2.15 De werking van de evolutiemodus en de uitvoeringsmodus . . . . . . . . . . 17
2.16 Een pulstrein op de CBM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.17 De netlijsteenheid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.18 Het pulstreingeheugen en netlijst tijdens de uitvoeringsmodus . . . . . . . . 20
2.19 Het pulstreingeheugen en netlijst tijdens de evolutiemodus . . . . . . . . . . 21
2.20 De genetische lus van de CBM . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.1 Pulstreinconversie en -reconstructie voor de CBM . . . . . . . . . . . . . . . 26
3.2 Een (klein) aantal neuronen uit de cortex . . . . . . . . . . . . . . . . . . . 27
3.3 De tijd-ruimte-informatie van 30 naburige neuronen [38] . . . . . . . . . . . 27
3.4 Het zoeken van een filter geschikt voor stimulusreconstructie [38] . . . . . . 29
3.5 Een voorbeeld van het SIIC-algoritme . . . . . . . . . . . . . . . . . . . . . 30
3.6 Een voorbeeld van het HSA-algoritme . . . . . . . . . . . . . . . . . . . . . 31
3.7 Het originele filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.8 Het nieuwe filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
vi
3.9 Optimale drempelwaarde voor HSA bij sinussen met verschillende amplitu-
de en periode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.10 De SNR die we behalen door middel van HSA met verschillende drempel-
waarden. Er is een curve waar we gebruik gemaakt hebben van het originele
filter, en een waar we gebruik gemaakt hebben van het nieuwe filter . . . . 37
3.11 Optimale drempelwaarde voor BSA bij sinussen met verschillende amplitu-
de en periode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.12 De SNR die we behalen door middel van BSA met verschillende drempel-
waarden. Er is een curve waar we gebruik gemaakt hebben van het originele
filter, en een waar we gebruik gemaakt hebben van het nieuwe filter . . . . 39
3.13 1ste orde ∆Σ-modulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.14 Het gelineariseerde model van de 1ste orde ∆Σ-modulator . . . . . . . . . . 40
3.15 2de orde ∆Σ-modulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.16 Benadering van de SNR van de ∆Σ-modulator voor verschillende ordes en
overbemonsteringsgraden. Het deel in stippelijn komt niet uit de literatuur,
maar is een extrapolatie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.17 SNR van de ∆Σ-modulator voor verschillende ordes en overbemonsterings-
graden. De dikke stippelijn geeft de best haalbare SNR weer als we 6 bit
per filterwaarde gebruiken . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.18 Eerste soort testfuncties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.19 SNR ten opzichte van de amplitude voor de eerste soort van testfuncties . . 44
3.20 SNR ten opzichte van periode voor de eerste soort van testfuncties . . . . . 46
3.21 Tweede soort testfuncties . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.22 SNR ten opzichte van amplitude voor de tweede soort van testfuncties . . . 48
3.23 SNR ten opzichte van periode voor de tweede soort van testfuncties . . . . 49
4.1 De oude genetische lus op de host-machine . . . . . . . . . . . . . . . . . . . 52
4.2 De nieuwe genetische lus op de host-machine . . . . . . . . . . . . . . . . . 61
4.3 De nieuwe indeling van het pulstreingeheugen . . . . . . . . . . . . . . . . . 61
4.4 Een deel van de verschillende datasets die gebruikt werden voor het trainen
van het XOR probleem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.5 De geconvolveerde antwoordpulstreinen op het XOR probleem (omgekeerde
volgorde ten opzichte van figuur 4.4) . . . . . . . . . . . . . . . . . . . . . . 66
4.6 De geschiktheidsgrafiek van het XOR probleem . . . . . . . . . . . . . . . . 66
4.7 De geschiktheidsgrafiek van het XOR probleem . . . . . . . . . . . . . . . . 67
4.8 De gewenste- en antwoordpulstreinen van de frequentiedeler met perfecte
overeenkomst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
4.9 De gewenste- en antwoordpulstreinen van de frequentiedeler met een ver-
keerde vertraging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
vii
4.10 De geschiktheidgrafiek van het frequentiehalveringsprobleem . . . . . . . . . 69
4.11 De geschiktheidsgrafiek van het frequentiehalveringsprobleem . . . . . . . . 69
4.12 Het antwoord van de uiteindelijke oplossing op de verschillende datasets
voor de aanschakelbare golfvormgenerator . . . . . . . . . . . . . . . . . . . 70
4.13 Het antwoord van de uiteindelijke oplossing op de verschillende datasets
voor de aanschakelbare golfvormgenerator . . . . . . . . . . . . . . . . . . . 70
4.14 De geschiktheidgrafiek van de aanschakelbare golfvormgenerator . . . . . . 71
4.15 De geschiktheidsgrafiek van de aanschakelbare golfvormgenerator . . . . . . 71
4.16 De letters T, C, L en X zoals de CBM ze te zien krijgt . . . . . . . . . . . . 73
4.17 De geschiktheidgrafiek van het TCLX probleem . . . . . . . . . . . . . . . . 74
4.18 De geschiktheidgrafiek van het TCLX probleem . . . . . . . . . . . . . . . . 74
4.19 Een deel van de uitgangspulstreinen voor een zeer goede oplossing van het
TCLX probleem (door middel van lineaire combinatie gevonden) . . . . . . 74
4.20 De tijd die de datasetlus inneemt afhankelijk van het aantal individuen en
het aantal timeslices. Het aantal datasets is 1. . . . . . . . . . . . . . . . . . 75
4.21 De tijd die de datasetlus inneemt per individu, afhankelijk van het aantal
timeslices. Het aantal datasets is 1. . . . . . . . . . . . . . . . . . . . . . . . 76
A.1 Een voorbeeld van een .gac-bestand . . . . . . . . . . . . . . . . . . . . . . 79
B.1 Een voorbeeld van een .spt-bestand . . . . . . . . . . . . . . . . . . . . . . . 82
C.1 Een voorbeeld van een .msk-bestand . . . . . . . . . . . . . . . . . . . . . . 84
viii
Lijst van tabellen
2.1 Technische specificaties van de CAM-Brain Machine . . . . . . . . . . . . . 23
3.1 Eigenschappen van de verschillende codeersystemen voor de eerste soort
van testfuncties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.2 Eigenschappen van de verschillende codeersystemen voor de tweede soort
van testfuncties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.1 Complexiteit van paretorangordes . . . . . . . . . . . . . . . . . . . . . . . . 58
ix
Lijst van gebruikte afkortingen
CA Cellulaire Automaat
CAM Cellulaire Automaat Machine
CBM CAM-Brain Machine
EA Evolutionair Algoritme
GA Genetisch Algoritme
SIIC Spike Interval Information Coding
HSA Hough Spiker Algoritme
BSA Ben’s Spiker Algoritme
∆Σ Delta-Sigma
CoDi Collect and Distribute
FPGA Field Programmable Gate Array
NN Neuraal Netwerk
PNN Pulserend neuraal netwerk
SRM Spike Response Model
3D 3 Dimensionaal
SID Spiketrain ID
NID Netlijst ID
FEU Fitness Evaluation Unit
MEC Modular Evolvable Capacity
SNR Signal Noise Ratio
FIR Finite Impulse Response
x
Hoofdstuk 1
Inleiding
Neurale netwerken zijn welbekend voor hun positieve kenmerken bij toepassingen zoals
patroonherkenning en generalisering. Het zijn netwerken van eenvoudige eenheden, neu-
ronen, die met mekaar verbonden zijn. In deze neuronen gebeurt een zeer eenvoudige
bewerking. Het resultaat van zo een bewerking wordt via verschillende verbindingen naar
andere neuronen gestuurd die deze informatie verder verwerken. De meest gebruikte neu-
rale netwerken werken intern met analoge signalen en worden meestal op een gewone
computer doorgerekend. Dit wil zeggen dat alle neuronen sequentieel uitgerekend moeten
worden. Er wordt dus geen gebruik gemaakt van het parallelle karakter van de netwerk-
architectuur.
Een andere manier om informatie uit te wisselen tussen de verschillende neuronen is
door middel van 1-bitsignalen. Dit is ook de manier waarop informatie in de hersenen
wordt gecodeerd. Netwerken die enkel 1-bitsignalen uitwisselen zijn zeer geschikt om een
hardware-implementatie van te maken. Op die manier worden alle neuronen parallel uit-
gerekend, en kan men ten volle de capaciteit van een neuraal netwerk benutten. Men
zou denken dat het communiceren met aparte bits zorgt voor een veel kleinere informa-
tiedichtheid. Echter kan door de snelle hardware-implementatie de stroom aan bits groot
genoeg zijn om evenveel informatie te kunnen transporteren als bij de neurale netwerken
met analoge waarden. De CAM-brain machine (CBM) is zo een performante hardware-
implementatie van gepulste neurale netwerken.
1.1 Doel van deze thesis
De CAM-brain machine is ondanks jaren onderzoek nog steeds niet ten volle benut. Er
zijn verschillende redenen hiervoor. Twee belangrijke redenen zijn:
• Onvoldoende inzicht in de wijze waarop de signalen binnen de CAM-brain verwerkt
worden en wat deze signalen voorstellen
• Problemen met het trainingsalgoritme
1
Deze thesis heeft tot doel beter inzicht te creeren in wat de interne signalen voorstellen
en hoe we externe informatie kunnen voorstellen via pulstreinen. Het is de bedoeling
bestaande methoden te onderzoeken en verbeteren, en nieuwe methoden te introduceren.
Verder willen we de huidige software van de CAM-brain machine zo uitbreiden dat het
mogelijk wordt veel complexere problemen te trainen. Dit doen we door het concept van
meerdere datasets te introduceren.
1.2 Inhoud
Dit afstudeerwerk bestaat uit twee grote delen: pulstreincodering en training met meerdere
datasets. In hoofdstuk 2 geven we een introductie van de CAM-brain machine en het
model dat intern gebruikt wordt. In het 3de hoofdstuk bespreken we de problemen rond
pulstreincodering. In hoofdstuk 4 behandelen we training met meerdere datasets.
2
Hoofdstuk 2
De CAM-Brain machine
In dit hoofdstuk bespreken we de CAM-Brain Machine (CBM). Deze machine is gebouwd
door GenoByte inc. (http://www.genobyte.com) naar de ideeen van H. de Garis [7, 8]. De
bespreking delen we op in een logisch model en een fysisch model. Verder zullen we ook
iets dieper ingaan op het genetische trainingsalgoritme.
2.1 Het logisch model
De CBM is geen normale Turingmachine. Het is een hardware implementatie van een op
de hersenen gebaseerd artificieel neuraal netwerk. In deze sectie zullen we de algemene
neurale netwerkmodellen voorstellen en zien hoe deze aangepast worden om een model te
creeren dat in digitale hardware implementeerbaar is.
2.1.1 Artificiele neurale netwerken
i
iijyw
3
2
1
y
y
y
Figuur 2.1: De werking van het analoog neuraal netwerk
In onze hersenen zijn een groot aantal neuronen aanwezig. Elk neuron vormt een vrij
eenvoudige rekeneenheid. In de hersenen is elk neuron verbonden met ongeveer 10.000
andere neuronen. De kracht ligt dus niet in de rekenkracht van het neuron, maar in
het grote aantal neuronen (geschat op 1012 in de hersenen), en het nog groter aantal
interconnecties (in onze hersenen zijn dat er ongeveer 1016). Hierdoor zijn de hersenen
zo robuust. De informatie is gedistribueerd en met veel redundantie opgeslagen in de
verbindingen tussen de neuronen.
Neurale netwerken zijn wiskundige modellen van echte neuronen en hun verbindingen.
Een veelgebruikt neuraal netwerk (NN) is het analoog neuraal netwerk [41, 29] (zie figuur
3
2.1). Het bestaat uit een groep neuronen die met elkaar verbonden zijn door middel van
verbindigen. Elk neuron wordt aanzien als een berekeningseenheid die ingangssignalen
krijgt van andere neuronen via een verbinding tussen beide. Deze inkomende verbindingen
worden de dendrieten genoemd. Het neuron zal van alle inkomende signalen een gewogen
som nemen. Deze som zal dan via een drempelfunctie omgezet worden in een signaal aan
de uitgang van het neuron, dat op zijn beurt weer verbonden is met andere neuronen.
Deze uitgaande verbindingen worden de axonen genoemd. We kunnen de uitgang van een
neuron schrijven als de functie
yj = θ
(∑i
wijyi
)
waar yi het ingangssignaal is van neuron i, en wij het gewicht is van de verbinding tus-
sen neuron i en neuron j. De functie θ is een drempelfunctie. Een drempelfunctie is
bijvoorbeeld
θ(x) =
0 x < β
1 x ≥ β
waar β de drempelwaarde is. De meest gebruikte dempelfunctie is de sigmoidefunctie
θ(x) =1
1 + e−x.
Deze functie is glooiender van vorm.
Figuur 2.2: Voorwaartse en teruggekoppelde verbindingen
De neuronen kunnen op grofweg twee manieren met elkaar verbonden worden: in
voorwaartse richting of met terugkoppeling (zie figuur 2.2). De meest gebruikte vorm is
de voorwaartse richting. Hierbij is het neurale netwerk onderverdeeld in lagen. Neuronen
van een laag hebben enkel ingangen van de vorige laag en uitgangen naar de volgende laag.
Er is dus zeker geen terugkoppeling mogelijk binnen het netwerk. Er bestaan zeer goede
trainingsalgoritmen voor dit type netwerken (zoals terugpropagatie [55]). Een algemenere
topologie is mogelijk als men terugkoppeling toelaat. Voor dit type netwerken bestaan
er amper analytische trainingsmethoden (zoals terugpropagatie er een is), en ze worden
daardom meestal door middel van meer heuristische algoritmen getraind. In [28] worden
bijvoorbeeld evolutionaire algoritmes (EA) gebruikt (zie ook verder in deze thesis).
4
Figuur 2.3: Een biologische pulstrein
Figuur 2.4: In A ziet u een biologische actiepotentiaal, en in B een vereenvoudigde pulstrein
Een exacter model voor de biologische neuronen kunnen we bereiken door gebruik te
maken van gepulste neurale netwerken (PNN) (in het Engels ‘Pulsing Neural Network’ of
’Spiking Neural Networks’) [38]. In de hersenen gebeurd de communicatie tussen de neu-
ronen immers via pulstreinen. Pulstreinen zijn sequenties van stereotype gebeurtenissen
(zoals een verhoogde potentiaal aan het axon van een biologisch neuron). In figuur 2.3 en
2.4 zien we een biologische pulstrein. De exacte vorm van de gebeurtenissen is onbelang-
rijk, enkel het tijdstip waarop de gebeurtenis zich voordoet is van belang. Een pulstrein
kunnen we dus volledig karakteriseren door de verzameling van alle vuurtijdstippen
Fi = t(1)i , t
(2)i , ..., t
(n)i ,
waar t(f)i het f -de tijdstip aangeeft waarop neuron i vuurt. Als we de stereotype ge-
beurtenissen modelleren als Dirac δ-functies1, kunnen we de pulstrein in het tijdsdomein
schrijven als
Si(t) =∑
t(f)i ∈Fi
δ(t − t(f)i ).
Hoe we deze pulstreinen moeten interpreteren zullen we bespreken in hoofdstuk 3.
Nu definieren we een zeer algemeen model voor pulserende neuronen, namelijk het
pulsantwoordmodel (‘Spike Response Model’ of SRM), geıntroduceerd in [25]. De toe-
standsvariabele van neuron i noteren we als ui. Het neuron zal vuren (een puls genereren)1δ(s) = 0 als s = 0 en
∫ ∞−∞ δ(s)ds = 1
5
als ui een bepaalde grenswaarde ϑ bereikt. Deze gebeurtenissen bepalen dus de tijdstippen
t(f)i waarop het neuron vuurt. De verzameling van vuurtijdstippen kunnen we noteren als
Fi = t | ui(t) = ϑ.
-
-
Figuur 2.5: Reactie ηi op het overschrijden van de drempelwaarde
Er zijn twee processen die de toestandsvariabele ui veranderen. Onmiddellijk na het
vuren van het neuron zal ui worden ‘gereset’. Dit doen we door een negatieve functie
ηi(t− t(f)i ) op te tellen bij de variabele ui. In figuur 2.5 zien we een typische golfvorm voor
deze ηi. We zien dat deze ‘reset’-functie maar tijdelijk is. Na 20ms is het neuron vergeten
dat hij eens puls heeft gestuurd en is de toestand terug hersteld tot die voor de uitgaande
puls.
Figuur 2.6: Een typische εij
Het tweede proces komt voor als het neuron een puls binnenkrijgt van een van de
neuronen waarmee het verbonden is. Deze neuronen noteren we als
Γi = j | neuron i krijgt input van neuron j.
Als neuron j ∈ Γi vuurt op tijdstip t(f)j , dan zal de toestandsvariabele ui van neuron i
veranderen door wijεij(t − t(f)j ) er bij op te tellen. Het gewicht wij drukt hier weer het
relatieve belang van de verbinding uit. Figuur 2.6 toont een typische εij . Hier zien we
dat de reactie op inkomende pulsen ook tijdelijk van aard is. Dat verklaard waarom de
‘reset’-functie tijdelijk van aard was. Het neuron vergeet inkomende pulsen namelijk ook
een zekere tijd.
6
Nu kunnen we de toestandsvariabele ui uitdrukken in de tijd als
ui(t) =∑
t(f)i ∈Fi
ηi(t − t(f)i ) +
∑j∈Γi
∑t(f)j ∈Fj
wijεij(t − t(f)j ).
ηi en εij worden steeds zo gekozen dat ze nul zijn voor t ≤ 0 en naar nul gaan voor t → ∞.
εij komt dus overeen met de reactie van het neuron op een externe impuls (onafhankelijk
van het gewicht van de verbinding). ηi kunnen we aanzien als de reactie van het neuron
op zijn eigen impulsen.
De transportvertraging van een verbinding kan gemodelleerd worden door een extra
vertraging bij εij te introduceren. Dit kan men duidelijk zien in figuur 2.6. Door gebruik
te maken van juist gekozen ηi en εij is het mogelijk het Hodgkin-Huxley model (wat een
biologisch zeer correct model is) sterk te benaderen [38]. In figuur 2.7 zien we nog een
overzichtsvoorbeeld van het SRM.
Figuur 2.7: Het antwoord op verschillende inkomende pulsen volgens het SRM model
In [Maas] wordt bewezen dat onder zeer algemene voorwaarden (εij moet aan een
bepaalde eis voldoen):
Theorema 1 Elk voorwaarts of teruggekoppeld analoog neuraal netwerk met n neuronenkan arbitrair correct gesimuleerd worden door een pulserend neuraal netwerk met n + cpulserende neuronen (c een kleine constante). Dit is zelfs mogelijk indien er ruis aanwezigis.
Verder wordt er ook aangetoond dat:
Theorema 2 Indien men een bepaalde basiseigenschap (hier niet verder vermeld) van eenpulserend neuron met n inputs wil simuleren door middel van een analoog neuraal netwerk,dan heeft men minstens n−4
2 analoge neuronen nodig.
Hier merkt men een duidelijk asymmetrie tussen de berekeningskracht van analoge neurale
netwerken (zelfs met terugkoppeling) en pulserende neurale netwerken: een analoog neu-
raal netwerk kan gesimuleerd worden door een net iets groter pulserend neuraal netwerk,
7
maar bepaalde pulserende netwerken kunnen enkel gesimuleerd worden door een zeer veel
groter analoog netwerk.
Voor analoge neurale netwerken is er een eigenschap bekend die zegt dat elke continue
functie F : [0, 1]n → [0, 1]m met een gewenste precisie kan benaderd worden door een
voorwaarts analoog neuraal netwerk met voldoende lagen. Wegens voorgaande uiteenzet-
ting kunnen we nu dus ook stellen dat elke continue functie F met een gewenste precisie
door een pulserend neuraal netwerk benaderd kan worden . De uitgangen worden wel
verondersteld op een bepaalde manier gecodeerd te zijn (zie hoofdstuk 3).
De enige voorwaarde waaraan εij(t) moet voldoen is dat εij(t) benaderd lineair stijgt
(of daalt) voor t tussen 0 en een waarde R. De meeste biologisch geınspireerde εij hebben
deze eigenschap. Dit zien we ook in figuur 2.6.
2.1.2 CoDi-1-bit
CoDi staat voor ‘Collect and Distribute’ (verzamel en verdeel) en is geıntroduceerd door
Gers, de Garis en Korkin in [23]. Na deze initiele publicatie heeft het model nog wel
een paar aanpassingen ondergaan voordat het effectief gebruikt werd in de CBM. Deze
onderhuidse veranderingen van het model zijn echter helemaal niet duidelijk aangegeven
in de literatuur waardoor geregeld zeer verwarrende situaties ontstaan.
De naam ‘Collect and Distribute’ staat voor het algemene gedrag van een neuron, na-
melijk om informatie te vergaren, deze informatie bewerken en deze later weer te verdelen
naar andere neuronen. De 1 bit slaat op het feit dat alle communicatie tussen neuro-
nen gebeurt met 1-bitsignalen. De nadruk bij het CoDi-1-bitmodel ligt op de eenvoudige
implementeerbaarheid ervan in hardware. Hierdoor zijn er zeer vele vereenvoudigingen
ingevoerd waardoor het model sterk afwijkt van de eerder besproken neurale netwerk mo-
dellen. Het eerste grote verschil met de voorgaande modellen is dat de tijd discreet is. Bij
elke tijdstap zal het ganse netwerk in parallel naar een nieuwe toestand overgaan.
axoncellendendrietcellen
wij
wij
yi
ij
Figuur 2.8: Het CoDi-1-bitmodel
8
Het CoDi-1-bitmodel zien we in figuur 2.8. De uitgang op tijdstip k van neuron i
noteren we yi(k). Deze heeft een binaire waarde, dus yi(k) ∈ 0, 1. Het gewicht van de
verbinding van neuron j naar neuron i noteren we als wij . De gewichten hebben ook een
binaire waarde, maar deze zijn van de vorm wij ∈ −1, 1. Is het gewicht 1 dan noemen we
de verbinding exciterend, is het gewicht −1 dan noemen we ze inhiberend. Intern houdt
een neuron een accumulator ui(k) bij. Bij elke tijdstap telt het daarbij de gewogen som
van de ingangen op. Dit kunnen we noteren als
ui(k) = ui(k − 1) +∑j∈Γi
wijyj(k).
De uitgang van een neuron zal vuren (1 worden) als ui(k) een drempelwaarde ϑ over-
schrijdt. Als een neuron vuurt, wordt zijn interne accumulator op nul gezet.
yi(k) =
1 als ui(k) ≥ ϑ
0 anders.
Met het oog op de implementatie in hardware heeft men ervoor gekozen om het vuren
van het neuron met een klokpuls te vertragen. Dit zullen we echter modelleren als een
extra transportvertraging. Verder is er ook een ondergrens van de accumulator voorzien,
de drempelwaarde . Als ui(k) ≤ dan wordt ui(k) op nul gezet zonder te vuren. In
figuur 2.9 zien we hier een voorbeeld van.
ingangspulstrein met positief gewicht:
ingangspulstrein met negatief gewicht:
t
u
uitgangspulstrein
Figuur 2.9: Het CoDi-1-bitmodel
De verbindingen tussen verschillende neuronen worden gerealiseerd door een aaneen-
schakeling van cellen die de pulstreinen zullen transporteren van neuron naar neuron. Er
9
zijn twee types cellen, axoncellen, en dendrietcellen. Axoncellen krijgen van een axoncel
of een neuron een puls binnen en transporteren deze puls naar 1 of meerdere andere cellen
(axon of dendriet) met een vertraging van 1 klokpuls. Dendrietcellen krijgen van 1 of
meerdere cellen (axoncel of dendrietcel) een puls binnen en transporteren deze dan door
(met een delay van 1 klokpuls) naar een neuron of een andere dendrietcel. Een extra
eigenschap van de dendrietcellen is de pulsblokkering. Als er gelijktijdig meer dan 1 puls
binnenkomt in een dendriet zal de cel blokkeren en geen puls uitsturen. Dit fenomeen is
ook in de natuur waargenomen [45]. In de verdere bespreking zullen we dit effect echter
verwaarlozen omdat het ons iets te ver zou leiden in de zeer interessante materie van de
pulssynchronisatie tussen neuronen [38].
De axon- en dendrietcellen vormen boomstructuren met als wortel een neuron. De
axon- en dendrietbomen van verschillende neuronen kunnen elkaar raken (dendrietboom
raakt axonboom) en op die manier pulstreinen transporteren tussen de neuronen. Elke
verbinding tussen twee neuronen kunnen we dus ondubbelzinnig modelleren door de trans-
portvertraging van de verbinding. Deze transportvertraging, ∆ij , is gelijk aan het aantal
cellen dat de puls passeert voordat het het ander neuron bereikt, plus een, en dit wegens de
vuurvertraging van het neuron. Het is mogelijk dat er verschillende verbindingen bestaan
tussen twee neuronen, en dat deze verbindingen een andere vertraging en gewicht bezitten.
In de verdere bespreking zullen we dit echter verwaarlozen om een eenvoudige notatie te
behouden, dit echter zonder verlies aan algemeenheid. Het uitbreiden van het model naar
meerdere verbindingen is enkel notationeel verschillend met het hieropvolgende.
We gaan nu het CoDi-1-bitmodel voorstellen in het gediscretiseerde SRM. Eerst en
vooral noteren we een discrete versie van het SRM.
ui(k) =∑
k(f)i ∈Fi
ηi(k − k(f)i ) +
∑j∈Γi
∑k(f)j ∈Fj
wijεij(k − k(f)j ).
met
Fi = k | ui(k) ≥ ϑ = k | yi(k) = 1.De respons van CoDi-1-bit op een impuls komende van een ander neuron is het verhogen
van de interne teller met +1 en -1 (afhankelijk van het gewicht) . Dit komt overeen met
εij(k) = H(k), hier is H de discrete eenheidsstap. Als we ook de transportvertraging van
de verbinding in rekening willen brengen, krijgen we
εij(k) = H(k − ∆ij).
De reactie van CoDi-1-bit op een eigen impuls is het op 0 zetten van de accumulator.
Dit is niets anders dan puls gelijk aan de huidige waarde van ui af te trekken van de
accumulator. De ηi zal niet meer constant blijven, maar afhankelijk zijn van de tijd, en
wel het ogenblik waarop het neuron vuurt. Dit noteren we als
ηk(f)i
i (k) = −ui(k(f)i )H(k).
10
Hier komen we in wiskundige moeilijkheden omdat ηk(f)i
i (k) niet 0 is voor k = 0. Dit
betekent dat ui(k) afhankelijk is van zichzelf! Deze puur theoretische situatie is echter
enkel aanwezig in de formules en verdwijnt als je deze formule recursief benaderd. Om
geen problemen te krijgen met de causaliteit kunnen we dit doen door een infinitesimale
tijdstap δ in rekening te brengen per iteratie van de recursie. Heel deze constructie is
echter een zuiver wiskundige kunstgreep die niets aan het resultaat verandert.
De functies εij(k) en ηi(k) gaan niet naar nul voor k → ∞. Dit betekent dat als er
geen signalen meer binnenkomen in de neuronen, deze hun huidige toestand voor altijd
zullen bewaren. De neuronen onthouden hun oude toestand zolang ze niet vuren.
We merken op dat εij geen initieel lineair stijgende/dalende functie is. Daarom kunnen
we theorema 1 niet toepassen. We kunnen dus niet zonder meer stellen dat het CoDi-
1-bitmodel equivalent is met het analoog neuraal netwerkmodel. We kunnen dus niet
besluiten welke functies allemaal voorstelbaar zijn met CoDi-1-bitnetwerken.
We besluiten dat mits een kleine wijziging in het model (ηi niet meer constant) het
mogelijk is CoDi-1-bit te modelleren door middel van het ‘Spike Response Model’. Echter,
het CoDi-1-bitmodel is niet equivalent met algemene PNNen of NNen2.
2.2 Genetisch algoritme
In deze sectie gaan we iets dieper in op het genetisch algoritme dat door de CBM ge-
bruikt wordt om CoDi-1-bitnetwerk te zoeken die voldoen aan onze functionele eisen. Dit
zoekproces wordt vaak training genoemd.
Genetische Algoritmes (GA) vormen een klasse van stochastische optimalisatie-algoritmes.
Ze zijn ook bekend als Evolutionaire Algoritmes (EA). Deze term omvat echter een iets
bredere verzameling van algoritmes. Het voornaamste kenmerk is dat ze ideeen uit de
evolutionaire biologie gebruiken, zoals natuurlijke selectie en het genetische coderen in
chomosomen.
Genetische algoritmes zijn reeds lange tijd aanwezig in de literatuur [30, 26], maar zijn
nog steeds niet 100% begrepen. Toch wordt algemeen aanvaard dat genetische algoritmes
zeer robuste algoritmes zijn, toepasbaar op een breed scala van problemen, zelfs deze met
zeer vele variabelen. Een nadeel van het relatief slechte begrip van GAs is dat ze meestal
als redelijk heuristisch overkomen (dit wegens de brede waaier aan mogelijke uitbreidingen,
en de bijbehorende parameters).
Het GA codeert de parameters van een te optimaliseren probleem (bijvoorbeeld als
een bitrij). De gecodeerde parameters noemt men het genotype, chromosoom of genoom.
Als we het genotype decoderen bekomen we het fenotype. Het GA werkt enkel op de
gecodeerde vorm van de parameters, niet op de parameters zelf. Er wordt gewerkt met
een verzameling van mogelijke oplossingen, die we de populatie noemen. De leden van de2Volgens de stelling van Maas. Dit is echter nog niet algemeen aangetoond.
11
populatie noemen we individuen. Dit zijn de kandidaatoplossingen (waarvan we er dus
altijd een aantal bijhouden).
Initialiseer de populatieEvalueer de populatie
Pas selectie toe
Pas recombinatie toe om eennieuwe populatie te maken
Figuur 2.10: Het genetisch algoritme
De algemene lus van een GA zien we in figuur 2.10. Het algoritme start met het
initialiseren van de populatie met willekeurig gegenereerde individuen. Daarna evalueren
we elk van deze individuen. Het evalueren van een individu komt neer op het decoderen
van het genotype tot het fenotype, en dit fenotype te interpreteren als de parameters
van ons probleem. We definieren een maat voor hoe goed het probleem voldoet aan onze
wensen. Deze maat noemen we de geschiktheid (fitness in het Engels). De functie die de
parameters afbeeldt op hun geschiktheid noemt men de geschiktheidsfunctie. Deze functie
is van de vorm f(x) ∈ R met x de vector met de parameters (dus het fenotype).
Vervolgens selecteren we individuen, met een kans proportioneel met hun geschiktheid.
Deze individuen recombineren we om zo de nieuwe populatie te vormen. De recombinatie-
operaties zijn overkruisen (crossover) en mutatie (figuur 2.11). Deze operaties zullen met
een bepaalde probabiliteit toegepast worden. Bij het overkruisen worden er nieuwe indivi-
duen gecreeerd door genetische informatie uit twee individuen (de ouders) te combineren.
De nieuwe individuen worden de kinderen genoemd. Er zijn verschillende vormen van
overkruising mogelijk (zie fig 2.11). Zo is er de uniforme overkruising waar elke positie in
het genoom met even grote kans van elk van de ouders kan komen. Er is ook eenpunts-
overkruising. Hier worden beide genomen op dezelfde positie in twee stukken geknipt, en
worden de twee achterste stukken van de twee genomen omgewisseld. Er worden dus twee
kinderen gemaakt. Meestal wordt er willekeurig een van de twee gekozen. De mutatie-
operator tenslotte zal op een willekeurige positie van het genoom de waarde veranderen.
Na het vormen van de nieuwe populatie door de recombinatie operatoren zal de nieuwe
populatie geevalueerd worden. Al deze stappen worden herhaald tot er aan een bepaald
stopcriterium is voldaan.
Na een aantal iteraties (een iteratie noemt men een generatie), zal de populatie con-
vergeren. Hiermee bedoelen we dat alle individuen in de populatie ongeveer dezelfde
geschiktheid bereikt hebben en dat het evolutionaire proces beeindigd is3. Meestal wordt3Dit kunnen we alleen met zekerheid zeggen als het globale optimum is bereikt. In het andere geval is
12
Uniforme Overkruising
Een-punts Overkruising
1 0 0 0 1 0 1 1 0
0 1 1 0 0 1 0 0 1Ouder 2:
Ouder 1:
Kind:
1 0 0 0 1 0 1 1 0
0
1 1 0 0 0 0 0 0 1
1 2 1 1 2 2 2 21Masker:
Ouder:
Kind:
Mutatiepunt:
1 0 0 0 0 1 1 0
1 0 0 0 1 0 1 1 0
0 1 1 0 0 1 0 0 1Ouder 2:
Ouder 1:
Kind:
Overkuisingspunt:
1 0 0 0 1 1 0 0 1
Mutatie
Figuur 2.11: De recombinatie-operaties
deze convergentie gebruikt als eis voor het stoppen van het algoritme. Het is ook mogelijk
te stoppen na een vaste tijd, maar dan weet men niets over het al dan niet optimaal zijn
van de waarde op dat moment.
De parameters van een standaard GA bestaan dus uit: het type van coderen, de grootte
van de populatie, de kans op overkruising en op mutatie en het type van overkruising.
2.3 De machine
Voor het fysisch implementeren van het CoDi-1-bit neuraal model gebruikt men een drie-
dimensionale cellulaire ruimte die geımplementeerd is met herconfigureerbare hardware,
met name ‘Field Programmable Gate Arrays’ (FPGA’s). In deze sectie zullen we wat
dieper ingaan op de implementatie van de CBM. De originele beschrijving vindt men in
[36]. In figuur 2.12 ziet men de CBM en zijn interne delen.
er nog een kleine kans dat na een zekere tijd de populatie toch verder op zoek zal gaan naar het globaleoptimum.
13
Figuur 2.12: De CAM-Brain neurale computer
2.3.1 Cellulaire ruimte
Het CoDi-1-bit logisch model is geımplementeerd in een driedimensionale (3D) cellulaire
ruimte. Elke cel heeft 6 buren: achter, voor, boven, onder, links en rechts (dit noemt
men ook de von Neumann omgeving). In de CBM noteren we deze richtingen als N(orth),
S(outh), T(op), B(ottom), W(est), E(ast); deze volgorde wordt ook conventioneel gebruikt
om de configuraties van de cellen aan te geven. Alle verbindingen tussen de cellen zijn dus
lokaal (enkel met de buren van een cel). Elke cel bezit een (lokaal) configuratiewoord dat
aangeeft hoe de cel zal reageren om mogelijke inputsignalen.
Cellen In het logisch model zijn er drie types van cellen: axon-, dendriet- en neuroncel-
len. Bij de implementatie zijn er 2 types van cellen: gewone cellen en universele cellen.
Een gewone cel heeft tot doel de axon- en dendrietcellen te implementeren. Het confi-
guratiewoord van zulke cellen bestaat uit 6 bits die aangeven welke van de connecties met
de buren inputs zijn, en welke outputs. Een 0 in de eerste 6 bits staat voor een uitgang,
een 1 voor een ingang. Er zal pas effectief een verbinding zijn tussen twee naburige cellen
als de ene een ingang en de andere een uitgang heeft op die verbinding. Een in-in of uit-uit
combinatie zorgt dus niet voor een verbinding4. Een cel met bijvoorbeeld een configuratie
010000 zal een axonwerking hebben (1 ingang en 5 uitgangen), en de uitgang zal zich
vooraan (Zuid) bevinden. Is de configuratie 111011, dan hebben we te maken met een
dendrietcel (1 uitgang en 5 ingangen) die zijn uitgang langs onder heeft. We zullen verder
aantonen dat er via een groeifase voor gezorgd wordt dat enkel axon- en dendrietcellen4Dit wil niet zeggen dat er nooit signalen zullen binnenkomen of buitengaan via die zijde van de cel.
Zie module in- en uitgangen.
14
voorkomen. Dus geen cellen met bijvoorbeeld 3 ingangen en 3 uitgangen, wat eigenlijk
wel mogelijk is binnen het cellulaire model (de hardware implementatie), maar niet past
in het neurale model.
Een universele cel zal ofwel een neuron implementeren ofwel als gewone cel dienen. Het
configuratiewoord van een neuron is dus een uitbreiding van dat van de gewone cel. Zo
worden onder andere de gewichten van de connecties opgeslagen, de interne huishouding
van het neuron, enzovoort. Welke de in- en uitgangen van het neuron zijn, wordt door de
eerste 6 bits aangegeven. Verder zijn er bij de huidige implementatie een aantal factoren
van het CoDi-1-bitmodel vast gekozen. Zo is de drempelwaarde ϑ voor alle neuronen gelijk
aan 2. Ook is de ondergrens van de accumulator vast gesteld op -8.
Het is mogelijk dat een gewone of universele cel niet gebruikt wordt (leeg is). Lege
cellen interageren niet met hun naburige cellen. Dit gebeurt indien alle connecties ingangen
zijn (111111) of als ze allemaal uitgangen zijn (000000).
Z
X
Y
neuron 0-7
neuron 8-15
neuron 16-23
neuron 24-31
neuron 88-95
neuron 1056-1063
neuron 1144-1151
Universele cel
Figuur 2.13: De 3x2x2 basiscellen
De gewone en universele cellen zijn gelijkmatig verdeeld in de ruimte volgens een
patroon van 3x2x2. In figuur 2.13 zien we hoe de basiscellen in de module verdeeld
zijn. De universele cel zit rechts achter onderaan, de andere cellen zijn gewone cellen.
15
Modules De 3D cellulaire ruimte wordt onderverdeeld in modules met een afmeting van
24x24x24 (zie figuur 2.14). De CBM kan gelijktijdig een module volledig parallel simuleren.
Een module vormt een toroıdale ruimte (voorvlak is verbonden met achtervlak, bovenvlak
met ondervlak, en linker vlak met rechter vlak). Dit noemt men ook ‘wrap around’.
Bijvoorbeeld signalen die de module lijken te verlaten via het bovenvlak, komen binnen
in het ondervlak.
Z
X
Y
0 1 2 3 4 5 6 7
8 9 10 11 12 13 14 15
16 17 18 19 20 21 22 23
24 25 26 27 28 29 30 31
32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47
48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63
128-135
136-143
184-191
64-71
72-79
Input
Output
80-87
88-95
96-103
104-111
112-119
120-127
144-151
176-183
168-175
160-167
152-159
Figuur 2.14: De ingangen en uitgagen van een CBM module
Een module bevat ook een aantal externe verbindingen om van buitenaf signalen in de
module te kunnen injecteren (externe ingangen van de module) en signalen uit de module
te kunnen uitlezen (uitgangen). Deze in- en uitgangen hebben vaste posities die we zien
in figuur 2.14. Deze externe verbindingen liggen op de verbindingen tussen twee wrap
around vlakken. Er zijn 4 uitgangen en 188 ingangen per module. Een uitgang zal vuren
als minstens een van de beide cellen vuurt (als beide cellen vuren is er geen verbinding
tussen de cellen). Het zelfde geldt voor de ingangen. Een extern ingangssignaal wordt aan
de cellen doorgegeven indien de cellen aan die kant een ingang hebben.
2.3.2 Fasen
De CBM heeft 2 werkingsmodi: de evolutiemodus (ook evolution mode, zie figuur 2.15)
en de uitvoeringsmodus (ook run mode, zie figuur 2.15). Tijdens de evolutiemodus zal via
een genetisch algoritme gepoogd worden om een module te trainen voor een opgegeven
probleem. De evolutiemodus bestaat uit de volgende drie fasen: de groeifase, de signaal-
fase, en de genetische fase. Tijdens de uitvoeringsmodus kan men meerdere modules in de
16
Evolutiemodus
Elke generatie
Zet de CBM in genetische modus
Verwerk alle individuen
Zet de CBM in groeimodus
Verwerk alle individuen
Zet de CBM in signaalmodus
Verwerk alle individuen voor alle timeslices
Uitvoeringsmodus
Zet de CBM in signaalmodus
Voor elke timeslice
Verwerk alle modules gedurende 1 timeslice
Figuur 2.15: De werking van de evolutiemodus en de uitvoeringsmodus
CBM inladen en deze met elkaar verbinden om zo complexere problemen op te lossen (de
modules worden dan een voor een uitgevoerd ). De uitvoeringsmodus gebruikt enkel de
signaalfase.
Nu worden de drie fasen iets uitgebreider besproken. Voor een volledige bespreking
van de werking van de verschillende fasen verwijzen door naar [36].
Groeifase De groeifase zal ervoor zorgen dat er in de module mooie axon- en dendriet-
bomen groeien. Dit doen we door vanuit de neuronen groeisignalen te sturen om zo vanuit
elk neuron een aantal axon- en dendrietbomen te laten groeien (axonboom aan uitgang
van neuron, dendrietboom aan ingang van neuron). Dit blijven we doen tot er geen bomen
meer groeien (alle axontakken raken aan dendriettakken). Bomen zullen nooit verbindin-
gen maken met bomen van hun eigen soort (axon-axon of dendriet-dendriet verbindingen).
De externe in- en uitgangen zullen ook bomen laten groeien om op die manier goede
connectiviteit met de module te bekomen. Op die manier wordt er ook voor gezorgd dat
ingangen enkel verbonden worden met dendrietbomen, en uitgangen met axonbomen. Niet
gebruikte in-uitgangen zullen dit niet doen.
De manier waarop de takken groeien wordt gestuurd door de genetische informatie van
de cellen. De groeifase zal dus het chromosoom (genotype) van een module omgezetten
naar zijn configuratiewoord (fenotype).
Het is gebleken dat de groeifase er in slaagt de zoekruimte te verkleinen. Men kan dit
intuıtief aanvoelen door te kijken naar de kans dat een pad ontstaat tussen twee neuronen.
Als er geen groeifase is, moet een aaneenschakeling van willekeurige cellen een verbinding
vormen (deze kans is klein). Als er echter een groeifase aanwezig is, gaat elk neuron vanzelf
op zoek naar naburige neuronen (de axon-dendrietbomen om correct te zijn) om mee te
connecteren.
17
Signaalfase Tijdens de signaalfase zal voor een bepaalde tijd een volledige module in de
CBM verwerkt worden (verwerken komt hier overeen met het simuleren van het CoDi-1-
bitmodel). De CBM gebruikt tijdsmultiplexering om grotere netwerken te simuleren. Elke
module wordt gedurende 96 klokpulsen gesimuleerd. De uitgangen van de module worden
bewaard, en vervolgens wordt een nieuwe module ingeladen.
Deze manier van werken zorgt ervoor dat circulaire connecties tussen modules steeds
een minimale vertraging van 96 klokpulsen hebben. Hierdoor is het eerder aangewezen elke
module te aanzien als verwerkingseenheid die met andere verwerkingseenheden verbonden
is (weinig terugkoppeling tussen modules, dus vertraging mag groot zijn, als ze maar op
voorhand gekend is), en niet als een groot neuraal netwerk (veel terugkoppeling tussen
modules, waarbij de vertraging eerder klein is).
Genetische fase Tijdens de genetische fase worden door middel van een genetisch al-
goritme nieuwe kandidaten gegenereerd die dan door een nieuwe groei- en signaalfase
geevalueerd worden. De uitvoer van elke module wordt vergeleken met een gewenst uit-
gangssignaal. Op die manier berekenen we de geschiktheid van een module. De geschikt-
heid is een getal dat aangeeft hoe goed een module de gevraagde taak uitvoert.
Een deel van de genetische fase zal op de computer gebeuren die de CBM aanstuurt.
Dit is een gewone PC en noemen we de host-computer5. In 2.4 zullen we hier dieper op
ingaan.
2.3.3 Ondersteunende onderdelen
Er zijn ook een aantal hulpeenheden aanwezig in de CBM die de verwerking van de signalen
mogelijk maken. Wij bespreken hier enkel diegene die verder in deze thesis nodig zijn.
Voor een diepergaande bespreking verwijzen door naar [36].
Modulegeheugen Op de CBM is een grote hoeveelheid gedistribueerd geheugen aan-
wezig. In dit geheugen zitten de modules gedistribueerd opgeslagen. De beschrijving van
een module bevat niet enkel het genotype, maar ook alle toestanden van de cellen. Hier-
door is de beschrijving van een module nogal groot (91.008 bits). Omdat er veel geheugen
aanwezig is, is het mogelijk om zeer veel modules (64.640) ‘tegelijk’ te simuleren. De
modules worden een voor een uit het geheugen gehaald, voor 96 klokcycli gesimuleerd, en
daarna opnieuw in het geheugen gestoken. Wegens de grootte van de beschrijving van de
module moeten dus zeer veel gegevens getransporteerd worden van het geheugen naar de
FPGAs en omgekeerd. Wegens de beperkte bandbreedte van het geheugen (dit is al deels
opgelost door het gedistribueerde karakter) duurt dit dus een zekere tijd. Via pijplijnen5Dit omdat de host-computer effectief door de gebruiker wordt bediend, en de CBM als een uitbreiding
van de host-computer wordt aanzien (coprocessor).
18
wordt ervoor gezorgd dat tijdens het simuleren van de huidige module de gegevens van de
vorige module worden weggeschreven, terwijl de volgende reeds worden ingelezen.
In [50] is ook duidelijk naar voor gekomen dat vooral bandbreedteproblemen bepalend
zijn voor de tijdsduur van een timeslice. Indien het geheugen sneller zou zijn (of de
beschrijving van een module kleiner), dan zou een module sneller ingeladen kunnen worden,
waardoor we sneller naar een nieuwe module zouden kunnen overschakelen. Door het
verkleinen van de duur van een timeslice zou het negatieve effect van het niet parallel
uitvoeren van de verschillende modules verminderd kunnen worden.
0 50 100 150 200 250 300 350 400 450 500
Spi
ke
Time
Figuur 2.16: Een pulstrein op de CBM
Pulstreingeheugen en netlijsteenheid Alle communicatie van en naar modules, en
alle communicatie tussen modules onderling, gebeurt via het pulstreingeheugen. Een
pulstreineenheid is 96 klokcycli6 lang. In figuur 2.16 zien we een typische pulstrein op de
CBM. Deze eenheden zijn adresseerbaar met hun Pulstrein Identificatie (SID van Spike-
train ID). De lengte van een eenheid komt overeen met de lengte van een timeslice. Wil
men langere ingangspulstreinen voor de CBM gebruiken, dan zullen deze uit meerdere
timeslices bestaan (en daardoor ook in verschillende stukken gesimuleerd worden).
…
…
uitganspulstreineningangs- en doelpulstreinen
voor intern gebruik door de gebruiker bepaald
NID:
SID:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1918
220221190320170 354190190220221227225170 170310 342
Figuur 2.17: De netlijsteenheid
De pulstreinen zelf worden door middel van de netlijsteenheid aan een module gekop-
peld. De netlijst is dus een grote tabel waarin staat welke pulstreinen met welke in- of
uitgangen van de module zijn verbonden. In de netlijsteenheid zijn verschillende netlijs-
ten aanwezig. Elk van deze netlijsten heeft een Netlijst Identificatie (NID). Een netlijst
bestaat uit 196 SIDs: 4 ingangspulstreinen, 188 uitgangspulstreinen en 4 doelpulstreinen,6In deze thesis gebruiken we het woord pulstrein ook voor pulstreinen met willekeurige lengte. De
context geeft meestal aan wat we bedoelen.
19
elk aan een vaste ingang of uitgang van de module gekoppeld. Dit zien we verduidelijkt
in figuur 2.17.
Sommige (de eerste) NIDs zijn vast en door het systeem bepaald. Ze worden ofwel
niet gebruikt, ofwel dienen ze om de groeifase te sturen. De andere netlijsten worden
door de gebruiker bepaald. Er zijn twee modi waarin de CBM gebruikt kan worden: de
evolutiemodus en de uitvoeringsmodus. Elk van deze modi heeft zijn eigen manier om de
netlijsten te gebruiken.
0
219220221222223224225
pulstreinen voor intern gebruik
timeslice van de 1ste pulstrein van 1ste moduletimeslice van de 2de pulstrein van 1ste moduletimeslice van de 3de pulstrein van 1ste moduletimeslice van de 1ste pulstrein van 2de moduletimeslice van de 2de pulstrein van 2de moduletimeslice van de 1ste pulstrein van 3de module
...
PID
01234
netlijsten voor intern gebruik
netlijst voor module 1netlijst voor module 2netlijst voor module 3
...
NID
Figuur 2.18: Het pulstreingeheugen en netlijst tijdens de uitvoeringsmodus
In de uitvoeringsmodus is het mogelijk om verschillende modules ‘tegelijk’ te simuleren.
In figuur 2.18 zien we een voorbeeld van het pulstreingeheugen en de netlijst in deze
modus. Er zijn 3 modules ingeladen, module 1 heeft 3 pulstreinen, module 2 heeft er
2, en module 3 heeft 1 pulstrein. Elk van de pulstreinen is maar 1 timeslice lang. Elke
module heeft zijn eigen netlijst. In deze netlijst zitten de SIDs die ervoor zorgen dat de
module verbonden kan worden met andere modules (communicatie tussen modules gebeurt
via het pulstreingeheugen), en de SIDs die verwijzen naar in- en uitgangspulstreinen die
de gebruiker heeft opgegeven. Interconnectie tussen twee modules komt tot stand door
een uitgangspulstrein van een module als ingangspulstrein voor een andere module te
kiezen (zelfde SID). Het aantal pulstreinen dat een module benut is afhankelijk van het
aantal verbindingen met de rest van het netwerk als ook van de hoeveelheid externe in-
en uitgangen. Nadat de 96 klokcycli van de module doorlopen zijn, wordt de huidige
NID met een verhoogd zo dat we de volgende netlijst hebben. Deze netlijst is van de
nieuwe module, die nu gesimuleerd kan worden. De host-machine krijgt dan de kans
om de uitgangspulstreinen van de vorige timeslice (en de vorige module) uit te lezen.
De host-machine krijgt dus geleidelijk aan, pulstreineenheid per pulstreineenheid, data
binnen van elk van de modules. Omdat er telkens per timeslice wordt gesimuleerd is
er maar een timeslice van elke pulstrein aanwezig in het geheugen van de CBM. Na het
uitvoeren van een timeslice moet de nieuwe timeslice van de ingangspulstreinen naar de
CBM gekopieerd worden. Dus na het simuleren voor een duur van 96 klokcycli worden
20
alle ingangspulstreinen ververst, en alle uitgangspulstreinen uitgelezen. Hierdoor is het
mogelijk om de CBM als een ware-tijd I/O systeem te gebruiken.
0
219220221222223224225
pulstreinen voor intern gebruik
1ste timeslice van de 1ste pulstrein2de timeslice van de 1ste pulstrein3de timeslice van de 1ste pulstrein1ste timeslice van de 2de pulstrein2de timeslice van de 2de pulstrein3de timeslice van de 2de pulstrein
...
PID
01234
netlijsten voor intern gebruik
netlijst voor timeslice 1netlijst voor timeslice 2netlijst voor timeslice 3
...
NID
Figuur 2.19: Het pulstreingeheugen en netlijst tijdens de evolutiemodus
Tijdens de evolutiemodus zijn er ook meerdere modules aanwezig in de CBM. Nu maken
ze echter allemaal deel uit van een populatie die een bepaald doel probeert te bereiken door
optimalisatie met een GA. Het is niet nodig om voor elk van de modules een aparte NID te
voorzien. Dit omdat we dezelfde in- en uitgangspulstreinen bij elk van de individuen gaan
gebruiken. Het is nu echter wel mogelijk om een module gedurende meerdere timeslices in
de CBM te simuleren. Hierdoor kunnen we langere pulstreinen aanleren. Figuur 2.19 toont
hoe de pulstreinen en de netlijsten in de evolutiemodus georganiseerd worden. Er zijn 3
pulstreinen ingeladen, van elk 3 timeslices. De organisatie is als volgt: de gegevens van
de langere pulstrein slaan we op in het pulstreingeheugen. De opeenvolgende tijdsdelen
krijgen opeenvolgende SIDs. Bij uitvoering worden de NIDs nog steeds verhoogd na elke
96 klokcycli, maar nu zal de module niet vervangen worden. De nieuwe netlijst zal de
SIDs bevatten van de volgende timeslice (maar wel van dezelfde pulstreinen). Pas nadat
alle netlijsten zijn doorlopen (evenveel netlijsten als timeslices) zal een nieuwe module
ingeladen worden.
De eerste 220 pulstreinen zijn voor intern gebruik gereserveerd (zoals in figuur 2.19
aangegeven). Deze pulstreinen bestaan onder andere uit een lege pulstrein (allemaal nul-
len) om aan ongebruikte ingangen te koppelen, 188 ‘afval’ pulstreinen om aan ongebruikte
uitgangen te hangen (een open uitgang is hardwarematig niet mogelijk), pulstreinen voor
het implementeren van het groeialgoritme en ook een aantal ongebruikte pulstreinen (voor
mogelijke uitbreidingen).
Geschiktheidsevaluatie-eenheid Om een snel trainingsalgoritme mogelijk te maken,
worden de verschillende kandidaatoplossingen door de CBM zelf geevalueerd. Dit gebeurt
door de geschiktheidsevaluatie-eenheid (FEU van ‘Fitness Evaluation Unit’). Tijdens het
simuleren van een module zal de FEU de uitgangen van de module aftappen en deze verge-
lijken met de gewenste (opgegeven) waarde. Het vergelijken gebeurt niet door de Hamming
21
afstand tussen de twee pulstreinen te berekenen, maar wel door eerst beide pulstreinen
om te zetten naar hun gequantiseerde analoge waarde (zie hoofdstuk 3). Dan wordt de
fout tussen beide signalen bepaald. De waarde van deze fout zal dan de geschiktheid van
de module bepalen.
Omdat het omzetten van de pulstreinen in hardware gebeurt is de manier waarop we
dit kunnen doen redelijk beperkt. In hoofdstuk 3 komen we hier zeker nog op terug. Daar
zullen we aanduiden hoe deze eenheid eventueel verbeterd kan worden (dit is mogelijk
omdat ook de FEU op een FPGA is geımplementeerd).
CBM centrale verwerkingseenheid De CBM is niet enkel een neuraal netwerk, maar
ook een echte computer met een verwerkingseenheid (CPU), en niet slechts een, maar zelfs
twee. Elk van deze CPUs zorgt voor een ander deel van de besturing van de CBM. Een voor
het besturen van de cellulaire ruimte, en een voor de besturing van de FEU, de netlijsteen-
heid en het pulstreingeheugen. Deze CPU’s zijn wel geen algemene verwerkingseenheden,
want ze doen geen rekenwerk. Zo is het niet mogelijk om te vermenigvuldigen en derge-
lijke. De CPUs zijn eerder eindige automaten die gebruikt worden voor de verschillende
eenheden van de CBM te besturen en te voorzien van de nodige informatie om de verwer-
king van signalen mogelijk te maken. Toch bestaat er een heuse assembler-taal voor elk
van deze processoren met een instructieset van ongeveer 45 instructies.
De opdracht om de CBM een bepaalde taak te laten uitvoeren, bestaat dus uit 2
programma’s die naar de CBM worden gestuurd vanuit de host-machine. Op de CBM
zullen beide programma’s , elk op een van de CPU’s, uitgevoerd worden en zo de gewenste
opdracht vervullen.
2.3.4 Cijfergegevens
In tabel 2.1 zien we enkele belangrijke cijfergegevens van de CBM samengevat.
De cellulaire ruimte is geımplementeerd op 72 kaarten, met op elke kaart een FPGA
(Xilinx XC6264) en wat geheugen (16 Megabyte). Elke kaart implementeert een deel van
de cellulaire ruimte. Al deze kaarten zitten op een moederbord dat zorgt voor de interne
verbindingen tussen de verschillende delen van de ruimte.
Het pulstreingeheugen is 2 Megabyte groot, dus is er plaats voor 131.000 pulstreinen.
De netlijsteenheid is 64 Megabyte groot, daarin passen 65.000 netlijsten.
2.4 Genetische lus op de CBM
In deze sectie worden een aantal uitbreidingen van het standaard GA toegelicht die door
de CBM gebruikt worden.
• Er zijn twee types van selectie voorhanden, de reeds vernoemde geschiktheidspropor-
tionele selectie, en de rangordeselectie. Bij de rangordeselectie worden de individuen
22
Totaal aantal cellen per module 13.824 (24x24x24)Max. aantal neuronen per module 1.152Aantal ingangen per module 4Aantal uitgangen per module 188Lengte van een tijdsdeel 96 klokcycliMax. aantal modules 64.640Max. aantal cellen (totaal) 893.583.360Max. aantal neuronen (totaal) 74.465.280Max. aantal cellaanpassingen per seconde 152 miljard cellen/sMin. aantal cellaanpassingen per seconde 114 miljard cellen/sMax. datadoorvoersnelheid op neuronen niveau 13,5 Gigabyte/sMax. datadoorvoersnelheid op cellen niveau 40,8 Gigabyte/sMax. datadoorvoersnelheid tussen modules 74 Megabyte/sAantal FPGA kaarten 72Totaal genotype/fenotype geheugen 1,18 GigabyteChromosoom lengte 91.008 bits (11.376 bytes)Stroomverbruik 1,5 Kilowatt (5 V, 300 A)
Tabel 2.1: Technische specificaties van de CAM-Brain Machine
in de populatie gesorteerd volgens hun geschiktheid. Daarna wordt door middel
van een functie (meestal lineair, maar kan ook exponentieel zijn) een (oplopende)
rang toegekend aan elk van de individuen in de gesorteerde volgorde. Er wordt dan
selectie toegepast proportioneel met de rang van het individu7. De reden waarom
men deze selectie gebruikt is om vroegtijdige convergentie te voorkomen. Veronder-
stel dat redelijk vroeg in het GA proces een individu wordt gevonden met een veel
hogere geschiktheid dan de rest van de populatie. In het geval van geschiktheidspro-
portionele selectie is de kans zeer groot dat na korte tijd de hele populatie bestaat
uit dit beste individu. Dit kan ervoor zorgen dat het algoritme in een sub-optimale
oplossing vastloopt. De rangordeselectie zorgt ervoor dat de plotse uitschieters niet
proportioneel veel selectieprobabiliteit krijgen, maar een maximale selectieprobabi-
liteit gegeven door de rangordefunctie. Hierdoor kan het gevaar van vroegtijdige
convergentie (deels) vermeden worden.
• Er is de mogelijkheid voorzien om elites te definieren. Elites zijn de beste individuen
van de populatie die zonder meer naar de nieuwe populatie mogen migreren. Ze zijn
dus niet onderhevig aan selectie of genetische operatoren. Elites zorgen ervoor dat
de beste oplossingen niet per ongeluk (door het selectieproces) verloren gaan. De
elites in de oude populatie zullen echter wel nog meedoen aan het selectieproces om
de rest van de nieuwe populatie op te vullen.7Deze proportionele selectie kan vergeleken worden met een roulette wiel waarop ieder individu een
aantal hokjes krijgt omgekeerd evenredig met zijn rang. Als er dan aan het rad wordt gedraaid en hetballetje valt in het hokje van een bepaald individu, dan selecteren we dat individu.
23
• In de CBM zal het evolutionaire proces pas stoppen na een vast aantal generaties.
Er wordt niet getest op convergentie.
Groei-
fase
Signaal-
fase
Genetische
fase
Selectie
CBMHost
Genotypes
Fenotypes
Fenotypes
Geschiktheid
Geschiktheidsdata
Genetische
algoritmes
Genotypes
Kinderen
Figuur 2.20: De genetische lus van de CBM
De genetische lus wordt niet volledig door de CBM afgehandeld, maar gebeurt ook
deels op de host-computer. In figuur 2.20 zien we hoe deze verdeling gebeurt.
De host-machine staat in voor het willekeurig initialiseren van de populatie en de
verschillende maskers. Deze maskers worden op de CBM gebruikt om overkruising en
mutatie te implementeren. Deze maskers moeten op voorhand door de host-machine
gemaakt worden omdat de CBM geen willekeurigegetallengenerator bevat8.
De host-machine maakt het programma aan voor de CBM waarin beschreven staat
wat de CBM moet doen tijdens de volgende generatie.
De CBM zal zelf de verschillende individuen in de populatie evalueren. Daarna stopt
het programma, en kan de host-machine de geschiktheidswaarden van de verschillende
individuen uitlezen. De host-machine zal dan de selectieoperator gebruiken om te bepalen
hoe de nieuwe populatie opgebouwd moet worden. Met deze informatie wordt een nieuw
programma samengesteld voor de CBM en de CBM zal dit nieuwe programma uitvoeren.
In het programma wordt de CBM eerst in de genetische fase gezet waarna de huidige popu-
latie door middel van overkruising en mutatie omgevormd wordt tot de nieuwe populatie.
Dan schakelt de CBM over naar groei- en signaalfase om de nieuwe populatie te evalue-8Als hij wel een willekeurige generator zou bevatten, zou deze ook parallel geımplementeerd moeten
worden om geen bottleneck te vormen.
24
ren. Tenslotte leest de host-computer terug de geschiktheidswaarden uit, en herhaalt het
volledige proces zich.
Dit proces wordt tussen de CBM en de host-machine verdeeld uit snelheidsoverwegin-
gen. De genetische operaties van zeer lange chromosomen kunnen sneller gebeuren op de
parallelle architectuur van de CBM, terwijl de sequentiele aard van een sorteeralgoritme
veel sneller kan op sequentiele hardware zoals de processor van de host-machine.
25
Hoofdstuk 3
Pulstreincodering
CBManaloog pulstrein pulstrein analoog
Figuur 3.1: Pulstreinconversie en -reconstructie voor de CBM
De CBM werkt intern volledig met 1-bitsignalen (pulstreinen). De antwoordpulstreinen
van een module bestaan dus uit sequenties van nullen en enen. De gebruiker wil deze
bitstroom echter niet als een bitstroom bekijken, maar als een analoge golfvorm. De vraag
is dan hoe we de output moeten interpreteren. Een tweede probleem is dat de meeste
signalen die men als input aan de CBM wil aanleggen ook meestal analoge golfvormen
zijn. Maar hoe doen we best een conversie van analoge golfvorm naar pulstrein? In dit
hoofdstuk zullen we een antwoord geven op beide vragen.
We beginnen met een introductie uit de neurobiologie. In deze wetenschapstak is men
immers reeds lange tijd bezig met het probleem van pulstreinconversie en -reconstructie.
Daarna bespreken we de oude methodes die op de CBM gebruikt werden voor pulstreinco-
dering. Daarna verbeteren we deze methodes en introduceren een aantal nieuwe concepten.
We eindigen met een qualitatieve vergelijking van de verschillende conversiemethodes.
3.1 Pulstreincodering volgens de neurobiologie
Neurobiologen doen reeds lange tijd onderzoek naar de neurale code van onze hersenen.
In deze tak van de wetenschap is men al ver gevorderd. [45] geeft een zeer goede beschrij-
ving van de verschillende manieren om de biologische neurale code te ontcijferen. In [38]
worden dezelfde methodes besproken, maar nu echter met als doel ze te gebruiken voor
berekeningen. De belangrijkste van deze methodes zullen we nu bespreken.
Het algemene idee achter pulstreinconversie is om gebruik te maken van de aanwezige
informatie, en deze te correleren met de gecodeerde informatie. De informatie zit zowel in
het tijds- als in het ruimtedomein. Een enkele verbinding tussen 2 neuronen voert tijdsin-
26
Figuur 3.2: Een (klein) aantal neuronen uit de cortex
Figuur 3.3: De tijd-ruimte-informatie van 30 naburige neuronen [38]
formatie, maar verschillende naburige verbindingen die een deel van de informatie dragen
zorgen voor de ruimtedimensie. In figuur 3.4 zien we een grafiek van de uitgangspulstrei-
nen van 30 naburige reele neuronen (we zien dat er een duidelijk verband bestaat tussen
de uitgangspulstreinen van sommige neuronparen). Er is dus niet alleen informatie opge-
slagen in de pulstrein zelf, maar ook in de verbanden tussen de pulstreinen van naburige
verbindingen.
3.1.1 Frequentiecodes
Bij de frequentiecodes (in het Engels rate codes) wordt niet gekeken naar individuele
pulsen, maar naar het gemiddelde gedrag van de neuronen of de gemiddelde vuursnelheid.
Er zijn verschillende manier waarop men de gemiddelde vuursnelheid kan definieren.
27
Gemiddelde over de tijd Men spreekt hier ook over het temporeel gemiddelde. Dit is
traditioneel de meest gebruikte methode. Het temporele gemiddelde wordt gedefinieerd
als
ν =nsp(T )
T
met T een vast tijdsinterval en nsp(T ) het aantal pulsen dat voorkomt in dat tijdsdeel.
Bij reele neemt men T meestal van de orde 100 a 500 milliseconden. De eenheid van het
temporele gemiddelde is Hz.
Deze methode is reeds meer dan 80 jaar in gebruik en heeft tot zeer mooie resultaten
geleid. Ze houdt echter totaal geen rekening met het exacte ogenblik waarop de pulsen
optreden. De grootste kritiek op deze methode is de grote vertraging die geıntroduceerd
wordt. Een vlieg kan reageren op visuele stimuli binnen de 30-40 ms. Het is dus onmogelijk
dat de neuronen een tijdgemiddelde gaan berekenen voor ze een beslissing nemen, daardoor
zouden ze veel te traag worden.
Het temporele gemiddelde werkt wel zeer goed voor signalen die constant zijn of niet te
snel veranderen. Dit type signalen komt misschien veel voor in experimentele opstellingen
(zoals veel van de goede resultaten die met deze methode bekomen zijn), maar in de ‘echte
wereld’ moeten de netwerken op veel kleinere tijdsschalen kunnen werken.
Gemiddelde over verschillende uitvoeringen Bij deze methode worden dezelfde sti-
muli verschillende keren aangelegd. De resulterende pulstreinen worden dan uitgemiddeld
over de verschillende uitvoeringen. Hier introduceren we ook een kleine ∆t waarbinnen we
de pulsen ook temporeel uitmiddelen. Deze ∆t kan nu echter veel kleiner zijn waardoor
we veel snellere veranderingen kunnen waarnemen.
Het grote nadeel bij deze methode is dat ze enkel in experimentele opstellingen enig nut
heeft, en zeker niets vertelt over hoe de neuronen intern werken. Een verbetering zou zijn
als er verschillende identieke neuronen in het systeem aanwezig waren. In plaats van uit te
middelen over verschillende uitvoeringen kunnen we nu uitmiddelen over de verschillende
neuronen. Dit brengt ons tot de derde methode.
Gemiddelde over verschillende neuronen Bij deze methode wordt ervan uitgegaan
dat er populaties van neuronen bestaan met zeer gelijkaardige karakteristieken. Men
definieert de populatie activiteit als:
A(t) =nact(t; t + ∆t)
N∆t
met N het aantal neuronen in de populatie en ∆t een kleine tijd waarover we uitmiddelen.
nact(t; t + ∆t) geeft het aantal neuronen dat actief is tussen tijd t en t + ∆t.
In de natuur zijn populaties van neuronen met vergelijkbare eigenschappen gevonden.
Op deze neuronen kan dit systeem dus toegepast worden. Deze populaties zijn echter
klein, en wijken nog sterk af van de homogeniteitseis die verondersteld werd.
28
3.1.2 Pulscodes
De pulscodes werken direct met de timing van de verschillende pulsen. Hierdoor is er
veel meer informatie beschikbaar. Men kan kijken naar de tijd tussen twee pulsen en de
correlatie tussen pulsen van verschillende neuronen. We bespreken echter enkel de methode
van stimulusreconstructie.
Figuur 3.4: Het zoeken van een filter geschikt voor stimulusreconstructie [38]
Stimulusreconstructie In plaats van uit te middelen in de tijd of in de ruimte, kunnen
we ook uitmiddelen over verschillende herhalingen van dezelfde stimulus. We gaan op
zoek naar een stimulussequentie die ervoor zorgt dat het neuron vuurt. Wat we doen is
een bepaald tijdsvenster van de stimulus voor de vuurtijdstippen uitmiddelen. Dit proces
kunnen we zien in figuur 3.4. Men noemt dit omgekeerd correleren. In de literatuur is
gebleken dat de bekomen stimulus gebruikt kan worden voor lineaire reconstructie van sti-
muli. Dit wil zeggen dat men, door de bekomen stimulusvensters uit te middelen telkens
een puls optreedt, de originele stimulus met redelijk fout kan benaderen. Het uitgemiddel-
de stimulusvenster kan dus aanzien worden als een filter. Door convolutie van de pulstrein
met de het filter bekomt men een benadering van de stimulus.
De stimulusreconstructiemethode kan eigenlijk aanzien worden als een frequentiecode,
maar dan met een zeer ingenieus gekozen tijdsvenster waarbinnen de pulsen uitgemiddeld
worden. Dit is slechts een voorbeeld, maar algemeen geldt dat de grens tussen frequentie-
en pulscodes dikwijls zeer vaag is.
3.2 De oude methode
Op de CBM is het mogelijk om analoge stimuli om te zetten naar een pulstrein, en een
pulstrein terug naar een ‘stimulus’ (eerder een analoge uitgang). De stimulus en uitgang
van de CBM bestaan uit gediscretiseerde en gequantiseerde golfvormen.
29
3.2.1 SIIC
SIIC (Spike Information Interval Coding) werd geıntroduceerd in [37]. Het is een algo-
ritme om een pulstrein om te zetten in een golfvorm. Zoals we in de vorige sectie gezien
hebben, kan dergelijke stimulusreconstructie gebeuren door middel van een convolutie van
de pulstrein met een goed gekozen filter. Hier zullen we echter het filter vast kiezen, en de
conversie van de stimuli naar de pulstreinen doen met dit filter in het achterhoofd. Om-
dat we nu spreken over gediscretiseerde data zullen we voor de reconstructie een discrete
convolutie moeten gebruiken (en natuurlijk ook een discreet filter). SIIC is dus eigenlijk
niet anders dan voor discrete filtering. Deze convolutie noteren we als:
x(n) =N∑
k=0
f(k)u(n − k)
met f het filter, u de pulstrein en x de gereconstrueerde golfvorm. N is de lengte van het
filter. In de digitale signaalverwerking is dit ook gekend als een FIR1 filter. Voor de CBM
ligt N vast op 24 (dit omdat SIIC in hardware geımplementeerd is; het wordt namelijk
gebruikt bij de geschiktheidsevaluatie).
Zeer belangrijk bij deze methode is de keuze van het filter. Dit zal namelijk bepalen
welke bandbreedte effectief doorgelaten kan worden. Het filter zal ook bepalen wat de
quantisatiefactor van de ingangs- en uitgangsgolfvormen is. Hier komen we op terug in
3.3.
1 0 1 1 1 1 0 0 1 11 2 3 2 1
0 0 0 0 01 2 3 12
1 2 3 2 11 2 3 2 1
1 32 2 10 0 0 0
0 0 01 2
11 2 4 5 7 8 8 6 4 4
pulstrein
filter
resultaat
Figuur 3.5: Een voorbeeld van het SIIC-algoritme
In figuur 3.5 zien we het SIIC-algoritme aan het werk. Als ingang hebben we de
pulstrein 1011110011, het filter is 12321, en als uitgang bekomen we 1245788644. Het
algoritme gaat als volgt: kijk naar de eerste sample van de pulstrein, is deze een, noteer
dan het filter beginnende van deze positie, is het een nul, noteer dan niets (of allemaal
nullen). Schuif door naar de volgende sample van de pulstrein. Doe hier hetzelfde. Blijf1FIR staats voor Finite Impulse Response. Het is een klasse van filters met een eindig impulsantwoord.
30
dit doen tot alle samples van de pulstrein zijn overlopen. Sommeer nu alle filterwaarden
die onder elkaar geschreven staan. Het resultaat is de uitgang van het SIIC-algoritme.
3.2.2 HSA
HSA (Hough Spiker Algorithm) werd geıntroduceerd in [33]. Dit algoritme heeft conver-
teert een stimulusgolfvorm naar een pulstrein die dan door de CBM kan verwerkt worden.
Dit type van algoritmes komt niet voor in de neurobiologische literatuur (omdat men daar
de neurale code wil begrijpen, niet een nieuwe code maken). Het is een heuristisch algorit-
me dat wel doet wat het zou moeten doen, maar dat ons geen diepere inzichten oplevert
in de wijze waarop de codering echt gebeurt.
1 2 4 5 7 8 68 4 41 2 3 2 1
1 2 3 12
1 2 3 2 1
1 2 3 2 1
1 2 3 2 1
1 2 3 2 1
1 2 3 2
1 2 3
1 2
1
0 0 1 3 6 8 8 46 4
4 4
4 4
4 4
4
6
6
80 0
0
0
0 0 0 0
000
0 0
1 3 6 8
1 3 6 7
1 3 5 5
10 2 3 3
0 0 0 00 0 0 0
0 0 0 0 0 0 0 0
0 0 0 00 0 0 0
00000000
0 0 0 00 00 0 0 0
0
1 3
1 3
1 3
1
stimulusfilter
na het aftrekken
filter is kleiner dan stimulus dus puls
filter is groter dan stimulus dus geen puls
1
0
1
1
1
1
0
0
1
1
pu
lstr
ein
filter is groter dan stimulus dus geen puls
filter is groter dan stimulus dus geen puls
filter is kleiner dan stimulus dus puls
filter is kleiner dan stimulus dus puls
filter is kleiner dan stimulus dus puls
filter is kleiner dan stimulus dus puls
filter is kleiner dan stimulus dus puls
filter is kleiner dan stimulus dus puls
Figuur 3.6: Een voorbeeld van het HSA-algoritme
Het idee achter HSA is om het omgekeerde te doen van wat SIIC doet. In figuur 3.6
zien we hier een voorbeeld van. Het resultaat dat we daarnet bekomen hebben bij het
voorbeeld van SIIC proberen we nu terug om te zetten naar een pulstrein. Omdat we net
het omgekeerde van SIIC willen doen, zullen we in plaats van progressief de filterwaarden
op te tellen tot we het uiteindenlijke signaal bekomen, nu progressief filterwaarden van
het signaal aftrekken totdat er uiteindelijk slechts een nulsignaal overblijft.
In het voorbeeld zien we dat we het filter vooraan onder het signaal hebben geschre-
ven. Als het filter in elke filterwaarde kleiner is dan of gelijk is aan de overeenkomstige
signaalwaarde, dan kunnen we veronderstellen dat SIIC op dit ogenblik een puls zag, en
31
een maal de filter optelde bij het signaal. We kunnen dus een puls uitsturen, en het filter
van het signaal aftrekken. Het resulterende signaal zullen we nu opnieuw op deze manier
verwerken. We schuiven een sample op, noteren het filter onder het signaal en kijken of
het kleiner is dan het signaal. We zien nu dat het filter in de eerste 2 waarden groter is dan
het signaal, we sturen dus geen puls uit, en laten het signaal onveranderd. Dit blijven we
doen tot het einde van het signaal. De resulterende pulstrein (1011110011) komt perfect
overeen met wat het SIIC algoritme origineel als ingang kreeg.
We zien dus dat HSA effectief de omgekeerde berekening kan uitvoeren van SIIC. We
zijn er hier echter wel van uitgegaan dat we geen fouten moeten maken. Alle informatie die
in het signaal zat, hebben we kunnen omzetten naar de pulstrein. In de meeste realistische
signalen is dit echter niet zo, en zullen we een bepaalde fout maken. Deze moet natuurlijk
zo klein mogelijk zijn.
Het HSA algoritme zelf is een kleine variant van het voorgaande voorbeeld. Daarbij
wordt de fout van het signaal ten opzichte van het filter berekend. Door middel van een
drempelwaarde kunnen we dan beslissen of we een puls sturen of niet. Het algoritme gaat
als volgt:
Voor elke sample iZet de fout op nulVoor elke filtersample j
Als de sample (i+j) kleiner is dan filtersample jDan tel het verschil (filter-sample) op bij de fout
Als de fout kleiner of gelijk is aan de drempelwaardeStuur een puls uitVoor elke filtersample jTrek filtersample j af van sample (i+j)
In ons voorbeeld was de drempelwaarde gelijk aan nul. Dit is in de literatuur en bij de
implementatie van de CBM steeds stilzwijgend aangenomen [33]. In 3.4.1 zullen we echter
zien dat deze veronderstelling niet optimaal is. Nul is enkel een goede keuze voor de
drempelwaarde indien we weten dat de conversie foutloos kan (zoals in het voorbeeld).
Als we echter fouten moeten maken (alle reele signalen) , is het beter een andere waarde
voor de drempelwaarde te kiezen.
3.3 Het filter
Het filter dat standaard op de CBM gebruikt wordt, werd door een GA gevonden [16]. Als
geschiktheidsmaat maakte men gebruik van twee arbitrair gekozen functies die zo goed
mogelijk benaderd moesten worden. We kunnen reeds op voorhand twee zaken stellen
over dit filter. Het filter is niet optimaal en bevat nog ruis. Ten tweede werkt het filter
beter bij functies waarvoor het getraind is dan bij andere. Deze twee stellingen zullen we
verder bespreken.
32
Eerst moeten we nog een aantal beperkingen vermelden. De geschiktheidsevaluatie ge-
beurt intern in de CBM. De geschiktheid van een module is het verschil tussen de analoge
golfvormen van de gewenste en de eigenlijke uitvoer van de module. De CBM werkt echter
met pulstreinen, dus moet de conversie (SIIC) binnen de CBM kunnen gebeuren. Er zijn
twee redenen waarom men gekozen heeft voor deze aanpak. Een eerste is een snelheids-
overweging. Als, na elke generatie, alle antwoordpulstreinen van al de modules naar de
host-computer gestuurd moeten worden, zou dit een sterke vertraging introduceren. Een
tweede reden is dat het filteren van de pulstreinen voor men ze vergelijkt het GA helpt
bij de evolutie. Dit komt omdat het geschiktheidslandschap dan veel glooiender wordt.
Men kan dit intuıtief inzien door te kijken wat er gebeurd als men de fout tussen twee
pulstreinen zou bepalen door middel van de Hamming-afstand. Als een bepaalde puls een
kleine vertraging heeft ten opzichte van de gewenste puls, dan is deze puls fout, ongeacht
de geıntroduceerde vertraging. Als we de pulstreinen filteren, en dan vergelijken, smeren
we de pulsen eigenlijk uit. Als twee pulsen perfect overeenkomen, is de fout nul. Als er
echter een vertraging is op de antwoordpulstrein, dan zal de fout stijgen met de lengte van
de vertraging. Op die manier is er geen goed-fout vergelijking van de pulstreinen, maar
eerder een geleidelijke vergelijking. De fout vermindert gradueel naarmate de pulstreinen
beter en beter overeenkomen. Dit soort geschiktheidsfuncties zijn zeer geschikt voor GAs.
Het GA krijgt gedurende de evolutie reeds geschiktheidsinformatie, zelfs al voldoet de
oplossing nog niet volledig aan wat we precies wensen.
Als intermezzo passen we dit idee even toe op het evolutionaire algoritme van de CBM.
Bij het GA op de CBM hebben we geen partiele geschiktheidsinformatie over de routering
van de module. Doordat de geschiktheid van een module pas berekend kan worden als
de module effectief al output genereert, wordt de evolutie niet geholpen bij het zoeken
naar modules die een output genereren. Eigenlijk gebeurt de hele optimalisatie van de
routering zo goed als blind. Het GA krijgt geen geschiktheidsinformatie over hoe goed
een bepaalde module gerouteerd is om een probleem op te lossen, zolang de module geen
output genereert (die ongeveer in de buurt komt van wat we wensen). Pas als de routering
er is, kan de module geevalueerd worden. Op die manier optimaliseert het GA vooral de
berekening, en niet de routering van een module. Dit is een van de grote problemen bij
de huidige implementatie van het GA op de CBM.
Omdat SIIC in hardware is geımplementeerd, zijn volgende beperkingen van kracht:
het filter heeft maximaal 24 filterwaarden, elke filterwaarde is een geheel getal tussen 0
en 63. Negatieve getallen zijn dus niet mogelijk. Een ander probleem is dat de integraal
van het filter de maximale waarde van het uitgangssignaal bepaalt. Veronderstel een
pulstrein met allemaal eentjes. Als we daar SIIC op toepassen krijgen we als uitgang een
constante waarde, namelijk de som van alle filterwaarden. De som van alle filterwaarden (of
integraal van het filter) bepaalt dus de quantisatie die we op het uitgangssignaal behalen.
Hoe kleiner de filterwaarden, hoe groter de quantisatieruis. We moeten dus proberen de
33
filterwaarden zo groot mogelijk te kiezen.
0 5 10 15 20 250
10
20
30
40
50
60
70
tijd
(a) tijdsdomein
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.5-100
0
100
200
300
400
500
600
700
800
frequentie
(b) frequentiedomein
Figuur 3.7: Het originele filter
0 5 10 15 20 250
10
20
30
40
50
60
70
tijd
(a) tijdsdomein
-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.5-5
0
5
10
15
20
25
30
35
frequentie
(b) frequentiedomein
Figuur 3.8: Het nieuwe filter
Eerst en vooral hebben we het bestaande filter onderzocht. Het filter en zijn fourierge-
34
transformeerde zien we in figuur 3.7. We zien duidelijk dat het filter niet symmetrisch is en
dat er behoorlijk wat ruis aanwezig is. In het frequentiedomein zien we dat het filter een
laagdoorlaatfilter is; maar echter geen stapfunctie, wel een driehoeksfunctie. We hebben
deze driehoeksfunctie een beetje gezuiverd, en de inverse fouriertransformatie toegepast
om zo het verbeterde filter te bekomen. We hebben de resulterende filter wel nog moeten
quantiseren (om ervoor te zorgen dat enkel de waarden van 0 tot 63 gebruikt worden).
Het bekomen filter, en zijn fouriergetransformeerde zien we in figuur 3.8. De som van de
filterwaarden is 765. Deze quantisatie beperkt de signaal-ruisverhouding (ook SNR)2. De
best mogelijke SNR is ongeveer 20log10(768) = 57, 7dB. Tijdens het gebruik is gebleken
dat het nieuwe filter een verbetering van 5dB op de SNR ten opzichte van het oude filter
oplevert.
Vervolgens zijn we op zoek gegaan naar andere filters. Door middel van standaard
FIR-filter constructietechnieken [43] hebben we in eerste instantie verschillende filters ge-
construeerd. Een groot probleem is echter dat de meeste filters ook negatieve coefficienten
nodig hebben, en deze zijn echter niet voorstelbaar.
Het oude filter laat slechts een beperkte signaalband door. We zouden echter een zo
groot mogelijke bandbreedte aan signalen willen voorstellen. Als we het filter echter iets
breder maken dan het oude filter, krijgen we direct een filter met negatieve coefficienten.
We zouden ook willen dat het filter een zo steil mogelijke flank heeft tussen doorlaatband
en stopband. Als we het filter echter iets steiler maken, krijgen we negatieve coefficienten,
of wordt de som van de filterwaarden beduidend kleiner. Hierdoor krijgen we dus een
grotere quantisatiefout.
Door de hardwarebeperkingen is het niet mogelijk om binnen de gegeven randvoor-
waarden enige relevante verbeteringen aan te brengen aan het oude (opgepoetste) filter.
Mochten we de hardware-implementatie veranderen, dan zouden we het meeste winst ha-
len uit 1 bit meer per filterwaarde. Deze zou dan kunnen gebruikt worden als tekenbit, om
negatieve getallen te kunnen stellen. Dan zouden we willekeurige 24-taps filters kunnen
maken. Het introduceren van negatieve filterwaarden zou er dan wel voor zorgen dat de
som van de filtercoefficienten daalt, waardoor de quantisatiefout zal toenemen. We zou-
den ook betere filtereigenschappen bekomen indien we een filter zouden hebben met meer
filterwaarden. Daardoor zouden we scherpere filters kunnen construeren. Hierdoor zou
ook de som van de filtercoefficienten stijgen, waardoor de quantisatiefout daalt. Ook een
toenemend aantal bits per filtercoefficient zou de quantisatiefout ten goede komen.2De SNR is gedefinieerd als 20log10(
signaalruis
). Het drukt dus de verhouding van het signaal ten opzichtevan de ruis uit in decibel (dB). Hoe hoger de SNR, hoe beter de kwaliteit.
35
3.4 De nieuwe methodes
In deze sectie verbeteren we de oude methode voor pulstreinconversie en introduceren we
een nieuwe methode.
3.4.1 HSA – herbezocht
In de literatuur is men er steeds van uitgegaan dat de drempelwaarde van HSA nul moet
zijn. In vorige sectie hebben we reeds intuıtief laten aanvoelen dat dit waarschijnlijk fout
is. We zullen dit nu aantonen.
Voor het zoeken naar de optimale drempelwaarden hebben we een exhaustief zoekal-
goritme geımplementeerd. Het probeert alle drempelwaarden uit, en neemt deze waarmee
de kleinste fout gemaakt wordt. We zullen dit algoritme optimale-HSA noemen. Eenmaal
we dit algoritme hebben, kunnen we het toepassen op verschillende functies. Voor elk van
de functies bekomen we dan een optimale drempelwaarde. We hopen daarbij dat we voor
een zo breed mogelijk gamma aan functies een zo goed als constante drempelwaarde vin-
den. Als dit zo is kunnen we het optimale-HSA algoritme terug vervangen door het HSA
algoritme, maar dan met de nieuwe drempelwaarde (verschillend van nul). Deze drempel-
waarde wordt bekomen door het gemiddelde te nemen van al de optimale drempelwaarden
voor de verschillende testfuncties.
-100
0
100
200
300
400
500
50 100 150 200 250 300 350
Opt
imal
e dr
empe
lwaa
rde
van
HS
A
Amplitude
periode 507090
110130150170190
Figuur 3.9: Optimale drempelwaarde voor HSA bij sinussen met verschillende amplitude en periode
Als testfuncties hebben we een aantal sinusfuncties genomen met verschillende fre-
quenties en amplitudes. De resultaten zien we in figuur 3.9. We zien dat er voor de
verschillende testfuncties een zekere spreiding zit op de optimale drempelwaarde. Deze
spreiding is echter beperkt. Als we alle optimale waarden uitmiddelen krijgen we een
gemiddelde drempelwaarde van 37. In 3.5 zullen we optimale-HSA en HSA met deze ge-
middelde drempelwaarde met elkaar vergelijken. Figuur 3.9 is bekomen door gebruik te
36
maken van het in 3.3 gevonden filter. Als we een ander filter gebruiken, worden andere
drempelwaarden bekomen.
0
5
10
15
20
25
30
35
0 200 400 600 800 1000
Res
ulte
rend
e S
NR
[dB
]
HSA drempelwaarde
origineel filternieuw filter
Figuur 3.10: De SNR die we behalen door middel van HSA met verschillende drempelwaarden.Er is een curve waar we gebruik gemaakt hebben van het originele filter, en een waar we gebruikgemaakt hebben van het nieuwe filter
In figuur 3.10 zie we de SNR die optreedt wanneer we een bepaalde sinus (periode 200,
amplitude 200, offset 382) via HSA omzetten naar een pulstrein, en deze daarna terug
omzetten naar een analoge golfvorm. We hebben deze SNR berekend voor verschillende
waarden van de drempelwaarde. Er is een curve waar we gebruik maken van het originele
filter, en een waar we gebruik maken van het nieuwe filter. Voor andere sinussen vinden
we vergelijkbare curven. We zien dat de curven een maximum hebben, en dat dit in de
buurt van 0 ligt. Zoals we vroeger ook al gezien hebben, presteert het nieuwe filter beter
dan het oude. Dit is echter niet het geval voor het achterste deel van de curve. Maar
daar is de SNR niet optimaal, dus zullen we de drempelwaarde nooit daar kiezen. We zien
ook dat de curve rond het optimum zeer grillig is. Dit betekent dat indien we een vaste
drempelwaarde kiezen - en de eigenlijke optimale drempelwaarde wijkt er maar een beetje
van af - we toch grote schommelingen in de SNR zullen waarnemen. We kunnen toch
besluiten dat rond het optimum van deze curve een gebied bestaat waar de SNR dicht bij
het optimum ligt. We kunnen de optimale drempelwaarde dus vervangen door een vaste
zonder al te veel af te wijken van de optimale SNR.
3.4.2 BSA
Zelfs na het oplossen van het probleem met de drempelwaarde bleven er een aantal vragen
rond het HSA algoritme. Zo is het niet duidelijk wat het algoritme precies doet. Daarom
werd een ander algoritme bedacht. Het werd BSA (Ben’s Spiker Algorithm) gedoopt. Het
idee achter BSA is dat op elke tijdstap een beslissing genomen wordt (puls sturen of niet)
37
zo dat we een zo klein mogelijke fout maken. Net zoals bij HSA gaan we progressief het
filter aftrekken van de analoge waarde. Het signaal dat overblijft (de residuele samples),
moet zo klein mogelijk zijn. Dit komt omdat de residuele samples de fouten zijn die we
maken. Het algoritme zal op elke tijdstap proberen de residuele samples die het op dat
ogenblik kan veranderen (binnen het tijdsvenster van het filter) te minimaliseren.
Het algoritme zelf gaat als volgt:
Voor elke sample iZet de fout1 en fout2 op nulVoor elke filtercoefficient jTel de absolute waarde van het verschil (sample-coefficient) op bij fout1Tel de absolute waarde van sample op bij de fout2
Als fout1 kleiner is dan of gelijk is aan (fout2-drempelwaarde)Stuur een puls uitVoor elke filtercoefficient j
Trek filtercoefficient j af van sample (i+j)
Opnieuw hebben we een drempelwaarde moeten introduceren. Voor het bepalen van
de drempelwaarde gaan we op dezelfde manier te werk als bij HSA. In figuur 3.11 zien
we de curven voor de verschillende sinussen. De gemiddelde drempelwaarde is 713. We
kunnen dus wederom de optimale variant van het algoritme vervangen door een algoritme
met een vaste drempelwaarde zonder een al te grote fout te introduceren.
0
200
400
600
800
1000
50 100 150 200 250 300 350
Opt
imal
e dr
empe
lwaa
rde
van
BS
A
Amplitude
periode 507090
110130150170190
Figuur 3.11: Optimale drempelwaarde voor BSA bij sinussen met verschillende amplitude en pe-riode
In figuur 3.12 zien we de SNR curven voor verschillende drempelwaarden. Ook hier
zien we een optimum. Deze keer is de curve rond het optimum wel veel glooiender dan
bij HSA. Dit wil zeggen dat, als we met de vaste drempelwaarde afwijken van de optimale
drempelwaarde, de fout nog beperkter blijft. Ook nu zien we dat de curve voor het nieuwe
filter een betere SNR haalt dan de curve voor het oude filter. Dit is wel vooral zo bij de
38
0
5
10
15
20
25
30
35
40
45
-200 0 200 400 600 800
Res
ulte
rend
e S
NR
[dB
]
BSA drempelwaarde
origineel filternieuw filter
Figuur 3.12: De SNR die we behalen door middel van BSA met verschillende drempelwaarden.Er is een curve waar we gebruik gemaakt hebben van het originele filter, en een waar we gebruikgemaakt hebben van het nieuwe filter
optimale drempelwaarde. Maar dit is net het gebied waarin we geınteresseerd zijn. Het
nieuwe filter presteert dus duidelijk beter dan het oude.
3.4.3 ∆Σ-modulator
De ∆Σ-modulator (deltasigma-modulator) wordt reeds jaren in de signaalverwerking ge-
bruikt. Deze modulator zet een analoog ingangssignaal om naar een gequantiseerd uit-
gangssignaal. De quantisatiestap is echter groot (1 of 2 bit), en de bemonsteringsfrequentie
zeer hoog. De verklaring voor het wijd verbreide gebruik van de ∆Σ-modulator is de zeer
interessante eigenschappen dat hij heeft op de quantisatieruis. Bij standaard bemonsterde
signalen (Nyquist frequentie) is de SNR over het volledige spectrum gelijk. Verhogen we
de bemonsteringsfrequentie, dan zal de SNR stijgen. Bij ∆Σ modulatie is de ruis zeer hoog
bij hoge frequenties (in de buurt van de helft van de bemonsteringsfrequentie), en zeer laag
bij lage frequenties. Maar omdat er met een veel hogere frequentie wordt bemonsterd dan
de signaalband die ons interesseert, zal in het voor ons relevante deel de ruis laag zijn.
De ∆Σ modulator vervormt de ruis dus, en omdat wij enkel de lage frequenties gebruiken
(hoge frequenties worden weggefilterd), kunnen we een betere SNR bekomen.
-H Q
Figuur 3.13: 1ste orde ∆Σ-modulator
In figuur 3.13 zien we een eerste orde ∆Σ-modulator. Van het binnenkomende signaal
39
trekken we het uitgaande, gequantiseerde signaal af. Dit sturen we door het filter H. Dit
filter is meestal een integrator. Het resultaat van de integrator wordt dan gequantiseerd
(blokje Q in de figuur). Dit is het uitgangssignaal.
-
N
X Yz-1
1- z-1
Figuur 3.14: Het gelineariseerde model van de 1ste orde ∆Σ-modulator
Omdat we met bemonsterde signalen werken, hebben we een discreet systeem. De
integrator kunnen we schrijven als H(z) = z−1
1−z−1 . Modelleren we de quantisatie als het
toevoegen van ruis3, dan krijgen we een systeem zoals in figuur 3.14. Dit noemen we het
gelineariseerde model (dit omdat de niet-lineariteit, namelijk de quantisator, verdwenen
is). Dit systeem kunnen we noteren als:
Y (z) = X(z)z−1 + N(z)(1 − z−1).
Hier is X het ingangssignaal, Y het uitgangssignaal, en N de ruisterm die de quantisatie
modelleert. We zien dat het ingangssignaal, op een vertraging van 1 klokpuls na, aan de
uitgang verschijnt. De quantisatieruis wordt gefilterd. Dit filter is een differentiator. Een
differentiator is een hoogdoorlaatfilter. Dit wil dus zeggen dat de ruis vooral in de hoge
frequenties aanwezig zal zijn. Het uitgangssignaal moet terug gedemoduleerd worden
als we het willen gebruiken. Demoduleren doen we door het uitgangssignaal door een
laagdoorlaatfilter te sturen. Zoals we hierboven gezien hebben, filteren we daardoor alle
ruis weg, maar het ingangssignaal blijft aanwezig (omdat het een bandbeperkt signaal is).
-H Q
-H1 2
Figuur 3.15: 2de orde ∆Σ-modulator
Een zeer belangrijke maat van ∆Σ-modulatoren is de overbemonsteringsgraad (in het
Engels oversampling ratio). Deze is
R =fs
2f0
met fs de bemonsteringsfrequentie, en f0 de bandbreedte van het ingangssignaal. ∆Σ-
modulatoren bestaan ook in hogere ordes, zo zien we in figuur 3.15 een tweede orde
∆Σ-modulator.3Omdat de quantisatiefout stochastisch is kunnen we de quantisatie modelleren als het toevoegen van
ruis. Dit is echter een benadering.
40
16 32 64 128
100
120
40
60
80
R
SN
R[d
B]
1ste orde
2de orde
3de orde
Figuur 3.16: Benadering van de SNR van de ∆Σ-modulator voor verschillende ordes en overbe-monsteringsgraden. Het deel in stippelijn komt niet uit de literatuur, maar is een extrapolatie
In figuur 3.16 zien we een benadering van de SNR van ∆Σ-modulator met verschil-
lende ordes, en voor verschillende overbemonsteringsgraden [40]. Het deel in stippelijn
is een extrapolatie. In de literatuur is voor dit deel van de curve geen eensgezindheid.
We beperken ons hier tot het eenvoudig geextrapoleerde model. We zien dat bij hoge R
de modulatoren goed presteren. Bij kleine R is er nog nauwelijks verschil tussen de ver-
schillende ordes. Volgens [40] is het zelfs zo dat bij lage R de hogere orde ∆Σ modulator
slechter worden dan de lage orde modulatoren. Een nadeel van de hoge-orde-modulatoren
(vanaf derde orde) is dat ze onstabiel kunnen worden voor te grote ingangssignalen (zelfs
vanaf amplitude 0,6).
Waarom spreken we nu over ∆Σ-modulatoren als we bezig zijn over neurale netwerken?
Wel, neem de uitgang van een 1-bit-∆Σ-modulator. Dit komt zeer sterk overeen met de
vroeger besproken pulstreinen. Het demoduleren van ∆Σ-signalen gebeurt door te filteren
met een laagdoorlaatfilter. De reconstructie van pulstreinen gebeurde ook door middel
van filtering. En de ∆Σ modulator zelf zet een analoog signaal om in een 1-bitpulstrein.
Daarbij komt nog de eigenschap dat de ∆Σ de ruis onderdrukt. Dit moet het systeem zijn
waarnaar we op zoek waren.
Echter is het probleem bij de CBM het filter. Omdat er maar een filter aanwezig
is met 24 filterwaarden (taps), is de fijnste frequentieband die we kunnen filteren fs
24 .
De frequentieband die we kunnen filteren komt overeen met f0, de bandbreedte van het
ingangssignaal. We bekomen dus een overbemonstering van R = 24fs
2fs= 12. Als we kijken
naar figuur 3.16 zien we dat alle ∆Σ-modulatoren zich slecht gedragen bij een zo lage R.
De ∆Σ-modulatoren zullen dus nooit zo goed presteren als wat we van ze gewoon zijn.
Omdat het gebruikte filter de nuttige bandbreedte bepaalt, en we natuurlijk een zo breed
mogelijke bandbreedte willen, zouden we het filter zo breed mogelijk moeten kiezen. Als
we echter breder filteren, zal R verder afnemen. Hierdoor presteren de modulatoren nog
41
slechter. We moeten dus afwegen tussen een goede SNR en een brede signaalband.
16 32 64 128
100
120
40
60
80
RS
NR
[dB
]
1ste orde
2de orde
3de orde
Figuur 3.17: SNR van de ∆Σ-modulator voor verschillende ordes en overbemonsteringsgraden. Dedikke stippelijn geeft de best haalbare SNR weer als we 6 bit per filterwaarde gebruiken
De quantisatie van het ingangssignaal legt de maximaal haalbare SNR vast. Zoals we
gezien hebben hangt deze quantisatie af van het filter dat we gebruiken. Bij de CBM
heeft het filter 24 taps. Elke tap is 6 bit. Hierdoor bekomen we meestal een som van de
filterwaarden van ongeveer 2426
2 = 768. Dit komt overeen met een SNR van 20log10(768) =
57, 7dB.
Stel dat we de lengte van het filter vrij mogen kiezen (aantal bits per tap blijft vast).
De SNR is dan
20log10(N26
2)
met N het aantal taps in de filter. Stel dat we de kleinst mogelijke bandbreedte nemen bij
elk van de filters, dan halen we een R = N/2. Als we deze lijn bij in de figuur zetten van
de SNR van de verschillende ∆Σ-modulatoren, dan bekomen we figuur 3.17. Per extra bit
bij de filterwaarde zal de lijn 20log10(2) ≈ 6 dB stijgen. We zien dat deze lijn veel minder
stijl stijgt dan de lijnen van de ∆Σ-modulatoren. Bij vrij lage R zullen de (vooral hoge
orde) modulatoren hun werk dus niet meer kunnen doen, omdat de quantisatieruis van
het ingangssignaal de maximaal haalbare SNR van de modulator al overstemt. We zullen
ons dus altijd moeten beperken tot lage orde ∆Σ-modulatoren.
Voor de verdere testen hebben we gebruik gemaakt van een eerste orde ∆Σ-modulator.
We hebben ook testen gedaan met 2de orde systemen, maar hiermee werden geen verbe-
teringen bekomen. Hogere orde ∆Σ-modulatoren werkten inderdaad slechter, zoals aan-
gegeven in de literatuur. Merk op dat de ∆Σ-modulator geen gebruik maakt van het
reconstructiefilter tijdens de conversie. Dit wil ook zeggen dat als we gebruik maken van
niet-ideale-laagdoorlaatfilters, we het uitgangssignaal mee filteren. Bij BSA en HSA werd
wel rekening gehouden met het filter. Eventuele niet-ideaalheden van het filter worden
tijdens de conversie in rekening gebracht. Na het filter bekomen we dan een schijnbaar
42
niet-gefilterd signaal. We kunnen bij ∆Σ-modulatoren ook iets gelijkaardigs bekomen door
het te moduleren signaal eerst invers te filteren. Op die manier corrigeren we eventuele
niet-ideaalheden van het filter door het originele signaal (voor modulatie) aan te passen,
zodat de niet-ideaalheden wegvallen na het filteren. Voor de eenvoud hebben we bij de
testen dit proces omgekeerd. We hebben het normale signaal door de ∆Σ-modulator ge-
stuurd. Maar het resulterende signaal hebben we vergeleken met een gefilterde versie van
het originele signaal. Daardoor zijn het gedemoduleerde en het originele signaal beide even
sterk vervormd. Op die manier kunnen we de resultaten van de ∆Σ-modulator vergelijken
met deze van HSA en BSA.
3.5 Resultaten
-200
0
200
400
600
800
1000
0 50 100 150 200 250 300 350 400 450 500
Waa
rde
Tijd
origineelgeconvolueerd
fout
Figuur 3.18: Eerste soort testfuncties
Voor het testen van de verschillende codeertechnieken hebben we een aantal testen
gedaan. We hebben figuren gemaakt waarin we de SNR uitzetten die we bekomen door
een bepaalde functie te benaderen. Het benaderen van deze functie gebeurt door ze eerst
naar een pulstrein om te zetten, en deze dan opnieuw om te zetten naar een golfvorm met
SIIC. Het verschil tussen de originele functie en de benaderde functie is de fout die we
gebruiken om de SNR te berekenen.
Voor de eerste testen hebben we sinusfuncties gebruikt die onderaan de x-as raken,
zoals weergegeven in figuur 3.18. We kunnen via SIIC immers geen negatieve waarden
bekomen omdat het filter van de CBM enkel positieve filtercoefficienten heeft. We hebben
deze sinussen benaderd voor verschillende amplitudes en periodes (omgekeerd evenredig
met frequentie). Een eerste soort curven zien we in figuur 3.19 en hier zien we de SNR
ten opzichte van de amplitude. Merk op dat de x en y as beide logaritmisch zijn4. Er4De y-as is in dB uitgedrukt en dit is een logaritmische maat.
43
-10
0
10
20
30
40
50
60
8 16 32 64 128 256 512
SN
R [d
B]
Amplitude
periode 5152535455565758595
105115125135145155165175185195
(a) eerste orde ∆Σ-modulator
-10
0
10
20
30
40
50
60
8 16 32 64 128 256 512
SN
R [d
B]
Amplitude
periode 5152535455565758595
105115125135145155165175185195
(b) HSA met drempelwaarde 0
-10
0
10
20
30
40
50
60
8 16 32 64 128 256 512
SN
R [d
B]
Amplitude
periode 5152535455565758595
105115125135145155165175185195
(c) optimaal-HSA
-10
0
10
20
30
40
50
60
8 16 32 64 128 256 512
SN
R [d
B]
Amplitude
periode 5152535455565758595
105115125135145155165175185195
(d) HSA met gevonden drempelwaarde
-10
0
10
20
30
40
50
60
8 16 32 64 128 256 512
SN
R [d
B]
Amplitude
periode 5152535455565758595
105115125135145155165175185195
(e) optimaal-BSA
-10
0
10
20
30
40
50
60
8 16 32 64 128 256 512
SN
R [d
B]
Amplitude
periode 5152535455565758595
105115125135145155165175185195
(f) BSA met gevonden drempelwaarde
Figuur 3.19: SNR ten opzichte van de amplitude voor de eerste soort van testfuncties
zijn verschillende curven weergegeven voor de verschillende periodes van de sinus. Deze
curven zien er vrij druk uit, men kan nog moeilijk uitmaken welke curve bij welke periode
hoort, maar kunnen wel een kwalitatieve indruk geven van het verloop van de SNR voor
de verschillende codeertechnieken.
Uit figuur 3.19a kunnen we concluderen dat we met de 1ste orde ∆Σ-modulator een
maximale SNR van ongeveer 30dB kunnen bereiken. We zien dat bij een amplitude van
16 de SNR negatief wordt. Hier is de fout dus groter dan het signaal zelf. In figuur 3.19b
zien we de curve voor HSA zoals deze in de literatuur gebruikt werd (met drempelwaarde
0). We zien dat er ongeveer een maximale SNR van 30dB bereikt wordt. Voor amplitudes
44
kleiner dan ongeveer 30 wordt de SNR 0. De fout is dus even groot als het signaal, en
het algoritme geeft geen uitgang meer. Dit fenomeen zien we trouwens ook bij de andere
curven. Onder een bepaalde amplitude werken de algoritmes niet meer. De optimale
algoritmes hebben hier iets minder last van, maar het fenomeen is nog steeds aanwezig.
In figuur 3.19c zien we de curve voor optimale-HSA. We zien dat een optimale SNR
van ongeveer 40dB bereikt wordt. In 3.19d zien we HSA met vaste drempelwaarde. Hier is
de maximale SNR ongeveer 35dB. We zien dat door het kiezen van een vaste drempel we
toch 5dB aan signaalkwaliteit verliezen. Ook wordt de curve grilliger, en is het punt van
0dB SNR gestegen. In figuren 3.19e en 3.19f zien we de curven voor BSA. Deze hebben
zeer vergelijkbare eigenschappen als die van HSA.
Voor zeer hoge amplitudes blijft de 1ste orde ∆Σ-modulator net iets langer een hoge
SNR aanhouden, terwijl de SNR van de andere systemen reeds daalt. Dit dalen komt door-
dat een te hoge amplitude door het systeem gestuurd wordt. Dit noemt men overloading.
De 1ste ∆Σ-modulator is dus iets beter bestand tegen te hoge ingangswaarden.
In figuur 3.20 zien we voor dezelfde testfuncties nu de SNR ten opzichte van de periode.
Hier heeft de x-as een lineaire schaal. Merk ook op dat hoge frequenties dicht bij de y-as
liggen en lage frequenties verder.
We zien dat alle curven een gedrag vertonen, gelijkaardig aan dat van de ∆Σ-modulator
(deze curve komt overeen met curven uit de literatuur [40]). Dit is een openbaring. HSA en
BSA hebben dezelfde SNR eigenschappen als ∆Σ-modulatoren. Zouden ze dan misschien
∆Σ-modulatoren kunnen zijn? Zonder er hier veel dieper op in te gaan kan men een
algemene ∆Σ-modulator introduceren. Deze berekent de fout die hij maakt door zijn
uitgang van zijn ingang af te trekken. De fout wordt door een willekeurig quantiserend
systeem verwerkt om zo de uitgang te vormen. HSA en BSA passen binnen dit stramien
en zijn dus wel degelijk ∆Σ-modulatoren, maar dan wel van een algemenere klasse dan
deze die we in 3.4.3 besproken hebben. BSA en HSA introduceren een vertraging van 12
terwijl de 1ste orde ∆Σ-modulator een vertraging van 1 introduceert. Een 2de orde ∆Σ-
modulator introduceert een vertraging van 2, enzovoort. Men zou HSA en BSA dus kunnen
aanzien als een soort 12de orde ∆Σ-modulator. Toch is het dan nog opmerkelijk dat HSA
en BSA beter presteren dan de ∆Σ-modulator. In [40] werd namelijk gesuggereerd dat
hogere orde ∆Σ-modulatoren slechter presteren dan lage orde ∆Σ-modulatoren bij een lage
overbemonsteringsgraad. Dit is dus duidelijk niet meer geldig bij de algemenere klasse van
∆Σ-modulatoren.
Uit de curves in figuur 3.20 kunnen we opnieuw de maximale SNR voor de verschillende
systemen afleiden. In 3.20a zien we de curve voor de ∆Σ-modulator. Deze curven zijn
bekomen met de in 3.4.3 besproken methode om het lineaire filtereffect tegen te werken.
De curven zouden dus vlak moeten zijn tot aan de afsnijfrequentie en daarna op nul vallen.
Door niet-lineaire effecten krijgen we hier echter nogal rare curven voor korte periodes.
In al de andere curven zien we duidelijk dat pulstreincodering een bandbeperkt systeem
45
-10
0
10
20
30
40
50
60
0 50 100 150 200 250 300
SN
R [d
B]
Periode
amplitude 8101215182227334151637897
121151188235293366457
(a) eerste orde ∆Σ-modulator
-10
0
10
20
30
40
50
60
0 50 100 150 200 250 300
SN
R [d
B]
Periode
amplitude 8101215182227334151637897
121151188235293366457
(b) HSA met drempelwaarde 0
-10
0
10
20
30
40
50
60
0 50 100 150 200 250 300
SN
R [d
B]
Periode
amplitude 8101215182227334151637897
121151188235293366457
(c) optimaal-HSA
-10
0
10
20
30
40
50
60
0 50 100 150 200 250 300
SN
R [d
B]
Periode
amplitude 8101215182227334151637897
121151188235293366457
(d) HSA met gevonden drempelwaarde
-10
0
10
20
30
40
50
60
0 50 100 150 200 250 300
SN
R [d
B]
Periode
amplitude 8101215182227334151637897
121151188235293366457
(e) optimaal-BSA
-10
0
10
20
30
40
50
60
0 50 100 150 200 250 300
SN
R [d
B]
Periode
amplitude 8101215182227334151637897
121151188235293366457
(f) BSA met gevonden drempelwaarde
Figuur 3.20: SNR ten opzichte van periode voor de eerste soort van testfuncties
is. De bandbreedte is voor alle systemen ongeveer gelijk. Merk de zeer grillige curven op in
3.20d en 3.20f. Dit komt door interferentie van de functie met de lengte van het tijdsvenster
waarbinnen we de berekeningen gedaan hebben (1000 samples). Bij de optimale curven
zien we dit fenomeen niet omdat er dan steeds een optimale drempelwaarde gezocht werd
die rekening hield met deze interferentie. Om mogelijke aan- en afschakelverschijnselen
niet mee te rekenen in de SNR werden de eerste en laatste 50 samples van het tijdsvenster
verwaarloosd.
In tabel 3.1 zien we nog eens een overzicht van de verschillende eigenschappen van
de systemen. Waarom presteert BSA plots slechts even goed als HSA terwijl we eerder
46
Soort Maximale SNR SNR=0 als amplitude∆Σ 30dB 16
HSA drempel 0 30dB 30optimale-HSA 40dB 10
HSA berekende drempel 35dB 30optimale-BSA 40dB 10
BSA berekende drempel 35dB 30
Tabel 3.1: Eigenschappen van de verschillende codeersystemen voor de eerste soort van testfuncties
dachten dat BSA beter was dan HSA? Een groot probleem is dat alle systemen gewoon
slecht presteren voor zeer lage en zeer hoge ingangswaarden. We zouden de signalen van
deze waarden moeten weghouden. Daarom introduceren we een nieuw soort testfuncties
die beter aanleunt bij hoe we de CBM echt moeten gebruiken.
-200
0
200
400
600
800
1000
0 50 100 150 200 250 300 350 400 450 500
Waa
rde
Tijd
origineelgeconvolueerd
fout
Figuur 3.21: Tweede soort testfuncties
In figuur 3.21 zien we de tweede soort testfuncties. Hier hebben we een sinus gesu-
perponeerd op een constante waarde. Deze constante waarde ligt net in de helft van het
maximale bereik. Deze manier om functies voor te stellen wordt veel gebruikt. Dit komt
omdat we een inkomend signaal met als bereik [−1, 1] kunnen omzetten naar een signaal
met als bereik [0, 765]. Na de verwerking van de signalen kunnen we ze terug converteren
naar het bereik [−1, 1]. De nulwaarde van het inkomende signaal ligt in de helft van het
maximale bereik. Als we voor dit type van functies dezelfde berekeningen doen, krijgen
we de figuren 3.22 en 3.23.
Voor de ∆Σ-modulator zien we in 3.22a en 3.23a de curven. We zien opnieuw vrij
rare curven, maar dit komt nu door filtereffecten. Dit zien we het beste in 3.22b. Hier
zien we dat de curven grotendeels vlak zijn, en dan op een amplitude-afhankelijke manier
beginnen afbuigen. Dit zijn duidelijk niet-lineaire effecten. De maximale SNR die met de
47
-10
0
10
20
30
40
50
60
8 16 32 64 128 256 512
SN
R [d
B]
Amplitude
periode 5152535455565758595
105115125135145155165175185195
(a) eerste orde ∆Σ-modulator
-10
0
10
20
30
40
50
60
8 16 32 64 128 256 512
SN
R [d
B]
Amplitude
periode 5152535455565758595
105115125135145155165175185195
(b) HSA met drempelwaarde 0
-10
0
10
20
30
40
50
60
8 16 32 64 128 256 512
SN
R [d
B]
Amplitude
periode 5152535455565758595
105115125135145155165175185195
(c) optimaal-HSA
-10
0
10
20
30
40
50
60
8 16 32 64 128 256 512
SN
R [d
B]
Amplitude
periode 5152535455565758595
105115125135145155165175185195
(d) HSA met gevonden drempelwaarde
-10
0
10
20
30
40
50
60
8 16 32 64 128 256 512
SN
R [d
B]
Amplitude
periode 5152535455565758595
105115125135145155165175185195
(e) optimaal-BSA
-10
0
10
20
30
40
50
60
8 16 32 64 128 256 512
SN
R [d
B]
Amplitude
periode 5152535455565758595
105115125135145155165175185195
(f) BSA met gevonden drempelwaarde
Figuur 3.22: SNR ten opzichte van amplitude voor de tweede soort van testfuncties
∆Σ-modulator bereikt kan worden is ongeveer 37dB. We zien dat hier ook sprake is van
afbuiging van de curve bij te hoge amplitude, maar niet bij te lage amplitude.
In al de andere curven zien we dat voor een breed bereik van de amplitude de SNR
ongeveer vlak blijft. Bij een te hoge amplitude buigen de curven af. Ten opzichte van
de frequentie zien we dat de curven ongeveer vlak blijven, behalve voor zeer hoge fre-
quenties, waar de SNR plots sterk daalt. Dit komt door het laagdoorlaatkarakter van de
pulstreincodering.
In tabel 3.2 hebben we de maximale SNR van de verschillende systemen samengevat.
Uit deze tabel zien we duidelijk dat BSA het betere algoritme is. Ook zien we dat we,
48
-10
0
10
20
30
40
50
60
0 50 100 150 200 250 300
SN
R [d
B]
Periode
amplitude 8101215182227334151637897
121151188235293366457
(a) eerste orde ∆Σ-modulator
-10
0
10
20
30
40
50
60
0 50 100 150 200 250 300
SN
R [d
B]
Periode
amplitude 8101215182227334151637897
121151188235293366457
(b) HSA met drempelwaarde 0
-10
0
10
20
30
40
50
60
0 50 100 150 200 250 300
SN
R [d
B]
Periode
amplitude 8101215182227334151637897
121151188235293366457
(c) optimaal-HSA
-10
0
10
20
30
40
50
60
0 50 100 150 200 250 300
SN
R [d
B]
Periode
amplitude 8101215182227334151637897
121151188235293366457
(d) HSA met gevonden drempelwaarde
-10
0
10
20
30
40
50
60
0 50 100 150 200 250 300
SN
R [d
B]
Periode
amplitude 8101215182227334151637897
121151188235293366457
(e) optimaal-BSA
-10
0
10
20
30
40
50
60
0 50 100 150 200 250 300
SN
R [d
B]
Periode
amplitude 8101215182227334151637897
121151188235293366457
(f) BSA met gevonden drempelwaarde
Figuur 3.23: SNR ten opzichte van periode voor de tweede soort van testfuncties
door een optimale keuze van de drempel, voor HSA een winst van ongeveer 10dB kunnen
maken. Het verschil in SNR tussen de versie met vaste drempelwaarde en het optimale
algoritme is nu bijna verwaarloosbaar. Door het gebruik van een goed gekozen, vaste
drempelwaarde komen we dus zeer dicht in de buurt van wat optimaal mogelijk is.
De afsnijfrequentie is voor alle systemen ongeveer gelijk. De minimale periode is onge-
veer 20. Dit komt overeen met een frequentie van ongeveer 120fs. Merk op dat we gebruik
maken van een filter dat in het frequentiegebied naar nul daalt tussen 124fs en 2
24fs. We
zien dat de afsnijfrequentie van het gehele systeem tussen deze twee grenzen ligt.
Als we figuur 3.22c en 3.22e vergelijken, zien we dat bij BSA de SNR sneller daalt
49
Soort Maximale SNR∆Σ 37dB
HSA drempel 0 27dBoptimale-HSA 37dB
HSA berekende drempel 35dBoptimale-BSA 45dB
BSA berekende drempel 44dB
Tabel 3.2: Eigenschappen van de verschillende codeersystemen voor de tweede soort van testfunc-ties
voor stijgende amplitude dan bij HSA. Bij HSA is deze overgang ook abrupter; vooral
van zodra we signalen proberen voorstellen die buiten het bereik van de quantisatie vallen
(buiten [0, 765]). Bij BSA zien we echter dat zelfs binnen het signaalbereik ([0, 765]) de
SNR-curve lichtjes daalt. Dit wil dus zeggen dat er vroegtijdige overloading is van het
systeem. Ze wordt echter op geen enkel ogenblik slechter dan die van HSA. Het is dus
aangeraden bij BSA geen al te grote signalen voor te stellen.
3.6 Besluit
We hebben het bestaande filter gezuiverd en op die manier hebben we 5dB aan SNR ge-
wonnen bij alle testen. Een volledig nieuw en beter filter kon echter niet geıntroduceerd
worden wegens de hardwarebeperkingen van de CBM. Wel zijn een aantal mogelijke ver-
beteringen aangegeven en de consequenties die deze hebben op het filter.
Het oude HSA algoritme hebben we verbeterd door een goede keuze van de drempel-
waarde. Op die manier kon tot 10dB winst gemaakt worden. Er werd ook een nieuw
algoritme geıntroduceerd, dat mits de juiste codering, ongeveer 45dB SNR haalt. Dit is
een verbetering van ongeveer 10 dB ten opzichte van HSA met een aangepaste drempel-
waarde. Alles bij elkaar was het dus mogelijk om ongeveer 22dB beter te presteren dan
de systemen die in de literatuur werden besproken.
We hebben ook de reeds veel gebruikte ∆Σ-modulatoren uitgetest. De best haalbare
SNR was hier 37dB. BSA is dus ook ongeveer 10dB beter dan ∆Σ-modulatoren, die
bekend zijn voor hun goede eigenschappen. BSA introduceert echter een vertraging van
12 klokcycli, en de ∆Σ-modulator slechts een vertraging van 1 klokcyclus.
Omdat alle besproken methodes ∆Σ-eigenschappen hebben, heeft de pulstreincodering
dezelfde goede eigenschappen als deze waarvoor de ∆Σ-modulatoren bekend staan. Een
van deze eigenschappen is de vervorming van het ruisspectrum om zo de quantisatieruis uit
de signaalband te houden. Wegens hardwarebeperkingen van de CBM is het niet mogelijk
om deze goede eigenschappen ten volle uit te benutten.
50
Hoofdstuk 4
Training met meerdere datasets
Het oude CBM-model (zoals geleverd door Genobyte) biedt de mogelijkheid om aan elke
uitgang een doelpulstrein, en aan elke ingang een stimuluspulstein te koppelen. Het is
dus mogelijk een verzameling pulstreinen te leren. Een dergelijke verzameling ingangs- en
uitgangspulstreinen noemen we een dataset. Het oude model is dus in staat een dataset
trainen.
Veel problemen bestaan echter uit verschillende onderdelen die elk geoptimaliseerd
moeten worden. Zo moeten er bijvoorbeeld bij patroonherkenning verschillende patronen
gedetecteerd kunnen worden. Elk van deze patronen (gecodeerd als stimuluspulstreinen)
vormt samen met de bijbehorende gewenste uitgangen een dataset. Deze datasets moeten
zo goed mogelijk aangeleerd worden om het patroonherkenningsprobleem op te kunnen
lossen.
Wij hebben een uitbreiding voorzien in de CBM die het mogelijk maakt modules te trai-
nen door middel van verschillende datasets. Elke module in de populatie zal geevalueerd
worden met elk van de datasets. Dit wil zeggen dat elke module voor elk van de datasets
een geschiktheid krijgt. Hierdoor wordt de geschiktheid van een module niet meer gege-
ven door een enkel getal, maar door een vector van getallen (een getal per dataset). Het
standaard GA kan echter niet overweg met verschillende geschiktheden per individu. De
geschiktheden moeten dus op een of andere manier gecombineerd worden zodat het GA
er terug mee overweg kan.
In volgende secties bespreken we eerst het oude CBM-model, dan de theorie achter het
combineren van de verschillende geschiktheden. Daarna behandelen we de implementatie
op de CBM, gevolgd door de resultaten.
4.1 Het oude CBM-model
Het oude optimalisatieproces op de CBM is een standaard eendimensionaal GA. De gebrui-
ker moet een pulstreinbestand (.spt) voorzien. In dit bestand zijn een aantal pulstreinen
gedefinieerd door de gebruiker. Het netlijstbestand verbindt deze pulstreinen met de effec-
tieve in- en uitgangen van de module. Op die manier is er voor elke in- en uitgang van de
51
module juist een pulstrein voorzien (niet gebruikte in- en uitgangen krijgen automatisch
lege pulstreinen toegewezen). De basisgedachte van de genetische lus op de CBM is reeds
aan bod gekomen in hoofdstuk 2. Nu bekijken we de CBM vanuit het oogpunt van de
host-machine. De CBM kan dan aanzien worden als een genetische coprocessor.
Initialiseer
Voor elke generatie
Voer het programma op de CBM uit
Lees de geschiktheden uit de CBM
Sorteer de populatie volgens de geschiktheden
Pas selectie toe om zo de ouderparen te bepalen
Pas het programma aan
Laad het nieuwe programma naar de CBM
Maak het programma voor de CBM
Laad het programma in
Laad de initiële populatie in
Laad alle pulstreinen in
Laad de netlijst in
Figuur 4.1: De oude genetische lus op de host-machine
De genetische lus op de host-machine ziet er uit als in figuur 4.1. De CBM wordt
echt als externe coprocessor gebruikt voor het uitvoeren van de recombinatie-operatoren
op de populatie en het evalueren van de individuen. De host-machine staat in voor het
initialiseren van de populatie, en het selecteren van de ouders voor het maken van nieuwe
individuen.
In het programma dat de host-machine naar de CBM stuurt, zal eerst door middel
van de genetische fase een nieuwe populatie gevormd worden. Dan wordt in de groei-
en signaalfase elk individu geevalueerd om zo hun geschiktheden te bekomen. Daarna
wordt het commando overgedragen naar de host-machine. Deze zal de geschiktheden
uitlezen, ze sorteren, en door middel van een van de in 2.4 genoemde selectiemethoden,
ouders kiezen voor de nieuwe populatie. Deze informatie wordt dan gebruikt om een nieuw
CBM-programma op te stellen dat opnieuw naar de CBM wordt gestuurd.
In de literatuur stelde de Garis [44, 9] een manier voor om op de oude implementatie
van de CBM toch meerdere datasets te kunnen trainen. Deze methode concateneert de
verschillende datasets om zo veel langere pulstreinen te bekomen die dan door de CBM
getraind kunnen worden. De Garis gaf ook aan dat elk van de datasets verschillende malen
(op een willekeurig manier) herhaald moest worden. Tussen elk van de datasets werd best
een bepaald aantal lege pulsen toegevoegd. Dit laatste had tot doel de signalen in de CBM
de tijd te geven om uit te sterven (ze zullen nooit volledig kunnen uitsterven omdat de
integratoren in de CBM niet lekkend zijn, en zo hun waarde behouden als er geen nieuwe
signalen binnenkomen).
Op deze techniek is veel aan te merken. Ten eerste is de kans zeer groot dat de CBM
de gegeven pulstrein gewoon zal memoriseren, zodat de getrainde module uiteindelijk niet
52
in staat zal zijn de aparte datasets correct af te handelen. Dit is eigenlijk een vorm
van overtraining. Door het steeds opnieuw aanleggen van identieke pulstreinen leert het
algoritme niet de generalisering, maar wel de specifieke volgorde van de pulstreinen. Een
oplossing hiervoor zou zijn de lange pulstrein elke keer opnieuw samen te stellen op een
willekeurige wijze. Een groot nadeel hiervan is dat de geschiktheidsevaluatie niet langer
deterministisch is. Het is dus mogelijk dat een goed individu in een generatie, bij een
volgende generatie zeer slecht presteert. Deze extra evaluatieruis zorgt ervoor dat het
GA veel moeilijker een globaal optimum kan vinden. Een andere manier zou zijn om
de pulstrein zeer lang te maken, en elk van de datasets zeer vaak te herhalen op een
willekeurige manier. Het aantal keer dat elke dataset herhaald wordt, en de volgorde
waarin de datasets gecombineerd worden, kunnen gebruikt worden om voorkeuren voor
bepaalde datasets uit te drukken. Het grote nadeel van deze methode is dat de pulstreinen
zeer lang worden waardoor de training zeer lang zou duren.
Een tweede probleem is dat het toevoegen van nullen niet gebruikt kan worden om de
signalen binnen de CBM te laten uitsterven. Alle neuronen onthouden hun status voor
eeuwig (wegens de niet-lekkende integratoren). Het is dus niet mogelijk de CBM duidelijk
te maken dat een nieuwe dataset wordt aangelegd omdat het toevoegen van nullen niets
verandert aan de status van de neuronen. Het ‘resetten’ van de cellulaire ruimte zou het
evalueren van de verschillende datasets ten goede komen omdat dan de CBM niet meer
de sequentie van datasets leert, maar eerder elk van de datasets afzonderlijk.
Uiteindelijk is het meestal wel de bedoeling dat de CBM in uitvoeringsmodus de ver-
schillende datasets kan detecteren zonder te moeten ‘resetten’ na elke dataset. Het zou dus
uiteindelijk wel de bedoeling moeten zijn dat de verschillende ingangspatronen na elkaar
aangelegd kunnen worden. Dit is echter een te strenge eis om reeds op te leggen in het
begin van de evolutiefase. En dat is precies wat de methode van de Garis doet. Door
gebruik te maken van meerdere datasets kunnen we beide eisen splitsen. We zouden de
individuen eerst kunnen trainen voor elke dataset afzonderlijk (met ‘reset’) tot ze daar
redelijk goed in zijn, en dan sequenties van datasets proberen aan te leren. Op die manier
helpen we evolutie een handje.
4.2 Combinatie van geschiktheden
Door de introductie van meerdere datasets wordt de optimalisatie van modules veel com-
plexer. In plaats van een het optimaliseren van een eendimensionale functie f(x) ∈ R,
hebben we nu te maken met een probleemruimte van de vorm
F (x) = (f1(x), ..., fk(x))
53
met fi(x) ∈ R. Deze k-dimensionale vectorfunctie heeft geen eenduidig gedefinieerd mini-
mum1 meer. Als we de functie F (x) willen optimaliseren, hebben we complexere methoden
nodig. In de literatuur [53, 32] definieert men het concept van pareto-optimaliteit. Er zijn
verschillende paretoconcepten. We introduceren ze in volgorde.
Definitie 1 (paretodominantie): De vector u = (u1, ..., uk) domineert de vector v =(v1, ..., vk) als en slechts als ∀i ∈ 1, ..., k, ui ≤ vi ∧ ∃j ∈ 1, ..., k : uj < vj. Als u, vdomineert, noteren we u v.
Definitie 2 (pareto-optimaliteit): Een kandidaat oplossing x ∈ Ω noemen we pareto-optimaal ten opzichte van Ω als en slechts als ¬∃x′ ∈ Ω : F (x′) F (x). Oplossingx ∈ Ω is dus pareto-optimaal als er geen enkele vector F (x′) (met x′ ∈ Ω) bestaat die F (x)domineert. Als Ω niet expliciet gedefinieerd is, nemen we aan dat de volledige decisieruimtewordt bedoeld.
Definitie 3 (pareto-optimale set): De pareto-optimale set van F (x) wordt genoteerdP∗ en is gedefinieerd als P∗ = x ∈ Ω | ¬∃x′ ∈ Ω : F (x′) F (x). P∗ bestaat dus uit alleniet-gedomineerde individuen van Ω.
Definitie 4 (paretofront): Het paretofront (PF∗) voor een gegeven F (x) en bijbehoren-de P∗ is gedefinieerd als PF∗ = F (x) | x ∈ P∗.
Eenmaal we de pareto-optimale set van de meerdimensionale probleemruimte gevonden
hebben, is slechts de eerste stap gezet. We moeten ook nog een beslisser voorzien die uit
deze verzameling optimale oplossingen de beste oplossing kiest volgens een vooraf bepaald
criterium. Een dergelijke beslisser wordt in de literatuur een ‘Decision Maker’ (DM)
genoemd.
Afhankelijk van de manier waarop de beslisser en het optimalisatieproces samenwerken,
worden grofweg drie methoden gedefinieerd voor de optimalisatie van meerdimentionale
problemen [34].
Bij de eerste methode zal de beslisser proberen om de verschillende geschiktheden te
combineren tot een enkele geschiktheid door gebruik te maken van a priori informatie.
Dit gebeurt voor de optimalistie, waardoor het mogelijk is om standaard eendimensionale
optimalisatie toe te passen. Deze methode wordt de a priori methode genoemd.
Bij de tweede methode zal de beslisser beschikken over een verzameling van kandidaat
niet-gedomineerde individuen, gegenereerd door het optimalisatieproces. Uit deze set zal
de beslisser (DM) na de optimalisatie een compromis-oplossing kiezen. Dit noemt men
de a posteriori methode. De optimalisatie heeft geen weet van de relatieve belangrijkheid
van de verschillende geschiktheden en zal enkel op zoek gaan naar niet-gedomineerde
oplossingen. De DM moet dan later uit deze verzameling de voor ons beste oplossing
selecteren.
De derde methode is een progressieve methode waarbij optimalisatie en beslisser af-
wisselend aan de beurt komen. Bij elke stap zal de beslisser partiele voorkeur-informatie1Of evengoed maximum, dit omdat min(F (x)) = −max(−F (x))
54
verstrekken aan het optimalisatieproces, dat op zijn beurt opnieuw betere kandidaatop-
lossingen genereert. Deze methode zullen we echter niet verder bespreken.
4.3 A priori methodes
A priori methodes gaan ervan uit dat voor het optimalisatieproces reeds de relatieve be-
langrijkheid van de verschillende geschiktheden is gekend. We bespreken lexicografische
ordening, lineaire en niet-lineaire combinatie.
4.3.1 Lineaire combinatie
Bij lineaire combinatie definieren we de geschiktheid van een individu door
f(x) k∑
j=1
wjfj(x),
hier is∑
wj meestal gelijk aan 1 (normalisatievoorwaarde) en stelt men over het algemeen
wj ≥ 0 . Deze methode wordt veel gebruikt wegens zijn eenvoud van implementatie en
kleine extra rekenkost. Door de eenvoud van het concept kunnen, voor kleine problemen,
de gewichten makkelijk ‘op het zicht’ gekozen worden: belangrijke geschiktheden krijgen
een hoog gewicht, minder belangrijke een lager gewicht.
Er treden echter grote problemen op als het aantal geschiktheidswaarden sterk stijgt
(‘real-world’ problemen), waardoor de koppeling tussen de verschillende geschiktheidsma-
ten toeneemt. Hierdoor is het met een gewogen som niet meer mogelijk de complexe
interactie tussen de verschillende geschiktheidsfuncties te modelleren. Volgens Dragan
[dragan98c] is het resultaat van de optimalisatie uiterst gevoelig voor zelfs zeer kleine ver-
anderingen van de gewichten. Hierdoor wordt de keuze van juiste gewichten bij complexe
problemen zeer moeilijk.
Een ander groot probleem werd ontdekt door Fonseca en Fleming [20]. Zij toonden
aan dat als PF∗ niet-convex is, de niet-convexe punten niet gevonden kunnen worden
door middel van lineaire combinatie. Zelfs al kennen we de exacte vorm van complexe ge-
schiktheidsruimten niet, toch kunnen we stellen dat het zeer waarschijnlijk is dat bepaalde
delen ervan niet-convex zijn. Omdat deze punten niet gevonden kunnen worden door het
optimalisatieproces, gaat een deel van P∗ verloren. We verliezen dus mogelijk efficiente
oplossingen.
4.3.2 Niet-lineaire combinatie
Af en toe worden geschiktheden ook op een niet-lineaire manier gecombineerd. De meest-
gebruikte vorm is multiplicatieve combinatie
f(x) k∏
j=1
fj(x).
55
Complexere functies, die de niet-lineaire afhankelijkheid van de geschiktheden modelleren,
zijn ook mogelijk, maar worden amper besproken in de literatuur wegens hun ad hoc
karakter. Zie [53] voor een uitgebreidere bespreking van de niet-lineaire methoden.
4.3.3 Lexicografische ordening
Bij lexicografische ordening [4] worden de geschiktheden geordend, waarbij de volgorde
hun relatief belang uitdrukt. De geschiktheid van de eerste dataset is de belangrijkste
(wordt eerst geminimaliseerd), de tweede wordt enkel geminimaliseerd als de geschiktheid
van de individuen voor de eerste dataset gelijk is, de derde enkel als de eerste twee gelijk
zijn, enzovoort. We definieren de lexicografische orde als
Definitie 5 (Lexicografische orde): x ∈ Rn is kleiner in lexicografische orde dan y ∈
Rn (genoteerd x y) indien x = y of indien de eerste niet-nul component van x − y
negatief is.
Door middel van deze lexicografische orde kunnen we een gecombineerde geschiktheid
definieren. Deze is gelijk aan het aantal individuen dat lexicografisch kleiner is dan het
gegeven individu.
f(xi) k∑
j=1
χ (F (xj) F (xi))
χ(expressie) = 1 als expressie waar is, anders 0.
Deze definitie is mogelijk omdat de lexicografische orde een totale orde is. Hierdoor is er
ook een expliciet globaal minimum. Alle optimale punten van de lexicografische orde zijn
zeker pareto-optimaal (per definitie). Maar is het wel gewenst dat een enkele geschikt-
heid koste wat kost wordt geoptimaliseerd? Pas als deze optimaal is zullen de andere
geschiktheden geoptimaliseerd worden.
Een groot probleem is echter dat de volgorde van de geschiktheden cruciaal is, en
deze kan niet altijd op voorhand bepaald worden. Het is mogelijk dit probleem op te
lossen door gebruik te maken van de willekeurige lexicografische orde: bij elke generatie
wordt een nieuwe, willekeurige ordening aan de geschiktheden gegeven. Meestal neemt
men een uniforme verdeling voor de verschillende geschiktheden (ze hebben allemaal even
veel kans om op een bepaalde plaats te staan). Op die manier drukken we wel uit dat
alle geschiktheden gelijkwaardig zijn. De beslisser zou toch een voorkeur voor bepaalde
geschiktheden kunnen uitdrukken door gebruik te maken van verdelingen die bepaalde
geschiktheden begunstigen (bijvoorbeeld een exponentiele verdeling, waardoor bepaalde
geschiktheden een grotere kans hebben om vooraan te staan).
Volgens [6] geeft de uniforme lexicografische orde zeer aanvaardbare resultaten, ver-
gelijkbaar met de a posteriori methodes. Dit komt waarschijnlijk door het gebruik van
de uniforme verdeling zodat er eigenlijk maar een beperkte a priori voorkeur wordt uitge-
drukt.
56
4.4 A posteriori methodes
Bij a posteriori methodes heeft het GA geen weet van het relatieve belang van elk van
de geschiktheden. Ze kunnen de beslisser dus enkel een verzameling niet-gedomineerde
individuen aanbieden. De beslisser zal dan uit deze verzameling de uiteindelijk oplossing
kiezen.
Er zijn twee types van a posteriori methodes, de pareto- en de niet-paretogebaseerde
bemonstering. Niet-paretomethodes zijn van het heuristische type. Hierdoor bestaat er
een waaier aan mogelijke algoritmes die elk een volledig andere werking hebben. Veel van
de algoritmes kunnen echter slechts problemen met een beperkte dimensionaliteit aan. Wij
zullen verder enkel de paretogebaseerde bemonstering bespreken omdat deze een zekere
uniformiteit bezit, en toepasbaar is op problemen met een willekeurig aantal dimensies.
Deze methode wordt ook overvloediger besproken in de literatuur. Voor een bespreking
van de niet-paretogebaseerde bemonstering raden we de geınteresseerde lezer [20, 53] aan.
4.4.1 Paretobemonstering
Paretogebaseerde bemonsterinsmethoden maken expliciet gebruik van paretoconcepten om
tijdens het selectieproces niet-gedomineerde individuen te selecteren boven gedomineerde
individuen. Niet-gedomineerde individuen zullen echter niet in competitie treden met
andere niet-gedomineerde individuen.
Het bepalen van de rangorde in een populatie, in het geval van meerdere geschiktheden,
is niet uniek. Dit is omdat de paretodominantie geen totale, maar een een partiele orde
‘opdringt’. We definieren een rangorde binnen de populatie volgens dewelke we de indivi-
duen zullen selecteren. In het geval van paretodominantie spreken we over de paretorang.
In de literatuur zijn er grofweg drie definities van de paretorang.
Definitie 6 (paretorang volgens Fonseca en Fleming [19]): De paretorang van eenindividu x op tijdstip t (genoteerd rang(x, t)) in de populatie P (t) wordt gegeven door hetaantal individuen in de populatie P (t) die het individu x domineren.
Definitie 7 (binaire paretorang [53]: De paretorang van een individu x op tijdstip tin de populatie P (t) is 0 als het individu niet gedomineerd wordt, anders in de paretoranggelijk aan 1.
Definitie 8 (paretorang volgens Goldberg [26]): Geef alle niet-gedomineerde indivi-duen paretorang 0, verwijder ze uit de populatie, geef dan alle niet-gedomineerde individuenin de nieuwe populatie rang 1, enzovoort tot de populatie leeg is.
In de literatuur is nergens duidelijk bewezen dat een bepaalde vorm van rangorde beter
zou zijn dan de anderen [53]. Wel is het zo dat de ‘worst case’-berekeningscomplexiteit
van de Goldberg-rang hoger is dan beide andere rangordes. De ‘best case’-complexiteit
is wel dezelfde. In tabel 4.1 ziet u een overzicht van de berekeningscomplexiteit van de
verschillende rangordes (overgenomen uit [53]).
57
Tabel 4.1: Complexiteit van paretorangordesTechniek Best Case Worst CaseFonsenca N2 − N N2 − N
Binair N2 − N N2 − N
Goldberg N2 − N 13(N3 − N)
Nadat we de populatie gesorteerd hebben volgens een paretorangorde, moeten we een
vorm van selectie toepassen. Er zijn grofweg twee types van selectie-algoritmen, deze
die geen gebruik maken van de geschiktheid van een individu (rangordeselectie), en deze
die er wel gebruik van maken (geschiktheidsproportionele selectie). De rangordeselectie
kunnen we direct toepassen op de paretogesorteerde populatie. Als we wel geschiktheids-
proportionele selectie willen toepassen, hebben we een geschiktheid nodig. Deze kunnen
we bekomen door rangordegebaseerde geschiktheidsassignatie [20]:
1. Sorteer de populatie volgens de paretorangorde
2. Bepaal de geschiktheid van de individuen door te interpoleren van het beste (rang
0) naar het slechtste individu (rang maximaal) volgens een gegeven functie, meestal
lineair of exponentieel, maar mogelijk van een ander type.
3. Middel de geschiktheden uit bij individuen met dezelfde rang, dit opdat ze met
gelijke kans geselecteerd zouden worden.
Noteer wel dat de term geschiktheid hier niet echt van toepassing is, omdat we niet meer
proberen uit te drukken hoe goed een individu aan bepaalde voorwaarden voldoet, maar
eerder wat de gewenste kans is dat een bepaald individu geselecteerd zal worden.
De paretogebaseerde bemonsteringsmethodes verdelen we verder onder in drie ver-
schillende types: de paretogebaseerde selectie, paretorangschikking met nichevorming en
pareto-elites.
Paretogebaseerde selectie Bij paretogebaseerde selectie maken we gebruik van een
populatie die gesorteerd is volgens een paretorangorde, en waar eventueel ook nog rang-
ordegebaseerde geschiktheidsassignatie op toegepast is (we kunnen dus rangordeselectie
of geschiktheidproportionele-selectie toepassen). Dan kunnen we gebruik maken van een
standaard genetisch algoritme voor het optimaliseren van het probleem.
Paretorangschikking met nichevorming Paretorangschikking met nichevorming maakt
gebruik van de rangordegebaseerde geschiktheidsassignatie samen met gedeelde geschikt-
heid (‘fitness sharing’).
Een groot probleem bij standaard GA’s met eindige populaties is dat de populatie na
verloop van tijd de neiging heeft om te convergeren rond een enkel punt in de zoekruimte
58
(lokaal of globaal optimum). Dit verlies aan diversiteit noemt men ‘genetische drift’.
Dit fenomeen kan catastrofaal zijn voor het GA als het te vroeg optreedt, omdat dan de
zoektocht naar het globaal optimum vastloopt. In de uiteindelijk geconvergeerde populatie
zullen alle individuen rond het globale optimum zijn geconvergeerd. Hierdoor is het bijna
onmogelijk om verschillende optima in de finale populatie te behouden.
Men kan dit probleem vermijden door gebruik te maken van methodes die niches in-
troduceren. Niches zijn subpopulaties binnen de bestaande populatie. Deze subpopulaties
worden gevormd en onderhouden door van de geschiktheid een gedeelde bron te maken.
Als er bijvoorbeeld 10 individuen in de buurt van een optimum zitten, zal de geschiktheid
van dat gebied verdeeld worden over de 10 individuen. Hierdoor krijgen deze 10 individuen
een relatief lage geschiktheid waardoor de populatie zich zal herverdelen. Op die manier
worden de individuen over de zoekruimte verdeeld. De niches maken het dus mogelijk
diversiteit te behouden, en verschillende (lokale) optima tegelijk te onderhouden binnen
dezelfde populatie. Rond elk optimum zal er zich dan een aantal individuen nestelen dat
proportioneel is met de geschiktheid van dit optimum [30].
De meest gebruikte vorm van niche-introductie is ‘gedeelde geschiktheid’, geıntroduceerd
in [30]. De gedeelde geschiktheid van een individu bestaat uit zijn normale geschiktheid
gedeeld door zijn niche-som. De niche-som van een individu is de som van de delings-
functies sh van zichzelf met elk ander individu in de populatie. De gedeelde geschiktheid
kunnen we dus schrijven als
f ′(xi) =f(xi)∑n
j=1 sh (d(xi, xj)).
De delingsfunctie sh is een functie van de afstand tussen twee individuen uit de populatie.
De functie geeft 1 terug als beide individuen identiek zijn, en geeft 0 terug als hun afstand
groter is dan een constante (σshare). De meest gebruikte functie is de volgende
sh(d) =
1 −(
dσshare
)αd < σshare
0 anders.
De constante α wordt gebruikt om de vorm van de delingsfunctie aan te passen, maar
wordt meestal gelijk aan 1 gekozen. De gebruikte afstandsmaat kan gedefinieerd zijn op
het genotype (Hamming-afstand) of op het fenotype (Euclidische afstand). Het bepalen
van een geschikte σshare is verre van triviaal. De beste keuze voor σshare hangt zeer sterk
af van de gebruikte geschiktheidsfunctie. Omdat men bijna nooit de exacte vorm van
de geschiktheidsruimte kent, kan men enkel schattingen maken voor σshare. Voor een
diepergaande bespreking hierover verwijzen we naar [39, 31].
In [20] is de gedeelde geschiktheid uitgebreid naar pareto-optimalisatie. De gebruikte
afstandsmaat is op het fenotype gedefinieerd (op de vector van geschiktheidswaarden), en
enkel tussen individuen met dezelfde rang. Op deze manier is er een additionele selectie-
druk aanwezig bij individuen met gelijke rang. Individuen met gelijke rang zijn onderling
59
evenwaardig en worden normaal niet verder geselecteerd. Men kan dus niets zeggen over
hun exacte plaats in de geschiktheidsruimte. Het zou goed kunnen dat onze populatie be-
staat uit 200 niet-gedomineerde individuen, maar dat deze allemaal identiek zijn. Selectie
kijkt namelijk enkel naar de rang van het individu, en heeft verder geen informatie ter
beschikking. Op het einde van het optimalisatieproces zouden we echter graag een verza-
meling van individuen terugkrijgen die repesentatief is voor de volledige pareto-optimale
set. Door de introductie van nichevorming wordt dit probleem tegengewerkt. Het is mo-
gelijk een analytische functie op te stellen om σshare te vinden zodat de verdeling van de
individuen met dezelfde rang uniform is in de fenotype ruimte (zie [20] voor de uitwerking).
Paretorangschikking met nichevorming is dus veruit de beste manier om pareto-optimale
sets te zoeken. Dit is ook aangetoond in de literatuur [53].
Pareto-elites Pareto-elite methodes werken net zoals paretogebaseerde selectie, maar
nu worden de beste n individuen van de populatie eerst gekopieerd naar de nieuwe popu-
latie, waarna de rest van de nieuwe populatie opgevuld wordt op de normale manier (via
selectie). De individuen die we onvoorwaardelijk kopieren, noemen we elites. Elites zorgen
ervoor dat de n beste individuen nooit verloren gaan (wat bij selectie - met relatief kleine
kans - altijd mogelijk is). n wordt meestal klein gekozen (1 of 2).
Bij klassieke GAs is er steeds een globaal maximum, zodat het zeer interessant is om het
beste individu van de populatie te bewaren, omdat dit mogelijks de globaal beste oplossing
is. Omdat we hier werken met paretodominantie is het de bedoeling dat de finale populatie
bestaat uit zo veel mogelijk niet-gedomineerde individuen. De niet-gedomineerde indivi-
duen zijn onderling gelijkwaardig. Hierdoor vermindert het nut van een klein aantal elites
in de populatie. Het aantal elites zou gelijk moeten zijn aan het aantal niet-gedomineerde
oplossingen in het meerdimensionale probleem. Bij alle praktische toepassingen is het to-
taal aantal niet-gedomineerde oplossingen extreem groot, en zijn we enkel in een beperkte
verzameling van deze oplossingen geıntereseerd.
Hieruit kunnen we besluiten dat het nut van elites bij paretogebaseerde systemen
redelijk beperkt blijft. Toch worden deze methodes soms gebruikt in de literatuur (zie [53]
voor literatuurstudie).
4.5 Het nieuwe CBM-model met meerdere datasets
In deze sectie bespreken we de implementatie van evolutie met meerdere datasets op de
CBM. De CBM is op verschillende niveau’s aangepast: enerzijds is de genetische lus op
de host-machine gewijzigd, anderzijds hebben we het programma van de CBM zelf ook
gewijzigd. We zullen beide aanpassingen bespreken.
60
Initialiseer
Maak het programma voor de CBM
Laad het programma
Laad de initiële populatie in
Laad alle pulstreinen in
Laad de netlijst in
Voor elke generatie
Voor alle datasets
Voer het programma op de CBM uit
Lees de geschiktheden uit de CBM
Laad een aangepaste netlijst naar de CBM
Bereken een maat voor de gecombineerde geschiktheid
Sorteer de populatie volgens de gegeven maat
Pas selectie toe om zo de ouderparen te bepalen
Pas het programma aan
Laad het nieuwe programma naar de CBM
in
Figuur 4.2: De nieuwe genetische lus op de host-machine
pulstreinen voor intern gebruik
alle timeslices van de 1ste pulstreinalle timeslices van de 2de pulstreinalle timeslices van de 3de pulstreinalle timeslices van de 1ste pulstreinalle timeslices van de 2de pulstreinalle timeslices van de 3de pulstrein
...
eerste dataset
tweede dataset
Figuur 4.3: De nieuwe indeling van het pulstreingeheugen
De nieuwe lus De nieuwe genetische lus op de host-machine zien we in figuur 4.2.
De host-machine zal nu tijdens de initialisatie de pulstreinen van de verschillende data-
sets in het pulstreingeheugen laden. Deze komen voor op opeenvolgende posities in het
pulstreingeheugen (figuur 4.3).
In de nieuwe genetische lus wordt hetzelfde CBM programma verschillende keren uit-
gevoerd. Dit betekent dat de populatie (die in de CBM is opgeslagen) verschillende keren
geevalueerd wordt. De netlijsten worden tussen twee uitvoeringen van het programma
zo aangepast dat ze nu verwijzen naar de SIDs van de nieuwe dataset. Telkens we het
programma uitvoeren, testen we de modules in de populatie dus met de pulstreinen van
een nieuwe dataset. Dit doen we een maal voor elk van de datasets. Elke evaluatie van een
dataset resulteert in een geschiktheid die wordt opgeslagen. Nadat de huidige populatie
geevalueerd is voor alle datasets, worden de verschillende geschiktheden gecombineerd.
Verder gebeurt er net hetzelfde als in het oude algoritme.
Een groot probleem was dat het CBM-programma bestaat uit drie delen: de genetische
fase, de groeifase en de signaalfase. Deze fasen worden ook in die volgorde doorlopen.
61
Dit betekent dus dat we in het begin van het CBM-programma een nieuwe populatie
aanmaken, die we dan later in het programma evalueren. Bij het testen van verschillende
datasets wordt het CBM-programma meerdere keren uitgevoerd. Als we elke keer opnieuw
de genetische fase zouden uitvoeren voor het testen van een dataset, dan zouden we ook
voor elke dataset een nieuwe populatie creeren2! Dit heeft natuurlijk nefaste gevolgen op
de evaluatie van de populatie. Een mogelijke oplossing bestaat erin om bij het testen van
de eerste dataset het normale CBM-programma te gebruiken (met genetische fase), en bij
het testen van al de andere datasets een programma te gebruiken waar de genetische fase
is uitgeschakeld. Op die manier verzekeren we dat elke keer we een dataset testen, dit
op dezelfde populatie gebeurt. Dit principe hebben we in de assemblercode van de CBM
geımplementeerd.
Men zou kunnen denken dat het elke keer uitvoeren van de groeifase ook onnodig
is. De groeifase zorgt er echter voor dat de modules elke keer ‘leeg’ zijn voordat men ze
evalueert (alle interne informatie van de cellen wordt dan terug op nul gezet). Dit zou
men ook anders kunnen doen. Men zou rechtstreeks in de assemblercode de aanverwante
informatie van de modules op nul kunnen zetten. Dit zou sneller zijn, maar is moeilijk
te implementeren, zeker met de weinige informatie die ter beschikking is over de interne
werking van de CBM.
Variant en verbetering Een andere variant is mogelijk. Hier laden we in elke dataset-
lus niet de netlijst in met nieuwe SIDs, maar laden we nieuwe pulstreinen in, en la-
ten de netlijst onveranderd. Het enige verschil tussen beide methoden is de hoeveel-
heid data die moet getransfereerd worden. Bij de eerste methode moeten we ongeveer
(aantaltimeslices) ∗ 196 ∗ 17 bits per dataset en per generatie transporteren. In het twee-
de geval is dit (aantaltimeslices) ∗ (aantalpulstreinen) ∗ 96 bits. Het tweede geval is
dus beter als het aantal pulstreinen kleiner is dan 34. We hebben voor de eerste manier
gekozen wegens de eenvoud van implementatie, maar ook met het oog op later gebruik.
Nochtans zou de tweede methode beter zijn voor het aantal pulstreinen (per dataset) dat
op dit ogenblik gebruikt wordt (zelden meer dan 10).
Er is een belangrijke verbetering mogelijk aan deze manier van denken. Het is moge-
lijk heel de dataset-lus mee in het CBM-programma te verwerken. Daardoor zouden de
netlijsten en pulstreinen enkel ingeladen moeten worden tijdens de initialisatie. Tijdens
de verwerking blijven ze constant. Het aanpassen en opnieuw inladen van het programma
tijdens de dataset-lus vervalt dan ook. Hierdoor zou dus wel degelijk een stevige snelheids-
winst bereikt worden. Het grote probleem met deze methode is echter de implementatie.
Het CBM-programma is in assembler geschreven, en is, net als de interne werking van de
CBM, nauwelijks gedocumenteerd.2De genetische operatoren zijn stochastisch van aard, dus elke keer ze opgeroepen worden, wordt een
andere populatie gecreeerd, zelfs al werken ze in op dezelfde ouderparen.
62
Combinatiemethodes We hebben verschillende manieren geımplementeerd voor het
combineren van de geschiktheden: gewogen som, lexicografisch, willekeurig lexicografisch,
en paretorangorde (zonder nichevorming).
Voor de gewogen som moeten een aantal gewichten opgegeven worden. Deze hoeven
niet genormaliseerd te zijn. Niet opgegeven gewichten worden op 1 gezet. De resulterende
gecombineerde geschiktheidswaarde wordt geoptimaliseerd. De grafiek van de maximale
geschiktheid van de populatie gedurende de verschillende generaties heeft dus een dalend
verloop wat de convergentie van de populatie aangeeft. Als selectieoperator kan rangorde-
of geschiktheidsproportionele selectie gekozen worden.
De lexicografische manier om de geschiktheden te combineren gaat ervan uit dat de
volgorde waarmee de datasets zijn opgegeven (in het .spt bestand) de volgorde is van
de lexicografische orde. De lexicografische orde is een totale orde. Er zullen dus nooit
twee individuen met dezelfde orde zijn. Het beste individu van de populatie zal echter
altijd rang 1 hebben. Hierdoor vertelt de grafiek van de maximale geschiktheid van de
verschillende generaties nog weinig over de convergentie van de populatie. Daarom geven
we in de grafiek niet de rang weer, maar de belangrijkste geschiktheid. Deze zal dus
nog wel mooi dalen, maar het kan zijn dat tijdens vlakke stukken, het algoritme andere
(minder belangrijke) geschiktheden aan het optimaliseren is. Voor de lexicografische orde
raden we aan rangordeselectie te gebruiken.
Bij willekeurige lexicografische orde worden de datasets bij elke generaties willekeurig
gepermuteerd om ervoor te zorgen dat er geen voorkeur is. In de grafiek geven we de (op
dat moment) belangrijkste geschiktheid weer. De curve is dus zeer grillig, maar zou in
principe moeten convergeren. Ook hier wordt rangordeselectie aangeraden.
Bij de pareto-orde wordt er gebruik gemaakt van de paretorang volgens Fonseca en
Fleming. Daarbij werd geen nichevorming voorzien, omdat dit redelijk complex is om te
implementeren, en er een aantal nieuwe parameters bijkomen die moeilijk goed in te stellen
zijn. Het is nu mogelijk dat verschillende individuen dezelfde orde hebben. Hierdoor maakt
men gebruik van een nieuwe selectieoperator, de paretorangordeselectie. Deze zal ervoor
zorgen dat individuen met dezelfde rang dezelfde selectiekans krijgen. Het is ook mogelijk
standaard-rangordeselectie te kiezen, maar dat zou geen eerlijke selectiedruk opleggen.
Uit de grafiek van de beste en gemiddelde geschiktheid van de verschillende generaties
kunnen we niets meer opmaken over de convergentie van de populatie omdat de besten
van elke generatie steeds rang 1 hebben (op de grafiek zijn alle ordes vermenigvuldigd met
1000). De gemiddelde rang zou normaal gezien wel moeten dalen omdat er steeds meer
niet gedomineerde individuen in de populatie aanwezig zouden moeten zijn.
Aanpassingen in de configuratiebestanden Er zijn nieuwe versies voorzien voor de
verschillende configuratiebestanden die het mogelijk maken de nieuwe parameters in te
stellen. In bijlage A wordt de syntax van het genetisch algoritme configuratiebestand
63
(GAC) gegeven. In bijlage B vind men het nieuwe pulstrein-bestandsformaat.
Het nieuwe GAC formaat biedt de mogelijkheid om de hele generationele lus verschil-
lende keren uit te voeren op dezelfde populatie. Op die manier is het mogelijk om voor
meer dan 1024 generaties te evolueren. De CBM laat normaal toe voor maximaal 1024
generaties te evolueren. Dit komt omdat er slechts 1024 maskers in het geheugen van de
CBM passen. Deze maskers, die willekeurig gegenereerd zijn, worden gebruikt om mutatie
en overkruising te implementeren. Voor elke generatie is er een nieuwe set maskers. Tij-
dens een generatie wordt een set maskers wel gebruikt voor alle individuen, maar tussen
elk individu wordt het volledige masker drie bits doorgeschoven om op die manier terug
een (semi) willekeurig masker te bekomen voor het volgende individu. De CBM is niet
ontworpen om de maskers te hergebruiken, maar omdat er redelijk veel maskers aanwezig
zijn (evenveel als er generaties zijn), en ze slechts een generatie gebruikt worden, kunnen
we de maskers verschillende keren opnieuw gebruiken. Telkens we de generationele lus
opnieuw starten zullen de bestaande maskers dus nog eens gebruikt worden, dit zonder
verlies van goede willekeurige maskers.
4.6 Resultaten
4.6.1 Oud model
In [11, 9] zijn verschillende testproblemen opgelost met het oud CBM-model. Deze zijn
onder andere een XOR-poort, een frequentiedeler en een klokgenerator. Echter (zoals we
verder zullen zien) gaat het hier over zeer eenvoudige problemen die amper een inspanning
vragen van het trainingsalgoritme.
We hebben een aantal testen gedaan met het oud model door een zeer lange dataset te
maken met daarin verschillende gevallen voor de XOR-poort. De CBM had het hier zeer
moeilijk mee, en vond zelfs na een redelijk lange tijd geen goede oplossing. Dit komt waar-
schijnlijk door dat de CBM bij wijze van spreken overspoeld wordt met informatie die hij
allemaal tegelijk moet leren. Het trainingsalgoritme heeft geen idee waar het moet begin-
nen. Bij een kortere versie van de pulstrein werd het probleem namelijk vanzelf getraind.
Dit geeft duidelijk aan dat deze oplossing niet schaalbaar is. Voor kleine problemen (zoals
origineel in de literatuur) werkt ze goed, maar bij groter problemen loopt het GA volledig
vast.
4.6.2 Nieuw model
Het nieuw model hebben we met verschillende problemen getest. Enkele hiervan komen
uit [11, 9] om een vergelijking mogelijk te maken (en de resultaten in literatuur te kunnen
relativeren).
64
XOR Hier moet de CBM de XOR functie aanleren. Elke ingangspulstrein werd door de
netlijst op verschillende punten op de CBM aangesloten. Hierdoor is het probleem beter
te trainen. Dit komt omdat de CBM de ingangssignalen makkelijker kan ‘vinden’. Een
deel van de training van de CBM is namelijk een routeringsprobleem, het algoritme moet
op zoek gaan naar de in- en uitgangen. Als deze meerdere malen voorhanden zijn, gaat
deze stap van de optimalisatie veel vlotter.
set1
stim0
000000000000000000000000000000000000000111111111111111111111111111111111111111100000000000
stim1
000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111
targ
000000000000000000000000000000000000000111111111111111111111111111111111111111111111111111
set2
stim0
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
stim1
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
targ
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
set3
stim0
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
stim1
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
targ
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
set4
stim0
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
stim1
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
targ
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
set5
stim0
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
stim1
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
targ
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
Figuur 4.4: Een deel van de verschillende datasets die gebruikt werden voor het trainen van hetXOR probleem
Bij al de testen bevatte de populatie 100 individuen en hebben we voor 200 generaties
geevolueerd. Er waren vijf datasets aanwezig: de vier gevallen van de XOR (0, 0, 1,
1, 0, 1, 1, 0) elk herhaald gedurende de volledige duur van de dataset, en een dataset
waar de vier gevallen door elkaar gebruikt worden. Een deel van deze datasets (zoals
ze gedefinieerd zijn in het .spt bestand) zien we in figuur 4.4. Omdat de signalen door
65
Figuur 4.5: De geconvolveerde antwoordpulstreinen op het XOR probleem (omgekeerde volgordeten opzichte van figuur 4.4)
de CBM moeten propageren duurt het dus een zeker aantal klokcycli voor hij outputs
begint te genereren. We kunnen een vaste vertraging instelling in het configuratiebestand,
dit is dan als het ware de gewenste vertraging. Deze vertraging hadden we ingesteld
op 7 (zie bijlage B). De antwoordpulstreinen na het trainen waren voor alle gevallen
hetzelfde. Op figuur 4.5 zien we zulke pulstreinen, maar dan in geconvolveerde vorm.
De verschillende golfvormen zijn de antwoorden op de verschillende datasets (er kunnen
maximaal maar vier wens/antwoord pulstreinen worden weergegeven met de bijgeleverde
software). De gewenste pulstrein en de antwoordpulstrein vallen perfect samen. De XOR
functie werd door alle geschiktheidscombinatiefuncties perfect gevonden. De duur van de
trainingsmodus was ongeveer 2 minuten.
0
200000
400000
600000
800000
1000000
1200000
1400000
1600000
1800000
0 50 100 150 200
generaties
ge
sc
hik
the
id
beste
gemiddelde
(a) lineaire combinatie met gelijke gewichten
0
5000
10000
15000
20000
25000
30000
35000
0 50 100 150 200
generaties
ge
sc
hik
the
id
beste
gemiddelde
(b) paretorangorde
Figuur 4.6: De geschiktheidsgrafiek van het XOR probleem
In in figuur 4.6 zien we de geschiktheidsgrafiek van het XOR-probleem. In de eerste
figuur zien we lineaire geschiktheidscombinatie (met gelijke gewichten), en in de tweede
de paretorangorde. Bij lineaire combinatie wordt de optimale geschiktheid reeds bereikt
na amper 50 generaties. We zien ook dat de gemiddelde geschiktheid van de generatie
maar weinig daalt. Bij de pareto-optimalisatie zien we niets over de optimaliteit van de
beste van de populatie omdat deze allemaal rang 1 hebben. Wel zien we dat na ongeveer
60 generaties de gemiddelde rangorde plots sterk stijgt. We zouden verwachten dat de
66
gemiddelde rangorde daalt. Echter, als er plots een individu wordt gevonden dat beter
is dan al de andere individuen in de populatie, dan zal dit individu de gehele populatie
domineren, waardoor de rang van alle andere individuen met 1 verhoogt. Als er dus plots
goede individuen gevonden worden zal de gemiddelde rang stijgen. Echter zou daarna de
rang terug moeten dalen omdat er meer en meer niet-gedomineerde individuen gevonden
worden. We zien echter dat dit nauwelijks gebeurt. Dit komt waarschijnlijk door de
overkruisingsoperator. Hier komen we later op terug.
0
50000
100000
150000
200000
250000
300000
350000
400000
0 50 100 150 200
generaties
ge
sc
hik
the
id
beste
gemiddelde
(a) lexicografisch
0
100000
200000
300000
400000
500000
600000
0 50 100 150 200
generaties
ge
mid
de
lde
beste
gemiddelde
(b) willekeurig lexicografisch
Figuur 4.7: De geschiktheidsgrafiek van het XOR probleem
In figuur 4.7 zien we de grafiek voor lexicografische en willekeurig lexicografische se-
lectie. Bij de lexicografische selectie zien we dat de belangrijkste geschiktheid reeds na
25 generaties optimaal is (minder belangrijke geschiktheden moeten ook nog geoptimali-
seerd worden, maar dit zien we niet op deze figuur). De beste geschiktheid bij willekeurig
lexicografische selectie springt op en neer. Dit komt omdat we elke generatie een andere
geschiktheid afdrukken. Als de curve echter vlak blijft weten we dat alle geschiktheden
optimaal zijn (omdat ze allemaal met gelijke kans gekozen kunnen worden om de belang-
rijkste te zijn). We zien dat voor bepaalde geschiktheden reeds vroeg de volledige populatie
optimaal is (kijk naar de kruisjes die op de x-as liggen). Dit betekent dat bepaalde data-
sets triviaal zijn om aan te leren. Een voorbeeld hiervan is de dataset waar beide ingangen
nul zijn. Als de CBM geen pulsen binnenkrijgt, zal hij ook nooit reageren (CBM kan niet
uit zichzelf pulsen beginnen genereren).
Het XOR probleem is eerder een triviaal probleem voor de CBM. Elke samenvoeging
van twee dendrieten heeft namelijk de pulsblokkeringseigenschap (spike blocking) wat net
overeenkomt met een binaire XOR. Het komt soms voor dat reeds in de initiele populatie
een individu is gevonden dat bijna optimaal is. Dit betekent dus dat dit echt een veel te
triviaal probleem is voor het testen van de kracht van de CBM.
De verschillende grafieken werden bekomen door middel van willekeurige trainingen.
Er zijn geen uitmiddelingen over verschillende gevallen gebeurd. Deze grafieken zijn dus
geen algemene wetmatigheden voor dit probleem maar eerder een indicatie van hoe de
CBM zulke problemen oplost.
67
Andere logische poorten De andere logische poorten (AND, OR, ...) werden ook
getraind, en geven zeer gelijkaardige karakteristieken. De meeste van deze problemen zijn
wel iets complexer om te trainen dan het XOR-probleem, maar mits een goede keuze van
de in- en uitgangen overheerst ook hier de routering op de berekening in de neuronen.
Figuur 4.8: De gewenste- en antwoordpulstreinen van de frequentiedeler met perfecte overeenkomst
Figuur 4.9: De gewenste- en antwoordpulstreinen van de frequentiedeler met een verkeerde vertra-ging
Frequentiedeler De frequentiedeler heeft tot doel een inkomende pulstrein (bijvoor-
beeld 010101010101...) in frequentie te halveren (000100010001...). En dit voor verschil-
lende ingangsfrequenties, echter wel steeds van de vorm: een 1 gevolgd door een aantal
nullen, dan terug een 1 gevolgd door evenveel nullen, enzovoort. Als we terugdenken aan
hoofdstuk 3, dan komt de frequentiehalveerder eigenlijk overeen met een systeem dat een
constant ingangssignaal (analoge waarde) op de uitgang produceert met halve amplitude.
Ook hier was de duur van de trainingsmodus ongeveer 2 minuten.
In figuur 4.8 zien we de gewenste- en antwoordpulstreinen bij perfecte overeenkomst.
In figuur 4.9 zien we hetzelfde, maar met een verkeerde vertraging. We zien dat de
verschillende datasets bestaan uit pulstreinen met steeds oplopende frequentie. Op die
manier hopen we dat het trainingsalgoritme zal generaliseren vanuit deze dataset om
op die manier een module te krijgen die elke frequentie aankan. In het geval van lineaire
combinatie, en lexicografische selectie werd de perfecte overeenkomst gevonden, pareto- en
68
willekeurig lexicografische selectie vonden een oplossing met een iets grotere vertraging.
Dit is echter niet altijd zo, bij andere runs konden ook paretoselectie en willekeurige
lexicografische orde de perfecte overeenkomst vinden. Wegens het stochastische karakter
van het GA weet men nooit zeker of het optimum even snel zal gevonden worden. Er werd
getraind voor een gewenste vertraging van 8. Deze harde eis is eigenlijk overbodig bij
initiele evoluties van een module. We zijn al blij dat de module het probleem kan oplossen
onafhankelijk van welke vertraging de module introduceert. In hoofdstuk 3 hebben we
gezien dat door intern SIIC te gebruiken de pulsen eigenlijk worden uitgesmeerd vooralleer
ze vergeleken worden met de wenspulstrein. Op deze manier wordt al een deel vrijheid
gegund op de bekomen vertraging, maar vertragingen groter dan 12 (helft van maximaal
mogelijke filter) kunnen op deze manier nooit gevonden worden.
0
100000
200000
300000
400000
500000
600000
700000
0 50 100 150 200generaties
gesch
ikth
eid
beste
gemiddelde
(a) lineaire combinatie met gelijke gewichten
0
5000
10000
15000
20000
25000
30000
35000
0 50 100 150 200generaties
ge
sc
hik
the
id
beste
gemiddelde
(b) paretorangorde
Figuur 4.10: De geschiktheidgrafiek van het frequentiehalveringsprobleem
0
20000
40000
60000
80000
100000
120000
0 50 100 150 200generaties
ge
sc
hik
the
id
beste
gemiddelde
(a) lexicografisch
0
20000
40000
60000
80000
100000
120000
140000
0 50 100 150 200
generaties
ge
sc
hik
the
id
beste
gemiddelde
(b) willekeurig lexicografisch
Figuur 4.11: De geschiktheidsgrafiek van het frequentiehalveringsprobleem
In de figuren 4.10 en 4.11 zien we de geschiktheidsgrafieken voor de verschillende me-
thoden. We kunnen duidelijk uit al de grafieken afleiden dat het een zeer eenvoudig
probleem is voor de CBM. Reeds na een zeer klein aantal generaties werd, in het geval
van lineaire combinatie, de optimale oplossing gevonden. Weerom kan men hier over wat
geluk spreken, want bijvoorbeeld in het geval van willekeurige lexicografische selectie werd
zelfs na 200 generaties geen perfect individu gevonden (echter wel een individu met een
69
zeer goede geschiktheid).
Aanschakelbare golfvormgenerator De bedoeling van de aanschakelbare functiege-
nerator is dat de CBM een bepaalde golfvorm repetitief reproduceert zolang de ingang hoog
is. Dit ogenschijnlijk eenvoudig probleem is reeds veel moeilijker om aan te leren. Na ver-
schillende pogingen, kunnen we een aantal dingen concluderen. Het aan-/uitschakelgedrag
van de ingang wordt zeer snel aangeleerd. het grote probleem is echter het repetitief repro-
duceren van een golfvorm. Meestal vindt de CBM als oplossing wel een repetitief signaal,
maar steeds met een andere golfvorm. In figuren 4.14 en 4.15 zien we de geschiktheids-
grafieken van typische trainingscycli met de verschillende combinatiemethodes. Er werd
gewerkt met een populatie van 200 individuen, gedurende 400 generaties, en dit werd 4
maal herhaald op dezelfde populatie. De duur van de trainingsmodus was ongeveer 20
minuten. Er waren 4 datasets, met oplopend aantal perioden (1, 2, 3 en 5).
(a) lineaire combinatie met gewichten 0,50 0,250,17 0,20
(b) paretorangorde
Figuur 4.12: Het antwoord van de uiteindelijke oplossing op de verschillende datasets voor deaanschakelbare golfvormgenerator
(a) lexicografisch (b) willekeurig lexicografisch
Figuur 4.13: Het antwoord van de uiteindelijke oplossing op de verschillende datasets voor deaanschakelbare golfvormgenerator
Bij lineaire combinatie werden de gewichten gevonden door verschillende mogelijkhe-
den te testen. Ze zijn nog niet optimaal, maar waren wel bevredigend. In figuur 4.12a
70
0
20000
40000
60000
80000
100000
120000
140000
160000
180000
0 200 400 600 800 1000 1200 1400 1600
generaties
gesch
ikth
eid
beste
gemiddelde
(a) lineaire combinatie met gewichten 0,50 0,250,17 0,20
0
10000
20000
30000
40000
50000
60000
70000
80000
90000
0 200 400 600 800 1000 1200 1400 1600
generaties
ge
sc
hik
the
id
beste
gemiddelde
(b) paretorangorde
Figuur 4.14: De geschiktheidgrafiek van de aanschakelbare golfvormgenerator
0
20000
40000
60000
80000
100000
120000
140000
160000
0 200 400 600 800 1000 1200 1400 1600
generaties
ge
sc
hik
the
id
beste
gemiddelde
(a) lexicografisch
0
20000
40000
60000
80000
100000
120000
140000
160000
180000
200000
0 200 400 600 800 1000 1200 1400 1600
generaties
gesch
ikth
eid
beste
gemiddelde
(b) willekeurig lexicografisch
Figuur 4.15: De geschiktheidsgrafiek van de aanschakelbare golfvormgenerator
zien we het antwoord van de gevonden module op de verschillende datasets. De wens- en
antwoordpulstrein werden over elkaar gelegd om goed te kunnen vergelijken. We zien dat
we een aanvaardbaar resultaat bekomen. In figuur 4.14a zien we dat initieel de gemiddelde
geschiktheid groot is. Dan na ongeveer 200 generaties daalt deze zeer snel. Dit komt door
de selectiedruk. Selectie heeft in het begin duidelijk de overhand op de recombinatie ope-
ratoren. Men kan selectie aanzien als een exploiterende operator (‘gebruik wat je hebt’),
en recombinatie als een explorerende operator (‘ga op zoek naar nieuwe informatie’). Ini-
tieel wordt de populatie dus geexploiteerd. Na ongeveer 200 generaties zien we dat de
gemiddelde geschiktheid ongeveer constant blijft voor de rest van de generaties. Op dat
punt is er dus een evenwicht bereikt tussen de exploratie en de exploitatie. Dit wil ook
zeggen dat de populatie nooit volledig zal kunnen convergeren. Dit ligt waarschijnlijk aan
het vrij destructieve karakter van de uniforme overkruising die gebruikt wordt.
Ook de willekeurig lexicografische combinatie geeft zeer behoorlijke resultaten (figuur
4.13b), dit ondanks de introductie van behoorlijk wat ruis op de evaluatie van de indivi-
duen. Vooral de elites zouden hier zeer hard onder moeten leiden. Een individu dat voor
een bepaalde geschiktheid optimaal is (en dus een elite is), kan plots de volgende generatie
(andere geschiktheidsvolgorde) zeer slecht scoren, en geen elite meer zijn. De kans is dus
71
zeer groot dat er geen behoud van elites is. Het is dus beter zonder elites te werken, omdat
deze toch enkel de effectief genetisch actieve populatie verkleinen.
De lexicografische orde (de orde is van onder naar boven als we kijken naar figuur
4.13a) geeft een zeer goed resultaat voor de eerste dataset (onderste golfvorm). Voor de
andere golfvormen presteert deze methode echter veel slechter. Dit is zeer begrijpbaar,
omdat de lexicografische orde als hoofddoel heeft zo goed mogelijk te optimaliseren voor
de eerste dataset. Als deze (tijdelijk) niet meer beter kan wordt voor de andere datasets
geoptimaliseerd. Als er dan echter een individu is dat de eerste dataset nog maar een heel
klein beetje beter kan dan de anderen (die de andere datasets reeds aan het optimaliseren
waren), dan is dit de beste, en worden alle verbeteringen aan de lager gerangschikte
datasets vergeten. In figuur 4.15a zien we dat de eerste dataset na een zeer korte tijd niet
meer verbetert. Dit betekent dat vanaf dan de andere datasets geoptimaliseerd worden.
Echter, wat later is er plots terug een verbetering in de eerste dataset, waardoor de kans
zeer groot is dat wat er gedurende 400 generaties aan de lager gerangschikte datasets is
geoptimaliseerd, plots verloren is.
De resultaten van de pareto-optimalisatie zijn eerder bedroevend (figuur 4.12b). Dit
heeft waarschijnlijk verschillende redenen. In de paretotheorie was er sprake van een
beslisser. Deze zou na het optimalisatieproces dat individu moeten kiezen dat het beste
aan onze eisen voldoet. Maar omdat we moeilijk met de hand alle niet-gedomineerde
individuen kunnen evalueren, en omdat er geen heuristiek bestaat om aan te geven wat de
betere individuen zijn (dan zouden we namelijk a priori optimalisatie kunnen toepassen),
kiezen we gewoon willekeurig een van de niet-gedomineerde individuen uit de populatie.
Een tweede probleem is waarschijnlijk de te destructieve overkruising ten opzichte van
de nu minder sterke paretoselectie3. Normaal zou de gemiddelde rang van de populatie
moeten dalen met de tijd (meer en meer individuen zijn dan niet-gedomineerd). We zien
echter dat er reeds van in het begin zeer weinig verandert aan de gemiddelde rang van de
populatie.
De uniforme overkruising vormt waarschijnlijk een redelijk groot probleem voor alle
vormen van optimalisatie zodra een redelijk groot deel van het chromosoom benut wordt.
Het deel van de module dat benut wordt, bepaalt de zoekruimte. Hoe groter het benutte
deel, hoe groter de zoekruimte. En hoe groter de zoekruimte, hoe groter de kans dat als
je twee willekeurige (maar redelijk goede) individuen overkruist, je een individu krijgt dat
slechter is dan de twee ouders. Dit komt omdat er in het chromosoom plots vele bits bijna
willekeurig veranderen. Omdat er een groot deel van het chromosoom gebruikt wordt, wil
dit dus ook zeggen dat de kans groot wordt dat er veel willekeurige veranderingen optreden
in het gebruikte deel van het chromosoom.
Een oplossing hiervoor zou kunnen bestaan uit een paringsbeperking (in het Engels3Paretoselectie is minder strikt dan lineair gecombineerde selectie, omdat de paretoselectie geen totale
orde introduceert. De lineair gecombineerde selectie is dat wel.
72
mating restriction). Alleen individuen waarvan het genotype verwant is (Hamming af-
stand is klein), mogen gebruikt worden als ouders. Dit is een eigenschap die we ook in de
natuur waarnemen. Het is onmogelijk een levend wezen te bekomen als we twee individu-
en van verschillende soorten proberen te combineren. Het zelfde probleem hebben we bij
de uniforme overkruising. Deze paringsbeperking is niet enkel nuttig bij uniforme over-
kruising, maar kan er bij elke vorm van overkruising voor zorgen dat de zoektocht beter
verloopt. Men moet wel opletten dat de populatie niet te snel convergeert, en zo in een
suboptimaal punt terechtkomt. Het introduceren van paringsbeperking vermindert name-
lijk de exploratie behoorlijk. Nog beter zou het zijn om paringsbeperking te combineren
met nichevorming. De nichevorming zorgt ervoor dat er een redelijk uniforme verdeling
van individuen is over de zoekruimte4. Op die manier wordt vroegtijdige convergentie
tegengegaan.
Figuur 4.16: De letters T, C, L en X zoals de CBM ze te zien krijgt
TCLX Het TCLX-probleem is een patroonherkenningsprobleem dat reeds meer gebruikt
werd voor patroonherkenningstesten (referentie onbekend). Het is de bedoeling elk van de
letters T, C, L en X te kunnen herkennen. Als ingang gebruiken we de bitpatronen in figuur
4.16. De CBM moet een hoog niveau geven op een van zijn vier uitgangen, afhankelijk
van welke letter aan de ingang wordt aangelegd. Dit probleem is in vergelijking met de
vorige problemen reeds zeer complex om te trainen (de duur van een typische training
is ongeveer 8 uur). Zelfs na deze lange trainingsfase werd in sommige gevallen nog geen
voldoend goede module getraind.
In figuur 4.17 zien we de geschiktheidsgrafieken van twee verschillende runs met lineaire
combinatie (gelijke gewichten). In figuur 4.18a zien we de grafiek voor pareto-optimalisatie,
en in figuur 4.18b zien we die voor willekeurig lexicografische ordening. De lexicografische
methode hebben we niet gebruikt, omdat we reeds op voorhand weten dat alle datasets
even belangrijk zijn.
De beste oplossing werd gevonden door middel van de gewogen som. Deze oplossing
zien we in figuur 4.19. Voor elk van de letters zien we het eerste deel van de 4 uitgangs-
pulstreinen. Reeds zeer snel wordt een juiste beslissing genomen, en deze beslissing blijft
zeer lang stabiel (pas na 600 klokcycli verschijnt er wat ruis). De andere methodes konden
slechts minder goede tot slechte oplossingen vinden. De slechte oplossingen werden vooral4Merk op dat we in het geval van de CBM spreken over een zoekruimte met 291008 elementen (wordt
wel wat verminderd door gebruik te maken van het groeiproces)! 200 individuen uniform verdelen over eendergelijke ruimte is dus wel een redelijk relatief begrip.
73
0
500000
1000000
1500000
2000000
2500000
3000000
3500000
4000000
4500000
0 5000 10000 15000 20000
generaties
ge
sc
hik
the
id
beste
gemiddelde
(a) lineaire combinatie gelijke gewichten
0,0E+00
5,0E+05
1,0E+06
1,5E+06
2,0E+06
2,5E+06
3,0E+06
3,5E+06
4,0E+06
0 5000 10000 15000 20000
generaties
ge
sc
hik
the
id
beste
gemiddelde
(b) lineaire combinatie gelijke gewichten, parame-ters GA anders
Figuur 4.17: De geschiktheidgrafiek van het TCLX probleem
0
5000
10000
15000
20000
25000
30000
35000
40000
45000
50000
0 5000 10000 15000 20000
generaties
ge
sc
hik
the
id
beste
gemiddelde
(a) paretorangorde
0
200000
400000
600000
800000
1000000
1200000
0 5000 10000 15000 20000generaties
ge
sc
hik
the
id
beste
gemiddelde
gem. beste
(b) willekeurig lexicografisch
Figuur 4.18: De geschiktheidgrafiek van het TCLX probleem
T
Uitgang 1:________________________||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||...
Uitgang 2:________________________________________________________________________________________...
Uitgang 3:________________________________________________________________________________________...
Uitgang 4:________________________________________________________________________________________...
C
Uitgang 1:________________________________________________________________________________________...
Uitgang 2:________________________________||| || ||||||||||||||||||||||||||||||||||||||||||||||||...
Uitgang 3:________________________________________________________________________________________...
Uitgang 4:________________________________________________________________________________________...
L
Uitgang 1:________________________________________________________________________________________...
Uitgang 2:________________________________________________________________________________________...
Uitgang 3:_____________________________| | | | || ||| |||||||||||||||||||||||||||||||||||||||||||...
Uitgang 4:________________________________________________________________________________________...
X
Uitgang 1:________________________________________________________________________________________...
Uitgang 2:________________________________________________________________________________________...
Uitgang 3:________________________________________________________________________________________...
Uitgang 4:____________________________________________________| | ||||||||||| ||||||||||| |||||||...
Figuur 4.19: Een deel van de uitgangspulstreinen voor een zeer goede oplossing van het TCLXprobleem (door middel van lineaire combinatie gevonden)
74
door de pareto-optimalisatie gevonden (zelfde redenen als bij de vorige test).
In figuur 4.17a zien we een figuur net zoals bij de andere testen. Hier maakten we ook
gebruik van dezelfde instellingen als al de andere test. Voor figuur 4.17b hebben we echter
de kans op mutatie en overkruising 10 keer verkleind. In het tweede geval is een duidelijk
betere oplossing gevonden. We zien ook dat de gemiddelde geschiktheid van de populatie
in het tweede geval een stuk lager ligt dan in het eerste geval. Dit komt overeen met wat
we reeds vertelden over de convergentie van de populatie, en het destructieve karakter van
de recombinatie-operatoren. We zien duidelijk dat als de kans op recombinatie afneemt,
de populatie beter convergeert. In dit geval lijdt deze beter convergentie tot een betere
oplossing.
In figuur 4.18b zien we behalve de beste en de gemiddelde geschiktheid, ook het zwe-
vend gemiddelde van de beste geschiktheden. Hieraan kunnen we zien dat het gemiddelde
van de beste geschiktheden bij willekeurig lexicografische optimalisatie wel degelijk verbe-
tert, maar wel zeer traag ten opzichte van de lineaire-combinatiemethode.
De oorzaak van de sprongen die we waarnemen in de gemiddelde geschiktheid in al
de figuren is vooralsnog niet duidelijk. We vermoeden dat dit komt door het willekeurige
karakter van het GA.
4.6.3 Berekeningscomplexiteit
We hebben een aantal metingen gedaan van de tijd die de datasetlus inneemt afhankelijk
van het aantal individuen, het aantal timeslices en het aantal datasets. De meting omvatte
de datasetlus met daarin het uitvoeren van het CBM programma, het uitlezen van de
geschiktheden, en het laden van de netlijsten. Deze metingen werden over 10 generaties
uitgemiddeld.
0
0,2
0,4
0,6
0,8
1
1,2
1,4
1,6
0 100 200 300 400
Aantal individuen
Tijd
(s)
1 timeslice
11 timeslices
22 timeslices
55 timeslices
110 timeslices
Figuur 4.20: De tijd die de datasetlus inneemt afhankelijk van het aantal individuen en het aantaltimeslices. Het aantal datasets is 1.
In figuur 4.20 zien we de tijd die de datasetlus inneemt (voor 1 dataset) afhankelijk
van het aantal individuen en het aantal timeslices. Voor meerdere datasets, moet men de
tijd gewoon vermenigvuldigen met het aantal datasets (dit is gewoon een lus). We zien
75
dat er een lineair verband bestaat tussen het aantal individuen en de tijdsduur van de
datasetlus.
0
0,0005
0,001
0,0015
0,002
0,0025
0,003
0,0035
0 20 40 60 80 100Timeslices
Tijd
per
ind
ivid
u(s
/in
d)
Figuur 4.21: De tijd die de datasetlus inneemt per individu, afhankelijk van het aantal timeslices.Het aantal datasets is 1.
In figuur 4.21 zien we de tijd per individu in functie van het aantal timeslices. Ook hier
zien we een lineair verband. De totale tijd (in milliseconden) die de datasetlus inneemt,
kunnen we nu schrijven als
Tijddatasetlus = ((0, 026∗timeslices+0, 4447)∗individuen+1, 102∗timeslices+64, 08)∗datasets
Als we nu nog het aantal generaties en het aantal bigruns (herhalingen van de volledige
generationele lus) in rekening brengen (we houden dan wel geen rekening met de tijd die
het selecteren van de individuen en het compileren en laden van de CBM programma’s
inneemt; dit is echter te verwaarlozen ten opzichte van de totale tijd), krijgen we de
tijdsduur van de evolutiemode:
Tijdtotaal = Tijddatasetlus ∗ generaties ∗ bigruns
De nieuwe methode trager is dan de oude methode (voor hetzelfde totaal aantal ti-
meslices). Bij de nieuwe methode is er in de datasetlus namelijk een extra vertraging van
64,08 ms per dataset (door het starten van het programma). Beide methodes zijn wel
O(n) met n elk van de parameters die we zonet tegenkwamen (aantal individuen, aantal
timeslices, aantal datasets).
Deze vergelijking geldt enkel als we het oude systeem gebruiken zoals het door de Garis
is voorgesteld. Indien we het oude systeem echter goed zouden gebruiken, zou de tijdsduur
van de training veel groter worden. Met goed gebruiken bedoelen we dat de datasets
verschillende keren moeten herhaald worden op een willekeurige manier, met de nodige
lege pulstreinen ertussen. De verschillende datasets zouden dus gecombineerd worden tot
een veel langere dataset, veel langer dan de som van de lengtes van de individuele datasets.
Hierdoor is de oude manier - dan goed gebruikt - effectief trager dan de nieuwe manier.
76
4.7 Besluit
Het was mogelijk training met meerdere datasets te implementeren op de CBM. Er zijn
verschillende combinatiemethodes voorzien, en er is voldoende theorie besproken om deze
verder uit te breiden. Verschillende testen tonen aan dat door middel van meerdere data-
sets het mogelijk is om complexe problemen te evolueren op de CBM. Door de tests zijn
een aantal problemen met het GA aan het licht gekomen. Hierdoor presteren bepaalde
methodes redelijk slecht (pareto-optimalisatie). We hebben ook een looptijdstudie gedaan
die aantoont dat de nieuwe methode sneller is dan de oude methode (als deze correct
gebruikt zou worden).
77
Hoofdstuk 5
Besluit
De doelstellingen van deze thesis waren:
• Een beter inzicht verwerven in wat de interne signalen voorstellen en hoe we ex-
terne informatie kunnen voorstellen via pulstreinen, door bestaande methoden te
onderzoeken en te verbeteren, en door nieuwe methoden te introduceren.
• De implementatie van meerdere datasets op de CBM om op die manier complexere
problemen te kunnen trainen.
Het bestaand filter voor de conversie van pulstreinen tot analoge signalen werd opge-
poetst, de oude methode verbeterd, en een nieuwe methode geıntroduceerd. De nieuwe
methode heeft een SNR die 22dB beter is dan de methodes uit de literatuur. We hebben
aangetoond dat alle gebruikte methodes eigenlijk ∆Σ-modulatoren zijn. De pulstrein-
codering heeft dus dezelfde goede eigenschappen als deze waarvoor de ∆Σ-modulatoren
bekend staan. Nochtans is het wegens hardwarebeperkingen niet mogelijk deze goede
eigenschappen ten volle uit te benutten.
We hebben ook meerdere datasets kunnen implementeren op de CBM. Verschillende
combinatiemethoden zijn voorzien. De resultaten tonen aan dat door middel van meerdere
datasets wel degelijk veel complexere problemen getraind kunnen worden dan men met
de oude methode mogelijk was. Door deze resultaten zijn een aantal problemen van het
huidige GA aan het licht gekomen. Er is een tijdsstudie gedaan die aantoont dat de nieuwe
methode sneller is dan de oude methode (als deze correct gebruikt zou worden).
78
Bijlage A
Nieuw GAC formaat
Het Genetisch Algoritme Configuratiebestand beschrijft de parameters van het genetisch
algoritme. Er zitten echter ook parameters in voor de uitvoeringsmodus en algemene in-
stellingen voor het wegschrijven van informatie. Wij hebben een uitbreiding gemaakt van
versie 3.1. De nieuwe versie hebben we versie 3.2 gedoopt.
Genetic Algorithm Data File Format 3.2PopSize 400BrainSize 1NumGenerations 500NumBigRuns 15SelectionMethod PARETORANKCombinefitness PARETONumElite 10NumTapPoints 240 1 5 10 16 24 32 40 48 54 59 62 63 62 59 54 48 40 32 24 16 10 5 1
Log Top 10 Of Generation EVERY 15LogHistory BUGSLogDir d:\cbm\tmpClearBrain TRUESeed RANDOMBrainUpdates 9
Figuur A.1: Een voorbeeld van een .gac-bestand
In volgende opsomming bespreken we elk van de nodige parameters in de volgorde
waarin ze in het bestand voorkomen.
Genetic Algorithm Data File Format <versie> : hoofding die steeds vooraan in
het bestand moet staan en gebruikt wordt om de verschillende versies te onderschei-
den. Wij gebruiken versie 3.2.
PopSize <num> : grootte van de populatie waarbij num kan liggen tussen 1 en 1024.
(enkel in evolutiemode)
79
BrainSize <num> : het aantal modules dat in uitvoeringsmodus aanwezig is, kan lig-
gen tussen 1 en 65535. (enkel in uitvoeringsmodus, in evolutiemodus moet dit 1
zijn)
NumGenerations <num> : het aantal generaties dat het genetisch algoritme zal door-
lopen, ligt tussen 1 en 1024. (enkel in evolutiemodus)
NumBigRuns <num> : het aantal keren dat de volledige generationele lus (al de ge-
neraties) opnieuw uitgevoerd wordt. De populatie blijft behouden als we de gene-
rationelelus opnieuw starten. Deze methode kan dus gebruikt worden om meer dan
1024 generaties te evolueren. (enkel in evolutiemodus)
SelectionMethod <type> : definieert de selectiemethode. De gebruiker kan kiezen
tussen:
• RANK : rangorde
• FITPROP : geschiktheidsproportioneel
• PARETORANK : Pareto-aangepaste rangorde
(enkel in evolutiemodus)
CombineFitness <type> <nr params> <param> : geeft de manier waarop de ge-
schiktheden worden gecombineerd. De 2 laatste parameters zijn optioneel (enkel bij
WEIGHTED). De gebruiker kan kiezen uit:
• NONE : gewogen som met alle gewichten gelijk
• WEIGHTED : gewogen som met opgegeven gewichten. De gebruiker moet ook
nog het aantal gewichten opgeven, gevolgd door de gewichten zelf.
• LEXICOGRAPHIC : lexicografisch
• RANDOMLEXICO : willekeurig lexicografisch
• PARETO : pareto-rangschikking
(enkel in evolutiemodus)
NumElite <num> : definieert het aantal elites. (enkel in evolutiemodus)
NumTapPoints 24 <n0 ... n23> : definieert het convolutiefilter. (enkel in evolutie-
modus)
Log Top <num> of Generation <gen> : slaat de <num> beste modules op naar
schijf na de generaties gegeven door <gen>. <gen> kan een van de volgende zijn:
• EVERY, gevolgd door een getal : om de zoveel generaties
80
• NONE : niet opslaan
• FINAL : enkel de laatste generatie
• ALL : elke generatie
(enkel in evolutiemodus)
LogHistory <type> : maakt een bestand aan (history.txt) dat debuginformatie bevat.
Men kan kiezen uit:
• TRUE : wel debug
• FALSE : geen debug
• GENOBYTEDIAG : extra veel debug informatie
• BUGS : enkel mogelijk fouten die in de CBM zijn opgetreden
LogDir <dir> : specificeert de directory waar de modules worden gelogd, en history.txt
wordt geschreven.
ClearBrain <TRUE|FALSE> : Maakt het mogelijk de signalen in de module eerst
leeg te maken. (enkel in uitvoeringsmodus)
Seed <RANDOM| <num>> : kies de initialisatie van de randomgetallengenerator.
Men kan een vast getal opgeven, of aangeven dat er willekeurig (met de tijd) mag
geınitialiseerd worden (RANDOM).
BrainUpdates <num> : het aantal timeslices dat gesimuleerd moet worden. Dit is
nodig in evolutiemodus en in uitvoeringsmodus. Dit moet overeenkomen met de
maximale lengte van een pulstrein in het pulstreinbestand.
81
Bijlage B
Nieuw SPT formaat
Spiketrain Data File Format 3NumSpiketrains 4NumDatasets 2
respo Rstim0 STstim1 STtargt DST 7
set1
stim0 0100100stim1 0001100targt 0101000
set2
stim0 1111110stim1 0001111targt 1110001
Figuur B.1: Een voorbeeld van een .spt-bestand
Het nieuwe pulstrein bestandsformaat (versie 3) is sterk veranderd ten opzichte van de
vorige versie (versie 2). Het is nu mogelijk datasets te definieren. In volgende opsomming
bespreken we elk van de nodige parameters in de volgorde dat ze in het bestand voorkomen.
Spiketrain Data File Format <versie> : de hoofding die het type en de versie van
dit bestand aangeeft. Wij gebruiken versie 3.
NumSpiketrains <num> : Specificeert het aantal pulstreinen.
NumDatasets <num> : specificeert het aantal datasets.
82
<naam> <ST|R|DST <num>> : de declataties van de verschillende pulstreinen. Aan
elke pulstreinnaam wordt een type gegeven: ST voor een stimulus of doelpulstrein,
R voor een antwoordpulstrein en DST, hetzelfde als ST, maar nu wordt er een extra
vertraging toegevoegd, gegeven door <num> (er worden dan vooraan <num> nullen
toegevoegd, de pulstrein wordt dus langer). DST kan handig gebruikt worden voor
doelpulstreinen waarvan men de vertraging niet op voorhand kent. Op deze manier
kan men ze eenvoudig instellen.
<datasetnaam> <pulstreinnaam> <data> ... : de datasetdefinities. In elk van
de datasets komen alle pulstreinen van het type ST en DST voor. Na de naam van
de pulstrein komt een sequentie van nullen en enen (zonder spaties) die de pulstrein
definieren. De pulstreinen mogen in willekeurige volgorde staan.
83
Bijlage C
Nieuw MSK formaat
Er werd eveneens een nieuw formaat ingevoerd voor het definieren van maskers voor de
genetische fase. Zo kon het handmatig invoeren van maskers overzichterlijker worden ge-
maakt. De hoofding is op het versienummer na onveranderd. Enkel de manier waarop de
maskers zelf opgegeven worden is gewijzigd.
Mask Data File Format 3Fill RANDOMCrossRate 0.1MutRate 0.001NumSpecifiedMasks 1
STARTMASKCROSSOVERMASKS
x 0 y 3 z 6 111111x 1 y 3 z 6 111111x 2 y 3 z 6 111111 1111111x 2 y 3 z 7 111111x 1 y 3 z 7 111111x 0 y 3 z 7 111111
MUTATIONMASKSx 0 y 3 z 6 111111x 1 y 3 z 6 111111x 2 y 3 z 6 111111 0000000x 2 y 3 z 7 111111x 1 y 3 z 7 111111x 0 y 3 z 7 111111
ENDMASK
Figuur C.1: Een voorbeeld van een .msk-bestand
Mask data file format <num> : de hoofding die het type en de versie van dit bestand
aangeeft. Wij gebruiken versie 3.
Fill <ZERO|ONE|RANDOM> : dit geeft aan hoe de compiler niet-opgegeven velden
84
in het masker moet opvullen. Alle velden die opgegeven worden, zullen dus een
waarde krijgen volgens deze parameter.
CrossRate <rate> : indien er velden in het masker niet opgeven zijn (Fill random), dan
geeft dit getal (tussen 0.0 en 1.0) de kans aan dat een bit van het overkruisingsmasker
hoog zal zijn. Dit getal definieert dus de verhouding van het aantal hoge bits tot het
totaal aantal bits in het volledige masker.
MutRate <rate> : indien er velden in het masker niet opgeven zijn (Fill random), dan
geeft dit getal (tussen 0.0 en 1.0) de kans aan dat een bit van het mutatiemasker
hoog is. Dit getal definieert dus de verhouding van het aantal hoge bits tot het totale
aantal bits in het volledige masker.
NumSpecifiedMasks <num> : het aantal maskers dat expliciet in dit bestand opge-
geven wordt. Normaal gezien zal dit nul zijn, tenzij men zelf opgeven maskers wil
gebruiken.
StartMask <mask> EndMask : elk opgegeven masker wordt voorafgegaan door “start-
mask” en moet afgesloten worden met “endmask”. Dit koppel moet minstens Num-
SpecifiedMasks keer voorkomen. Indien er er meer voorkomen, worden deze gene-
geerd.
<mask> : er moeten telkens twee maskers opgegeven worden (die eventueel leeg kunnen
zijn; dan worden ze opgevuld met de informatie van de header). “CROSSOVER-
MASKS” geeft het begin van het overkruisingsmasker en “MUTATIONMASKS” het
begin van het mutatiemasker aan. De waarden van de velden van de maskers worden
nu ingevuld zoals bij een genotype/fenotype-bestand: Per cel kunnen de waarden
voor de bitmaskers opgeven worden. Bij gewone cellen worden zes bits verwacht (1
voor iedere ingang/uitgang van de cel), bij universele cellen nog eens zeven bits extra
(synaps en neuronbit).
85
Bibliografie
[1] T. Aernoudt and D. D’haeyere. Gebruik van de CAM-brain met toepassing op pa-
troonherkenning. Master’s thesis, Universiteit Gent (ELIS), 2000.
[2] Kyong-Joong Kim And. Robot action selection for higher behaviors with cam-brain
modules.
[3] Shapour Azarm, Brian J. Reynolds, and Sanjay Narayanan. Comparison of Two
Multiobjective Optimization Techniques With and Within Genetic Algorithms. In
CD-ROM Proceedings of the 25th ASME Design Automation Conference, volume
Paper No. DETC99/DAC-8584, Las Vegas, Nevada, September 1999.
[4] A. Ben-Tal. Characterisation of pareto and lexicographic optimal solutions. In G. Fan-
del and T. Gal, editors, Proceedings of the Third Conference on Multiple Criteria De-
cision Making Theory and Application, vol. 177, pages 1–11, Berlin, 1979. Springer
Verlag.
[5] C. A. Coello Coello. A short tutorial on evolutionary multiobjective optimization. In
EMO, pages 21–40, 2001.
[6] D. Cvetkovic and I. C. Parmee. Evolutionary design and multi–objective optimisation.
In 6th European Congress on Intelligent Techniques and Soft Computing EUFIT’98,
pages 397–401, Aachen, Germany, 1998.
[7] H. de Garis. CAM-brain: ATR’s billion neuron artificial brain project - a three year
progress report. In International Conference on Evolutionary Computation, pages
886–891, 1996.
[8] H. de Garis. CAM-Brain: The evolutionary engineering of a billion neuron artificial
brain by 2001 which grows/evolves at electronic speeds inside a cellular automata
machine (CAM). In Eduardo Sanchez and Marco Tomassini, editors, Towards Evol-
vable Hardware; The Evolutionary Engineering Approach, pages 76–98, Berlin, 1996.
Springer.
[9] H. de Garis, A. Buller, L. de Penning, T. Chodakowski, M. Korkin, G. Fehr, and
D. Decesare. Initial evolvability experiments on the CAM-brain machines (CBMs).
86
In Proceedings of the 2001 Congress on Evolutionary Computation., volume 1, pages
27–30, May 2001.
[10] H. de Garis, A. Buller, T. Dob, J. Honlet, P. Guttikonda, and D. Decesare. Building
multimodule systems with unlimited evolvable capacities from modules with limited
evolvable capacities (MECs). In Proceedings. The Second NASA/DoD Workshop on
Evolvable Hardware., pages 225–34. IEEE Comput. Soc, July 2000.
[11] H. de Garis, F. Gers, N. E. Nawa, and M. Hough. ATR’s artificial brain (CAM-brain)
project: A sample of what individual CoDi-1bit model evolved neural net modules can
do. In Proceedings of the The First NASA/DOD Workshop on Evolvable Hardware.,
1998.
[12] H. de Garis and M. Korkin. The CAM-brain Machine (CBM) an FPGA-based hard-
ware tool that evolves a 1000 neuron-net circuit module in seconds and updates a 75
million nneuron artificial brain for real-time robot control. A special issue of Elsevier’s
Neurocomputing journal on Evolutionary Neural Systems, 2001.
[13] H. de Garis, M. Korkin, F. Gers, N. E. Nawa, and M. Hough. Building an arti-
ficial brain using an FPGA-based CAM-Brain Machine. Applied Mathematics and
Computation, 111(2–3):163–192, May 2000.
[14] H. de Garis, M. Korkin, P. Guttikonda, and D. Cooley. Evolving detectors of 2d
patterns on a simulated CAM-brain machine: an evolvable hardware tool for building
a 75 million neuron artificial brain. In Proceedings of the SPIE –The International
Society for Optical Engineering., volume 4109, pages 13–18, August 2000.
[15] H. de Garis, M. Korkin, P. Guttikonda, D. Cooley, A. Buller, T. Chodakowski, and
G. Zielinski. The CAM-brain machine (CBM) : An FPGA based tool which evolves
neural net circuit modules in seconds for building a 75 million neuron artificial brain
that controls a lifesized kitten robot. Submission Invitation to Genetic Programming
and Evolvable Hardware Journal.
[16] H. de Garis, N. E. Nawa, M. Hough, and M. Korkin. Evolving an optimal
de/convolution function for the neural net. In Proceedings of International Con-
ference on Neural Networks. IEEE, volume 1, pages 875–882, july 1999.
[17] H. Eeckhaut. Grafische programmeeromgeving voor de CAM-brain neurale computer.
Master’s thesis, Universiteit Gent (ELIS), Gent, 2001.
[18] N. Eiji Nawa, F. Gers H. de Garis, and M. Korkin. ATR’s CAM-brain machine
(CBM) simulation results and representation issues. In Genetic Programming 1998:
Proceedings of the Third Annual Conference, pages 875–882, University of Wisconsin,
Madison, Wisconsin, USA, 22-25 july 1998. Morgan Kaufmann Publishers.
87
[19] C. M. Fonseca and P. J. Fleming. An overview of evolutionary algorithms in multio-
bjective optimization. Evolutionary Computation, 3(1):1–16, 1995.
[20] C. M. Fonseca and P. J. Fleming. Multiobjective optimization and multiple constraint
handling with evolutionary algorithms—Part I: A unified formulation. IEEE Transac-
tions on Systems, Man, and Cybernetics, Part A: Systems and Humans, 28(1):26–37,
1998.
[21] F. Gers and H. de Garis. Porting a cellular automata based artificial brain to MIT’s
cellular automata machine (CAM).
[22] F. Gers and H. de Garis. CAM-Brain: A new model for ATR’s cellular automata
based artificial brain project. Lecture Notes in Computer Science, 1259:437–439, 1997.
[23] F. Gers, H. de Garis, and M. Korkin. CoDi-1Bit: A simplified cellular automata
based neuron model. Artificial Evolution Conference, Nimes, France, oct 1997.
[24] W. Gerstner. What’s different with spiking neurons? Preprint. To appear in: The
Handbook of Biological Physics, Stan Gielen et al. (Eds.).
[25] W. Gerstner. Associative memory in a network of ‘biological’ neurons. In R. Manner
and B. Manderick, editors, Advances in Neural Information Processing Systems, vol.
3, pages 84–90, San Mateo, CA, 1991. Morgan Kaufmann Publishers.
[26] D. E. Goldberg. Genetic Algorithms in Search, Optimization, and Machine Learning.
Addison-Wesley, Reading, MA, 1989.
[27] D. E. Goldberg, K. Deb, and J. Horn. Massive multimodality, deception, and genetic
algorithms. In R. Manner and B. Manderick, editors, Parallel Problem Solving from
Nature, 2, Amsterdam, 1992. Elsevier Science Publishers, B. V.
[28] M. Gronroos. Evolutionary design of neural networks. Master’s thesis, Computer
Science, Department of Mathematical Sciences, University of Turku, Finland, 1998.
[29] D. Hebb. The Organisation of Behavior. Wiley, NY, 1949.
[30] J. H. Holland. Adaptation in Natural and Artificial Systems. University of Michigan
Press, Ann Arbor, MI, 1975.
[31] J. Horn. The nature of niching: Genetic algorithms and the evolution of optimal,
cooperative populations. Technical Report UIUCDCS-R-97-2000, 1997.
[32] J. Horn and N. Nafpliotis. Multiobjective optimization using the niched pareto genetic
algorithm. Technical Report IllIGAL 93005, Urbana, IL, 1993.
88
[33] M. Hough. SPIKER: Analog waveform to digital spiketrain conversion in ATR’s
artificial brain (cam-brain) project. In International Conference on Robotics and
Artificial Life, january 1999.
[34] C.-L. Hwang and A. S. M. Masud. Multiple objective decision making - methods and
applications, vol. 164. In Lecture Notes in Economics and Mathematical Systems,
Berlin, 1979. Springer Verlag.
[35] M. Korkin, H. de Garis, F. Gers, and H. Hemmi. “CBM (CAM-brain machine)”:
A hardware tool which evolves a neural net module in a fraction of a second and
runs a million neuron artificial brain in real time. In Genetic Programming 1997:
Proceedings of the Second Annual Conference, pages 498–503, Stanford University,
CA, USA, 13-16 July 1997. Morgan Kaufmann Publishers.
[36] M. Korkin, G. Fehr, and G. Jeffery. Evolving hardware on a large scale. In Pro-
ceedings. The Second NASA/DoD Workshop on Evolvable Hardware, pages 173–81.
IEEE Comput. Soc., July 2000.
[37] M. Korkin, N. E. Nawa, and H. de Garis. A “Spike Interval Information Coding”
representation for ATR’s CAM-brain machine (CBM). Lecture Notes in Computer
Science, 1478, 1998.
[38] W. Maass and C. M. Bishop. Pulsed Neural Networks. Bradford Books/MIT Press,
Cambridge, MA, 2001.
[39] S. W. Mahfoud. Niching Methods for Genetic Algorithms. PhD thesis, Urbana, IL,
USA, 1995.
[40] A. Marques, V. Peluso, M. S. Steyaert, and W. M. Sansen. Optimal parameters for
∆Σ modulator topologies. In IEEE Transactions on Circuits and Systems II, vol 45,
no 9, pages 1232–1241. IEEE, 1998.
[41] W. McCulloch and W. Pitts. A logical calculus of the ideas immanent in nervous
activity. Bulletin of Mathematical Biophysics, 5:115–133, 1943.
[42] S. Ooghe and T. Van den Driessche. Gebruik van de CAM-brain architectuur voor
informatie-representatie. Master’s thesis, Universiteit Gent (ELIS), 2000.
[43] A. V. Oppenheim and R. W. Schafer. Digital Signal Processing. Prentice Hall,
Englewood Cliffs, NJ, 1975.
[44] G. Otte. Training van neurale netwerken door middel van deeltjeszwermen. Master’s
thesis, Universiteit Gent (ELIS), 2000.
89
[45] F. Rieke, R. van Steveninck D. Warland, and W. Bialek. Spikes: Exploring the Neural
Code. Bradford Books/MIT Press, Cambridge, MA, 1997.
[46] Y. Saeys. Studie en optimalisatie van het genetische algoritme in de CAM-brain.
Master’s thesis, Universiteit Gent (ELIS), 2000.
[47] B. Schrauwen. Messy genetische algoritmes en niche technieken. Master’s thesis,
Universiteit Antwerpen (UIA), 2000.
[48] Sung-Bae-Cho and Geum-Beom-Song. Evolving CAM-Brain to control a mobile ro-
bot. Applied-Mathematics-and-Computation., 111(2–3):147–162, 15 May 2000.
[49] M. Valenzuela-Rendon and E. Uresti-Charre. A non-generational genetic algorithm
for multiobjective optimization. In Thomas Back, editor, Proceedings of the Seventh
International Conference on Genetic Algorithms (ICGA97), pages 657–665, San Fran-
cisco, CA, 1997. Morgan Kaufmann Publishers.
[50] T. Van Den Bulcke. Studie en implementatie van een “field programmable neural
array”. Master’s thesis, Universiteit Gent (ELIS), 2000.
[51] P. Van Der Helst. Analyse van de CAM-brain machine. Master’s thesis, Universiteit
Gent (ELIS), Gent, 2001.
[52] H. Van Marck and Y. Saeys. Haalbaarheidsstudie van de CAM-brain computer, 2001.
Verslag IWT.
[53] D. A. Van Veldhuizen. Multiobjective Evolutionary Algorithms: Classifications, Ana-
lyses, and New Innovations. PhD thesis, Wright-Patterson AFB, OH, 1999.
[54] V. Vereecken. Grafische simulatieomgeving voor de CAM-brain neurale computer.
Master’s thesis, Universiteit Gent (ELIS), Gent, 2001.
[55] P. J. Werbos. Beyond Regression: New Tools for Prediction and Analysis in the
Behavioral Sciences. PhD thesis, Harvard University, Cambridge, MA, 1974.
90