Compiler une fois, différencier partout ✛

Original: "Compile Once, Differentiate Everywhere: A Differentiable Meta-Circular Interpreter"
· Lucas Sheneman
arXiv:2606.09930 · 2026-06-07 · CC BY 4.0 · 1 min
Un interpréteur Scheme compilé en graphe différenciable permet d'optimiser n'importe quel programme comme des données.

L'interprète apprend de chaque mot. Il est assis dans la salle de réunion et traduit. Mais au lieu de simplement traduire, il mémorise les phrases qui ont causé des malentendus et les modifie. Au bout d'une heure, sa traduction est plus précise. C'est pareil ici : l'interpréteur Scheme, compilé une seule fois, peut exécuter n'importe quel programme qui lui est fourni comme donnée, tout en calculant des gradients pour améliorer ces programmes.

Auparavant, chaque modèle scientifique devait être réécrit manuellement sous une forme différenciable pour appliquer l'optimisation par gradient. C'est comme si l'on devait engager un nouveau traducteur pour chaque nouveau texte. Maintenant, le traducteur lui-même devient capable d'apprendre : il ne se contente pas de traduire, il comprend aussi comment modifier le texte pour le rendre meilleur. Les auteurs ont créé un compilateur qui traduit le code source Scheme en une représentation intermédiaire ComputeGraph, puis en modules PyTorch ou JAX. La particularité essentielle est que c'est l'interpréteur lui-même qui devient différenciable, et non des programmes individuels.

L'interpréteur Scheme, écrit en Scheme lui-même, ne compte que 288 lignes de code. Il prend en charge les fermetures, la récursion, les listes et les appels terminaux, suffisamment pour être auto-applicable.

Le traducteur ne se contente plus de traduire, il apprend de chaque mot. Il peut automatiquement calibrer les paramètres de modèles générés par des modèles de langage dans des tâches scientifiques et d'ingénierie. C'est comme si le traducteur, recevant un brouillon de l'écrivain, le perfectionnait lui-même sans exiger une réécriture complète.

L'interpréteur Scheme, écrit en Scheme lui-même, ne compte que 288 lignes de code. Il prend en charge les fermetures, la récursion, les listes et les appels terminaux, suffisamment pour être auto-applicable.

L'idée d'un programme qui peut se modifier et s'améliorer lui-même par des gradients fait écho au concept des machines gödeliennes de Jürgen Schmidhuber, décrit dans ses travaux sur l'auto-amélioration universelle.

\frac{\|\nabla_{\theta} L_{\text{DMCI}} - \nabla_{\theta} L_{\text{direct}}\|_2}{\|\nabla_{\theta} L_{\text{direct}}\|_2} \approx 0
L'erreur relative du gradient est proche de zéro, ce qui confirme la correction.
\text{throughput speedup} = \frac{\text{time sequential}}{\text{time batched}}
Rapport du temps d'exécution séquentielle au temps par lots.
L(\theta) = \ell(\pi(\text{eval}(P(\theta), x)))
La perte est calculée comme une fonction différentiable de la sortie de l'interpréteur.
Scientifiques
Niels BohrPascual JordanWerner HeisenbergJoseph Fourier
Notions
classificateur autoencodeur décodeur reconstruction de données par réseaux de neurones auto-correction de l'IA analyse en composantes indépendantes IA explicable calcul modèle génératif interface cerveau-ordinateur xgboost réseau neuronal profond traitement parallèle forme différentielle réduction de dimensionnalité traitement automatique du langage naturel