English
AXN // CORE 0.3.1 BROWSER + NODE // SINGLE SOURCE SELF-TEST 114/114 PASS

Zero-dependency neural network framework

axon 张量、自动微分、卷积与训练循环,
全部用可读 JavaScript 手写。

同一份无依赖源码,在浏览器与 Node.js 中运行。每个核心算子都经过数值梯度校验。

01为什么做这个

现有的 JS 深度学习库基本是 TensorFlow.js / ONNX 的封装。你没法在不装依赖的前提下读懂它们的反向传播,也没法在浏览器里断点进去看梯度是怎么流回去的。

axon 想做的是另一件事:把这件事摊开给你看。

02核心机制:梯度校验内建

大多数框架验证梯度的方式是「跑起来没报错就算对」。axon 把对照数值梯度做进了库里。

// 手写新算子后,这样验证你的梯度公式
const r = checkGradient(() => myOp(a, b).sum(), [a, b]);
if (!r.passed) throw new Error(r.report);

这个机制抓到了三个静默 bug——它们都不报错,只是默默算错:matmul 权重梯度只累加了第一个输出列、优化器动量缓冲区越界、mse 求和维度错误。前向传播全都正确,只有数值梯度能发现。

为什么这比性能数字更有说服力:它证明作者真的在验证正确性,而不是让测试绿了就算完。

03训练能力

不是「跑起来没报错」,而是收敛到接近最优。npm run benchmark 可复现。

数据集准确率损失耗时
XOR(4 样本)100.0%0.00026 ms
螺旋(300 样本)100.0%0.0248223 ms
高斯簇(400 样本)100.0%0.00049 ms

线性回归可精确逼近真值:学到 w = 2.511(真值 2.5)、b = -1.2115(真值 -1.2)。

04性能:这是刻意的取舍

纯 CPU,无 SIMD / 多线程 / WASM(Node v24 · arm64 实测,数值随机器浮动)。

运算吞吐
matmul 512×5122.36 GFLOP/s
matmul 1024×10242.30 GFLOP/s
MLP 784→128→10 单步(batch 32)7.8 ms
坦白说这个数字和 TensorFlow.js 差一个数量级——这是刻意的。 数据确实存在 Float64Array 里,但计算是标量 JS 循环:没有 WASM、没有 SIMD、没有算子融合。换来的是每一行都能读懂。 你应该用它学习原理,而不是训 ResNet。

05快速开始

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 }

06已实现

张量与卷积

加减乘除、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。

07路线图

已完成:层与 Sequential、优化器、损失函数、训练循环、基准测试(v0.2.0),浏览器端 demo(v0.2.1),LayerNorm、Embedding、MultiHeadAttention、TransformerBlock(v0.3.0),XOR 与线性回归浏览器示例、模型 JSON 序列化与加载(v0.3.1);conv2d 批次维度已完成并通过 114 项测试,待随下个版本发布。

参与贡献:如果你实现了新算子,请务必附上梯度校验用例——这是本项目唯一的质量底线。