想分享一个小成就。过去一个月我一直在白板和笔记本上涂涂画画,试图理解…

X AI KOLs Timeline 工具

摘要

一位开发者用TypeScript从头构建了一个Transformer模型,包括自定义的自动求导引擎,并将其作为开源教育工具发布在GitHub上。

想分享一个小成就。过去一个月我一直在白板和笔记本上涂涂画画,试图理解现代LLM的工作原理,我想一路解决每个遇到的问题,并沿着同样的步骤走下来。 今天我终于有了一个可以工作的模型——完全用TypeScript从头编写。没有使用任何库,没有PyTorch,纯粹用TypeScript,从简单的矩阵乘法到完整的Transformer模型,核心运行着我自己的自动求导引擎,全部由我亲自编写。 我在文本上训练它,观察损失从5.1下降到0.2。它真的在学习。 分享仓库链接给好奇的人。transformer-ts, https://github.com/henit-chobisa/transformer-ts… 非常感谢@karpathy的视频作为我一直在参考的指南。
查看原文
查看缓存全文

缓存时间: 2026/06/27 09:54

想分享一个小小的成就。过去一个月,我一直在白板和笔记本上涂涂写写,试图理解现代大语言模型的工作原理,并且打算顺着这条路,逐一攻克每个随之而来的问题,一步步走完相同的历程。

今天,我终于有了一个可工作的模型——完全用 TypeScript 从零手写。没有库,没有 PyTorch,只有纯粹的 TypeScript,从简单的矩阵乘法到一个可运行的 Transformer 模型,核心是我自己实现的自动求导引擎,全部由我独自完成。 用它训练了文本,并观察到损失从 5.1 降到了 0.2。它真的能学习。

给好奇的朋友们分享仓库链接。transformer-ts,https://github.com/henit-chobisa/transformer-ts…

特别感谢 @karpathy 的视频,这是我一路遵循的参考。


henit-chobisa/transformer-ts

来源:https://github.com/henit-chobisa/transformer-ts

transformer.ts

一个用 TypeScript 从零构建的 Transformer。没有 PyTorch,没有 NumPy,没有机器学习库——只有纯数字、梯度和大量的注释。

我构建它的目的是理解 Transformer 的实际工作原理。不是为了使用一个,而是亲手打造每一个组件——从自动求引引擎一直到一个能训练的模型。如果你从头到尾阅读源码,注释就像是写给未来自己的笔记。

而且它确实有效:在 "hello world" 上训练,损失从 5.13 降到 0.23。整个模型是端到端可微的,每个梯度都由我编写的代码计算得出。

逐层构建

每个组件只依赖于它上层的组件。这就是全部的学习路线图。

Value 一个自动求导引擎 —— 一个记住自己来源的数值 ↓ 以便它能计算出自己的梯度(图上的反向传播) Neuron 权重 · 输入 + 偏置,通过 tanh 压缩 ↓ Layer 一排神经元 ↓ MLP 堆叠起来的层 —— 一个真正能训练的小型神经网络 ↓ operations 点积 · 转置 · 矩阵乘法 · softmax · 加法 · 拼接 ↓ 层归一化 · 交叉熵 —— 注意力所需的矩阵机制 Attention 查询 · 键转置 → softmax → 加权值。单头,单个模式 ↓ MultiHead 多个头并行,拼接后映射回来 + Embedding ID → 向量,加上学习到的位置表,让顺序有意义 ↓ TransformerBlock 注意力 + 残差 + 层归一化 + MLP + 残差 + 层归一化 ↓ Transformer 嵌入 → 模块 → 映射到词表 logits ↓ 训练 交叉熵损失,反向传播,微调每个权重。重复。

运行

pnpm install

# 在 "hello world" 上训练完整的 Transformer,观察损失下降
pnpm tsx src/examples/train-transformer.ts

# 热身:在一个玩具数据集上训练 MLP
pnpm tsx src/examples/train-mlp.ts

# 运行测试
pnpm test

文件结构

路径说明
src/grad/Value —— 自动求导引擎及其反向传播
src/operations/dotProduct, transpose, matmul, softmax, concat, layernorm, crossEntropyLoss
src/layers/Neuron, Layer, MLP, Attention, MultiHeadAttention, Embedding, PositionalEncoding, TransformerBlock, Transformer
src/examples/可运行的示例 (train-transformer.ts, train-mlp.ts)
notes/我一路走来手写的笔记

每个文件在其 __test__/ 文件夹中都有对应的测试——操作和层在堆叠之前各自都经过了检查。

训练方式

示例代码以字符串作为输入,每次一个字符。每个输入 token 的任务是预测下一个 token,因此 "hello world" 变为 inputIds(除最后一个字符外的所有字符)和 targetIds(除第一个字符外的所有字符)。然后是常规循环:前向传播得到 logits,与目标计算交叉熵,backward() 填充每个梯度,然后沿着梯度下降方向更新每个参数。一百步之后,模型已经记住了这个字符串。

笔记

notes/ 文件夹中是手算的数学推导——导数、链式法则、反向传播的拓扑排序。代码是这些涂鸦的精简版本。

为学习而构建。故意放慢速度。

相似文章

@reach_vb: https://x.com/reach_vb/status/2057880274348695995

X AI KOLs Following

一名用户演示了使用OpenAI的Codex自动生成一个Colab笔记本,该笔记本在JAX/Flax/Optax中训练一个约1000万参数的transformer进行加法运算,在T4 GPU上经过4000步后达到了高准确率。