---
id: "mb-20261016-eafb70"
kind: "deep"
title: "手写9909个权重在浏览器跑OS：Handwired如何把代码编译进神经网络"
topic: "手写9909个权重在浏览器跑OS：Handwired如何把代码编译进神经网络"
source_type: "generated"
status: "published"
generated_at: "2026-10-16 21:19:21"
frame_type: ["机制"]
legal_anchor_count: 0
transcript_citation_count: 0
---

# 手写9909个权重在浏览器跑OS：Handwired如何把代码编译进神经网络

一行数据都没训，他用九千个数字在浏览器里跑起了操作系统。

9909 个数字，其实就是一个神经网络的全部权重。

GPT-2 最小的版本都有 1.2 亿个参数。
他这个只要不到一万个，比 GPT-2 小了一万两千多倍，普通 CPU 就能跑。

这怎么做到的？
AI 神经网络不是靠海量数据算出来的吗，怎么能人工手写？

把他的招式拆开看，连手机计算器都能验。

写过代码的都知道，最基础的逻辑就是条件分支：
如果 a 大于 4，输出 10；否则，输出 12。

但神经网络没有 if-else 这种指令。
它本质上就是算术，只会做乘法加法，外加激活函数。

怎么让神经网络做选择？

他找了一个极其基础的激活函数 ReLU。
规则就一条：负数进来全部变 0，正数原样出去。

然后他写了一个算式：
relu(a - 4) 减去 relu(a - 5)。

把 5 代进去试一下：
5 减 4 等于 1，relu(1) 是 1；
5 减 5 等于 0，relu(0) 是 0。
1 减 0，结果是 1。

那要是把 4 或者更小的数字代进去呢？
两边都是 0，减完还是 0。

只要 a 大于 4，算出来的就是 1；只要不大于 4，算出来的就是 0。

接下来把 1 乘以 10，把剩下的乘以 12，加在一起。
两个神经元，就把一个条件分支给硬生生拼出来了。

把几千个这样的结构叠在一起，就有了循环、内存、滚动条和窗口拖拽。
整整 130 层网络，在网页里渲染出真实的 DOM 元素，打开控制台就能直接点。

做出这套东西的人叫 Cheng Lou，以前是 Facebook React 核心团队的工程师。
他把自己写的这个编译器叫做 Handwired。

你把普通代码喂给它，它吐出来的不是机器指令，而是神经网络需要的精确权重。
每一颗参数在进网络之前，就已经知道自己的任务了。

代码一旦转成这种数学形式，还捡到了一个便宜：
它能直接跑在显卡上。

他用传统单步遍历写了一个 JSON 搜索，编译成权重，扔给显卡去搜 10 万份文档。
14 毫秒搞定。
比浏览器自己内置的模式匹配还快了 5 毫秒。

不过对做 AI 的人来说，这件事最大的价值还不在速度上。
它打开了第三种可能。

现在我们想让模型掌握一项具体技能，通常只有两条路：
要么喂几百万条样本训练，靠概率去碰，谁也不敢保证每次都算对；
要么在外面给它挂一个计算器或 API 工具，虽然精确，但模型自己的权重根本碰不到工具内部，没法跟着调整。

Handwired 走的是第三条路：
把确定的技能写成代码，编译成权重，直接焊进神经网络内部。
第一天它就是百分之百精确的；
更重要的是，因为它是权重，可以反向传播，后续还能继续用训练去微调。

Cheng Lou 做过一个演示，把编译好的程序焊在 nanoGPT 上。
同一个模型，一边能写莎士比亚风格的文本，一边能精准执行 JavaScript。
解冻排版程序的权重后，随手在屏幕上画矩形框，里面的照片就能自己学会自适应布局。

当年 Karpathy 把神经网络比作 Software 2.0，意思是靠数据训练出来的软件。
现在这条路反过来了：把我们写了几十年的经典代码，编译成了神经网络能直接消化的权重。

以后的软件或许真的会切成两半：
确定的规则踏踏实实用代码写死，编译进去；
那些模糊复杂的现实世界，留给训练慢慢消化。

_Rendered by mubei-terminal._
