Waar het begon
Eén regel kan voor veel feiten dienen
Ik wil uitzoeken hoe ver je een klein open model richting frontierniveau kunt krijgen door de gewichten direct te bewerken en er nieuwe onderdelen in te enten, zonder zware trainingsrun. Training is de gebruikelijke route. Je stuurt miljarden vragen en antwoorden door een model en gradiëntafdaling vindt de regels zelf. Maar we kunnen een model ook openmaken, lezen wat het halverwege een probleem bevat, en dat veranderen. Kunnen sommige van die regels dan met de hand worden ingeschreven?
Mijn werkhypothese is dat veel redeneren draait op regelsets, waarbij één regel voor veel feiten dient. Eén onthouden (de overdracht) is het eenvoudigste geval. Niemand leert elke som uit zijn hoofd, want één overdrachtsregel dekt ze allemaal, op elke cijferpositie. In mijn aantekeningen zei ik het zo:
Misschien zou een regel uit het ene feit samenvallen met de regel voor een ander.
Feiten opslaan is duur voor een klein model, en regels zijn goedkoop. Het eerste vermenigvuldigingscircuit in dit verslag is gebouwd voor elk probleem van 2 × 10 tot en met 9 × 99, en het telt 25,270 gewichten.
Dezelfde gesprekken leverden een tweede idee op dat bij het eerste past: een regelset voor leren, om iets nieuws op te pikken, naast logische regels om toe te passen wat je al weet. Dit verslag gaat over de logische kant.
Wat het model al heeft
De cijfers zitten erin
Voordat we iets bouwden, keken we wat SmolLM2 bevat op het moment dat het een antwoord begint te schrijven. Een lineaire uitlezing van de verborgen toestand op de antwoordpositie, gefit met kleinste kwadraten, haalt de cijfers van beide getallen er bijna perfect uit. Voor optellen met drie cijfers was één laag niet genoeg, maar met lagen 14, 20 en 21 samen lees je elk cijfer met 99% op nieuwe problemen.
Optellen met drie cijfers. Aandeel nieuwe problemen waarbij een lineaire uitlezing alle zes cijfers van de twee getallen goed heeft, laag voor laag gelezen, en daarna met lagen 14, 20 en 21 samen. Elke uitlezing is gefit op 1,500 problemen.
76.6% Beste losse laag, laag 21
11.8% Laatste laag, laag 29
97.9% Lagen 14, 20 en 21 samen, en 99.2% als die uitlezing op 3,000 problemen is gefit
Alle 30 lagen als tabel
| Laag | Alle zes cijfers goed |
|---|---|
| 0 | 0.0% |
| 1 | 4.3% |
| 2 | 26.0% |
| 3 | 50.1% |
| 4 | 52.2% |
| 5 | 47.1% |
| 6 | 31.4% |
| 7 | 20.4% |
| 8 | 18.8% |
| 9 | 18.2% |
| 10 | 27.1% |
| 11 | 27.9% |
| 12 | 39.1% |
| 13 | 47.2% |
| 14 | 74.8% |
| 15 | 70.1% |
| 16 | 64.0% |
| 17 | 63.0% |
| 18 | 64.2% |
| 19 | 63.5% |
| 20 | 72.9% |
| 21 | 76.6% |
| 22 | 71.5% |
| 23 | 62.9% |
| 24 | 48.8% |
| 25 | 30.5% |
| 26 | 19.0% |
| 27 | 13.9% |
| 28 | 11.7% |
| 29 | 11.8% |
Het model heeft de vraag dus gelezen. Wat het niet betrouwbaar kan, is de cijfers combineren: de overdracht, het lenen, de tafels. Die combinatiestap is het deel dat wij leveren.
Hoe een ent werkt
Vier onderdelen, geen ervan getraind met gradiëntafdaling
- LezenEen lineaire uitlezing voor elk cijfer van de twee getallen, uit de eigen verborgen toestand van het model.
- RegelsEen kleine opzoektabel voor elk cijfer van het antwoord. Het eenhedencijfer komt uit de twee eenhedencijfers; het tientallencijfer komt uit de tientallencijfers plus de overdracht, en zo verder omhoog.
- SchrijvenEen duwtje richting het juiste cijfertoken in de laatste laag van het model. Het model schrijft nog steeds zelf zijn antwoord. De ent geeft alleen de doorslag bij welk cijfer er volgt.
- SchakelaarsTwee gefitte schakelaars bepalen wanneer de ent aan staat. Ze zijn gefit om alleen aan te gaan terwijl het model het antwoord op dit soort probleem schrijft, en uit te blijven bij ander rekenwerk, redactiesommen, code en gewone tekst.
De uitlezingen en schakelaars worden gefit met kleinste kwadraten in gesloten vorm, en de regeltabellen worden door een programma uitgeschreven (met de hand, bij de eerste vermenigvuldigings-ent). Het basismodelbestand wordt nooit aangeraakt. Elke ent wordt ernaast toegevoegd.
Hoe het groeide
Van één ent naar een pipeline
- Neuron-entDe eerste poging voegde 24 nieuwe neuronen toe aan de laatste laag om de overdracht te leveren bij optellen met twee cijfers. Het hield stand op verzegelde problemen, +19.7 punten. Het werkte door de eigen rekenkunst van het model een beetje bij te sturen, dus de volgende stap was het rekenwerk zelf te doen.
- Met de hand bedraad circuitVoor vermenigvuldigen schreven we de regeltabellen met de hand en voedden ze met de eigen cijferuitlezingen van het model. De eerste versie scoorde 83.5% op verzegelde achtergehouden problemen, tegen 21.3% eerst. Een tweede versie met betere schakelaars scoorde 83.1%, en de slechtste verandering op ander rekenwerk was −0.75 punten.
- Regels gevonden door een programmaEen regelzoekprogramma kreeg 340 opgeloste problemen, als cijfers en antwoorden. Voor elk antwoordcijfer zocht het de kleinste set invoeren die dat cijfer bepaalt. Het vond zelf de overdracht bij optellen, het lenen bij aftrekken en de overdrachtsketen bij vermenigvuldigen. Het ontdekte ook dat het tientallencijfer de eenhedenregel is, hergebruikt op de tientallencijfers, plus een overdrachtsstap: één regel die voor meerdere cijfers dient, en dat is het idee waar dit mee begon. Het vermenigvuldigingscircuit ervan scoorde 82.7% op de achtergehouden set, binnen een half punt van het met de hand bedrade circuit.
- Zelfde pipeline, nieuwe vaardighedenAftrekken en optellen met twee cijfers gingen door hetzelfde script, met instellingen overgenomen van vermenigvuldigen en zonder afstemming. Optellen met drie cijfers kostte drie aanpassingen, elk getest voordat de achtergehouden set werd geopend: de uitlezing samengevoegd uit drie lagen, een tweede schakelaar, en een sterkte van het duwtje per cijferpositie.
Waarom het werkte
Waarom het programma de regels kon vinden
De regels kwamen niet van het model. Een apart programma vond ze, buiten het model, uit 340 opgeloste voorbeelden. Het model levert de getallen, die de ent uit zijn verborgen toestand leest. Vier dingen maakten het mogelijk.
- Problemen opsplitsen in cijfersAls hele getallen is 7 × 48 = 336 één feit tussen 720 mogelijke problemen. Opgesplitst in cijfers verschijnt er een patroon: het laatste cijfer van het antwoord hangt alleen af van de 7 en de 8. Dit was de belangrijkste keuze die we maakten, en het past bij SmolLM2, dat elk cijfer als een eigen token opslaat.
- Vragen om de eenvoudigste verklaringVoor elk cijfer van het antwoord zoekt het programma de kleinste set invoercijfers die het altijd bepaalt, en het houdt een regel alleen als die op elk voorbeeld klopt. Een regel op basis van twee cijfers heeft ongeveer 100 mogelijke vakjes, en 340 voorbeelden vullen er bijna allemaal, dus hij werkt op nieuwe problemen die dezelfde paren gebruiken. Uit je hoofd leren zou betekenen dat je op elk invoercijfer let, met veel meer combinaties dan 340 voorbeelden kunnen dekken.
- Hergebruiken wat het al vondVoor het volgende cijfer probeert het de eenhedenregel opnieuw en kijkt het of één extra signaal verklaart wat overblijft. Dat signaal bleek de overdracht te zijn. Niemand gaf het programma dat woord; het vond de variabele omdat de data er een nodig had. Dezelfde stap voor het honderdtal geeft de overdrachtsketen.
- Controleren op ongeziene problemenDe regels werden getest op problemen die ze nog niet hadden gezien, en daarna omgezet in opzoektabellen in de ent.
Gradiënttraining heeft geen ingebouwde trek naar de eenvoudigste verklaring, en met weinig voorbeelden leerde het uit het hoofd. Bij vermenigvuldigen haalde de even grote gradiënt-ent 72.7% op zijn eigen trainingsproblemen en 25.1% op de 140 ontwikkelproblemen. Het circuit haalde 94.7% op de problemen waaruit het gebouwd is en 88.7% op dezelfde ontwikkelproblemen.
Wij legden de opsplitsing in cijfers vast, en het programma vindt daarbinnen de regels. De volgende stap naar vaardigheden voorbij rekenen is een programma dat ook zelf de juiste manier vindt om een probleem op te splitsen.
Resultaten
Vijf vaardigheden, op problemen waar niemand op heeft afgestemd
De achtergehouden problemen van elke vaardigheid werden apart gezet voordat er iets gebouwd werd, en er is niets op afgestemd. Elke score is twee seeds en vier runs per probleem, met dezelfde sampling-instellingen voor het model alleen en met de ent. De vermenigvuldigingsset werd één keer geopend voor de eerste met de hand bedrade versie, en daarna nog één keer voor de laatste twee.
Aandeel problemen dat precies goed beantwoord is. 140 problemen voor vermenigvuldigen, 500 voor de rest.
- SmolLM2 alleen
- Met de ent
- Zelfde ent, bedrading gehusseld
| Vaardigheid | Problemen | SmolLM2 alleen | Met de ent | Winst, punten (95%-ondergrens) | Gehusselde bedrading | Toegevoegde gewichten |
|---|---|---|---|---|---|---|
| Vermenigvuldigen, regels met de hand bedraad7 × 48 | 140 | 21.3% | 83.1% | +61.8 (+56.1) | 2.4% | 25,2700.019% |
| Vermenigvuldigen, regels gevonden door een programma7 × 48 | 140 | 21.3% | 82.7% | +61.3 (+55.5) | 6.3% | 32,5190.024% |
| Aftrekken, twee cijfers83 − 27 | 500 | 11.3% | 68.3% | +57.1 (+54.0) | 7.8% | 32,4460.024% |
| Optellen, twee cijfers38 + 47 | 500 | 49.7% | 86.5% | +36.8 (+33.8) | 16.7% | 32,4760.024% |
| Optellen, drie cijfers347 + 285 | 500 | 26.1% | 83.7% | +57.6 (+54.6) | 21.4% | 121,1980.090% |
- Geen enkel oorspronkelijk gewicht veranderde, en er was geen gradiënttraining. Elke ent voegt 25,270 tot 121,198 gewichten toe, 0.019% tot 0.090% van het model. De grens die we onszelf stelden was 0.1%.
- De controle met gehusselde bedrading is dezelfde ent met de bedrading door elkaar gehaald. Die scoorde bij elke vaardigheid gelijk aan of lager dan het model alleen, 2.4% tot 21.4%, dus de extra gewichten doen niets zonder de juiste regels.
- De drie tweecijferige enten (vermenigvuldigen, aftrekken en optellen) draaien ook samen in één model, 92,496 gewichten in totaal. Elke ent behield zijn winst op de ontwikkelproblemen. De slechtste verandering op ander rekenwerk was −0.25 punten, en 200 van de 200 niet-gerelateerde prompts gaven hetzelfde antwoord als eerst.
Winsten zijn per probleem gepaard, met een eenzijdige 95%-bootstrap-ondergrens. De controle op bijwerkingen omvat acht andere sets met rekensommen en redactiesommen, plus GSM8K en code. De niet-gerelateerde prompts zijn 200 IFEval-prompts, greedy beantwoord. De regels en voorspellingen voor elke run zijn opgeschreven voordat het resultaat er was.
Tegen gradiënttraining
Drie directe vergelijkingen
Gradiënttraining is de standaardmanier om een vaardigheid toe te voegen, dus die lieten we de concurrent zijn. Elke gradiënt-ent werd vóór de test afgestemd over een raster van instellingen.
140 problemen, 2 seeds, elk 4 runs. Het eerste met de hand bedrade circuit tegen twee afgestemde, met gradiënt getrainde enten.
Het circuit lag 57.9 en 59.8 punten voor.
140 ontwikkelproblemen, 2 seeds, elk 4 runs. LoRA gebruikte de beste instelling uit een grid search.
49.3 punten voor, met een 95%-ondergrens van +42.8, met minder dan een kwart van de gewichten.
500 ontwikkelproblemen, 2 seeds, elk 4 runs. De instellingen van het circuit zijn overgenomen van vermenigvuldigen, niet afgestemd.
Gelijkspel met een gradiënt-ent die vier keer zo groot is, en ongeveer 17 punten voor op die met 14 neuronen.
De aftrekregels van het circuit kwamen uit 340 problemen. De gradiënt-enten trainden op 1,500, dezelfde 1,500 waarop de cijferuitlezingen van het circuit gefit zijn.
Nog bezig
Transplantaties uit grotere modellen
We proberen ook vaardigheden over te zetten uit grotere modellen. Qwen3.5-4B had in onze controle 300 van de 300 van deze vermenigvuldigingsproblemen goed, dus we probeerden een set van zijn neuronen te vertalen naar SmolLM2. Daarnaast hebben we een correctiesignaal van Qwen3.5-4B gemapt naar Qwen3.5-0.8B op redactiesommen van basisschoolniveau. Geen van beide heeft al gewerkt, en beide zijn nog open. Tot nu toe was het grotere model vooral nuttig als wegwijzer naar waar het kleine het laat afweten.
Wat een ent is
Een rekenmachine gevoed door wat het model zelf leest
De ent doet het rekenwerk zelf, met getallen die het model al bevat. SmolLM2 leert niet vermenigvuldigen. De ent werkt op de kale vorm van de vraag ("Hoeveel is 347 + 285?"), en de schakelaars houden hem bij redactiesommen bewust uit. Dit is tot nu toe allemaal één model.
De methode is over te zetten naar nieuwe vaardigheden. Regels worden door een programma gevonden uit 340 voorbeelden, omgezet in tabellen en geplaatst met dezelfde instellingen voor elke vaardigheid. Hierna komt de leerkant: SmolLM2 een feit laten gebruiken dat het in de prompt krijgt.