当GPT-4被问到"法国的首都是哪里"时,它能准确回答"巴黎"。这个看似简单的过程背后,隐藏着一个深刻的问题:大模型是如何"记住"这些事实的?是参数随机分布,还是有组织的存储?
2021年,特拉维夫大学的研究团队在EMNLP上发表了一篇里程碑式的论文,揭示了一个令人惊讶的发现:Transformer中的前馈神经网络(FFN)层,本质上是一个键值存储器(Key-Value Memory)。这个发现不仅改变了我们对大模型的理解,更催生了"知识编辑"这一全新研究方向。
本文将深入剖析FFN如何存储知识、为什么中间层最重要、以及知识编辑技术如何修改大模型的记忆。
FFN在Transformer中的位置
在理解FFN如何存储知识之前,我们需要先看清它在Transformer架构中的位置。每个Transformer层由两个核心组件构成:多头注意力机制和前馈神经网络。
flowchart TB
subgraph Transformer层
A[输入] --> B[多头注意力]
B --> C[残差连接 + LayerNorm]
C --> D[FFN]
D --> E[残差连接 + LayerNorm]
E --> F[输出]
end
subgraph FFN内部结构
D --> D1[升维投影 W1]
D1 --> D2[激活函数]
D2 --> D3[降维投影 W2]
end
style D fill:#ffcdd2
style B fill:#bbdefb
FFN占据了模型参数的约2/3。以GPT-3为例,其175B参数中,FFN层贡献了超过100B的参数量。理解FFN,就是理解大模型存储知识的核心机制。
FFN的内部结构:升维与降维的舞蹈
FFN由三个关键部分组成,形成一个"升维-非线性-降维"的处理流程:
flowchart LR
A[输入 x<br/>维度: d] --> B[Up-Projection<br/>W1: d × 4d]
B --> C[激活函数<br/>ReLU/GELU/SwiGLU]
C --> D[Down-Projection<br/>W2: 4d × d]
D --> E[输出<br/>维度: d]
style A fill:#e1f5fe
style E fill:#e8f5e9
style B fill:#fff3e0
style D fill:#fff3e0
数学上,FFN的计算过程可以表示为:
$$\text{FFN}(x) = \sigma(xW_1)W_2$$其中:
- $W_1 \in \mathbb{R}^{d \times 4d}$ 是升维矩阵
- $W_2 \in \mathbb{R}^{4d \times d}$ 是降维矩阵
- $\sigma$ 是激活函数(如ReLU或GELU)
为什么是4倍升维? 这不是一个随意的选择。当使用ReLU激活函数时,大约50%的神经元会被置零。经过两层FFN后,信息损失约为 $\frac{1}{2} \times \frac{1}{2} = \frac{1}{4}$。为了补偿这个损失,升维4倍成为了一个合理的设计选择。
现代大模型(如LLaMA、Qwen)使用SwiGLU激活函数,它比ReLU更复杂,但核心思想相同:通过非线性变换引入表达能力,同时控制信息流动。
键值存储:Geva等人的关键发现
2021年,Geva、Cohen-Karlik和Globerson在论文《Transformer Feed-Forward Layers Are Key-Value Memories》中提出了一个革命性的观点:FFN可以被理解为一个键值存储器。
注意力机制 vs FFN:数学上的相似性
让我们对比一下注意力机制和FFN的计算公式:
注意力机制:
$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V$$FFN:
$$\text{FFN}(x) = \sigma(xW_1)W_2$$如果我们将$W_1$的每一列看作一个"键"(Key),$W_2$的每一行看作一个"值"(Value),那么:
$$\text{FFN}(x) = \sum_{i=1}^{4d} \sigma(x \cdot k_i) \cdot v_i$$这个过程与注意力机制惊人地相似。下面的图示展示了FFN作为键值存储的工作原理:
flowchart TB
subgraph FFN作为键值存储
X[输入向量 x] --> K1[键向量 k1]
X --> K2[键向量 k2]
X --> K3[键向量 k3]
X --> Kn[键向量 kn...]
K1 --> |相似度计算| M1[m1 = σ·k1]
K2 --> |相似度计算| M2[m2 = σ·k2]
K3 --> |相似度计算| M3[m3 = σ·k3]
Kn --> |相似度计算| Mn[mn = σ·kn]
M1 --> V1[值向量 v1]
M2 --> V2[值向量 v2]
M3 --> V3[值向量 v3]
Mn --> Vn[值向量 vn]
V1 --> S[加权求和]
V2 --> S
V3 --> S
Vn --> S
S --> O[输出]
end
style X fill:#e3f2fd
style O fill:#e8f5e9
两者的本质区别
尽管形式相似,FFN与注意力机制存在关键差异:
| 特性 | 注意力机制 | FFN |
|---|---|---|
| 键值来源 | 来自输入序列 | 固定的可学习参数 |
| 非线性 | Softmax(归一化) | ReLU/GELU(非归一化) |
| 功能 | 上下文信息聚合 | 知识存储与检索 |
| 处理方式 | 位置间交互 | 位置独立处理 |
用一个比喻来理解:注意力机制像是"邮递员",负责在不同位置之间传递信息;FFN像是"大脑皮层",存储着从训练数据中学到的知识模式。
实验验证:FFN确实在"回忆"知识
Geva等人的实验进一步验证了这个假设。他们发现:
-
键向量捕获文本模式:$W_1$中的某些列会对特定类型的输入产生强烈响应。例如,某些键向量专门响应"国家"类词汇,另一些响应"时间"类词汇。
-
值向量编码输出分布:$W_2$中对应的行编码了在给定模式下的输出概率分布。当输入是"法国"时,对应的值向量会指向"巴黎"这个词。
这个发现解释了一个长期困扰研究者的现象:为什么有限上下文窗口的模型能"记住"训练语料中的事实? 答案是:这些事实被压缩存储在FFN的参数中,而不是依赖于上下文。
知识神经元:更细粒度的理解
2022年,Dai等人在ACL上发表了《Knowledge Neurons in Pretrained Transformers》,将FFN知识存储的理解推向了更细的粒度。
flowchart TB
subgraph 知识神经元定位
A[事实: 法国-首都-巴黎] --> B[输入模型]
B --> C[因果追踪]
C --> D[识别关键神经元]
D --> E[验证神经元作用]
end
subgraph 知识存储示意
F[神经元A: 存储"法国-巴黎"]
G[神经元B: 存储"德国-柏林"]
H[神经元C: 存储"意大利-罗马"]
I[神经元...: 存储其他事实]
end
style A fill:#fff3e0
style D fill:#e8f5e9
style F fill:#ffcdd2
style G fill:#c8e6c9
style H fill:#bbdefb
研究发现,FFN中的某些特定神经元对特定事实有高度选择性。例如:
- 某个神经元专门响应"巴黎是法国首都"这个事实
- 另一个神经元专门响应"水在100°C沸腾"
这些神经元被称为"知识神经元"。研究者通过因果追踪方法定位这些神经元,并证明修改它们的值可以直接改变模型对特定事实的回答。
ROME:知识编辑的突破性方法
基于FFN存储知识的发现,2022年Meng等人在NeurIPS上提出了ROME(Rank-One Model Editing)方法,首次实现了精确的"知识编辑"。
flowchart TB
subgraph ROME知识编辑流程
A[原始知识: 法国-首都-巴黎] --> B[因果追踪定位]
B --> C[找到关键FFN层和神经元]
C --> D[计算新知识的向量表示]
D --> E[秩一更新修改W2]
E --> F[验证: 法国-首都-马赛]
end
subgraph 数学表示
G["优化目标: min ||ΔW||_F"]
H["约束: x*W2 + ΔW = v_new"]
end
style A fill:#ffcdd2
style F fill:#c8e6c9
style E fill:#fff9c4
ROME的核心步骤
-
定位层:通过因果追踪,找到存储特定事实的关键FFN层。研究发现,中间层的FFN对知识存储最为重要。
-
计算目标向量:对于新的事实,计算其在FFN输出空间的目标向量表示。
-
秩一更新:通过闭式解,计算对$W_2$矩阵的最优修改,使得新知识被正确存储,同时尽量不影响其他知识。
ROME的成功证明了FFN确实是知识存储的主要场所,知识可以被精确定位和修改。后续的MEMIT方法扩展了ROME,支持批量知识编辑。
知识容量:每个参数能存多少知识?
一个自然的问题是:大模型到底能存储多少知识?2025年,ICLR上发表的论文《Physics of Language Models: Part 3.3, Knowledge Capacity Scaling Laws》给出了答案。
flowchart LR
subgraph 知识容量缩放定律
A[模型参数量] --> B[知识容量]
B --> C["约2比特/参数"]
end
subgraph 具体例子
D["7B参数模型"] --> E["~14B比特知识"]
F["70B参数模型"] --> G["~140B比特知识"]
end
style C fill:#ffcdd2
style E fill:#c8e6c9
style G fill:#c8e6c9
关键发现
研究者通过精心设计的实验发现:
每个参数大约可以存储2比特的事实知识。
这意味着:
- 7B参数模型可存储约14B比特的知识
- 70B参数模型可存储约140B比特的知识
为什么是2比特?
这个数字背后有深刻的信息论解释:
-
信息压缩效率:事实知识经过训练后被压缩存储在参数中。每个参数作为一个存储单元,其有效容量受限于数值精度和表示能力。
-
冗余编码:为了提高鲁棒性,知识往往以分布式方式存储,存在一定冗余。
-
量化极限:即使模型被量化到int8,知识容量也不会显著下降,说明存储效率已经接近理论极限。
这个发现对大模型设计有重要启示:增加参数量是提高知识容量的最直接方式。这也是为什么MoE(混合专家)模型在不增加计算成本的情况下,通过扩大总参数量来提高知识容量。
层重要性:为什么中间层最关键?
2025年的一项研究《Layerwise Importance Analysis of Feed-Forward Networks in Transformer-based Language Models》系统地分析了不同层FFN的重要性。
flowchart TB
subgraph 12层模型的FFN重要性分布
L1[Layer 1] --> |低重要性| I1[●○○○○○]
L2[Layer 2] --> |低重要性| I2[●●○○○○]
L3[Layer 3] --> |中等| I3[●●●○○○]
L4[Layer 4] --> |高重要性| I4[●●●●●●]
L5[Layer 5] --> |高重要性| I5[●●●●●●]
L6[Layer 6] --> |高重要性| I6[●●●●●●]
L7[Layer 7] --> |高重要性| I7[●●●●●●]
L8[Layer 8] --> |高重要性| I8[●●●●●●]
L9[Layer 9] --> |中等| I9[●●●●○○]
L10[Layer 10] --> |低重要性| I10[●●●○○○]
L11[Layer 11] --> |低重要性| I11[●●○○○○]
L12[Layer 12] --> |低重要性| I12[●○○○○○]
end
style L4 fill:#c8e6c9
style L5 fill:#c8e6c9
style L6 fill:#c8e6c9
style L7 fill:#c8e6c9
style L8 fill:#c8e6c9
核心发现
研究者设计了一个巧妙的实验:从某些层完全移除FFN,将移除的参数分配到其他层,保持总参数量不变,然后比较不同配置的性能。
-
中间层最重要:FFN集中在中间70%层的配置,在几乎所有任务上都优于标准配置。
-
早期和晚期层不那么重要:移除早期和晚期层的FFN对性能影响较小。
-
位置比数量更关键:在参数预算有限的情况下,将FFN放在正确的位置比均匀分布更有效。
为什么中间层最关键?
这个现象可以从信息处理的角度理解:
-
早期层:主要负责低级特征提取(如词法、句法),注意力机制已经足够。
-
中间层:开始处理语义和知识相关问题,需要FFN提供丰富的知识支持。
-
晚期层:主要负责整合信息并生成输出,知识检索已经在前面的层完成。
用一个比喻:早期层是"眼睛",中间层是"大脑",晚期层是"嘴巴"。知识存储主要发生在"大脑"阶段。
FFN与注意力的分工
现在我们可以更清晰地理解FFN和注意力机制在Transformer中的分工:
flowchart LR
subgraph 注意力机制 - 信息传递
A1[位置间信息传递]
A2[上下文聚合]
A3[关系建模]
A4[序列依赖捕获]
end
subgraph FFN - 知识存储
F1[事实知识存储]
F2[特征非线性变换]
F3[模式检索]
F4[输出信号生成]
end
A1 -.-> |传递上下文信息| F1
A2 -.-> |聚合表示| F3
F4 -.-> |知识信号| A4
style 注意力机制 - 信息传递 fill:#e3f2fd
style FFN - 知识存储 fill:#fff8e1
协作机制:一个具体的例子
当模型处理"法国的首都是___“时:
-
注意力阶段:将"法国”、“首都"等词的表示聚合到目标位置,建立语义联系。
-
FFN阶段:根据聚合的表示,检索存储的知识,生成指向"巴黎"的信号。
-
迭代处理:经过多层处理后,最终输出正确答案。
为什么两者缺一不可?
-
只有注意力:模型可以进行信息传递,但没有存储的知识,无法回答超出上下文的问题。
-
只有FFN:模型存储了大量知识,但无法正确理解输入的语义关系。
这正是Transformer设计的精妙之处:注意力机制和FFN各司其职,协同工作。
局限性与未来方向
尽管我们对FFN知识存储的理解已经相当深入,但仍存在诸多挑战:
知识冲突与干扰
当修改一个知识时,可能影响其他相关知识的存储。这是当前知识编辑方法的主要瓶颈。
知识的层次性
某些知识可能跨越多个神经元或层存储,单一位置的编辑难以完全修改。
动态更新
如何在不重新训练的情况下,让模型持续学习新知识,同时避免灾难性遗忘?
可解释性
虽然我们知道FFN存储知识,但如何精确定位和理解每一个知识仍然是一个开放问题。
结语
从Geva等人的键值存储发现,到ROME的知识编辑方法,再到知识容量缩放定律,我们对FFN的理解正在不断深化。这些研究不仅揭示了Transformer的内部工作原理,更为模型调试、知识更新和安全控制提供了技术基础。
核心要点回顾:
-
FFN本质上是一个键值存储器,$W_1$存储"键”(文本模式),$W_2$存储"值"(知识表示)。
-
注意力机制负责信息传递,FFN负责知识存储——两者分工明确,缺一不可。
-
知识神经元研究表明,特定知识高度集中在少数神经元中。
-
ROME等方法证明,知识可以被精确定位和编辑。
-
每个参数大约存储2比特的事实知识。
-
中间层的FFN对知识存储最为重要。
理解FFN如何存储知识,是理解大模型行为的关键一步。随着研究的深入,我们期待更多关于大模型内部机制的发现,以及基于这些发现的应用创新。
参考文献
-
Geva, M., Cohen-Karlik, T., & Globerson, A. (2021). Transformer Feed-Forward Layers Are Key-Value Memories. EMNLP 2021.
-
Dai, D., et al. (2022). Knowledge Neurons in Pretrained Transformers. ACL 2022.
-
Meng, K., et al. (2022). Locating and Editing Factual Associations in GPT. NeurIPS 2022.
-
Allen-Zhu, Z., & Li, Y. (2025). Physics of Language Models: Part 3.3, Knowledge Capacity Scaling Laws. ICLR 2025.
-
Kobayashi, S., et al. (2025). Layerwise Importance Analysis of Feed-Forward Networks in Transformer-based Language Models. arXiv:2508.17734.
-
Shazeer, N. (2020). GLU Variants Improve Transformer. arXiv:2002.05202.
-
Vaswani, A., et al. (2017). Attention Is All You Need. NeurIPS 2017.
-
Touvron, H., et al. (2023). LLaMA: Open and Efficient Foundation Language Models. arXiv:2302.13971.
-
Yang, A., et al. (2025). Qwen Technical Report. arXiv preprint.
-
Meng, K., et al. (2023). Mass-Editing Memory in a Transformer. ICLR 2023.
-
Stanford Hazy Research Lab. (2025). Stuffing MLPs Full of Facts. Blog post.
-
Xiong, R., et al. (2020). On Layer Normalization in the Transformer Architecture. ICML 2020.
-
Mitchell, E., et al. (2022). Fast Model Editing at Scale. ICLR 2022.
-
De Cao, N., et al. (2021). Editing Factual Knowledge in Language Models. EMNLP 2021.