先猜,再根据错误调整
这个小模型练习三句话:“猫爱吃鱼。”“狗爱吃肉。”“鸟爱吃虫。”它从已有的字猜下一个字,再把猜测和练习里的答案比较。
点击训练,看正确答案的机会怎样变化。训练会小幅调整模型内部的数字,反复练习后,猜测通常更符合这些例句。它学到的范围很小,不代表理解所有语言。
训练会改内部数字,生成只使用已有数字。 切换到生成后,模型继续根据前面的字猜后面的字,并不会仅因继续输出就自动学会新知识。
模型怎样知道“吃”的是鱼还是肉?
- 先不训练,看看猫、狗、鸟后面各猜什么;再训练几轮,用同样输入比较。
- 看注意力图,找出哪些先前位置可以提供线索,哪些未来位置不能偷看。
- 切换生成,比较上下文变化与内部数字:继续输出时,哪些在变,哪些没有继续学习?
一次前向传播,经过了哪些部件?
进一步操作与数值核对
先在未训练状态下,分别选择猫、狗、鸟,看看预测有没有意义。再训练几轮,回到相同输入比较结果。训练损失可能在相邻步骤间波动,因为每一步看到的句子不同;更值得观察的是多轮后的整体趋势。
切换到注意力矩阵。每一行属于一个位置,它可以综合此前位置的信息,也可以关注自己,但不能偷看未来。右上角的 × 表示这些位置被因果掩码遮住。
“吃”这个位置要正确预测鱼、肉或虫,只看“吃”本身还不够。上下文中的主语提供了区分信息。注意力为跨位置交换信息提供了一种可学习方式;一格权重高,并不等于它单独解释了全部决策。
生成时,每次只生成一个字。它随后进入上下文,参与下一次预测。把温度调到 0,选择最可能的字;提高温度,概率较低的字也更容易被采到。温度改变采样规则,并没有让模型获得新知识。
想核对技术细节?
面前这个模型只看三句话:“猫爱吃鱼。”“狗爱吃肉。”“鸟爱吃虫。”它很小,却真正执行了 Transformer 的关键运算。初始化时,权重来自固定种子的随机数,并没有提前背好答案。
点击“训练 50 步”,看概率与损失变化。一次训练会先预测每个位置的下一个字,再用真实的后续字评价预测。模型给正确字的概率越低,交叉熵损失越大。
反向传播沿计算图追溯:哪些参数变化能够让这次损失降低?优化器据此小幅更新权重。很多次这样的更新,才构成“学习”。动画中的 Q 权重行、注意力矩阵和概率,都是当前模型实际计算出的值。
训练改变权重,生成使用已经得到的权重。 切换到生成模式后,继续输出并不会再做反向传播。观察权重行,它会保持原值,而上下文和下一字概率继续变化。
展开:词元、Q/K/V、前馈网络
这里用单个汉字或句号作为 token,共 9 种。每个 token 查到一个 8 维向量,再加入可学习的位置向量。
归一化后的表示分别经过三组线性变换,得到 Q、K、V。Q 与各个可见位置的 K 做点积,除以维度平方根,再经过 softmax,形成总和为 1 的注意力权重。模型用这些权重混合 V,把信息带到当前位置。
随后经过输出投影、残差连接、归一化与前馈网络,再形成词表上的预测概率。本模型使用 RMSNorm,前馈隐藏层为 16 维。结构特意保持小,便于把中间量展示出来。
展开:这与真正的大语言模型差多少?
本实验只有一层、一个注意力头和 4 字上下文。大模型通常使用更多参数、更长上下文、多头注意力、大规模数据及额外的训练和推理工程。真实 tokenizer 也不一定按单字切分。
三句话上的损失下降只能说明这个小模型学会了这组数据中的一些关系,不能证明通用语言能力或对世界的理解。样例中的动物饮食只是训练文本,不是完整的生物学陈述。
训练在本地执行,不上传输入或请求 AI 服务。推理的“冻结权重”也仅针对本实验的生成阶段;实际产品是否另外保存数据用于后续训练,是另一项独立设计。