Handwired — JavaScript-логика в виде дифференцируемой нейросети

Handwired показывает, как представить логику JavaScript в виде нейросетевых вычислений: без обучения для точного поведения в заданных пределах и с возможностью дообучать отдельные параметры.

Handwired — экспериментальная библиотека, которая представляет логику обычной программы как набор нейросетевых вычислений. Условия, циклы и состояние кодируются числовыми операциями, а затем исполняются в JavaScript или, для некоторых задач, на WebGPU. Автор проекта показывает на примерах, что такая схема может воспроизводить заданное поведение без обучения, а её параметры при желании можно разморозить и оптимизировать.

Идея звучит как автоматический перевод JavaScript в нейросеть, но нынешний Handwired устроен иначе: разработчик вручную описывает вычислительную схему через функции библиотеки. Обычная JavaScript-версия может служить эталоном для сравнения, однако проект не берёт произвольный файл .js и не превращает его в нейросеть одной командой.

Как программа становится вычислительной схемой

Условия и циклы задаются через числовые операции

В Handwired логика выражается через матричные умножения, смещения и функции активации. Например, условие можно представить как выбор одного из двух результатов в зависимости от входного значения. Веса схемы задаются вручную так, чтобы получить нужное поведение, поэтому для исполнения такого варианта не нужен этап обучения.

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

Дифференцируемость позволяет обучать параметры

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

Демонстрации Handwired

Мини-операционная система с обычными веб-элементами

В демо Mini OS интерфейс состоит из обычных элементов DOM: окон, текста и панелей. При этом управляющая логика представлена числовой схемой. В опубликованной демонстрации автор указывает 9 909 весов, 130 слоёв и отсутствие обучения для этого примера. Это наглядная иллюстрация проекта, а не заявление о готовой замене нейросетями операционных систем или производственных интерфейсов.

Галерея с обучаемым размещением

В галерее можно менять прямоугольники и наблюдать, как изображения учатся располагаться в новой композиции. Параметров здесь мало, поэтому автор демонстрирует обновление прямо в браузере с помощью JavaScript, без отдельной видеокарты.

Поиск по JSON с использованием WebGPU

Ещё один пример преобразует логику поиска по структурированным данным в вычисления, подходящие для параллельного запуска через WebGPU. В демонстрации объединены сопоставление по регулярному выражению, разбор JSON и подсветка совпадений. Это показывает, как автор исследует применение числовых схем к задачам, которые обычно пишут традиционным кодом; универсального ускорения любых JavaScript-программ проект не обещает.

Что означает «точный результат»

Логические решения и числа — не одно и то же

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

Таким образом, «без обучения» относится к вручную настроенным весам конкретной программы. А «дифференцируемая» означает, что параметры схемы можно менять методом оптимизации, если автор сценария хочет поэкспериментировать с обучением.

Запуск и статус проекта

Попробовать в браузере или запустить локально

На странице проекта доступны примеры и интерактивные демо. Для локального запуска репозиторий предлагает установить Bun, клонировать исходный код, выполнить bun install и запустить bun start. В репозитории также опубликовано руководство, которое пошагово показывает, как собрать простую схему.

Handwired распространяется по лицензии MIT. Проект стоит воспринимать как исследовательский эксперимент о границе между обычным программированием и дифференцируемыми вычислениями. Он интересен разработчикам, которые изучают нейросетевые представления программ, автоматическую настройку параметров и вычисления в браузере, но не заменяет привычный JavaScript-компилятор или готовый фреймворк машинного обучения.

Материалы проекта: исходный код Handwired и руководство с туториалом.