术语表
这里列出教程中反复出现的词。全站固定使用这些中文说法,括号内是第一次出现时的英文。
数据与分词
| 术语 | 解释 |
|---|---|
| 词元(token) | 分词器输出的最小单位,最终表示为整数编号。一个词元可能是一个词、一个词的一部分、一个字节或一个特殊标记。 |
| 分词器(tokenizer) | 把文本和词元序列互相转换的程序。nanochat 用 BPE 训练词表,用 tiktoken 做快速编码。 |
| 字节对编码(BPE) | 一种从语料中学习合并规则的分词方法。先切分文本,再反复合并高频相邻单位。 |
| 特殊词元 | 不属于普通文本的词元,例如 `< |
| 词表(vocabulary) | 所有可用词元的集合。nanochat 默认有 32768 个词元。 |
| 词表大小(vocab size) | 词表中词元的数量。模型输出层的维度必须和它一致。 |
| BOS | beginning of sequence,序列开始。nanochat 在每个文档或对话开头放 `< |
| 输入(inputs) | 模型看到的词元序列,形状为 (B, T)。 |
| 目标(targets) | 每个位置要预测的下一个词元,和输入错开一位。 |
| 填充(padding) | 为凑齐固定长度而加入的词元。SFT 用 BOS 填充,并把填充位置的损失屏蔽。 |
| 截断(truncation) | 把超长文本切到固定长度。预训练会截断文档,SFT 不截断对话。 |
| 分片(shard) | 数据集的一个文件。nanochat 的预训练数据是多个 Parquet 分片。 |
| 行组(row group) | Parquet 文件内部的分块,可以按组读取,不必一次读完整个文件。 |
模型结构
| 术语 | 解释 |
|---|---|
| Transformer | 由注意力和多层感知机堆叠而成的神经网络结构。nanochat 使用只含解码器的版本。 |
| 词嵌入(embedding) | 把词元编号映射为向量的查找表。 |
隐藏维度(hidden dimension,C) | 每个词元在模型内部被表示成多长的向量。 |
| 注意力(attention) | 让当前位置根据 Query 和历史的 Key 计算权重,再对 Value 加权求和的结构。 |
| 查询、键、值(Query、Key、Value) | 注意力中的三组向量。查询表示“我要找什么”,键表示“我有什么标签”,值表示“我携带什么内容”。 |
| 多头注意力(multi-head attention) | 并行使用多组 Q/K/V,让模型学习多种关注方式。 |
| 因果掩码(causal mask) | 遮住未来位置,保证当前位置只能看到过去。 |
| 滑动窗口(sliding window) | 只允许回看固定长度上下文,减少长序列计算量。 |
| 旋转位置编码(RoPE) | 通过对 Q/K 做旋转注入相对位置信息的方法。 |
| 残差连接(residual connection) | 把子层输入直接加到子层输出上,帮助信息和梯度流通。 |
| RMSNorm | 一种归一化方法。nanochat 使用不带可学习参数的 RMSNorm。 |
| 多层感知机(MLP) | 对每个位置独立作用的两层线性变换,中间使用 ReLU 平方。 |
| GQA | Grouped-Query Attention,多个查询头共享一组键值头,减少键值缓存。 |
| logits | 模型输出层产生的原始分数,尚未经过 softmax。 |
| softmax | 把一组分数转换成总和为 1 的概率分布。 |
| logit softcap | 用 tanh 平滑限制 logits 范围,提升数值稳定性。 |
| 模型深度(depth) | Transformer 块的数量。nanochat 用它推导宽度、头数和训练预算。 |
训练
| 术语 | 解释 |
|---|---|
| 预训练(pretraining) | 在大规模普通文本上训练模型预测下一个词元。 |
| 基础模型(base model) | 预训练得到、尚未做对话微调的模型。 |
| 监督微调(SFT) | 用带标准答案的对话数据继续训练基础模型。 |
| 强化学习(RL) | 根据模型输出获得的奖励调整策略。nanochat 仅在 GSM8K 上使用。 |
| 损失(loss) | 衡量模型预测与正确答案差距的数值。训练通过降低损失更新参数。 |
| 交叉熵(cross entropy) | 衡量预测概率分布与正确类别差距的损失函数。 |
| 梯度(gradient) | 损失对参数的导数方向,指示参数应该往哪个方向调整。 |
| 反向传播(backpropagation) | 从损失往回计算各层梯度的过程。 |
| 优化器(optimizer) | 根据梯度更新参数的算法。nanochat 组合使用 AdamW 和 Muon。 |
| AdamW | 使用一阶矩、二阶矩和权重衰减的优化器。 |
| Muon | 对二维矩阵更新做近似正交化的优化器。 |
| 学习率(learning rate) | 每次参数更新的步长。 |
| 预热(warmup) | 训练初期逐步增大学习率。 |
| 权重衰减(weight decay) | 把参数往零拉的正则化手段。 |
| 批量(batch) | 一次参数更新使用的样本集合。 |
| 梯度累积(gradient accumulation) | 连续多次前向和反向,把梯度累加后再更新一次参数。 |
| 步(step) | 一次参数更新。 |
| 轮(epoch) | 完整遍历一次训练数据。 |
| 检查点(checkpoint) | 保存到磁盘的模型参数、优化器状态和训练信息。 |
| 模型标签(model tag) | 检查点目录名,例如 d4-demo,用于区分不同训练配置。 |
| 缩放规律(scaling law) | 描述模型规模、数据量、计算量和效果之间关系的经验规律。 |
| 计算最优(compute-optimal) | 在给定计算预算下,让模型规模和数据量达到合适比例。 |
| MFU | Model FLOPs Utilization,模型浮点运算利用率,衡量硬件利用效率。 |
| FP8 | 8 位浮点精度,只有部分新 GPU 支持训练,用于加速和降低显存。 |
| ZeRO-2 | 分布式训练中把优化器状态分片到各张卡的方法。 |
评估与推理
| 术语 | 解释 |
|---|---|
| 每字节比特数(BPB) | 按字节归一化的预测损失,越低越好,便于比较不同分词器。 |
| CORE | 基础模型在多个上下文学习任务上的中心化平均分。 |
| ChatCORE | 对话模型在 ARC、MMLU、GSM8K、HumanEval 等任务上的中心化平均分。 |
| 上下文学习(in-context learning) | 不更新参数,仅凭提示中的例子完成任务。 |
| 推理(inference) | 使用训练好的模型生成输出。 |
| 预填充(prefill) | 一次处理完整提示并建立键值缓存的阶段。 |
| 逐词元生成(decode) | 每次只处理一个新词元,读取历史缓存。 |
| 键值缓存(KV Cache) | 保存每层历史 Key 和 Value,避免重复计算。 |
| 贪心解码(greedy decoding) | 每步选择分数最高的词元,温度为 0。 |
| 温度(temperature) | 缩放 logits,控制采样随机性。 |
| top-k | 只保留分数最高的 k 个候选再采样。 |
| 随机种子(seed) | 控制随机数生成,使采样可重现。 |
| 预填充-解码 | 推理的两个阶段,先处理提示,再逐个生成。 |
| pass@k | 生成 k 个回答,至少一个正确的概率。 |