迷你 Transformer 训练一步
前向
加载中…
…
前向数值 / 权重:负 ← 0 → 正(越凸越大)
梯度 ∇:负 ← 0 → 正
▲▼这一格变大 / 变小(箭头越大,在这一块里改得越多)
■ 蓝框 输入 ■ 黄框 权重 ■ 粉框 梯度 ■ 白框 正在算的输出
每一块的颜色按它自己的最大值定深浅,从头到尾不变,所以同一个数前后颜色一样(表格上写着“满色 = ±多少”)。表格里的 0 是真的 0;像 0.0034 这样的是很小,但不是 0。
操作:拖动旋转 · 滚轮或双指缩放(也可以点右下角 + −)· 点任意方块看它的数值。
训练视图四列从左到右:权重 | 前向张量 | 梯度 ∇ | ∇权重。每个 ∇ 和它对应的那块形状一模一样。
和 stories15M / run.c 的 5 处差别
- 位置:这里一开始加一张位置表 P。stories15M 没有这张表,位置是在每一层对 q、k 做 RoPE 旋转。
- 权重的横竖:训练视图画成“输入 × 输出”(X·W,一列 = 一个输出)。run.c 存成“输出 × 输入”(一行 = 一个输出,下标 w[i*n+j]),比如 w1 是 768 行 × 288 列。个数一样,下标相反。“推理 · run.c”里就是按 run.c 画的。
- 输出层:stories15M 的 wcls 就是 token_embedding 那一块(共用内存);这里 Wout 单独一块。共用的话,∇E 会从查表和输出层两头各拿到一份梯度。
- 规模:这里单头、1 层;stories15M 是 6 头、6 层,dim 288,hidden_dim 768,词表 32000。
- norm:这里和 llama2.c 一样用 RMSNorm;你图里的 LayerNorm 还会先减平均值、再加一个偏置。