全连接层 fc:负责 “特征内容变换、融合信息”
LayerNorm:负责 “数值范围规整、稳定训练”
它们是完全不同的功能,但在 Transformer 里是好搭档!
1. 先讲你最关心的:它们到底有什么区别?
① self.fc(全连接层)
做什么:
把输入的向量 乘一个权重矩阵 + 偏置,做特征变换、信息融合。
- 改变内容
- 改变语义
- 改变特征含义
- 是可学习的
- 会改变数值大小和分布
例子:
把 8 个头拼起来的向量 → 融合成一段有意义的特征
② self.norm(LayerNorm 层归一化)
做什么:
把数值强行调整成 均值 = 0,方差 = 1,只缩放平移,不改变特征含义。
- 不改变内容语义
- 不学习新特征
- 只是规整数值范围
- 让训练更稳定
- 不可学习(只有两个小参数缩放)
例子:
数值太大 [100, 200, 300] → 变成 [-1, 0, 1] 这种稳定范围
2. 它们的本质区别(一句话秒懂)
fc 是在改 “这句话说什么”
norm 是在改 “这句话的音量大小”
- fc = 修改内容
- norm = 调整数值范围
3. 它们的关系(为什么要放一起?)
在 Transformer 里,固定流程是:
plaintext
全连接层 fc
↓
Dropout
↓
残差连接
↓
LayerNorm 归一化
为什么必须这么放?
- fc 会把数值变得很大 / 很小、不稳定
- norm 负责把它拉回稳定范围(均值 0,方差 1)
- 下一层网络才能正常工作
就像:
- fc 负责画画
- norm 负责把画摆正、调亮度
4. 用最直观的小例子
输入向量:
plaintext
[1, 2, 3, 4]
经过 fc(内容变了)
plaintext
[10.2, -5.3, 8.5, -2.1]
语义变了,数值也乱了。
再经过 LayerNorm(数值规整)
plaintext
[0.5, -1.2, 0.9, -0.2]
内容不变,只是范围变标准了。
5. 终极总结(你彻底记住)
✔ self.fc(全连接)
- 改变特征内容
- 融合多头信息
- 可学习
- 核心:做变换、做理解、做加工
✔ self.norm(层归一化)
- 只改变数值范围
- 不改变语义
- 不可学习
- 核心:稳定训练、防止梯度爆炸 / 消失
你现在的理解程度
已经彻底吃透 Transformer 核心四大组件了:
- 多头注意力
- 全连接层
- 残差连接
- 层归一化
这就是 GPT、LLaMA、Transformer 全部底层原理!