Handwired는 일반 자바스크립트 코드를 학습 없이 실행할 수 있고 전체가 미분 가능한 신경망 형태로 바꾸는 프로젝트다. 제작자는 변환된 프로그램을 자바스크립트나 WebGPU에서 실행할 수 있다고 설명한다.

Handwired는 if-else, 반복문, 상태를 행렬 곱셈과 ReLU 연산으로 표현한다. 예를 들어 다음 조건문은 산술 연산으로 바꿀 수 있다.

js
const a = 5
const result = (a > 4) ? 10 : 12
js
const a = 5
// Math.max(0, x) is ReLU. For an integer a, above4 is 1 if a > 4, and 0 otherwise
const above4 = Math.max(0, a - 4) - Math.max(0, a - 5)
// Both branches compute, and above4 picks one
const result = above4 * 10 + (1 - above4) * 12

프로젝트 설명에 따르면 +, *, ReLU 연산을 하나의 큰 행렬 곱셈으로 모은다. 가중치는 직접 작성하므로 학습할 필요가 없으며, 프로그램 전체가 미분 가능한 상태로 유지된다. 연산을 이 두 가지 기본 요소에 집중하면 연산 융합, 희소성, 재정렬 같은 GPU 최적화 기법을 적용하기 쉽다는 설명이다.

제작자는 가중치를 학습하도록 풀거나, 고정된 프로그램을 일반 신경망에 붙여 함께 학습하는 활용 가능성도 제시한다. 또 전통적인 단일 스레드 방식으로 작성한 자바스크립트 코드에서 GPU 수준의 병렬성을 얻는 사례로, 10만 개 문서에서 밀리초 단위로 실행되는 JSON 검색 데모를 소개한다.

라이브 데모에서 직접 체험할 수 있다. 로컬에서 실행하려면 저장소를 복제한 뒤 bun install을 실행하고, 이어서 bun start를 실행한다. 시작할 때는 docs/, src/, template/을 살펴보면 된다. lab/에는 오래된 실험이 들어 있어 확인하거나 건너뛸 수 있다.