Hoofdstuk 6 · de kern
Waarom het netwerk moet groeien
Dit is waar het echt om draait. Een moeilijker taak vraagt een groter, dieper netwerk — maar waarom precies, en hoeveel? In plaats van dat te beweren, hebben we het gemeten. De grafieken hieronder komen uit echte trainingen.
Drie keer groter, in cijfers
De sprong van optellen naar vier bewerkingen is geen detail. Alles wordt groter:
- Invoer: van 10 naar 14 getallen (de bewerkingscode kwam erbij).
- Uitvoer: van 9 naar 21 mogelijke antwoorden (−4 tot 16).
- Te leren feiten: van 25 naar 95 sommen.
- En het lastigste: het netwerk moet nu vier verschillende dingen doen, afhankelijk van de code. Vermenigvuldigen is bovendien een echte “kruising” van a en b (een product), geen simpele optelling.
Meer bewerkingen = trager leren
Eerst hielden we het netwerk gelijk (één verborgen laag van 24) en voegden we stap voor stap bewerkingen toe. Telkens maten we hoeveel epochs het kostte om alles foutloos te krijgen. Het patroon is duidelijk: elke extra bewerking maakt de klus zwaarder.
Een groter en dieper netwerk leert sneller
Daarna hielden we de taak gelijk (alle vier de bewerkingen) en lieten we het netwerk groeien: breder (meer neuronen per laag) en dieper (een tweede verborgen laag). We maten opnieuw de epochs tot foutloos.
Met een beperkt budget van 800 epochs haalde het 8-neuronen-netje pas 80% juist, terwijl twee lagen van 32 toen al lang op 100% zaten — en zelfs na 200 epochs al 96%. Breedte helpt, maar diepte helpt nog meer.
Onze nieuwe vorm: 14 → 32 → 32 → 21
Op basis daarvan kiezen we voor RekenNet een netwerk met twee verborgen lagen van elk 32 neuronen. Dat is een duidelijke stap groter en dieper dan het optelnetwerk (dat had één laag van 16).
Waarom helpt een tweede laag?
Eén verborgen laag kan de invoeren maar één keer combineren. Een tweede laag combineert vervolgens díe combinaties opnieuw — ze kan dus rijkere, samengestelde patronen vormen. Net wat je nodig hebt als de uitkomst afhangt van een samenspel: bij vermenigvuldigen telt niet a of b apart, maar hun product; en de juiste bewerking moet het gedrag van alle neuronen omschakelen. Diepte geeft het netwerk de ruimte om zulke “als-dan”- en kruis-patronen te bouwen, en daardoor leert het sneller en stabieler.
Capaciteit koopt hier vooral snelheid
Eén ding mag niet ontbreken: dankzij de one-hot codering is dit probleem in wezen een grote opzoektabel van 95 vakjes. Met genoeg training onthoudt zelfs een klein netwerk die tabel uiteindelijk. De extra breedte en diepte kopen hier dus vooral snelheid en betrouwbaarheid, niet zozeer of het überhaupt kán.
Het échte verschil maakt capaciteit pas bij grote of oneindige problemen — waar onthouden niet kan en het netwerk een onderliggend patroon moet vatten. En daar hebben we meteen een mooi voorbeeld van, vlak naast de deur.
De grens van “kies een hokje”
We hebben delen netjes gehouden met gehele deling. Maar echte deling geeft 3 ÷ 2 = 1,5 en 1 ÷ 4 = 0,25 — oneindig veel mogelijke breuken. Die kan je niet als nette hokjes opsommen. De aanpak “kies één van een vast aantal antwoorden” (classificatie) loopt hier vast.
De oplossing is een ander soort uitvoer: niet kiezen uit hokjes, maar één getal schatten. Dat heet regressie, met een verliesfunctie die meet hoe ver je schatting van het juiste getal ligt (gemiddelde kwadratische fout in plaats van kruisentropie).
We bouwen die regressie-versie hier niet uit — ze zou een eigen uitvoer en verliesfunctie vragen — maar het laat de diepste vorm van complexiteit zien: soms is het niet “meer neuronen”, maar verandert de aard van het probleem. In het volgende hoofdstuk blijven we bij de nette classificatie en bekijken we de Java-code van RekenNet.