04 Transformer Block:GPT 的基本积木
- 理解一个 GPT block 的组成。
- 知道残差连接和 LayerNorm 的作用。
- 会用 JS 跑一次简化 block forward。
Transformer Block 像一条加工线:先让 token 交换上下文信息,再让每个 token 独立做非线性变换。残差连接负责保留原信息,LayerNorm 负责让数值更稳定。
一个简化 decoder block:
x↓ causal self-attentionx + attention(x)↓ LayerNorm↓ FFNx + ffn(x)↓ LayerNorm真实 GPT 还会有多头拆分、投影矩阵、dropout 和更复杂的归一化位置。
参考项目里的对应实现思路
Section titled “参考项目里的对应实现思路”build-nanogpt 从 class GPT(nn.Module) 开始,把 embedding、block、lm head 拼起来。llm.c 则展示这些模块落到底层数组和循环时是什么样。
最小代码实验
Section titled “最小代码实验”源码:labs/04-transformer-block/index.mjs
这个实验把一层 decoder block 拆成 attention、残差、LayerNorm 和 FFN 的顺序执行。
运行命令与预期输出
Section titled “运行命令与预期输出”运行:
npm run lab:04输出是每个 token 经过一层 block 后的新向量。重点看代码顺序,而不是数值本身。
- FFN 不是处理整个句子的网络,它对每个位置单独应用。
- 残差不是可选装饰,它对深层网络稳定训练很关键。
- LayerNorm 不改变序列长度,只改变每个向量的数值分布。