nanoGPT:看懂一句话怎样生成
先在三维图里看每一步怎么算,再试着生成一句话。
此刻
蓝色线:数据向前流动粉色线:把输入加回新结果每行对应一个字;鼠标移到小格上可查看数值。
怎么做
- 先看三维计算每行对应一个字。点“下一步”,看这一行怎样经过注意力与前馈等计算。
- 再试着生成在图下方输入半句话。每点一次“生成下一个”,接上一个 Token,三维图同步更新。
会骗你
- 字级模型只是本页的选择Token 不一定等于一个汉字或一个单词,具体切法取决于模型的词表。
- 调温度不会核实事实它调整候选概率;本页未勾选“按概率抽取”时,总选概率最高的一项。
模型权重已训练好,当前输入的前向计算在浏览器里执行。这个迷你模型用于理解机制,不用于回答知识问题。
文字版:nanoGPT在做什么
大模型生成一句话,其实是一个字一个字地选出来的:每一步都算出下一个字的概率分布,挑一个,再把它接回去算下一个。这一页先让你看这个选择过程,再进三维图里看清每一步矩阵运算的真实数值——一个两层的小型 GPT,41 步走完一次完整推理。
画面上正在发生什么
三维图从下往上是完整的数据流:字先查字表得到嵌入向量、加上位置信息,然后进入两层 Transformer。每一层内部的顺序是:归一化 → 算出 Q/K/V → 两个注意力头各自计算 → 拼接 → 乘 W_o → 加回残差 → 再归一化 → 前馈网络(扩展到 128 维再压回来)→ 再加回残差。最后一次归一化,乘回字表,得到每个字的概率。
粉色的线是残差捷径——它把这一层的输入原样加回到输出上,和 ResNet 里的捷径是同一个思路。注意力那一步最值得细看:点某一行的字,可以跟着它走完全程,看它在计算时给其他哪些字分配了权重。每个小方块都是一个真实的数,鼠标移上去能看具体数值。
什么时候它会骗你
- 这是一个教学规模的小模型。两层、两个头、32 维特征,和真实的大模型差着好几个数量级。结构是对的,规模不是。真实模型的涌现能力来自规模,在这里看不到。
- 注意力权重不是解释。看到某个字对另一个字权重高,很容易解读成「模型关注了它因为它重要」。但大量研究表明注意力权重和模型实际依赖的信息并不总是一致,它是可视化的线索,不是因果解释。
- 采样方式会明显改变输出。同一个概率分布,每次都取最高概率的字(贪心)会得到确定但单调的文本;按概率随机采样则更多样但可能跑偏。温度、top-k、top-p 这些参数控制的都是这一步,和模型本身无关。
常见问题
- 自注意力到底在算什么?
- 每个位置都生成三个向量:查询 Q、键 K、值 V。用自己的 Q 和所有位置的 K 做点积,得到对每个位置的关注程度,归一化成权重后,按权重把所有位置的 V 加权求和,作为这个位置的新表示。一句话说:每个字根据和其他字的相关程度,重新组合一遍全句的信息。
- 为什么需要多个注意力头?
- 不同的头可以学习关注不同类型的关系——有的关注邻近的词,有的关注句法上相关的词,有的关注远距离的指代。单个头只能表达一种加权方式,多个头并行计算再拼接,表达能力显著更强。
- Transformer 为什么需要位置编码?
- 因为自注意力本身对顺序完全不敏感:打乱输入顺序,每个位置算出来的结果只是跟着换位置,内容不变。而语言的顺序显然有意义,所以必须显式地把位置信息加进嵌入里,模型才能区分「猫追狗」和「狗追猫」。
本页为两层小型 GPT 的真实推理过程,所有矩阵数值由页面当场计算;模型规模远小于实用大模型,不代表其能力或推理耗时。