推文
@dotey · 2026-10-16 02:04
Cheng Lou 开源 Handwired:手写权重,把程序逻辑变成不用训练的神经网络 Midjourney 工程师、前 React 核心团队成员 Cheng Lou 开源了一个自称“玩具项目”的 Handwired:把程序里的 if-else 和循环改写成神经网络的权重。权重是手写的,不用训练,输出和对应的 JavaScript 程序完全一致,在浏览器里就能跑。 原理一行代码就能讲清。比如 result = a > 4 ? 10 : 12,在 a 是整数时可以改写成: above4 = relu(a - 4) - relu(a - 5) result = above4 × 10 + (1 - above4) × 12 relu 就是 Math.max(0, x),神经网络里最常见的激活函数。a 大于 4 时 above4 正好是 1,否则是 0。两个分支都算出来,再用它挑一个。神经网络本质上就是一堆乘法、加法加上 relu,所以程序里的判断和分支,都能收进一个大矩阵乘法里。 也许你会好奇,神经网络的输出不是带概率、不精确吗? Cheng Lou 的回答是:训练出来的才这样,按程序逻辑手写的权重,同样的输入永远得到同样的输出。 他放了三个 demo。 第一个是 Mini OS,一个有三个窗口和程序坞的小桌面,拖动、缩放、层叠、滚动、文字输入、动画都有。打开浏览器开发者工具看,页面就是普通的网页元素,没有大模型,也没有扩散模型。驱动它的是一个 130 层、9909 个权重的“神经网络”,训练次数为零,在浏览器里用 CPU 实时计算。 第二个是实时搜索 10 万份 JSON 文档,每敲一个键重搜一遍。正则匹配、JSON 解析、高亮全是这种手写网络,再转成 WebGPU 代码放到显卡上并行跑。项目文档里的实测(Apple M5 Max + Chrome):每次搜索 11 到 15 毫秒;浏览器自带的正则引擎一般 8 到 28 毫秒,遇到容易回溯的写法要 2 秒多。文档写明两者谁快说不准,所以页面把两个时间都列出来。浏览器不支持 WebGPU 时会退回 CPU,搜一遍要 13 秒。 第三个是会“学习”的相册。整个程序可微分,也就是能用训练神经网络的反向传播来调参数。你在左边画几个矩形当草图,右边的照片布局由一个小网络算出,它的 244 个参数随着你拖动实时训练。损失函数里加了一项对齐惩罚,照片会自己往一条线上靠,没有任何代码专门去对齐它们。参数很少,训练全在 JavaScript 里跑。 Cheng Lou 还设想,把一段 Handwired 程序接到 nanoGPT(Andrej Karpathy 的一个小型 GPT 训练项目)这样的模型上一起训练,模型既能写莎士比亚,又能精确执行那段程序。这个目前只是 README 里的设想,仓库里没有现成实现。 代码以 MIT 许可开源,demo 直接在网页上打开就能玩。想自己写,需要装 Bun,克隆仓库后从 template 目录的开关按钮示例开始,文档里有完整教程。 推文说“把普通 JS 代码变成神经网络”,容易让人以为能把现成代码丢进去自动转换。项目文档写的是:没有工具能把已有的 JavaScript 源码转成网络。你要用它提供的构建函数,把逻辑一句句写成比较、选择、加权求和这类操作。网络每次都要把所有操作跑一遍,不能提前退出,也不能跑运行时才知道次数的循环,所以常见的循环得改写成计数、树形合并之类的结构,文档专门用一章讲怎么改。所有数都是 32 位浮点数,每个值的取值范围要事先声明。 项目主页:https://chenglou.me/handwired/ GitHub:https://github.com/chenglou/handwired 原推文:https://x.com/_chenglou/status/2110557373651931267
曝光 5471 · 评论 8 · 点赞 38 · 书签 56