目录
Transformer Block 中参数最多的部分往往不是 Attention,而是 FFN。它对每个 Token 独立使用同一套参数,内部先扩展维度,再压回模型维度。
Attention 负责跨 Token 取信息,FFN 负责在每个位置上把信息变换成新的特征。
1、经典 FFN:升维再降维
经典形式可写成 FFN(x)=W2·activation(W1·x)。第一层把 d_model 扩展到更宽的 d_ff,激活函数加入非线性,第二层再投影回 d_model。
它逐 Token 工作:不同位置不直接交流,但所有位置共享同一组 FFN 权重。
2、为什么不能只有线性层
连续两个没有激活函数的线性变换,仍可合并成一个线性变换。加入 ReLU、GELU 或 SiLU 后,网络才能根据输入产生更复杂的分段与门控行为。
3、GLU:一条内容支路加一扇门
门控线性单元把输入投影成两条支路:一条生成内容,一条生成门值,再逐元素相乘。门值决定哪些特征通过、哪些被压低。
4、SwiGLU 的结构
SwiGLU 使用 SiLU 作为门控激活。常见形式是:
FFN(x) = W_down( SiLU(W_gate x) ⊙ (W_up x) )
它包含 gate、up、down 三个投影。为控制总参数量,隐藏宽度通常会相应调整。
5、为什么常说 FFN 存知识
一些研究发现,FFN 的神经元或参数能关联事实与模式,因此常被比喻成 Key-Value Memory。但这只是有帮助的视角,不应理解成每条知识固定存在某一个神经元里。
模型能力分布在 Embedding、Attention、FFN 和多层组合中,知识也可能冗余、纠缠并依赖上下文。
6、FFN 的主要成本
FFN 包含大矩阵乘法,参数量和计算量都很可观。MoE 正是在这里做改造:准备多个 FFN 专家,但每个 Token 只激活少数几个,以增加总参数而不同比例增加计算。
容易混淆的三件事
- FFN 不负责跨 Token 通信。
- 两个线性层之间必须有非线性才有意义。
- “知识存储”是解释视角而非精确地址。
记住这 5 件事
- FFN 逐 Token 处理
- 先扩展再压回
- 非线性不可省略
- SwiGLU 使用门控乘法
- 知识并非单点存储
参考资料
第十四课复习总图
下一课看 MoE:为什么准备很多专家,却只让每个 Token 经过其中几个?