chenglou/handwired
Turn your regular JavaScript code into a neural net.
Handwired
Handwired 是一个库,它将普通的 JavaScript 程序(由 if-else、循环和简单算术组成)重写为仅用矩阵乘法和 ReLU 激活表示的全可微分计算。由于生成的程序仅使用这两种原语,它可以在 CPU、WebGPU 或任何其他加速矩阵运算的硬件上执行,并且整个计算保持可微分,无需训练时的权重学习。
工作原理
- 解析源代码 – Handwired 分析 JavaScript 函数的控制流。
- 用算术替换分支 – 条件语句使用 ReLU 技巧(
Math.max(0, x))表示为线性组合,例如a > 4变为真时为1、假时为0的值。 - 收集操作 – 所有加法、乘法和 ReLU 被收集到一个大的矩阵乘法表达式中。
- 执行 – 生成的矩阵程序可以直接在 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)上,并端到端训练整个系统。
- 高性能搜索:以 GPU 速度运行传统的 JavaScript 逻辑(如 JSON 过滤)来处理大型数据集。
许可证与贡献
该仓库是开源的;详情请参阅 LICENSE 文件。欢迎通过拉取请求贡献。
相关
- 项目
- 项目
- 项目
- 项目