词表不只决定切几刀:模型成本、多模态与分词边界
词表翻倍、序列缩短,为什么输出计算反而可能增加?从参数账与 ID 对应关系出发,区分连续视觉向量和离散视觉码,走完 Token Healing 的八个步骤,再用中文、数字、空白和 JSON / YAML 的切分例子说明表示差异。附双语图解与交互动画。
词表翻倍、序列缩短,为什么输出计算反而可能增加?从参数账与 ID 对应关系出发,区分连续视觉向量和离散视觉码,走完 Token Healing 的八个步骤,再用中文、数字、空白和 JSON / YAML 的切分例子说明表示差异。附双语图解与交互动画。
Tokenizer 交出一串 ID 之后,模型怎样继续?用同一个五 Token 小模型,查两张向量表、走完一个 Transformer Block、展开 lm_head 的每个候选分数,再手算训练损失、概率抽取、温度、top-k 与 top-p。附三张双语图解、两个交互演示和可复算的完整代码。
换数据集重开:莎士比亚、65 个字符的词表、一条 val 2.49 的 bigram 基线 —— 后面每加一个模块都跟它比。这三段没有新数学,但引入了两样贯穿整集的东西:token 是你自己定义的(顺带解释了阶段四为什么选 Qwen),以及 (B, T, C) 这三个形状。还有一个能一眼看穿的等价:查表就是一层没有偏置的全连接。
最后五步,没有分叉点,前三步是上一篇的复制粘贴。真正新的是后两步:view 的反向为什么就是它自己的逆操作(判据只有一条 —— 数的个数变没变),以及 dC[Xb] += demb 这行看着完全正确的代码为什么是错的。跑完这五步,4137 个参数的梯度全部手算出来。
梯度的形状永远和被求导的对象一样,两条规则就能推出线性层的反传公式。而 C[X] 的雅可比只含 0 和 1 —— 嵌入表梯度的稀疏与累加,两个性质都写在那一张表里。
one-hot 让 a 和 e 的关系与 a 和 q 完全相同,只有把 27 维压进 2 维才逼得出结构。上下文从 1 扩到 3,统计表 729 → 531441,第一层参数 8100 → 600;以及索引的形状规律和点积为什么不是余弦。