Zero-dependency neural network framework
同一份无依赖源码,在浏览器与 Node.js 中运行。每个核心算子都经过数值梯度校验。
现有的 JS 深度学习库基本是 TensorFlow.js / ONNX 的封装。你没法在不装依赖的前提下读懂它们的反向传播,也没法在浏览器里断点进去看梯度是怎么流回去的。
axon 想做的是另一件事:把这件事摊开给你看。
大多数框架验证梯度的方式是「跑起来没报错就算对」。axon 把对照数值梯度做进了库里。
// 手写新算子后,这样验证你的梯度公式 const r = checkGradient(() => myOp(a, b).sum(), [a, b]); if (!r.passed) throw new Error(r.report);
这个机制抓到了三个静默 bug——它们都不报错,只是默默算错:matmul 权重梯度只累加了第一个输出列、优化器动量缓冲区越界、mse 求和维度错误。前向传播全都正确,只有数值梯度能发现。
不是「跑起来没报错」,而是收敛到接近最优。npm run benchmark 可复现。
| 数据集 | 准确率 | 损失 | 耗时 |
|---|---|---|---|
| XOR(4 样本) | 100.0% | 0.0002 | 6 ms |
| 螺旋(300 样本) | 100.0% | 0.0248 | 223 ms |
| 高斯簇(400 样本) | 100.0% | 0.0004 | 9 ms |
线性回归可精确逼近真值:学到 w = 2.511(真值 2.5)、b = -1.2115(真值 -1.2)。
纯 CPU,无 SIMD / 多线程 / WASM(Node v24 · arm64 实测,数值随机器浮动)。
| 运算 | 吞吐 |
|---|---|
matmul 512×512 | 2.36 GFLOP/s |
matmul 1024×1024 | 2.30 GFLOP/s |
| MLP 784→128→10 单步(batch 32) | 7.8 ms |
Float64Array 里,但计算是标量 JS 循环:没有 WASM、没有 SIMD、没有算子融合。换来的是每一行都能读懂。
你应该用它学习原理,而不是训 ResNet。
npm install github:wulier-arch/axon
也可以不用安装,直接克隆——本项目零依赖,src/ 就是全部:
git clone https://github.com/wulier-arch/axon.git
cd axon && npm test
想看更小的浏览器训练例子,可以直接打开 XOR 分类器 和 线性回归。两个页面都直接加载 src/,不经过打包器。
训练一个神经网络,11 行:
import { Linear, Sequential, Adam, Trainer, crossEntropy, accuracy, makeSpiral } from "axon-net"; const { x, y } = makeSpiral({ samples: 300 }); const model = new Sequential() .add(new Linear(2, 32, { activation: "relu", seed: 1 })) .add(new Linear(32, 2, { seed: 2 })); const trainer = new Trainer({ model, optimizer: new Adam({ lr: 0.01 }), lossFn: crossEntropy, metricFn: accuracy, epochs: 400, batchSize: 32, }); trainer.fit(x, y, y); console.log(trainer.history.at(-1)); // { epoch: 399, loss: 0.0248, metric: 1 }
加减乘除、matmul、softmax、reshape、transpose(N 维轴置换)、conv2d(单图与批次,im2col + GEMM)、池化。
反向模式,拓扑排序后逆序执行。关键区分 isGraphNode() 而非 requiresGrad,否则组合运算的梯度链会断掉。
Linear(He 初始化)、Dropout、LayerNorm、Embedding、MultiHeadAttention、TransformerBlock、Sequential;SGD / Momentum / Adam / AdamW / RMSProp / Scheduler。
softmax 先减行最大值避免溢出;crossEntropy 用 log-sum-exp;binaryCrossEntropy clamp 概率,否则一次越界损失就变 NaN。
已完成:层与 Sequential、优化器、损失函数、训练循环、基准测试(v0.2.0),浏览器端 demo(v0.2.1),LayerNorm、Embedding、MultiHeadAttention、TransformerBlock(v0.3.0),XOR 与线性回归浏览器示例、模型 JSON 序列化与加载(v0.3.1);conv2d 批次维度已完成并通过 114 项测试,待随下个版本发布。