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

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

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

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

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

Внутри интерпретатора все значения представляются 14-мерными векторами: 10-мерный one-hot тег типа и 4-мерная полезная нагрузка. Куча реализована как словарь с однократной записью, что сохраняет корректность градиентов. Для хвостовых вызовов используется трамплин, то есть цикл, который заменяет глубокую рекурсию и не даёт стеку расти. Благодаря этому градиенты, вычисленные через скомпилированный интерпретатор, совпадают с прямым компилированием с точностью до 7×10⁻⁷ по функции потерь на 171 паре (программа, начальное значение).

На реальных данных по деградации батарей совместный поиск структуры и параметров восстановил коленообразную структуру деградации из гладкого начального приближения и улучшил экстраполяцию на отложенных данных. В задаче обратного моделирования Эль-Ниньо дифференцируемый интерпретатор позволил оптимизировать функцию правдоподобия фильтра Калмана с 611 параметрами, где безградиентный поиск не справился. Пакетная обработка дала ускорение до 875 раз по пропускной способности.

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

Интерпретатор 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 глубокая нейронная сеть параллельная обработка дифференциальная форма уменьшение размерности обработка естественного языка выбор модели перекрёстная проверка метод опорных векторов сигма-клиппинг