FFN 前馈网络:逐位加工与专家存储
本文基于模型知识整理(生成时未联网核对),FFN 研究建议对照 "Transformer FFN's Key-Value Memory"(Geva et al. 2021)复核。
一句话定义
FFN 是 Block 内的逐 token 两层 MLP:$FFN(x)=W_2\,\sigma(W_1x+b_1)+b_2$(常带升维 4 倍中间层)——注意力负责 token 间混合,FFN 负责 token 独立的非线性加工;近年研究认为它是模型的"知识存储器"(事实与模式以键值对形式存在于此)。
为什么重要
FFN 占 Transformer 参数的约 2/3——是参数大头与"知识"的主要储藏地(模型编辑研究:改 FFN 权重可改写模型记住的事实)。MoE(kp-022)替换的正是 FFN;激活函数的演化(ReLU→GELU→SwiGLU)也发生在这里。不懂 FFN,就无法理解参数量、知识与 MoE。
前置知识
kp-006(Block 结构);两层 MLP 的基本概念。
核心概念
- 标准结构:升维(d→4d)→ 非线性 → 降维(4d→d),逐 token 独立作用(无跨 token 混合)。位置-wise:同样的 MLP 套在每个位置上。
- 激活函数演化:ReLU → GELU(平滑版 ReLU,BERT/GPT-2)→ SwiGLU(Llama 系:门控线性单元 $\sigma(W_1x)\otimes W_3x$,三矩阵结构、同参数量下更优——现代默认)。
- 知识存储假说(Geva 2021):第一层 W₁ 是"键"(检测输入的模式/主题),第二层 W₂ 是"值"(存储对应的输出知识)——"凯撒大帝生于罗马"类事实被分散编码为键值对;模型编辑(ROME/MEMIT)直接改写这些键值。
- 参数大头:标准 4 倍升维下 FFN 参数 ≈ 8d²/层 vs 注意力 ≈ 4d²/层——FFN 占 2/3;MoE 的"专家"就是并联的多组 FFN(kp-022)。
- SwiGLU 的维度调整:三矩阵结构下为保持参数量,中间维常取 8d/3 再取整到 8 倍数(Llama 的 hidden 11008 即此)。
原理与机制
为什么"混合"与"加工"要分离:注意力的 softmax 是对 token 的加权——若把非线性加工混进注意力,权重与加工互相纠缠难以优化;分离后注意力专注"路由"(谁的信息流向谁)、FFN 专注"计算"(信息如何变换)——职责单一化是训练稳定与缩放友好的深层原因之一。
为什么知识住在 FFN:事实检索是"模式→补全"的映射,恰好是两层 MLP 的表达形(键匹配+值输出);模型编辑实验(改 FFN 即改事实)与"知识神经元"探针研究支持此假说。注意力的角色则是"在上下文中路由这些知识"。
升维为什么是 4 倍:经验起点(原论文)+ 扩容提高单层容量;SwiGLU 时代在等参数约束下调整为 8/3 倍——"4"是历史惯性而非理论必然,缩放定律(kp-015)给过 d_ff/d 比例的建议。
图示
标准FFN: FFN(x) = W₂·σ(W₁x + b₁) + b₂ (d→4d→d)
SwiGLU: FFN(x) = (Swish(W₁x) ⊗ W₃x)·W₂ (三矩阵, Llama系)
角色分工: 注意力=token间路由 ; FFN=token内计算/知识
知识假说: W₁=键(模式检测) , W₂=值(知识补全)
参数占比: FFN ≈ 2/3 总参数 (MoE 替换对象 kp-022)
直观类比
Block 像"编辑部":注意力是"圆桌会议"(记者互相通气),FFN 是"每位记者回到工位独自写稿"(查资料、调用知识、成文)。FFN 的 4 倍中间层像"大书架"——模型记住的事实摆在书架上,会议(注意力)决定这页稿子去书架取哪本书。
实例或案例
- ROME 模型编辑:定位"凯撒死于…"相关事实的 FFN 层与键值,直接改 W₂ 一行即可改写模型记忆——知识存储假说的实验证明。
- Llama 的 SwiGLU:所有现代开源模型跟进——激活函数演化的当代定局。
- MoE:8 个专家 FFN 按路由器激活 2 个——参数巨大、计算稀疏(kp-022)。
常见误区
- 误区一:"FFN 不重要,注意力才重要"。FFN 占参数 2/3 且承担知识存储;"注意力 hype"掩盖了 FFN 的容量角色。
- 误区二:"FFN 内部有 token 间交互"。完全没有——FFN 对每个位置独立同函数作用;混合只发生在注意力(kp-006 的分工纪律)。
- 误区三:"激活函数随便选"。GELU/SwiGLU 与 ReLU 在深模型中的训练稳定性与最终质量有实测差异——现代配方选 SwiGLU 是有实验背书的。
与其他知识点的关系
自测题
- 写出标准 FFN 公式与典型中间维倍数。
答:$W_2\sigma(W_1x+b_1)+b_2$,中间维 4d(SwiGLU 时代 8d/3 取整)。
- "知识存储在 FFN"的证据是什么?
答:模型编辑实验(ROME/MEMIT 定位改写 FFN 键值即改事实)+ 键值记忆假说的探针分析。
- SwiGLU 与标准 FFN 的结构差异?
答:门控版 $(Swish(W_1x)\otimes W_3x)W_2$——三个矩阵、门控相乘,等参数下实测更优。
延伸阅读
- Geva 等, "Transformer FFN Layers Are Key-Value Memories"(EMNLP 2021)。
- Shazeer, "GLU Variants Improve Transformer"(2020,SwiGLU 出处)。
- Meng 等, "Locating and Editing Factual Associations in GPT"(NeurIPS 2022,ROME)。