chenglou/handwired

Turn your regular JavaScript code into a neural net.

Handwired

Handwired는 일반 JavaScript 프로그램(if-else, 루프, 간단한 산술로 구성)을 행렬 곱셈과 ReLU 활성화만으로 표현되는 완전히 미분 가능한 계산으로 다시 작성하는 라이브러리입니다. 결과 프로그램은 이 두 가지 기본 요소만 사용하므로 CPU, WebGPU 또는 행렬 연산을 가속화하는 모든 하드웨어에서 실행할 수 있으며, 학습 시 가중치 학습 없이 전체 계산이 미분 가능한 상태로 유지됩니다.


작동 방식

  1. 소스 파싱 – Handwired는 JavaScript 함수의 제어 흐름을 분석합니다.
  2. 분기를 산술로 대체 – 조건문은 ReLU 트릭(Math.max(0, x))을 사용하여 선형 결합으로 표현됩니다. 예: a > 4는 참일 때 1, 거짓일 때 0인 값이 됩니다.
  3. 연산 수집 – 모든 덧셈, 곱셈, ReLU가 단일 대형 행렬 곱셈 표현식으로 수집됩니다.
  4. 실행 – 결과 행렬 프로그램은 JavaScript에서 직접 실행하거나 WebGPU로 디스패치하여 GPU 가속 실행할 수 있습니다.

변환은 정확하며(근사 없음) "가중치"는 원래 코드에 이미 존재하는 상수이므로 프로그램은 즉시 미분 가능합니다.


중요한 이유

  • 레거시 JavaScript 로직의 종단 간 미분 가능성으로 그래디언트 기반 실험(예: 상수 미세 조정, 프로그램을 학습 가능한 신경망에 연결)이 가능합니다.
  • 원래 단일 스레드였던 코드의 GPU 수준 병렬 처리로 대규모 검색이 가능합니다(저장소는 10만 문서에 대한 JSON 검색을 밀리초 단위로 실행하는 것을 시연).
  • 학습 불필요 – "가중치"는 원래 숫자 리터럴이므로 즉시 기능 모델을 얻을 수 있습니다.

예시

// 원래 코드
const a = 5
const result = (a > 4) ? 10 : 12

Handwired는 다음과 같이 다시 작성합니다:

const a = 5
// ReLU 기반 분기 선택기
const above4 = Math.max(0, a - 4) - Math.max(0, a - 5)
// 두 분기가 모두 계산된 후 혼합됨
const result = above4 * 10 + (1 - above4) * 12

모든 연산은 이제 선형 + ReLU이며, 행렬 곱셈 실행 준비가 완료됩니다.


시작하기

# 저장소를 클론하고 의존성을 설치합니다 (bun 사용)
git clone https://github.com/chenglou/handwired.git
cd handwired
bun install

# 로컬에서 데모 서버 실행
bun start
  • 라이브 데모는 https://chenglou.me/handwired/ 에서도 호스팅됩니다.
  • 소스는 src/, 문서는 docs/, 템플릿 프로젝트는 template/에서 탐색하세요.
  • 이전 실험 코드는 lab/ 폴더에 있습니다.

사용 사례 아이디어

  • 상수를 동결 해제하고 훈련하여 그래디언트가 무엇을 달성할 수 있는지 확인합니다.
  • 하이브리드 모델: Handwired 변환 프로그램을 훈련 가능한 신경망(예: 소형 GPT)에 연결하고 전체 시스템을 종단 간 훈련합니다.
  • 고성능 검색: 대규모 데이터 세트에 대해 기존 JavaScript 로직(예: JSON 필터링)을 GPU 속도로 실행합니다.

라이선스 및 기여

저장소는 오픈 소스입니다. 자세한 내용은 LICENSE 파일을 참조하세요. 풀 리퀘스트를 통한 기여를 환영합니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트