微 GPT

微 GPT

Hacker News 摘要

原标题:Microgpt

microgpt 项目概况

microgpt 是由 Andrej Karpathy 发起的一个艺术项目。它是一个仅有 200 行纯 Python 代码的单个文件,没有任何第三方依赖。这个文件完整包含了训练和运行一个 GPT 模型所需的全部算法内容,包括数据集处理、分词器、自动微分引擎、类似 GPT-2 的神经网络架构、Adam 优化器、训练循环以及推理循环。

作者认为该脚本是多年来简化大语言模型(LLM)研究的结晶,将模型精简到了最本质的程度。

数据集

大语言模型的核心是文本流数据。在生产级应用中,这些数据通常是网页内容,但在 microgpt 中,作者使用了一个简单的示例:包含 32,000 个名称的列表,每行一个名称。

模型的目标是学习这些名称中的统计模式,然后生成类似的新名称。从模型的视角来看,即使是与 ChatGPT 的对话也被视为一种特殊的文档,模型的工作就是对文档进行统计学上的续写。

分词器(Tokenizer)

神经网络处理的是数字而非字符,因此需要将文本转换为整数类型的令牌(Token)编号。

1. 实现方式:由于项目追求极简,它采用最简单的字符级分词,为数据集中的每个唯一字符分配一个整数。

2. 词表构成:除了 26 个小写字母外,还引入了一个特殊的 BOS(序列开始)令牌,用于标记文档的开始和结束。

3. 结果:最终的词表大小为 27。

自动微分(Autograd)

训练神经网络需要梯度,即了解调整某个参数会对最终损失产生多大影响。

1. Value 类:脚本实现了一个 Value 类来封装单个标量数值。它不仅记录数值本身,还记录该数值是如何计算出来的(父节点)以及其对应的梯度。

2. 反向传播:利用微积分中的链式法则,从最终的损失函数开始逆向遍历计算图,计算出损失对每个模型参数的导数。

3. 操作支持:该引擎支持加法、乘法、幂运算、对数、指数以及 ReLU 激活函数。

模型参数

参数是模型的知识储备。它们最初是随机的浮点数,在训练过程中不断优化。

1. 结构:参数被组织成不同的矩阵,包括嵌入表、注意力权重、多层感知机(MLP)权重和最终的输出投影层。

2. 规模:这个微型模型拥有 4,192 个参数。相比之下,GPT-2 有 16 亿个参数,而现代大语言模型则拥有数千亿个参数。

核心架构

模型遵循 GPT-2 的设计,并进行了简化,例如使用 RMSNorm 代替 LayerNorm,不使用偏置项,以及使用 ReLU 代替 GeLU。

1. 线性层:最基础的构建模块,执行学习到的线性变换(矩阵与向量乘法)。

2. Softmax:将原始得分转换为概率分布,使所有值处于 0 到 1 之间且总和为 1。

3. 嵌入层:将令牌编号和位置编号转换为向量,这些向量包含了令牌是什么以及它在序列中位置的信息。

4. 注意力模块(Attention):这是令牌之间相互通信的机制。通过查询(Q)、键(K)和值(V)的计算,当前位置的令牌可以查看并获取序列中之前位置的信息。

5. 多层感知机(MLP):这是一个两层的全连接网络,是模型在每个位置进行计算和处理信息的地方。

6. 残差连接:将模块的输出加回到输入中,这有助于梯度直接流过网络,使得深层模型更容易训练。

7. KV 缓存:在训练和推理过程中缓存之前的状态,以提高效率。在 microgpt 中,这些缓存的节点也是计算图的一部分,参与反向传播。

训练过程

训练循环通过不断重复以下步骤来运行:

1. 分词:取出一个名称并在两端加上 BOS 令牌。

2. 前向传播与损失计算:逐个输入令牌,预测下一个令牌,并计算模型预测与真实令牌之间的交叉熵损失。损失值衡量了模型对实际结果的惊讶程度。

3. 反向传播:调用 loss.backward() 计算所有参数的梯度。

4. Adam 优化器更新:根据梯度更新参数。Adam 优化器通过维护梯度的均值(动量)和平方均值(自适应学习率)来智能地调整参数。

经过约 1,000 步训练,损失会从随机猜测的 3.3 左右下降到 2.37 附近,表明模型已经学会了名称的统计规律。

推理(生成)

训练完成后,可以冷冻参数并从模型中采样生成新名称。

1. 过程:从 BOS 令牌开始,让模型预测下一个令牌的概率分布,从中随机采样一个令牌,再将其作为输入反馈给模型,循环往复直到再次生成 BOS 或达到最大长度。

2. 温度系数(Temperature):这是一个控制创造力的参数。较低的温度(如 0.5)会让分布更尖锐,使模型更倾向于选择高概率令牌,结果更保守;较高的温度则会让结果更多样,但也可能降低连贯性。

与生产级模型的区别

虽然算法本质相同,但生产级模型(如 ChatGPT)在以下方面有所不同:

1. 数据与分词:生产模型使用数万亿令牌的互联网数据,并采用更高效的子词分词技术(如 BPE)。

2. 计算效率:生产系统在 GPU/TPU 上使用张量(多维数组)进行并行计算,并使用专门的 CUDA 内核。

3. 规模:现代模型的维度更宽、层数更深,包含更多的技术变体(如 RoPE 旋转位置编码、GQA 分组查询注意力等)。

4. 后处理:基础模型只是文档续写器。要变成聊天机器人,还需要经过监督微调(SFT)和强化学习(RL)。

常见问题

1. 模型是否真的理解? 从机械角度看,它只是一个将输入映射为概率分布的大型数学函数。它通过调整参数来捕获数据中的统计规律,而非学习显性规则。

2. 什么是幻觉? 幻觉源于模型是根据概率分布采样生成的。它没有真实的概念,只能生成在统计上听起来合理的序列。如果生成的内容在现实中不存在,就表现为幻觉。

3. 如何提升效果? 增加训练时长、扩大模型规模(增加层数或维度)或使用更大的数据集是提升模型效果的核心手段。


原文:http://karpathy.github.io/2026/02/12/microgpt/

评论:https://news.ycombinator.com/item?id=47202708

Report Page