Le point de départ
Une règle peut servir à de nombreux faits
Je veux savoir jusqu'où on peut pousser un petit modèle ouvert vers le niveau des modèles de pointe en modifiant directement ses poids et en y greffant de nouveaux éléments, sans gros cycle d'entraînement. L'entraînement est la voie habituelle. On fait passer des milliards de questions et de réponses dans un modèle, et la descente de gradient trouve les règles toute seule. Mais on peut aussi ouvrir un modèle, lire ce qu'il contient au milieu d'un problème, et le modifier. Alors, peut-on écrire certaines de ces règles à la main ?
Mon hypothèse de travail, c'est qu'une grande partie du raisonnement repose sur des ensembles de règles, où une seule règle sert à de nombreux faits. Poser la retenue est le cas le plus simple. Personne n'apprend chaque somme par cœur, parce qu'une seule règle de retenue les couvre toutes, à chaque position de chiffre. Dans mes notes, je l'ai formulé ainsi :
Peut-être qu'une règle tirée d'un fait coïnciderait avec la règle d'un autre.
Pour un petit modèle, stocker des faits coûte cher, et les règles coûtent peu. Le premier circuit de multiplication de ce compte rendu est conçu pour tous les problèmes de 2 × 10 à 9 × 99, et il fait 25,270 poids.
Les mêmes conversations ont fait émerger une deuxième idée qui va avec la première : un ensemble de règles d'apprentissage pour acquérir quelque chose de nouveau, à côté de règles logiques pour appliquer ce que l'on sait déjà. Ce compte rendu porte sur le côté logique.
Ce que le modèle a déjà
Les chiffres sont là
Avant de construire quoi que ce soit, nous avons regardé ce que SmolLM2 contient au moment où il commence à écrire une réponse. Une lecture linéaire de son état caché à la position de la réponse, ajustée par moindres carrés, extrait les chiffres des deux nombres presque parfaitement. Pour l'addition à trois chiffres, une seule couche ne suffisait pas, mais en combinant les couches 14, 20 et 21, on lit chaque chiffre à 99% sur des problèmes nouveaux.
Addition à trois chiffres. Part des problèmes nouveaux pour lesquels une lecture linéaire trouve juste les six chiffres des deux nombres, en lisant une couche à la fois, puis les couches 14, 20 et 21 combinées. Chaque lecture est ajustée sur 1,500 problèmes.
76.6% Meilleure couche seule, couche 21
11.8% Dernière couche, couche 29
97.9% Couches 14, 20 et 21 combinées, et 99.2% quand cette lecture est ajustée sur 3,000 problèmes
Les 30 couches sous forme de tableau
| Couche | Les six chiffres justes |
|---|---|
| 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% |
Le modèle a donc bien lu la question. Ce qu'il ne sait pas faire de façon fiable, c'est combiner les chiffres : la retenue, l'emprunt, les tables de multiplication. C'est cette étape de combinaison que nous fournissons.
Comment fonctionne une greffe
Quatre éléments, aucun entraîné par descente de gradient
- LectureUne lecture linéaire pour chaque chiffre des deux nombres, tirée de l'état caché du modèle lui-même.
- RèglesUne petite table de correspondance pour chaque chiffre de la réponse. Le chiffre des unités vient des deux chiffres des unités ; le chiffre des dizaines vient des chiffres des dizaines plus la retenue, et ainsi de suite.
- ÉcritureUne poussée vers le bon token de chiffre, dans la dernière couche du modèle. Le modèle écrit toujours sa propre réponse. La greffe fait seulement pencher la balance sur le chiffre qui vient ensuite.
- InterrupteursDeux interrupteurs ajustés décident quand la greffe est active. Ils sont ajustés pour ne se déclencher que pendant que le modèle écrit la réponse à ce type de problème, et pour rester éteints sur les autres maths, les problèmes à énoncé, le code et le texte ordinaire.
Les lectures et les interrupteurs sont ajustés par moindres carrés en forme fermée, et les tables de règles sont écrites par un programme (à la main pour la première greffe de multiplication). Le fichier du modèle de base n'est jamais touché. Chaque greffe est ajoutée à côté.
Comment ça a évolué
D'une greffe à un pipeline
- Greffe de neuronesLe premier essai a ajouté 24 nouveaux neurones à la dernière couche pour fournir la retenue de l'addition à deux chiffres. Il a tenu sur des problèmes scellés, +19.7 points. Il fonctionnait en infléchissant légèrement l'arithmétique du modèle lui-même, donc l'étape suivante était de faire le calcul directement.
- Circuit câblé à la mainPour la multiplication, nous avons écrit les tables de règles à la main et nous leur avons fourni les lectures de chiffres du modèle lui-même. La première version a obtenu 83.5% sur des problèmes réservés et scellés, contre 21.3% avant. Une deuxième version, avec de meilleurs interrupteurs, a obtenu 83.1%, et sa pire variation sur les autres maths était de −0.75 points.
- Règles trouvées par un programmeUn programme chargé de trouver des règles a reçu 340 problèmes résolus, sous forme de chiffres et de réponses. Pour chaque chiffre de la réponse, il a cherché le plus petit ensemble d'entrées qui le détermine. Il a trouvé seul la retenue de l'addition, l'emprunt de la soustraction et la chaîne de retenues de la multiplication. Il a aussi trouvé que le chiffre des dizaines suit la règle des unités, réutilisée sur les chiffres des dizaines, plus une étape de retenue : une seule règle qui sert à plusieurs chiffres, c'est-à-dire l'idée de départ. Son circuit de multiplication a obtenu 82.7% sur problèmes réservés, à moins d'un demi-point de celui câblé à la main.
- Même pipeline, nouvelles compétencesLa soustraction et l'addition à deux chiffres sont passées par le même script, avec des réglages copiés de la multiplication et sans ajustement. L'addition à trois chiffres a demandé trois correctifs, chacun testé avant l'ouverture de son jeu réservé : la lecture combinée sur trois couches, un deuxième interrupteur, et une intensité de poussée fixée pour chaque position de chiffre.
Pourquoi ça a marché
Pourquoi le programme a pu trouver les règles
Les règles ne viennent pas du modèle. Un programme séparé les a trouvées, en dehors du modèle, à partir de 340 exemples résolus. Le rôle du modèle est de fournir les nombres, que la greffe lit dans son état caché. Quatre choses l'ont rendu possible.
- Découper les problèmes en chiffresEn nombres entiers, 7 × 48 = 336 est un fait parmi 720 problèmes possibles. Découpé en chiffres, un motif apparaît : le dernier chiffre de la réponse ne dépend que du 7 et du 8. C'est le choix le plus important que nous ayons fait, et il convient à SmolLM2, qui stocke chaque chiffre comme un token à part.
- Chercher l'explication la plus simplePour chaque chiffre de la réponse, le programme cherche le plus petit ensemble de chiffres d'entrée qui le détermine toujours, et ne garde une règle que si elle tient sur chaque exemple. Une règle fondée sur deux chiffres compte environ 100 entrées possibles, et 340 exemples les remplissent presque toutes, donc elle marche sur de nouveaux problèmes qui reprennent les mêmes paires. Mémoriser reviendrait à se fonder sur tous les chiffres d'entrée, avec bien plus de combinaisons que 340 exemples ne peuvent en couvrir.
- Réutiliser ce qu'il avait trouvéPour le chiffre suivant, il réessaie la règle des unités et vérifie si un signal supplémentaire explique ce qui reste. Ce signal s'est révélé être la retenue. Personne n'a donné le mot au programme ; il a trouvé la variable parce que les données en avaient besoin. Refaire la même étape pour le chiffre des centaines donne la chaîne de retenues.
- Vérifier sur des problèmes inéditsLes règles ont été testées sur des problèmes qu'elles n'avaient pas vus, puis compilées en tables de correspondance dans la greffe.
L'entraînement par gradient n'a aucune attirance intégrée vers l'explication la plus simple, et avec peu d'exemples il a mémorisé. En multiplication, la greffe par gradient de même taille a obtenu 72.7% sur ses propres problèmes d'entraînement et 25.1% sur les 140 problèmes de développement. Le circuit a obtenu 94.7% sur les problèmes qui ont servi à le construire et 88.7% sur ces mêmes problèmes de développement.
Nous avons fixé le découpage en chiffres, et le programme trouve des règles à l'intérieur. La prochaine étape vers des compétences au-delà de l'arithmétique est un programme qui trouve aussi la bonne façon de découper un problème.
Résultats
Cinq compétences, sur des problèmes jamais utilisés pour ajuster
Les problèmes réservés de chaque compétence ont été mis de côté avant toute construction, et rien n'a été ajusté dessus. Chaque score repose sur deux graines et quatre exécutions par problème, avec les mêmes réglages d'échantillonnage pour le modèle seul et avec la greffe. Le jeu de multiplication a été ouvert une fois pour la première version câblée à la main, puis une fois de plus pour les deux versions finales.
Part des problèmes avec une réponse exactement juste. 140 problèmes pour la multiplication, 500 pour les autres.
- SmolLM2 seul
- Avec la greffe
- Même greffe, câblage mélangé
| Compétence | Problèmes | SmolLM2 seul | Avec la greffe | Gain, points (borne inférieure à 95%) | Câblage mélangé | Poids ajoutés |
|---|---|---|---|---|---|---|
| Multiplication, règles câblées à la main7 × 48 | 140 | 21.3% | 83.1% | +61.8 (+56.1) | 2.4% | 25,2700.019% |
| Multiplication, règles trouvées par un programme7 × 48 | 140 | 21.3% | 82.7% | +61.3 (+55.5) | 6.3% | 32,5190.024% |
| Soustraction, deux chiffres83 − 27 | 500 | 11.3% | 68.3% | +57.1 (+54.0) | 7.8% | 32,4460.024% |
| Addition, deux chiffres38 + 47 | 500 | 49.7% | 86.5% | +36.8 (+33.8) | 16.7% | 32,4760.024% |
| Addition, trois chiffres347 + 285 | 500 | 26.1% | 83.7% | +57.6 (+54.6) | 21.4% | 121,1980.090% |
- Aucun poids d'origine n'a été modifié, et il n'y a eu aucun entraînement par gradient. Chaque greffe ajoute de 25,270 à 121,198 poids, soit 0.019% à 0.090% du modèle. Le plafond que nous nous étions fixé était de 0.1%.
- Le contrôle mélangé est la même greffe avec son câblage brassé au hasard. Sur chaque compétence, il a obtenu un score égal ou inférieur à celui du modèle seul, de 2.4% à 21.4%, donc les poids en plus ne font rien sans les bonnes règles.
- Les trois greffes à deux chiffres (multiplication, soustraction et addition) fonctionnent aussi ensemble dans un seul modèle, 92,496 poids au total. Chacune a conservé son gain sur les problèmes de développement. La pire variation sur les autres maths était de −0.25 points, et 200 prompts sans rapport sur 200 ont donné la même réponse qu'avant.
Les gains sont appariés par problème, avec une borne inférieure bootstrap unilatérale à 95%. Le contrôle des effets secondaires couvre huit autres jeux d'arithmétique et de problèmes à énoncé, plus GSM8K et du code. Les prompts sans rapport sont 200 prompts IFEval, avec des réponses en décodage glouton. Les règles et les prédictions de chaque exécution ont été notées avant son résultat.
Face à l'entraînement par gradient
Trois face-à-face
L'entraînement par gradient est la méthode standard pour ajouter une compétence, nous l'avons donc pris comme concurrent. Chaque greffe par gradient a été ajustée sur une grille de réglages avant son test.
140 problèmes, 2 graines, 4 exécutions chacun. Le premier circuit câblé à la main face à deux greffes entraînées par gradient et ajustées.
Le circuit avait 57.9 et 59.8 points d'avance.
140 problèmes de développement, 2 graines, 4 exécutions chacun. LoRA a utilisé le meilleur réglage issu d'une recherche par grille.
49.3 points d'avance, avec une borne inférieure à 95% de +42.8, en utilisant moins d'un quart des poids.
500 problèmes de développement, 2 graines, 4 exécutions chacun. Les réglages du circuit ont été copiés de la multiplication, sans ajustement.
Égalité avec une greffe par gradient quatre fois plus grande, et environ 17 points d'avance sur celle à 14 neurones.
Les règles de soustraction du circuit viennent de 340 problèmes. Les greffes par gradient se sont entraînées sur 1,500, les mêmes 1,500 sur lesquels les lectures de chiffres du circuit ont été ajustées.
Encore en cours
Transplantations depuis des modèles plus grands
Nous essayons aussi de transférer des compétences depuis des modèles plus grands. Qwen3.5-4B a réussi 300 de ces problèmes de multiplication sur 300 lors de notre vérification, alors nous avons essayé de traduire un ensemble de ses neurones dans SmolLM2. Par ailleurs, nous avons transposé un signal de correction de Qwen3.5-4B vers Qwen3.5-0.8B sur des problèmes à énoncé de niveau école primaire. Aucun des deux n'a encore fonctionné, et les deux pistes restent ouvertes. Jusqu'ici, le grand modèle a surtout servi de guide pour voir où le petit lâche.
Ce qu'est une greffe
Une calculatrice alimentée par la lecture du modèle lui-même
La greffe fait le calcul elle-même, à partir de nombres que le modèle contient déjà. SmolLM2 n'apprend pas à multiplier. La greffe fonctionne sur la forme simple de la question (« Combien font 347 + 285 ? »), et les interrupteurs la gardent éteinte sur les problèmes à énoncé, volontairement. Tout cela ne porte que sur un seul modèle pour l'instant.
La méthode se transpose à de nouvelles compétences. Les règles sont trouvées par un programme à partir de 340 exemples, compilées en tables, puis mises en place avec les mêmes réglages pour chaque compétence. Prochaine étape, le côté apprentissage : amener SmolLM2 à utiliser un fait qu'on lui donne dans le prompt.