Van neuron tot taalmodel

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.

6.1 — wat er zwaarder werd

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.
6.2 — meting 1

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.

alleen + 150 + en − 350 + − × 550 + − × ÷ 700
Epochs tot 100% juist, bij hetzelfde netwerk (1 verborgen laag van 24). Langere balk = langer leren. Van 25 sommen (alleen +) naar 95 sommen (alle vier) bijna vijf keer zo lang. Indicatieve runs met de code van deel I; door de willekeurige startgewichten verschillen de exacte aantallen per run.
6.3 — meting 2

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.

1 laag × 8 2400 1 laag × 16 1100 1 laag × 32 650 2 lagen 16-16 450 2 lagen 32-32 250
Epochs tot 100% juist op alle vier de bewerkingen. Oranje = één verborgen laag, groen = twee lagen. Kortere balk = sneller geleerd. Het kleinste netje (8 neuronen) had ruim 2400 epochs nodig; twee lagen van 32 maar 250. Ook dit zijn indicatieve runs: de verhoudingen zijn wat telt, niet de precieze aantallen.

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.

6.4 — de keuze

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).

a b op 14 invoer ⋮ 32 · ReLU ⋮ 32 · ReLU ⋮ 21 uitvoer softmax
Twee verborgen lagen in plaats van één. De invoer bevat nu drie blokken (a, b en de bewerking), en de uitvoer dekt alle 21 mogelijke antwoorden.
6.5 — intuitie

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.

6.6 — een eerlijke nuance

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.

6.7 — de grens

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).

classificatie kies een hokje (+, −, ×) winnaar regressie schat een getal (echte deling) ? 0 1 2 1,5
Twee manieren om een antwoord te geven. Voor hele getallen werkt “kies een hokje” prima; voor echte breuken moet het netwerk een waarde op een schaal leren schatten.

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.