Компилируем один раз, дифференцируем везде ✛

Оригинал: "Compile Once, Differentiate Everywhere: A Differentiable Meta-Circular Interpreter"
· Lucas Sheneman
arXiv:2606.09930 · 2026-06-07 · CC BY 4.0 · 1 мин
Интерпретатор Scheme, скомпилированный в дифференцируемый граф, позволяет оптимизировать любые программы как данные.

Переводчик учится на каждом слове. Он сидит в зале совещаний и переводит. Но вместо того, чтобы просто переводить, он запоминает, какие фразы вызвали непонимание, и меняет их. Через час его перевод становится точнее. Так и здесь: интерпретатор языка Scheme, скомпилированный один раз, может исполнять любые программы, переданные ему как данные, и при этом вычислять градиенты, чтобы улучшать эти программы.

Раньше каждую научную модель приходилось вручную переписывать в дифференцируемом виде, чтобы применять градиентную оптимизацию. Это как если бы для каждого нового текста нужно было нанимать нового переводчика. Теперь же сам переводчик становится обучаемым: он не просто переводит, но и понимает, как изменить текст, чтобы он стал лучше. Авторы работы создали компилятор, который переводит исходный код на Scheme в промежуточное представление ComputeGraph, а затем в модули PyTorch или JAX. Ключевая особенность в том, что дифференцируемым становится сам интерпретатор, а не отдельные программы.

Интерпретатор Scheme, написанный на самом Scheme, занимает всего 288 строк кода. При этом он поддерживает замыкания, рекурсию, списки и хвостовые вызовы, достаточные для самоприменимости.

Переводчик теперь не просто переводит, а учится на каждом слове. Он может автоматически калибровать параметры моделей, генерируемых языковыми моделями, в научных и инженерных задачах. Это как если бы переводчик, получив черновик от писателя, сам доводил его до совершенства, не требуя переписывания с нуля.

Интерпретатор Scheme, написанный на самом Scheme, занимает всего 288 строк кода. При этом он поддерживает замыкания, рекурсию, списки и хвостовые вызовы, достаточные для самоприменимости.

Идея программы, которая может изменять и улучшать саму себя через градиенты, перекликается с концепцией гёделевских машин Юргена Шмидхубера, описанной в его работах по универсальному самоулучшению.

\frac{\|\nabla_{\theta} L_{\text{DMCI}} - \nabla_{\theta} L_{\text{direct}}\|_2}{\|\nabla_{\theta} L_{\text{direct}}\|_2} \approx 0
Относительная ошибка градиента близка к нулю, что подтверждает корректность.
\text{throughput speedup} = \frac{\text{time sequential}}{\text{time batched}}
Отношение времени последовательного выполнения к пакетному.
L(\theta) = \ell(\pi(\text{eval}(P(\theta), x)))
Потери вычисляются как дифференцируемая функция от выхода интерпретатора.
Учёные
Niels BohrPascual JordanWerner HeisenbergJoseph Fourier
Понятия
классификатор автоэнкодер декодер реконструкция данных с помощью нейронных сетей самокоррекция ИИ анализ независимых компонент объяснимый ИИ вычисление генеративная модель интерфейс мозг-компьютер xgboost глубокая нейронная сеть параллельная обработка дифференциальная форма уменьшение размерности обработка естественного языка выбор модели перекрёстная проверка метод опорных векторов сигма-клиппинг