语言模型与架构模块三 · Transformer 结构组成代码约 14 分钟
Transformer 全貌:一层里到底有什么
把注意力、FFN、残差、归一化拼成一块「积木」
学完这节你能:
- 说出 Transformer 一层的组成
- 理解残差连接与层归一化的作用
- 区分编码器层与解码器层
Transformer 由多层相同的「积木」堆叠而成。每一层有两个子层:多头自注意力 + 前馈网络(FFN),每个子层都配残差连接和层归一化。
- 输入编码:token → embedding,加/融入位置编码。
- 子层 1:多头自注意力(让词与词交互)。
- 子层 2:前馈网络 FFN(对每个位置独立做非线性变换,通常先升维再降维)。
- 每个子层外面包:残差连接(x + 子层(x))+ 层归一化,保证深层也能稳定训练。
🔑 残差连接让梯度有「高速公路」直达浅层,缓解深层退化;层归一化稳定每层激活的分布。两者是深层网络能训起来的关键。
| 编码器层 | 解码器层 | |
|---|---|---|
| 自注意力 | 双向(看全句) | 因果掩码(只看左边) |
| 交叉注意力 | 无 | 有(关注编码器输出) |
| 典型用途 | 理解 | 生成 |
自测关于 Transformer 一层的结构,正确的是:
// 带走一句话
Transformer 一层=多头自注意力+FFN,每子层外包残差+层归一化;编码器双向、解码器因果掩码。
独立练习
做到这些,才算完成本节
- 画出 Pre-Norm 因果解码器单层数据流,逐处标记残差张量形状。
- 删除因果掩码运行一个最小例子,证明当前位置能够读取未来 token。
- 在本地运行代码,打印每个关键张量的 shape。
- 关闭示例后从空文件重写核心部分,并补一个异常或边界测试。
学习记录
记录本节阅读进度
建议先独立回答自测。读完记录不等于已经掌握。